domingo, 13 de enero de 2019

Richard Stallman's personal site. how to learn a new languaje

Richard Stallman's personal site.

https://stallman.org

For current political commentary, see the daily political notes.
RMS' Bio | The GNU Project

https://stallman.org/photos/rms-working/pages/28.html
https://stallman.org/index.html

RMS lifestyle

See also for info on my practices involving computers.

I don't have a favorite this or that

I do not have a favorite food, a favorite book, a favorite song, a favorite joke, a favorite flower, or a favorite butterfly. My tastes don't work that way.
In general, in any area of art or sensation, there are many ways for something to be good, and they cannot be compared and ordered. I can't judge whether I like chocolate better or noodles better, because I like them in different ways. Thus, I cannot determine which food is my favorite.

Home

Until around 1998, my office at MIT was also my residence. I was even registered to vote from there. Nowadays I have a separate residence in Cambridge not far from MIT. However, I am rarely there, since I am nearly always travelling out of town.

Music

  • Music genres I often like include some Spanish folk music (but not Flamenco), Latvian folk music, Swedish folk fiddling, Moroccan traditional music, Soukous, Balkan folk dance music, Turkish folk dance music, Turkish classical music, Armenian folk dance music, Georgian choral music, Indian classical music (I tend to enjoy Carnatic more than Hindustani), Javanese and Balinese gamelan music, Vietnamese traditional music, Japanese court music (Gagaku), Japanese folk dance music (Minyo), Andean folk music (except when the words are in Spanish and about romantic rejection), and traditional US folk music when it is lively.
  • I like European art music, but I have less appetite for it than I had a few decades ago.
  • I like polyphonic music from medieval times. Especially from the 1200's, with hocket. However, Gregorian chant has insufficient complexity to engage me.
  • I don't appreciate jazz much, perhaps because I never learned enough about it. However, I like some fusions that include jazz. For instance, Bulgarian wedding music (a fusion of jazz and Bulgarian folk music) and Latin jazz.
  • I like some avant garde works — for instance, Conlon Nancarrow's player piano music.
  • If something is popular in the US, I usually find it boring, but there are occasional exceptions. I liked much of what I used to hear on the radio before the Beatles. Around 1980 there was another period in which I heard on other people's radios a considerable amount of music I liked.
  • I dislike most country music especially. I dislike c…rap music too. I don't like slow romantic songs, or harsh-sounding rock. "Heavy metal" sounds too harsh to me; anyway, the name is deceptive: the metal in a bronze gamelan is far heavier.
  • If I generally dislike a certain genre of music, there can be occasional exceptions which I like nonetheless. For instance, I love Weird Al's "Can't Watch This", even though it's c…rap, because it's a parody of c…rap.
  • When a foreign musical style starts becoming popular in the US, it usually develops in a direction I don't like. For instance, I love Bulgarian folk dance music but I am bored by the Bulgarian women's chorus that became a big hit in the US in the 80s. Youssou nDour's music was exciting in the 80s, but then he started making records for US and European tastes and the spark disappeared.

Books

  • Genres I enjoy include fiction, science fiction, mystery, romance occasionally, history, anthropology, science, mathematics, and occasionally other things.

Food

  • I am an omnivore; I will try almost anything if it doesn't gross me out.
  • I refuse to eat the most intelligent animals, such as simians, cetaceans and parrots.
  • On my first visit to Taiwan I ate insects — specifically, larval bees and crickets. I loved the larval bees, and sought another chance to try them. Strange to say, when I found them again in Taiwan, I did not like them; it seemed that the breading was too thick. I don't know whether it was the style of preparation that changed, or my tastes. On another visit to Taiwan, I ate snake (two kinds of snake, in two different preparations). I liked them well enough, but not tremendously.
  • Cooked tuna tastes terrible. What a waste of good tuna, to cook it!
  • I refuse to eat shark fin, because collecting the fins is wiping out the sharks. For similar reasons I now usually don't order tuna sushi (although I love that).
  • I uphold the total boycott of Coca Cola Company, which is a response to the murder of union organizers in Colombia and Guatemala. I will not use any of that company's products and I hope you will reject them too.
  • 'Breakfast'? Is that the thing some people eat in the 'morning'?
    Seriously, for many years in the 1970s I was almost always asleep when other people had breakfast, so I got used to waking up and having lunch or dinner. I thus lost all association between any particular time of day and any particular foods. Nowadays I am often awake in the morning, but I still have no such association: what I'd like to eat when I wake up is anything I'd like to eat at any other time.

Religion

  • I am an Atheist, for scientific reasons. The religious theory of the natural world ("It's this way because a god decided to make it this way") does not explain anything, it only replaces one question with another. That means it is so bad that "valid" and "invalid" don't even apply.
  • I also reject the idea that a god's opinions would provide us with a moral compass. A god that would allow so much suffering to occur — most of it not the result of anyone's free will — is clearly no guide to what anyone should do. It would be entitled to its opinion just like you or I, but its opinion would not be entitled to any special respect.
    Religion offers no moral short-cut. It is up to us to figure out what is right and what is wrong.

