How I do my Computing


I use a Thinkpad T400s 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.

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.

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. 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 results that seemed likely, millions of children running Windows on the OLPC, have not occurred. Instead we see millions of children running Windows on the Intel Classmate, or nowadays a 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.

GNU/Linux distro

I do not have a preferred GNU/Linux distro. I recommend all the ethical distros — namely, those that are 100% free software.

I've chosen not to have any preferences among those ethical distros. In fact, I am not in a position to judge them on other criteria: even to try them all would be a lot work of that I have no need to do.

What I do on my computer

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.

I do use X11 for tasks that need a graphical interface. I have no preferred graphical environment or window manager. Since my interest in using graphical environments is small, I don't want to spend time comparing them.

This 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, GNOME, was successful, so we never needed a fourth one.

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.

How this site is maintained

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; others 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 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" which also shows why I find it 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 to you.

Would you like to help do this? Write to rms at the site gnu.org.

How I use the Internet

  • I have used the Internet since it first existed. I never used UUCP, though occasionally I sent emails to addresses that involved 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 don't mind giving an identity that isn't really me, if that works.

    I often connect in a person's home. The person of course knows who I am, but that does not bother me. 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 (using konqueror, which won't fetch from other sites in such a situation).

    I occasionally also browse unrelated sites using IceCat via Tor. Except for rare cases, I do not identify myself to them. I think that is enough to prevent my browsing from being connected with me. IceCat blocks tracking tags and most fingerprinting methods.

    I never pay for anything on the Web. Anything on the net that requires payment, I don't do. (I made an exception for the fees for the stallman.org domain, since that is connected with me anyway.) I also avoid paying with credit cards. For freedom's sake, insist on paying cash. When a business pressures you to pay in an identified way, that means your help as a citizen is needed: say, "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 were ethical 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 have mostly used DuckDuckGo for the past few years. It does work with JS disabled, but you have to follow a link before you search.

    I also sometimes use ixquick.com. My usual precautions should stop them from knowing it is me.

    I no longer user Google search, not even occasionally, because 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.

    I suspect that the reason the CAPTCHA is broken is that it depends on nonfree Javascript. I won't run that in my computer. I am not willing to let Google see where I am, so I won't bypass Tor. Therefore, I can't use Google search any more.

Social media

  • 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.

    The rms account on gnusocial.no repeats the political notes from this site, but I do not post on it directly. That site runs GNU Social.

    Aside from those two, 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 principle, 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, or a Google+ account. Some impostor created a Facebook account using my name. The page is not mine. The Google+ account using my name is also 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, 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.

    Of course, Facebook is bad for many other reasons as well.

    Google+ formerly required knowing the user's real name, but no longer. However, it does require identification in the form of a phone number. Meanwhile, Google+ has another unacceptable injustice: it requires running nonfree Javascript code to post a message.

E-mail service

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 your search engine in any case.

Programming languages

  • 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!

    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 do not campaign about the question. I limit my campaigning to issues of freedom and justice, such as to eliminate nonfree software from the world.

    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 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 or Ruby.

    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.

  • 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.

How to learn programming

First, read a textbook about programming in some language, then manuals for several programming languages including Lisp. If this makes 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. What's the point of programming if it is a struggle instead of a fascination?

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 a bug in a free program that people 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 you would like to implement. 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.

Non-free software issues

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 their owners migrate them to free software, for their sake, but there's no need for me to refuse to touch them 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 those 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 free software, 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 (or any nonfree noninteroperable communication program) is a special case because of its 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 (See more information.)

Streaming medias and DRM issues

  • 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.

    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.)

Miscellaneous

  • 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 this 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.

  • I find it bizarre that people 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", except if I were talking about a business programming team which has coders.

  • Why I coined the name POSIX.

Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2015 Richard Stallman

Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.