For current political commentary, see the daily political notes.
As of 2022 I use a Thinkpad x200 computer, which has a free initialization program (Libreboot) and a free operating system (Trisquel GNU/Linux). It was not sold that way by Lenovo, however; small businesses buy them used, recondition them, and install the free software. This is one of the computers endorsed by the FSF. I've used other Thinkpad models that similarly respect users' freedom since the early 2010.
Before using such Thinkpads, I used the Lemote Yeeloong for several years. At the time, it was the only laptop one could buy that could run a free initialization program and a free operating system. But it was never sold with a free operating system. Lemote has not sold such a computer for many years.
Before that, I used an OLPC for some weeks. The OLPC uses a nonfree firmware blob for the WiFi, so I could not use the internal WiFi device. That was no big problem -- I used an external WiFi adaptor.
I stopped using it because the OLPC project decided to make their machine support Windows, so I did not want to appear to endorse it by visibly carrying it around. I could have continued using it privately with its free software installation, but I had no need for another computer to use only privately.
The result that then seemed likely, millions of children running Windows on the OLPC, did not occur. Instead we saw millions of children running Windows on the Intel Classmate, or nowadays a using Chromebook that sends the child's personal data to Google.
Before that I used machines that ran completely free GNU/Linux systems but had nonfree BIOSes. I tried for about 8 years to find a way to avoid the nonfree BIOS in some commercial machine.
I do not have a preferred GNU/Linux distro. I recommend all the ethical distros — namely, those that are entirely free software.
I've chosen not to make judgments comparing the ethical distros on practical aspects. That is a secondary issue for me, and I'd rather not distract people from the primary (ethical) issue. Anyway, many others could do practical reviews and comparison better than I can. Indeed, I am not in a position to compare free distros on practical criteria because I have not tried them all. To try them would be a lot of work, and there are other more useful things for me to work on.
Mostly I use a text console, for convenience's sake. Most of my work is editing text and that is more efficient on a text console. On the text console, the touchpad can't cause me any trouble if I touch it by accident. The mouse can't make my editing commands fail to work by being on the wrong window.
I do use X11 for tasks that need a graphical interface. I have no preferred graphical environment or window manager. Since my own practical interest in using graphical environments is small, I don't want to spend time comparing them. In fact, what I use is Maté. (The accent is used in English, with this word as well as some others, to indicate a foreign word in which the final "e" is not silent.)
My choice of text terminals is not an ethical issue, just my own personal preference. On the ethical level, I think it is important for free software to provide convenient free graphical user interface software, which is why the GNU Project launched three projects to develop that. The third one, GNOME, was a success.
I spend most of my time editing in Emacs. I read and send mail with Emacs using M-x rmail and C-x m. I have no experience with any other email client programs. In principle I would be glad to know about other free email clients, but learning about them is not a priority for me and I don't have time.
I edit the pages on this site with Emacs also, although volunteer helpers install the political notes and urgent notes. I have no experience with other ways of maintaining web sites. In principle I would be glad to know about other ways, but learning about them is low priority for me and I have other things to do.
I don't have time to play a game a long time try to get good at it. So I rarely play any game except quick forms of solitaire. Of course, any game I run on my computer must not include nonfree software.
If the game runs on a server, it must not require any nonfree client software, and the server must not be able to identify uses or tell where they are located. It should allow connection via Tor. Evidently it must not be a game which you win by fast reaction.
I am fastidious about what I do on the internet and how. The internet has become a disgusting system of tracking people and snooping on them. To avoid this, there are many things I refuse to do. My refusal is not a sacrifice — on the contrary, surrendering to those bad practices would be a sacrifice.
I won't connect to the internet in a way that can identify me or my location to any company's or government's database, with one exception that I don't see a way to get around: at my home, I have no way to connect except for my own internet connection.
However anywhere else I connect only in ways that don't report who I am. If I am visiting your home and you let me connect, you will know that the person connecting is me; but your ISP won't know that. I also connect in places such as cafes, if they have one password that every user uses. However, if a hotspot requires users to identify themselves, I refuse to connect there. I wait for another chance.
I generally browse via the Tor network, so that (1) the ISP can't identify me and (2) the web sites I connect to can't identify me or determine my location. However, I do not use the Tor browser, because I want LibreJS to block nonfree Javascript.
I refuse to run nonfree Javascript code sent by web sites. I enable LibreJS to block it. As a consequence, many web sites won't function for me. In particular, I can't access Google Drive URLs. I was able to access YouTube via the invidio.us proxies, but YouTube is trying to shut that down, so I can't foretell whether I will be able to access to YouTube in the future.
This site is maintained in a very simple way. I edit the pages such as this one manually as HTML. I only know simple HTML; helpers who know more wrote the parts at the top and bottom of pages, and the more complex formatting on the home page. Volunteer helpers install the political notes every day after receiving the text of each note from me by email. A cron job "rolls over" the political notes page every two months. The photo galleries are generated with this perl script. The search feature on the site is done with this code.
An explanation of the concept of designing a "user experience" also shows why I find the idea loathsome. This is why I want stallman.org to remain simple: not a "user experience" but rather a place where I present certain information, views and action opportunities so you can see them.
Would you like to volunteer to help keep this site going? Write to rms at the site gnu.org.
I have used the Internet since it first existed. I never used UUCP, though occasionally I sent emails to addresses that specified further transmission via UUCP.
I am careful in how I connect to the internet.
Specifically, I refuse to connect through portals that would
require me to identify myself, or to run any nontrivial
nonfree
Javascript code. I
use LibreJS
to prevent nonfree Javascript code from running..
I don't mind giving an identity that isn't really me, in order to connect, if that works. That does not violate my privacy.
I often connect in a person's home. The person of course knows who I am, but I have no objection to that. What I would object to is putting my identity in a database that can be searched. I prevent that by changing my mac address at each location.
I am careful in how I use the Internet.
I generally do not connect to web sites from my own machine,
aside from a few sites I have some special relationship with.
I usually fetch web pages from other sites by sending mail to a
program (see https://git.savannah.gnu.org/git/womb/hacks.git)
that fetches them, much like wget, and then mails them back to
me. Then I look at them using a web browser, unless it is easy
to see the text in the HTML page directly. I usually try lynx
first, then a graphical browser if the page needs it.
I occasionally also browse unrelated sites using IceCat via Tor. Except for rare cases, I do not identify myself to them. I think that plus Tor plus LibreJS is enough to prevent my browsing from being associated with me. IceCat blocks tracking tags and most fingerprinting methods.
I never run nonfree Javascript on my browser, unless LibreJS finds it to be trivial.
I never pay for anything on the Web, because that generally requires running nonfree Javascript code in my browser. It also requires identifying myself. I never identify myself to buy any product.
I avoid paying with credit cards generally. That page describes a very few exceptions.
For freedom's sake, insist on paying cash. When a business pressures you to pay in an identified way, it's your chance to defend freedom by saying, "If you won't take my cash, no sale!"
I would not mind paying for a copy of an e-book or music recording on the Internet if I could do so anonymously, and it treated me justly in other ways (no DRM or EULA). But that option almost never exists. I keep looking for ways to make it exist.
For searching, I often DuckDuckGo. Thanks to Tor and LibreJS, it does not identify me.
I used to use searx to search specifically for images, but this no longer works: specifying search for images now depends on nonfree Javascript code. Unless and until this is fixed, I no longer use searx.
I also sometimes use ixquick.com. My usual precautions should stop them from knowing it is me.
Since several years ago, I cannot directly access Google search. It sends me a broken CAPTCHA. I suspect the reason it tries to send me a CAPTCHA is that I am coming through Tor. I would answer the CAPTCHA if that worked, but it does not.
I suspect that the reason the CAPTCHA is broken is that it depends on nonfree Javascript that it tries to run in my computer. I refuse to let that run. I am not willing to let Google see where I am, so I won't bypass Tor.
However, the Librex proxies have worked around that problem. They enable me to access Google Search indirectly, and they work correctly through Tor with LibreJS enabled.
I do not use any social networking sites because that way of working is inconvenient for me. That doesn't mean I think they are all unethical. Some are, some are not. Social networking sites raise their own set of ethical issues, completely different from the ethical issues of distributing software ( free vs proprietary), and there are big differences between them.
I have a Twitter account called rmspostcomments, which I use to log in on other sites to post comments on articles. I never post on Twitter. Someone made an account stallman_feed which I'm told posts something about my political notes. Any other Twitter account that claims to be mine is an impostor.
I have a Mastodon account, @rms on mastodon.xyz, which mirrors the political notes of stallman.org. The person who set up the mirroring chose that site.
Aside from that, any account on a social networking site that says it is mine is an impostor.
I do not post on 4chan. I have nothing against it in the abstract, but I am told a lot of the posts nowadays are right-wing bigotry which I condemn totally. I have occasionally answered questions for interviews for 4chan, but I have never posted anything there. Any posting there that says it is by me is by an impostor.
I have never had a Facebook account. Some impostor created a Facebook account using my name. The page is not mine.
I reject Facebook because it requires each used (i.e., person used by Facebook) to have just one account, which means that all the person's activities are grouped together. It also insists on knowing the person's usual name, and it is starting to demand a series of different photos.
I am proud to identify myself when stating my views; I can afford to do that because I am in a fairly safe position. There are people who rationally fear reprisals (from employers, gangsters, right-wing extremists, left-wing conformity enforcers, or the state) if they sign their name to their views. For their sake, let's reject any social networking site which insists on connecting an account to a person's real identity.
People sometimes ask me to recommend an email service.
The two ethical issues for an email service are (1) whether you can use
it without running any nonfree software (including nonfree Javascript
code from the site), and (2) whether it respects your privacy.
For issue 1, see
the FSF's page.
On issue 2, I have no way to verify that any email
service is satisfactory. Therefore, I have no recommendation to
offer.
However, I can suggest that it may be wise to use an email service
that is not connected with your search engine. That way you can be
almost sure that your email contents don't influence your search
results. You shouldn't identify yourself to a search engine in
any case.
The most powerful programming language is Lisp. If you don't know Lisp (or its variant, Scheme), you don't know what it means for a programming language to be powerful and elegant. Once you learn Lisp, you will see what is lacking in most other languages.
Unlike most languages today, which are focused on defining specialized data types, Lisp provides a few data types which are general. Instead of defining specific types, you build structures from these types. Thus, rather than offering a way to define a list-of-this type and a list-of-that type, Lisp has one type of lists which can hold any sort of data.
Where other languages allow you to define a function to search a list-of-this, and sometimes a way to define a generic list-search function that you can instantiate for list-of-this, Lisp makes it easy to write a function that will search any list — and provides a range of such functions.
In addition, functions and expressions in Lisp are represented as data in a way that makes it easy to operate on them.
When you start a Lisp system, it enters a read-eval-print loop. Most other languages have nothing comparable to `read', nothing comparable to `eval', and nothing comparable to `print'. What gaping deficiencies!
I skimmed documentation of Python after people told me it was fundamentally similar to Lisp. My conclusion is that that is not so. `read', `eval', and `print' are all missing in Python.
Some fans of Clojure say it is a variant of Lisp. I disagree, because it lacks one of the fundamental features of Lisp: cons cells, out of which we construct lists.
While I love the power of Lisp, I am not a devotee of functional programming. I see nothing bad about side effects and I do not make efforts to avoid them unless there is a practical reason. There is code that is natural to write in a functional way, and code that is more natural with side effects, and I am not a partisan of either way. I limit my campaigning to issues of freedom and justice, such as the injustice of nonfree software.
Lisp is no harder to understand than other languages. So if you have never learned to program, and you want to start, start with Lisp. If you learn to edit with Emacs, you can learn Lisp by writing editing commands for Emacs. You can use the An Introduction to Programming in Emacs Lisp to learn with: it is free as in freedom, and you can order printed copies from the FSF.
You can learn Scheme (and a lot of deep ideas about programming)
from Structure and Interpretation of Computer Programs by
Abelson and Sussman. That book is now free/libre although the
printed copies do not say so.
Please don't buy books (or anything)
from Amazon!
My favorite programming languages are Lisp and C. However, since around 1992 I have worked mainly on free software activism, which means I am too busy to do much programming. Around 2008 I stopped doing programming projects. As a result, I have not had time or occasion to learn newer languages such as Perl, Python, PHP, Ruby, Lua, Go, Scala, Rust, and so on. Therefore, I don't have an opinion about them as languages.
If I were not so overloaded with responsibilities and work that is important to me, I would study them out of curiosity. But that is not likely to ever happen.
If you want to learn C, but you already know how to program in some other language, I recommend you try my GNU C Language Introduction and Reference Manual.
I read a book about Java, and found it an elegant further development from C. But I have never used it.
I did write some code in Java once, but the code was in C and Lisp (I simply happened to be in Java at the time ;-).
By contrast, I find C++ quite ugly.
The flaws of C++, as I recall from when I studied the matter
around 1990, include syntax and semantics. As for syntax, its
grammar is ambiguous, and it is gratuitously incompatible with C,
which blocks the smooth upgrade path from C to C++.
As for semantics, the abstract object facility of C++ is designed around the case where the real type of an object is known at compile time. However, in that case, abstract objects are equivalent to a naming convention for functions to call. The case where abstract objects add real power to a language is when the type is not known until run time. C++ does handle that, but it seems to be an afterthought, a poor relation.
I suspect that I would find plenty of ugliness in the template library, but I don't know. That was added to C++ after I studied it.
First, read a textbook about programming in some language, then manuals for several programming languages including Lisp. If they make natural intuitive sense to you, that indicates your mind is well-adapted towards programming.
If they don't make intuitive sense to you, I suggest you do something other than programming. You might be able to do programming to some degree with a struggle, but if you find it a struggle you won't be very good at it and you won't enjoy it. What's the point of programming if it is a struggle instead of a fascination? It's your choice -- if your brain is better suited to some other activity, you could choose that instead.
After that, you need to read the source code of real programs (or parts of them) and figure out what they do. Then start writing changes in them, to add features, or fix bugs if you can find out about specific bugs to fix. Ask some good programmers who are familiar with the code of those programs to read and critique your changes.
If you fix bugs in a free program that others are developing, the
developers are likely to be glad to get fixes from you and will
tell you the way to write them to make them good to install. Look
at their TODO list for features they would like to add, and
implement some. You will find it is a great satisfaction when the
developers incorporate your changes.
Do this over and
over and you will become good at developing software.
Please use your programming capability only for good, not for evil. Don't develop nonfree software, or Service as a Software Substitute. Design systems not to collect personal information, and to allow anonymous use.
I firmly refuse to install non-free software or tolerate its installed presence on my computer or on computers set up for me.
However, if I am visiting somewhere and the machines available nearby happen to contain non-free software, through no doing of mine, I don't refuse to touch them. I will use them briefly for tasks such as browsing. This limited usage doesn't give my assent to the software's license, or make me responsible its being present in the computer, or make me the possessor of a copy of it, so I don't see an ethical obligation to refrain from this. Of course, I explain to the local people why they should migrate the machines to free software, but I don't push them hard, because annoying them is not the way to convince them.
Likewise, I don't need to worry about what software is in a kiosk, pay phone, or ATM that I am using. I hope its owners migrate them to free software, for their sake, but there's no need for me to refuse to touch it until then. (I do consider what those machines and their owners might do with my personal data, but that's a different issue, which would arise just the same even if they did use free software. My response to that issue is to minimize activities which give them any data about me.)
That's my policy about using a machine once in a while. If I were to use it for an hour every day, that would no longer be "once in a while" — it would be regular use. At that point, I would start to feel the heavy hand of any nonfree software in that computer, and feel the duty to arrange to use a liberated computer instead.
Likewise, if I were to ask or lead someone to set up a computer for me to use, that would make me ethically responsible for its software load. In such a case I insist on using free software exclusively, just as if the machine were my own property.
As for microwave ovens and other appliances, if updating software is not a normal part of use of the device, then it is not a computer. In that case, I think the user need not take cognizance of whether the device contains a processor and software, or is built some other way. However, if it has an "update firmware" button, that means installing different software is a normal part of use, so it is a computer.
Skype, Zoom, WhatsApp, and any nonfree noninteroperable communication program, are special cases because of their network effect. Using Skype to talk with someone else who is using Skype is encouraging the other to use nonfree software. Doing so regularly is pressuring the other to use nonfree software. So I refuse to use Skype under any circumstances.
More information about Skype.
More information about Zoom.
Streaming media dis-services such as Netflix and Spotify require nonfree client programs that impose digital restrictions mechanisms (DRM) intended to stop the user from saving a copy of the data being streamed through her own computer. You should never use DRM that you can't break, so you should not use these dis-services unless you can break their DRM.
An additional injustice of these and other streaming client programs is that they impose unjust contracts (EULAs) which restrict the user more strictly than copyright law itself. I do not agree to EULAs, period, and I urge you to join me in rejecting them.
These streaming dis-services are malicious technology designed to make people antisocial. (If you don't have a copy, you can't share copies.) Rejecting them is of the highest ethical priority.
A friend once asked me to watch a video with her that she was going to display on her computer using Netflix. I declined, saying that Netflix was such a threat to freedom that I could not treat it as anything but an enemy. I did not want to watch anything through Netflix or Spotify even on someone else's computer.
Out, out, damned Spotify! Flick off Netflix!
Every product with Digital Restrictions Management (DRM) is an attack on your freedom.
Therefore, one should not buy or tolerate any product with DRM handcuffs unless one personally possesses the means to break the handcuffs. For instance, don't use encrypted DVDs unless you have DeCSS or another comparable free program. And never use a Bluray disk unless you find a way to break its handcuffs. Don't use the Amazon Swindle or other e-book readers that trample readers' freedoms. Don't use music or video streaming "services" that impose DRM. (If they require a nonfree client program, it is probably for DRM or some sort of surveillance of users.)
I never used Unix (not even for a minute) until after I decided to develop a free replacement for it (the GNU system). I chose that design to follow because it was portable and seemed fairly clean. I was never a fan of Unix; I had some criticisms of it too. But it was ok overall as a model.
In the mid 90s I had bad hand pain, so bad that most of the day I could only type with one finger. The FSF hired typists for me part of the day, and part of the day I tolerated the pain. After a few years I found out that the pain was due to the hard keys of my keyboard. I switched to a keyboard with lighter key pressure and the problem mostly went away.
My problem was not carpal tunnel syndrome: I avoid that by keeping my wrists pretty straight as I type. There are several kinds of hand injuries that can be caused by repetitive stress; don't assume you have the one you heard of. See a doctor and find out.
I find it bizarre that people now use the term "coding" to mean programming. For decades, we used the word "coding" for the work of low-level staff in a business programming team. The designer would write a detailed flow chart, then the "coders" would write code to implement the flow chart. This is quite different from what we did and do in the hacker community -- with us, one person designs the program and writes its code as a single activity. When I developed GNU programs, that was programming, but it was definitely not coding.
Since I don't think the recent fad for "coding" is an improvement, I have decided not to adopt it. I don't use the term "coding", unless I am talking about a business programming team which has coders.
Return to Richard Stallman's home page.
Please send comments on these web pages to rms@gnu.org.
Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2015, 2018, 2019, 2022 Richard Stallman
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.