Clothing


  • Not all my shirts are red or purple, but many are. I like those colors.

  • None of my shirts carry messages (such as words or symbols). That practice strikes me as lacking dignity, almost like being a sandwich man, so I won't wear clothing with symbols, not even for causes I support. This is not a matter of ethical disapproval, so I don't mind selling hats and shirts with free software slogans on behalf of the FSF; but I choose not to wear them myself.

  • As a matter of principle, I refuse to own a tie.
    I find ties uncomfortable, so I don't wear them. If ties were simply a clothing option, I would decline to use them but there would be no reason to make a fuss about it. However, there is an absurd social pressure on men to wear ties as a way of sucking up to the company.
    When I worked at MIT, I was shocked that MIT graduates, who due to their ability and skill could have almost dictated employment terms, instead felt compelled to wear ties to job interviews, even with companies that (they knew) had the sense not to ask them to wear ties on the job.
    I think the tie means, "I will be so subservient as an employee that I will do even totally senseless things just because you tell me to." Going to a job interview without a tie is a way of saying you don't want to work for someone who demands that.
    The people who yield to the pressure to wear ties are victim-coperpetrators: each one who wears a tie at work increases the pressure on others. This is a central concept for understanding other forms of propagating nastiness, including nonfree software and Facebook. In fact, it was in regard to ties that I first recognized this phenomenon.
    I don't condemn victim-coperpetrators, since they are primarily victims and only secondarily perpetrators, and they don't know about the latter aspect. But I feel a responsibility not to contribute to the pressure on others. I hope my refusal to wear a tie will make it easier for you to refuse as well.
    The first time I visited Croatia, that country had a major PR campaign about being the place of origin of the necktie. ("Cravate" and "Croat" are related words.) You can imagine my distaste for that — in response, I referred to that country as "Tieland" for a while.
    The Free Software Foundation's dress code says that a propeller beanie is required, but other clothing is optional. However, we don't enforce it.

Surveillance issues

See also How I use the Internet.

"Loyalty cards"

  • I refuse to have supermarket frequent buyer cards of my own if they have any identifying data, because they are a form of surveillance. I am willing to pay extra for my privacy and to resist an abusive system. See nocards.org for more explanation of this issue.
    However, I don't mind using someone else's card or number once in a while, to avoid the extra charge for not using a card. That doesn't track me.
    Also, I use a frequent buyer card in one store for buying a few kinds of things, because I got it anonymously.
  • I do use airline frequent flier numbers because the airlines demand to know my identity anyway.
    However, I won't purchase other things with an airline-linked credit card to get miles, because I'd rather pay cash and be anonymous.

Credit Cards

I have a credit card, but I use it as rarely as possible. Effectively, only for airline tickets, car rental, and hotel checkin — because they demand identification anyway. However, I try to avoid staying in a hotel that will demand to know my name.
I pay some bills with checks. Once again, the payees already know my name.

Cellular Phones

  • I see that cellular phones are very convenient. I would have got one, if not for certain reprehensible things about them.
  • Cell phones are tracking and surveillance devices. They all enable the phone system to record where the user goes, and many (perhaps all) can be remotely converted into listening devices.
  • In addition, most of them are computers with nonfree software installed. Even if they don't allow the user to replace the software, someone else can replace it remotely. Since the software can be changed, we cannot regard it as equivalent to a circuit. A machine that allows installation of software is a computer, and computers should run free software.
  • Nearly every cell phone has a universal back door that allows remote conversion into a listening device. (See Murder in Samarkand, by Craig Murray, for an example.) This is as nasty as a device can get.
  • From the book Alone Together, by Sherry Turkle, I learned that portable phones make many people's lives oppressive, because they feel compelled to spend all day receiving and responding to text messages which interrupt everything else. Perhaps my decision to reject this convenience for its deep injustice has turned out best in terms of convenience as well.
  • When I need to call someone, I ask someone nearby to let me make a call. If I use someone else's cell phone, that doesn't give Big Brother any information about me.

Holidays

I mostly ignore holidays, except for Grav-mass. They have no direct effect on me, since I work when I wish (which is most of the time) and do other things when I wish.
If I had a family, and holidays were a special opportunity to do some leisure activity when they did not have work or school, that would be a practical reason to pay attention to them. However, I decided not to have a family, and I don't need to wait for a holiday to see my friends.
Many holidays have become commercialized: corporate PR has taught many people that buying things for their friends or relatives on these days is "the thing to do", and the truest expression of love. I dislike the feeling that I am obliged to give a gift for some meaningless event, and get no particular pleasure from receiving gifts under these circumstances either, and hiding the fact that I don't like a gift makes me feel quite uncomfortable. I opted out of these forms of ritual consumption back in my teens, and I am glad I did.

Trains

I like trains, and in general I would rather take a train for many hours than fly.
However, I absolutely refuse to take Amtrak trains because they check passengers' ID (not all the time, but it could happen at any time). Please join me in boycotting Amtrak until it stops requiring identification.
It's not that I expect my personal rejection to make Amtrak change. Rather, as long as Amtrak does not change, I resent it so much I'd rather take a bus.

Learning languages

I have developed a way of learning a language that works for me.
First I study with a textbook to learn to read the language, using a recording of the sounds to start saying the words to myself. When I finish the textbook, I start reading children's books (for 7-10 year olds) with a dictionary. I advance to books for teenagers when I know enough words that it becomes tolerably fast.
When I know enough words, I start writing the language in email when I am in conversations with people who speak that language.
I don't try actually speaking the language until I know enough words to be able to say the complex sorts of things I typically want to say. Simple sentences are almost as rare in my speech as in this writing. In addition, I need to know how to ask questions about how to say things, what a word means, and how certain words differ in meaning, and how to understand the answers.
I first started actually speaking French during my first visit to France. I decided on arrival in the airport that I would speak only French for the whole 6 weeks. This was frustrating to colleagues whose English was much better than my French. But it enabled me to learn.
I decided to learn Spanish when I saw a page printed in Spanish and found I could mostly read it (given my French and English). I followed the approach described above, and began speaking Spanish during a two-week visit to Mexico, a couple of years later.
As for Indonesian, I have not got enough vocabulary to speak it all the time when in Indonesia, but I try to speak it as much as possible.

Avoiding Boredom

I hate being bored, and since I want to get a lot done, I don't like losing time. So I always carry a computer and a book. When I have a few minutes to wait and can sit down, I get work done. When I have to stand, or the wait isn't long enough to do anything useful on the computer, I read.
When I wait for my baggage in an airport, I generally do one of these two things. I notice the people around me, waiting anxiously for their bags and getting nothing done. They would be happier if they did as I do.

Photos

I don't smile artificially for photos because such smiles look insipid to me. Old photos from before 1950 seem much more digified because the subjects did not smile. I'd rather be photographed that way.
Occasionally I do smile while being photographed because I feel happy.
If you take photos of me, or with me in them, please do not put them in Facebook (or Instagram or Whatsapp, which are part of the same company). That company tracks people that appear in photos.

Copyright (c) 2010, 2011, 2012, 2013, 2015, 2016, 2018 Richard Stallman
Verbatim copying and redistribution of this entire page are permitted provided this notice is preserved.

How I do my computing

My computer

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 use to prevent nonfree Javascript code from running..
    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, because I cannot pay anonymously. Anything on the net that requires payment that would identify me, I don't do. (I made an exception for the fees for the stallman.org domain, since that is connected with me anyway.)
    I avoid paying with credit cards gemerally. 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 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 use 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.

Mis experiencias con Lisp y el desarrollo de Emacs de GNU

(Transcripción de la conferencia pronunciada por Richard Stallman el 28 de octubre de 2002 en el Congreso Internacional de Lisp [International Lisp Conference]).
Dado que ninguna de mis charlas habituales tiene nada que ver con Lisp, ninguna era apropiada para hoy. Así que voy a tener que improvisar. Como he hecho bastantes cosas relacionadas con Lisp a lo largo de mi carrera, debería ser capaz de decir algo interesante.
Mi primera experiencia con Lisp tuvo lugar en la escuela secundaria, cuando leí el manual de Lisp 1.5. Entonces quedé maravillado con la idea de que pudiera haber un lenguaje de programación así. La primera vez que tuve la oportunidad de hacer algo en Lisp fue siendo un novato en Harvard, cuando escribí un intérprete de Lisp para el PDP-11. Era una máquina muy pequeña, tenía algo así como 8k de memoria, y me las arreglé para escribir el intérprete en unas mil instrucciones. Eso me dejó sitio para unos pocos datos. Aquello fue antes de que llegara a conocer cómo era el software real, el que hacía el trabajo en los sistemas reales.
Fue tras comenzar mi trabajo en el MIT cuando empecé a trabajar en una implementación real de Lisp con JonL White. No fui contratado para el Laboratorio de Inteligencia Artificial gracias a JonL, sino por Russ Noftsker, lo que es de lo más irónico teniendo en cuenta lo que vendría después, debe de haber lamentado realmente lo ocurrido aquel día.
En la década de los 70, antes de que mi vida se politizara a causa de terribles sucesos, simplemente me dedicaba a hacer una extensión tras otra de varios programas, la mayoría de los cuales no tenía nada que ver con Lisp. Pero, al mismo tiempo, escribí un editor de textos: Emacs. Lo interesante de Emacs era que incluía un lenguaje de programación, y las órdenes de edición de texto a utilizar por usted como usuario serían escritas en ese lenguaje de programación interpretado, de forma que podría cargar nuevas órdenes en el editor mientras estaba editando. Podría modificar los programas que estaba utilizando e, inmediatamente, editar utilizando los programas recién modificados. Es decir, teníamos un sistema que resultaba útil para algo más que para programar, y, sin embargo, permitía que usted lo programara mientras lo estaba usando. No sé si era el primer sistema de estas características, pero, desde luego, sí el primer editor así.
Esta construcción de programas complejos y gigantescos para usarlos en las ediciones de textos de uno, y después intercambiarlos con otros, alimentó el espíritu de cooperación espontánea que teníamos entonces en el Laboratorio de Inteligencia Artificial. La idea era que podía dar una copia de cualquier programa que tuviera a quien quisiera una. Compartíamos programas con todo el que deseara usarlos, eran conocimiento humano. Así que, a pesar de que no había un pensamiento político organizado que relacionara la forma en que compartíamos software con el diseño de Emacs, estoy convencido de que había una conexión entre ellos, quizá una conexión inconsciente. Creo que fue la naturaleza de la forma de vida que llevábamos en el Laboratorio de Inteligencia Artificial lo que condujo a Emacs e hizo de él lo que fue.
El Emacs original no incluía Lisp. Su lenguaje, de más bajo nivel y no interpretado, era Ensamblador del PDP-10. El intérprete que escribimos nosotros en realidad no fue escrito para Emacs, sino para TECOTECO era nuestro editor de textos y era un lenguaje de programación extremadamente feo, no podía haber sido más feo. La razón era que no fue diseñado para ser un lenguaje de programación, sino como un lenguaje de órdenes y un editor de textos. Había órdenes como «5l», que significaba «mover cinco líneas», o «i» seguido de una cadena de caracteres y después ESC para insertar esa cadena de caracteres. Podría escribir una cadena de caracteres que fuera una secuencia de órdenes, lo que se llamaba una cadena de órdenes, terminada con ESC ESC, y sería ejecutada.
Bien. La gente quería extender este lenguaje con elementos útiles para la programación, así que añadió algunos. Por ejemplo, uno de los primeros fue una estructura iterativa: < >. Encerrar algo entre estos signos hacía que se ejecutara en un bucle. Había otras crípticas órdenes que podían usarse para salir del bucle condicionalmente. Para construir Emacs, nosotros (1) añadimos mecanismos para tener subrutinas con nombres. Antes de esto, de forma análoga a lo que ocurre con Basic, los nombres de las subrutinas sólo podían estar formados por una letra. Con esta limitación era difícil escribir programas grandes, así que añadimos código que permitió que pudieran tener nombres más largos. De hecho, había algunos mecanismos bastante sofisticados; creo que Lisp tomó su mecanismo unwind-protect de TECO.
Empezamos a añadir otros mecanismos sofisticados, todos ellos con la sintaxis más horrible que puedan imaginar, y funcionó, por lo menos la gente fue capaz de escribir programas extensos con él. La lección obvia fue que utilizar un lenguaje como TECO, que no había sido diseñado como lenguaje de programación, fue una opción equivocada. El lenguaje sobre el que construye sus extensiones no debería ser considerado como un lenguaje de programación a posteriori, sino que debería ser diseñado como un lenguaje de programación desde un principio. De hecho, nosotros descubrimos que el mejor lenguaje de programación para ese propósito era Lisp.
Fue Bernie Greenberg quien descubrió que lo era (2) . Escribió una versión de Emacs en Multics MacLisp, y programó sus órdenes en MacLisp de forma sencilla. El propio editor estaba escrito enteramente en Lisp. Multics Emacs fue un gran éxito: programar nuevas órdenes de edición era tan práctico que incluso los administrativos empezaron a aprender a hacerlo en sus oficinas. Utilizaban un manual que mostraba cómo extender Emacs, pero que no lo llamaba programación, de forma que los administrativos, que pensaban que no sabían programar, no se asustaran. Leyeron el manual, descubrieron que podían hacer cosas útiles y aprendieron a programar.
Así que Bernie vio que una aplicación, un programa que hace algo útil para usted, con Lisp en su interior y que pueda extender reescribiendo los programas Lisp, es realmente una muy buena manera de que la gente aprenda a programar. Le da la oportunidad de escribir pequeños programas que le son útiles, algo que, en la mayoría de las situaciones, no puede hacer. Le puede estimular para transitar mediante su propio uso en la práctica, en la que es la fase más dura, desde su creencia en su propia incapacidad para programar, hasta el momento en el que ya es un programador.
Llegado este punto, la gente se empezó a preguntar cómo podría conseguir algo así en una plataforma que no poseyera una implementación de Lisp completa. Multics MacLisp tenía tanto un compilador como un intérprete, era un sistema Lisp con todas las de la ley, pero la gente quería implementar algo similar en otros sistemas para los cuales todavía no había programado un compilador de Lisp. Bien, si no tenía el compilador de Lisp no podía escribir todo el editor en Lisp: resultaría demasiado lento, especialmente al refrescar la pantalla, si tenía que ejecutarse en Lisp interpretado. Así que desarrollamos una técnica híbrida. La idea era escribir conjuntamente un intérprete de Lisp y los fragmentos de nivel más bajo del editor, de forma que algunos fragmentos del editor fueran mecanismos incorporados en el intérprete de Lisp. Estos fragmentos serían todas aquellas partes que consideráramos que teníamos que optimizar. Ya habíamos utilizado esta técnica en el Emacs original, cuando reescribimos en lenguaje máquina algunas funciones de nivel relativamente alto, transformándolas en primitivas TECO. Por ejemplo, había una primitiva TECO para rellenar un párrafo (en realidad, para hacer casi todo el trabajo necesario para rellenar un párrafo, porque algunas de las tareas que menos tiempo consumían eran realizadas en un nivel superior por un programa TECO). Se podría haber hecho todo el trabajo con un programa TECO, pero habría resultado demasiado lento, por eso lo optimizamos escribiendo parte de él en lenguaje máquina. Esa misma idea es la que usamos aquí (en la técnica híbrida): escribimos la mayoría del editor en Lisp, pero escribimos en un nivel inferior algunas partes que tenían que ejecutarse particularmente rápido.
Por lo tanto, cuando escribí mi segunda implementación de Emacs seguí el mismo esquema. El lenguaje de bajo nivel ya no era lenguaje máquina, sino C. C era un lenguaje bueno y eficiente para programas portátiles que fueran a ejecutarse en un sistema operativo tipo Unix. Había un intérprete de Lisp, pero implementé directamente en C funciones para tareas de edición de propósito específico: manipular las zonas de memoria intermedia [buffers] del editor, insertar texto por delante, leer y escribir ficheros, refrescar la pantalla con el contenido de la memoria intermedia y gestionar la ventanas del editor.
Ahora bien, este no fue el primer Emacs escrito en C y que se ejecutaba en Unix. El primero lo escribió James Gosling, y era conocido como GosMacs. Con James ocurrió algo extraño. Al principio parecía estar influido por el mismo espíritu de participación y cooperación del Emacs original. En primer lugar liberé el Emacs original para personal del MIT. Alguien quería adaptarlo para su ejecución en Twenex, inicialmente sólo se podía ejecutar sobre el Incompatible Timesharing System [sistema de tiempo compartido incompatible] que usábamos en el MIT. Lo adaptaron a Twenex, lo cual significaba que había unos pocos cientos de instalaciones alrededor del mundo que podían, potencialmente, usarlo. Empezamos a distribuírselo junto con la norma de que «usted debía enviarnos todas sus mejoras» para que así todos nos pudiéramos beneficiar. Nadie intentó nunca hacer cumplir esta norma pero, hasta donde yo sé, la gente cooperaba.
Inicialmente Gosling parecía participar de este espíritu. Escribió en un manual que llamó Emacs al programa con la esperanza de que otros miembros de la comunidad lo mejoraran hasta que llegara a ser merecedor de ese nombre. Esa es la forma correcta de enfocar la relación con la comunidad, pedirle que se una al proyecto y mejore el programa. Pero más adelante pareció cambiar el espíritu, y lo vendió a una empresa.
Por aquel entonces yo estaba trabajando en el sistema GNU (un sistema operativo libre tipo Unix al que mucha gente llama erróneamente «Linux»). No había ningún editor Emacs que pudiera ejecutarse en Unix y que fuera software libre. No obstante, tenía un amigo que había participado en el desarrollo del Emacs de Gosling. Gosling le había dado permiso, por correo electrónico, para distribuir su propia versión. Me propuso que usara esa versión. Entonces me di cuenta de que el Emacs de Gosling no incluía un Lisp real. Tenía un lenguaje de programación conocido como «mocklisp», que sintácticamente parece Lisp pero que no tiene sus estructuras de datos. Así, los programas no eran datos, y carecía de elementos vitales de Lisp. Sus estructuras de datos eran cadenas de caracteres, números y unos pocos elementos especializados más.
Llegué a la conclusión de que no podía utilizarlo y tuve que reemplazarlo por completo, para lo cual el primer paso fue escribir un intérprete de Lisp real. Gradualmente adapté cada componente del editor basándolo en estructuras de datos de Lisp real, en lugar de estructuras de datos ad hoc, y haciendo visibles y manipulables por los programas Lisp del usuario las estructuras de datos internas del editor.
La excepción fue redisplay. Durante mucho tiempo, redisplay fue una especie de universo paralelo. El editor pasaba al universo de redisplay y todo funcionaba con estructuras de datos muy especiales que no eran seguras para la recolección de memoria [garbage collection], no eran seguras frente a interrupciones, y no podía ejecutar ningún programa Lisp mientras tanto. Posteriormente lo hemos modificado, ahora se puede ejecutar código Lisp concurrentemente con redisplay. Es algo muy práctico.
Este segundo Emacs era «software libre» en el sentido moderno del término: formaba parte de una campaña política explícita para la elaboración de software libre. La esencia de la campaña era que todo el mundo debería ser libre de hacer lo que nosotros hacíamos en el MIT en los viejos tiempos: trabajar conjuntamente en el software y colaborar con todo el que quisiera trabajar con nosotros. Esta es la base del movimiento por el software libre, la experiencia que tuve, la vida que viví en el Laboratorio de Inteligencia Artificial del MIT: trabajar para el conocimiento, y no obstaculizar su uso ni su expansión.
En esa época, podía construir un ordenador por un precio similar al de otros ordenadores que no estaban pensados para usar Lisp, en el cual Lisp se ejecutaría mucho más rápido y que incluiría validación de tipos en cada operación. Los ordenadores normales típicamente le forzaban a elegir entre velocidad de ejecución y buena validación de tipos. O sea que sí, podía tener un compilador de Lisp y ejecutar sus programas con velocidad, pero cuando sus programas intentaban tomar car de un número, obtenían resultados absurdos y terminaban por fallar o bloquearse.
La máquina Lisp podía ejecutar instrucciones aproximadamente a la misma velocidad que esas otras máquinas, pero cada instrucción validaría los tipos de los datos, así cuando usted intentara obtener el car de un número en un programa compilado, obtendría un error inmediato. Construimos la máquina y un sistema operativo Lisp para ella. Estaba escrito en Lisp casi en su totalidad, con las únicas excepciones de algunos fragmentos escritos en microcódigo. Hubo quien se interesó en fabricarla, lo que significaba fundar una empresa.
Había dos visiones diferentes sobre cómo debería ser esa empresa. Greenblatt quería fundar lo que él llamaba una empresa «hacker». Esto quería decir que sería una empresa gestionada por hackers y que operaría de un modo propicio para hackers. Otro objetivo era mantener la cultura del Laboratorio de Inteligencia Artificial (3). Desafortunadamente, Greenblatt no tenía experiencia empresarial, por lo que otros miembros del grupo de la máquina Lisp expresaron sus dudas sobre el éxito de la empresa. Pensaban que su plan para evitar inversiones externas no funcionaría.
¿Por qué quería evitar la inversión externa?. Porque cuando una empresa tiene inversores externos, éstos toman el control y no permiten que tenga ningún escrúpulo. Y, si usted tiene algún escrúpulo, finalmente le relevan de sus funciones directivas.
La idea de Greenblatt era encontrar un cliente que pagara sus máquinas por adelantado para poder comprar las piezas necesarias. Construirían las máquinas y las entregarían; con los beneficios obtenidos podrían comprar las piezas para unas pocas máquinas más, venderlas, comprar piezas para un número mayor de máquinas, y así sucesivamente. Los otros miembros del grupo pensaban que lo más probable era que el plan no saliera bien.
Entonces Greenblatt reclutó a Russell Noftsker, la persona que me había contratado, quien había dejado el Laboratorio de Inteligencia Artificial y creado una empresa exitosa. Russell era considerado una persona con aptitudes para los negocios. Demostró serlo al decir a los otros miembros del grupo: «deshagámonos de Greenblatt, olvidad sus ideas, y fundaremos otra empresa». Apuñalando por la espalda, sin duda un auténtico hombre de negocios. Decidieron crear una empresa llamada Symbolics. Obtendrían financiación externa, no tendrían escrúpulos y harían todo lo posible para ganar.
Pero Greenblatt no se dio por vencido. Fundó, junto con los pocos que permanecieron leales a él, Lisp Machines Inc. y siguió adelante con sus planes. ¡Y tuvieron éxito! Consiguieron el primer cliente y éste les pagó por adelantado. Construyeron las máquinas y las vendieron, y construyeron más y más máquinas. Tuvieron éxito a pesar de no contar con la ayuda de la mayor parte de los miembros del grupo. Symbolics también empezó con buen pie, así que había dos empresas de máquinas Lisp compitiendo. Cuando Symbolics vio que LMI no se iba a caer de bruces empezó a buscar maneras de destruirla.
Por lo tanto, al abandono de nuestro laboratorio le siguió la «guerra» en nuestro laboratorio. El abandono tuvo lugar cuando Symbolics se llevó a todos los hackers, excepto a los pocos que trabajaban a tiempo parcial en LMI y a mí mismo. Luego apelaron a una norma y eliminaron a la gente que trabajaba a tiempo parcial para el MIT, que tuvo que marcharse, lo cual me dejo sólo a mí. En ese momento el Laboratorio de Inteligencia Artificial estaba indefenso. Y, además, el MIT había llegado a un acuerdo muy poco sensato con esas dos empresas. Era un contrato a tres bandas por el que ambas empresas autorizaban el uso de los fuentes del sistema de la máquina Lisp. Estas empresas debían permitir al MIT usar sus modificaciones. Pero el contrato no decía que el MIT tuviera derecho a instalarlas en las máquinas Lisp para cuyo uso le habían otorgado licencia ambas empresas. Nadie había previsto que el grupo de hackers del Laboratorio de Inteligencia Artificial sería aniquilado, pero lo fue.
A Symbolics se le ocurrió un plan (4). Dijeron al laboratorio: «seguiremos permitiéndoles que usen nuestras modificaciones al sistema, pero no podrán instalarlas en la máquina Lisp del MIT. En su lugar, les daremos acceso al sistema de la máquina Lisp de Symbolics, y podrán ejecutarlo, pero eso será todo lo que podrán hacer.».
Esto, en la práctica, significaba que nos exigían posicionarnos en un bando y utilizar, o bien la versión del MIT del sistema, o bien la versión de Symbolics. Nuestra decisión determinaría a qué sistema irían nuestras mejoras. Si mejorábamos la versión de Symbolics, estaríamos apoyando a Symbolics exclusivamente. Si utilizábamos y mejorábamos la versión del sistema del MIT, ambas empresas tendrían acceso a nuestro trabajo. Pero Symbolics vio que estaríamos dando apoyo a LMI porque estaríamos ayudando a que siguiera existiendo. Así, no se nos permitió seguir siendo neutrales.
Hasta ese momento yo no había tomado partido por ninguna de las dos empresas, aunque me entristecía ver lo que le había ocurrido a nuestra comunidad y al software. Pero ahora, Symbolics había forzado la situación. Así que, en un intento por ayudar a mantener Lisp Machines Inc. a flote (5), empecé a duplicar todas las mejoras que había hecho Symbolics al sistema de la máquina Lisp. Escribí por mí mismo las mejoras equivalentes de nuevo (es decir, el código era mío).
Después de un tiempo (6), llegué a la conclusión de que sería mejor ni siquiera mirar su código. Cuando anunciaban la liberación de una actualización del código, podía ver en las notas correspondientes a la nueva liberación cuáles eran las modificaciones introducidas e implementarlas. Cuando ellos hacían finalmente la liberación de las modificaciones, yo también liberaba las mías.
De esta manera, durante dos años evité que acabaran con Lisp Machines Incorporated, y las dos empresas siguieron adelante. Pero no quería pasarme años y años castigando a alguien, evitando que se cometiera un acto malvado. Supuse que ya habían sido castigados bastante puesto que estaban inmersos en una competición que no tendría fin (7). Por otro lado, había llegado el momento de formar una nueva comunidad que reemplazara a la que las acciones suyas y de otros exterminaron.
La comunidad Lisp en los setenta no estaba limitada al Laboratorio de Inteligencia Artificial del MIT, y no todos los hackers estaban en el MIT. La guerra iniciada por Symbolics fue lo que aniquiló el MIT, pero había otras actividades en marcha. Había gente que abandonó la cooperación, y esto también contribuyó a extinguir la comunidad.
Una vez que dejé de castigar a Symbolics, tuve que pensar qué hacer a continuación. Tenía que hacer un sistema operativo libre, eso estaba claro. La única forma de que la gente pudiera trabajar conjuntamente y compartir era con un sistema operativo libre.
Al principio pensé en hacer un sistema basado en Lisp, pero me di cuenta de que no sería una buena idea desde el punto de vista técnico. Para tener algo como el sistema de la máquina Lisp, necesita microcódigo de propósito específico. Eso es lo que hizo posible ejecutar programas con la misma velocidad con la que se ejecutaban programas en otros ordenadores y con el beneficio adicional de la validación de tipos. Sin eso, se habría visto limitado a algo similar a los compiladores Lisp para otras máquinas. Los programas h abrían sido más rápidos, pero inestables. Ahora bien, eso puede ser admisible si está ejecutando un programa en un sistema de tiempo compartido: que un programa falle no es un desastre, es algo que ocurre con su programa ocasionalmente. Pero no es admisible cuando lo que escribimos es el sistema operativo, así que rechacé la idea de hacer un sistema como la máquina Lisp.
En su lugar, decidí hacer un sistema operativo tipo Unix que tuviera implementaciones Lisp, las cuales serían ejecutadas como programas de usuario. El núcleo no estaría escrito en Lisp, pero tendríamos Lisp. Así que el desarrollo de ese sistema operativo, el sistema operativo GNU, fue lo que me llevó a escribir Emacs de GNU. Al hacerlo, me propuse como meta hacer la implementación de Lisp mínima posible. El tamaño de los programas era algo a tener muy en cuenta.
Había gente en aquellos días, en 1985, que tenía máquinas con un megabyte de memoria y sin memoria virtual. Querían poder usar Emacs de GNU. Esto significaba que tenía que hacer que el programa fuera lo más pequeño posible.
Por ejemplo, en aquel entonces la única estructura iterativa era «while», implementada de forma extremadamente simple. No había ningún mecanismo para interrumpir la ejecución de la sentencia «while» y transferir el control a la instrucción siguiente a dicha sentencia, usted tenía que ejecutar un catch y un throw, o monitorizar una variable para salir del bucle. Esto muestra hasta dónde estaba llevando las cosas para mantener los programas pequeños. No teníamos «caar», «cadr», etc., el espíritu de Emacs de GNU, el espíritu de Emacs Lisp fue, desde el principio, «sácale todo el jugo posible».
Evidentemente, las máquinas actuales tienen mayor capacidad, y ya no hacemos las cosas así. Ahora incluimos «caar», «cadr», etc. Y podríamos añadir otra estructura iterativa un día de estos. Queremos ampliarlo en cierta medida, pero no hasta el punto de Common Lisp. Una vez implementé Common Lisp en una máquina Lisp, y no estoy muy satisfecho con el resultado. Algo que no me gusta gran cosa son los parámetros de palabra clave(8). No me parecen muy de Lisp; los utilizo a veces pero intento hacerlo lo menos posible.
Ese no fue el fin de los proyectos de GNU implicados con Lisp. Más tarde, alrededor de 1995, estábamos estudiando el inicio de un proyecto de escritorio gráfico. Teníamos claro que queríamos un lenguaje de programación que hiciera fácilmente extensibles, como el editor, los programas accesibles desde el escritorio. La cuestión era cuál.
En aquel momento, TCL estaba recibiendo un fuerte impulso como lenguaje a utilizar para este propósito. Yo tenía una opinión muy negativa de TCL, básicamente porque no era Lisp. Tiene un ligerísimo parecido con Lisp, pero no semánticamente, y no es tan limpio. Después, me mostraron un anuncio en el que Sun ofrecía un puesto de trabajo para trabajar con TCL y hacer de él el «lenguaje de extensión estándar, de facto» en el mundo. Y pensé: «Tenemos que evitar que eso llegue a ocurrir.». Así que empezamos a hacer de Scheme el lenguaje para extensiones estándar para GNU. No Common Lisp, porque era demasiado voluminoso. La idea era tener un intérprete Scheme diseñado para ser enlazado en las aplicaciones de la misma manera que se enlazaba TCL. Entonces lo recomendaríamos como el paquete para extensiones prefererido para todos los programas GNU.
Usted puede obtener un beneficio interesante del uso de un lenguaje tan potente como un dialecto de Lisp como su lenguaje primario de extensión: puede implementar otros lenguajes traduciéndolos a su lenguaje primario. Si su lenguaje primario es TCL, usted no podrá implementar Lisp fácilmente mediante su traducción a TCL. Pero si su lenguaje primario es Lisp, no es tan difícil implementar otros lenguajes traduciéndolos. Nuestra idea era que si cada aplicación extensible admitía Scheme, usted podría escribir una implementación de TCL o Python o Perl en Scheme que tradujera los programas en esos lenguajes a Scheme. Entonces, usted podría cargar su traductor en cualquier aplicación y extender dicha aplicación usando su lenguaje favorito.
Mientras los lenguajes de extensión sean débiles, los usuarios sólo pueden usar los lenguajes proporcionados por el programador. Lo que significa que a quien le guste utilizar un lenguaje de programación determinado tiene que competir por la elección de los diseñadores de aplicaciones diciendo «por favor, programador, ponga mi lenguaje en su aplicación, no el lenguaje de aquél.». Después los usuarios no tienen ninguna opción, la aplicación viene con un lenguaje y tienen que quedarse con él. Pero cuando dispone de un lenguaje potente que puede implementar otros mediante la traducción, da al usuario la posibilidad de elegir el lenguaje y ya no hay necesidad de una guerra de lenguajes. Esto es lo que esperamos que haga «Guile», nuestro intérprete Scheme. El verano pasado tuvimos a una persona trabajando en la finalización de un traductor de Python a Scheme. No sé si ya está completamente terminado, pero cualquiera que esté interesado en este proyecto, por favor póngase en contacto. Este es nuestro plan para el futuro.
Esta charla no es sobre software libre, pero déjenme comentarles brevemente lo que significa. Software libre no se refiere al precio1, no significa que usted lo obtiene gratis (puede haber pagado por una copia, o haberla obtenido gratis.). Lo que significa es que usted tiene libertad como usuario. Lo fundamental es que es libre de ejecutar el programa, libre de estudiar qué hace, libre de modificarlo para adaptarlo a sus necesidades, libre de redistribuir las copias de otros y libre de publicar versiones mejoradas, ampliadas. Esto es lo que significa software libre. Si utiliza un programa que no sea libre, pierde una libertad crucial, así que no lo haga nunca.
El propósito del proyecto GNU es hacer más fácil para la gente rechazar el software que no sea libre, pisotea libertades y domina usuarios, proporcionándole software libre para sustituirlo. Para aquellos que no tienen el valor moral de rechazar el software que no es libre cuando hacerlo representa un inconveniente práctico, lo que intentamos hacer es ofrecer una alternativa libre de forma que puedan mudarse a la libertad de forma más ordenada y con menos sacrificios en términos prácticos. Cuanto menor el sacrificio, mejor. Queremos hacer más fácil vivir en libertad, cooperar.
Es una cuestión de libertad para cooperar. Solemos pensar en la libertad y en la cooperación con la sociedad como si fueran opuestos. Pero aquí están del mismo lado. Con software libre es libre de cooperar con otros así como libre de ayudarse a usted mismo. Con software que no es libre, alguien le está dominando y está manteniendo dividida a la gente. No se le permite compartir con el resto, no es libre de cooperar ni de ayudar a la sociedad, como tampoco es libre de ayudarse a usted mismo. Divididos y desamparados es como se encuentran los usuarios de software que no es libre.
Hemos producido una enorme variedad de software libre. Hemos hecho lo que la gente decía que nunca lograríamos hacer; tenemos dos sistemas operativos de software libre. Tenemos muchas aplicaciones y, obviamente, todavía tenemos mucho camino por recorrer. Así que necesitamos su ayuda. Me gustaría pedirles que colaboraran como voluntarios para el proyecto GNU; ayúdennos a desarrollar software libre para más tareas. Echen un vistazo a http://www.gnu.org/help/help.es.html para encontrar sugerencias sobre cómo ayudar. Si quieren hacer algún pedido, hay un enlace disponible en la página principal. Si quieren leer sobre cuestiones filosóficas, miren en /philosophy. Si están buscando el software libre disponible, miren en /directory, donde se listan alrededor de 1900 paquetes en la actualidad (lo cual es una fracción de todo el software libre disponible ahí fuera). Por favor, escriban más software y contribuyan. Mi libro de ensayos, «Free Software and Free Society» se encuentra a la venta y puede adquirirse en www.gnu.org2. ¡Feliz hacking!.
  1. Guy Steele diseñó el conjunto de órdenes simétrico original de Emacs; luego, él y yo empezamos a implementar Emacs (sobre TECO), pero, tras una larga sesión conjunta de desarrollo, Steele empezó a distanciarse, así que yo finalicé Emacs. Otros, entre los que destacan Eugene C. Cicciarelli y Mike McMahon, contribuyeron más tarde de forma sustancial.
  2. Bernie Greenberg dice que Dan Weinreb implementó Emacs para la Máquina Lisp antes de que Greenberg lo implementara para Multics. Pido disculpas por el error.
  3. El plan de Greenblatt, según lo entendía yo, era contratar a la gente del laboratorio a tiempo parcial, de forma que pudieran seguir trabajando en el Laboratorio de Inteligencia Artificial. En cambio, Symbolics les contrató a jornada completa, así que dejaron de trabajar en el MIT.
  4. Las circunstancias de este plan, que no expuse explícitamente en la charla, fueron las siguientes: durante un periodo inicial los hackers que habían dejado el Laboratorio de Inteligencia Artificial, tanto los que trabajaban para Symbolics como los que lo hacían para LMI, continuaron aportando al sistema de la máquina Lisp del MIT sus modificaciones, a pesar de que el contrato no lo exigía. El plan de Symbolics era provocar unilateralmente la ruptura de esta cooperación.
  5. No era que me preocupara especialmente el destino de LMI, sino más bien que no quería que Symbolics saliera vencedora gracias a haber agredido como lo hizo al Laboratorio de Inteligencia Artificial.
  6. Esta afirmación ha sido malinterpretada atribuyéndole el significado de que nunca miré el código de Symbolics. En realidad dice que sí lo hice, al principio. El código fuente de Symbolics estaba disponible en el MIT, por lo tanto yo podía leerlo, y al principio era así como me enteraba de sus modificaciones.
    Pero eso significaba que tenía que hacer un esfuerzo especial para resolver cada problema de forma diferente, para evitar que mi código fuera una copia del código de Symbolics. Pasado un tiempo, llegué a la conclusión de que era mejor no mirarlo. De esa forma podía escribir el código de la forma que considerara mejor sin preocuparme de lo que contenía el código de Symbolics.
  7. En una ocasión Symbolics se quejó al MIT de que mi trabajo, al frustrar sus planes, le había costado un millón de dólares.
  8. No me molesta si una función muy compleja y avanzada toma parámetros de palabras clave. Lo que me molesta es ponerlas en funciones simples y básicas como «miembro».
Notas del traductor:
  1. Software Libre es la traducción de Free Software. Aquí se hace referencia al doble significado del término inglés Free, que puede significar tanto «libre» como «gratis». Regresar al texto.
  2. Existe una traducción del libro publicada en España por el editorial Traficantes de Sueños. Regresar al texto
**********************

"... 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...."
I actually think persistence is far more important that intuition.

No hay comentarios:

Publicar un comentario

Blogger Widgets