taler-merchant-demos

Python-based Frontends for the Demonstration Web site
Log | Files | Refs | Submodules | README | LICENSE

rms-lisp.html (33019B)


      1 <!--#include virtual="/server/header.html" -->
      2 <!-- Parent-Version: 1.96 -->
      3 <!-- This page is derived from /server/standards/boilerplate.html -->
      4 <!--#set var="TAGS" value="gnu-history" -->
      5 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
      6 <title>My Lisp Experiences and the Development of GNU Emacs
      7 - GNU Project - Free Software Foundation</title>
      8 <style type="text/css" media="print,screen"><!--
      9 a[href*='#foot-'] { font-size: .94em; }
     10 --></style>
     11 <!--#include virtual="/gnu/po/rms-lisp.translist" -->
     12 <!--#include virtual="/server/banner.html" -->
     13 <!--#include virtual="/gnu/gnu-breadcrumb.html" -->
     14 <!--GNUN: OUT-OF-DATE NOTICE-->
     15 <!--#include virtual="/server/top-addendum.html" -->
     16 <div class="article reduced-width">
     17 <h2>My Lisp Experiences and the Development of GNU Emacs</h2>
     18 
     19 <div class="infobox">
     20 <p>Transcript of Richard Stallman's speech at the
     21 International Lisp Conference, 28 Oct 2002.</p>
     22 </div>
     23 <hr class="thin" />
     24 
     25 <p>Since none of my usual speeches have anything to do with Lisp, none
     26 of them were appropriate for today. So I'm going to have to wing it.
     27 Since I've done enough things in my career connected with Lisp I
     28 should be able to say something interesting.</p>
     29 
     30 <p>My first experience with Lisp was when I read the Lisp 1.5 manual
     31 in high school. That's when I had my mind blown by the idea that there
     32 could be a computer language like that. The first time I had a chance
     33 to do anything with Lisp was when I was a freshman at Harvard and I
     34 wrote a Lisp interpreter for the <abbr title="Programmed Data
     35 Processor">PDP</abbr>-11. It was a very small machine&mdash;it
     36 had something like 8k of memory&mdash;and I managed to write the
     37 interpreter in a thousand instructions. This gave me some room for a
     38 little bit of data. That was before I got to see what real software
     39 was like, that did real system jobs.</p>
     40 
     41 <p>I began doing work on a real Lisp implementation with JonL White
     42 once I started working at <abbr title="Massachusetts Institute of
     43 Technology">MIT</abbr>. I got hired at the Artificial Intelligence Lab
     44 not by JonL, but by Russ Noftsker, which was most ironic considering
     45 what was to come&mdash;he must have really regretted that day.</p>
     46 
     47 <p>During the 1970s, before my life became politicized by horrible
     48 events, I was just going along making one extension after another for
     49 various programs, and most of them did not have anything to do with
     50 Lisp. But, along the way, I wrote a text editor, Emacs. The
     51 interesting idea about Emacs was that it had a programming language,
     52 and the user's editing commands would be written in that interpreted
     53 programming language, so that you could load new commands into your
     54 editor while you were editing. You could edit the programs you were
     55 using and then go on editing with them. So, we had a system that was
     56 useful for things other than programming, and yet you could program it
     57 while you were using it. I don't know if it was the first one of
     58 those, but it certainly was the first editor like that.</p>
     59 
     60 <p>This spirit of building up gigantic, complicated programs to use in
     61 your own editing, and then exchanging them with other people, fueled
     62 the spirit of free-wheeling cooperation that we had at the AI Lab
     63 then. The idea was that you could give a copy of any program you had
     64 to someone who wanted a copy of it. We shared programs to whomever
     65 wanted to use them, they were human knowledge. So even though there
     66 was no organized political thought relating the way we shared software
     67 to the design of Emacs, I'm convinced that there was a connection
     68 between them, an unconscious connection perhaps. I think that it's the
     69 nature of the way we lived at the AI Lab that led to Emacs and made it
     70 what it was.</p>
     71 
     72 <p>The original Emacs did not have Lisp in it. The lower level
     73 language, the non-interpreted language&mdash;was PDP-10
     74 Assembler. The interpreter we wrote in that actually wasn't written
     75 for Emacs, it was written for <abbr title="Text Editor and
     76 COrrector">TECO</abbr>. It was our text editor, and was an
     77 extremely ugly programming language, as ugly as could possibly be. The
     78 reason was that it wasn't designed to be a programming language, it
     79 was designed to be an editor and command language. There were commands
     80 like <code>5l</code>, meaning <code>move five lines</code>, or
     81 <code>i</code> and then a string and then an ESC to insert that
     82 string. You would type a string that was a series of commands, which
     83 was called a command string. You would end it with ESC ESC, and it
     84 would get executed.</p>
     85 
     86 <p>Well, people wanted to extend this language with programming
     87 facilities, so they added some. For instance, one of the first was a
     88 looping construct, which was <code>&lt;&nbsp;&gt;</code>. You would put those around
     89 things and it would loop. There were other cryptic commands that could
     90 be used to conditionally exit the loop.  To make Emacs, we&#8239;<a
     91 href="#foot-1">[1]</a> added facilities to have subroutines with
     92 names. Before that, it was sort of like Basic, and the subroutines
     93 could only have single letters as their names. That was hard to
     94 program big programs with, so we added code so they could have longer
     95 names. Actually, there were some rather sophisticated facilities; I
     96 think that Lisp got its unwind-protect facility
     97 from TECO.</p>
     98 
     99 <p>We started putting in rather sophisticated facilities, all with the
    100 ugliest syntax you could ever think of, and it worked&mdash;people were
    101 able to write large programs in it anyway. The obvious lesson was that
    102 a language like TECO, which wasn't designed to be a
    103 programming language, was the wrong way to go. The language that you
    104 build your extensions on shouldn't be thought of as a programming
    105 language in afterthought; it should be designed as a programming
    106 language. In fact, we discovered that the best programming language
    107 for that purpose was Lisp.</p>
    108 
    109 <p>It was Bernie Greenberg, who discovered that it
    110 was&#8239;<a href="#foot-2">[2]</a>.  He wrote a version of Emacs in Multics
    111 MacLisp, and he wrote his commands in MacLisp in a straightforward
    112 fashion. The editor itself was written entirely in Lisp. Multics Emacs
    113 proved to be a great success&mdash;programming new editing commands
    114 was so convenient that even the secretaries in his office started
    115 learning how to use it. They used a manual someone had written which
    116 showed how to extend Emacs, but didn't say it was a programming. So
    117 the secretaries, who believed they couldn't do programming, weren't
    118 scared off. They read the manual, discovered they could do useful
    119 things and they learned to program.</p>
    120 
    121 <p>So Bernie saw that an application&mdash;a program that does something
    122 useful for you&mdash;which has Lisp inside it and which you could extend
    123 by rewriting the Lisp programs, is actually a very good way for people
    124 to learn programming. It gives them a chance to write small programs
    125 that are useful for them, which in most arenas you can't possibly
    126 do. They can get encouragement for their own practical use&mdash;at the
    127 stage where it's the hardest&mdash;where they don't believe they can
    128 program, until they get to the point where they are programmers.</p>
    129 
    130 <p>At that point, people began to wonder how they could get something
    131 like this on a platform where they didn't have full service Lisp
    132 implementation. Multics MacLisp had a compiler as well as an
    133 interpreter&mdash;it was a full-fledged Lisp system&mdash;but people wanted
    134 to implement something like that on other systems where they had not
    135 already written a Lisp compiler. Well, if you didn't have the Lisp
    136 compiler you couldn't write the whole editor in Lisp&mdash;it would be
    137 too slow, especially redisplay, if it had to run interpreted Lisp.  So
    138 we developed a hybrid technique. The idea was to write a Lisp
    139 interpreter and the lower level parts of the editor together, so that
    140 parts of the editor were built-in Lisp facilities. Those would be
    141 whatever parts we felt we had to optimize. This was a technique that
    142 we had already consciously practiced in the original Emacs, because
    143 there were certain fairly high level features which we re-implemented
    144 in machine language, making them into TECO
    145 primitives. For instance, there was a TECO
    146 primitive to fill a paragraph (actually, to do most of the work of
    147 filling a paragraph, because some of the less time-consuming parts of
    148 the job would be done at the higher level by a TECO
    149 program). You could do the whole job by writing
    150 a TECO program, but that was too slow, so we
    151 optimized it by putting part of it in machine language. We used the
    152 same idea here (in the hybrid technique), that most of the editor
    153 would be written in Lisp, but certain parts of it that had to run
    154 particularly fast would be written at a lower level.</p>
    155 
    156 <p>Therefore, when I wrote my second implementation of Emacs, I
    157 followed the same kind of design. The low level language was not
    158 machine language anymore, it was C. C was a good, efficient language
    159 for portable programs to run in a Unix-like operating system. There
    160 was a Lisp interpreter, but I implemented facilities for special
    161 purpose editing jobs directly in C&mdash;manipulating editor buffers,
    162 inserting leading text, reading and writing files, redisplaying the
    163 buffer on the screen, managing editor windows.</p>
    164 
    165 <p>Now, this was not the first Emacs that was written in C and ran on
    166 Unix. The first was written by James Gosling, and was referred to as
    167 GosMacs. A strange thing happened with him. In the beginning, he
    168 seemed to be influenced by the same spirit of sharing and cooperation
    169 of the original Emacs. I first released the original Emacs to people
    170 at MIT. Someone wanted to port it to run on Twenex&mdash;it
    171 originally only ran on the Incompatible Timesharing System we used
    172 at MIT. They ported it to Twenex, which meant that there
    173 were a few hundred installations around the world that could
    174 potentially use it. We started distributing it to them, with the rule
    175 that &ldquo;you had to send back all of your improvements&rdquo; so we
    176 could all benefit. No one ever tried to enforce that, but as far as I
    177 know people did cooperate.</p>
    178 
    179 <p>Gosling did, at first, seem to participate in this spirit. He wrote
    180 in a manual that he called the program Emacs hoping that others in the
    181 community would improve it until it was worthy of that name. That's
    182 the right approach to take towards a community&mdash;to ask them to join
    183 in and make the program better. But after that he seemed to change the
    184 spirit, and sold it to a company.</p>
    185 
    186 <p>At that time I was working on the GNU system (a free software
    187 Unix-like operating system that many people erroneously call
    188 &ldquo;Linux&rdquo;).  There was no free software Emacs editor that ran
    189 on Unix. I did, however, have a friend who had participated in
    190 developing Gosling's Emacs. Gosling had given him, by email, permission
    191 to distribute his own version. He proposed to me that I use that
    192 version. Then I discovered that Gosling's Emacs did not have a real
    193 Lisp. It had a programming language that was known as
    194 &ldquo;mocklisp,&rdquo; which looks syntactically like Lisp, but didn't
    195 have the data structures of Lisp.  So programs were not data, and vital
    196 elements of Lisp were missing.  Its data structures were strings,
    197 numbers and a few other specialized things.</p>
    198 
    199 <p>I concluded I couldn't use it and had to replace it all, the first
    200 step of which was to write an actual Lisp interpreter. I gradually
    201 adapted every part of the editor based on real Lisp data structures,
    202 rather than ad hoc data structures, making the data structures of the
    203 internals of the editor exposable and manipulable by the user's Lisp
    204 programs.</p>
    205 
    206 <p>The one exception was redisplay. For a long time, redisplay was
    207 sort of an alternate world. The editor would enter the world of
    208 redisplay and things would go on with very special data structures
    209 that were not safe for garbage collection, not safe for interruption,
    210 and you couldn't run any Lisp programs during that. We've changed that
    211 since&mdash;it's now possible to run Lisp code during redisplay. It's
    212 quite a convenient thing.</p>
    213 
    214 <p>This second Emacs program was &ldquo;free software&rdquo; in the
    215 modern sense of the term&mdash;it was part of an explicit political
    216 campaign to make software free. The essence of this campaign was that
    217 everybody should be free to do the things we did in the old days
    218 at MIT, working together on software and working with
    219 whomever wanted to work with us.  That is the basis for the free
    220 software movement&mdash;the experience I had, the life that I've lived at
    221 the MIT AI lab&mdash;to be working on human knowledge, and
    222 not be standing in the way of anybody's further using and further
    223 disseminating human knowledge.</p>
    224 
    225 <p>At the time, you could make a computer that was about the same price
    226 range as other computers that weren't meant for Lisp, except that it
    227 would run Lisp much faster than they would, and with full type checking
    228 in every operation as well. Ordinary computers typically forced you to
    229 choose between execution speed and good typechecking.  So yes, you could
    230 have a Lisp compiler and run your programs fast, but when they tried to
    231 take <code>car</code> of a number, it got nonsensical results and eventually
    232 crashed at some point.</p>
    233 
    234 <p>The Lisp machine was able to execute instructions about as fast as
    235 those other machines, but each instruction&mdash;a <code>car</code> instruction would
    236 do data typechecking&mdash;so when you tried to get the <code>car</code> of a number
    237 in a compiled program, it would give you an immediate error. We built
    238 the machine and had a Lisp operating system for it. It was written
    239 almost entirely in Lisp, the only exceptions being parts written in
    240 the microcode. People became interested in manufacturing them, which
    241 meant they should start a company.</p>
    242 
    243 <p>There were two different ideas about what this company should be
    244 like.  Greenblatt wanted to start what he called a
    245 &ldquo;hacker&rdquo; company. This meant it would be a company run by
    246 hackers and would operate in a way conducive to hackers. Another goal
    247 was to maintain the AI Lab culture&#8239;<a class="ftn" href="#foot-3">[3]</a>.
    248 Unfortunately, Greenblatt didn't have any business experience, so
    249 other people in the Lisp machine group said they doubted whether he
    250 could succeed. They thought that his plan to avoid outside investment
    251 wouldn't work.</p>
    252 
    253 <p>Why did he want to avoid outside investment? Because when a company
    254 has outside investors, they take control and they don't let you have
    255 any scruples. And eventually, if you have any scruples, they also
    256 replace you as the manager.</p>
    257 
    258 <p>So Greenblatt had the idea that he would find a customer who would
    259 pay in advance to buy the parts. They would build machines and deliver
    260 them; with profits from those parts, they would then be able to buy
    261 parts for a few more machines, sell those and then buy parts for a
    262 larger number of machines, and so on. The other people in the group
    263 thought that this couldn't possibly work.</p>
    264 
    265 <p>Greenblatt then recruited Russell Noftsker, the man who had hired
    266 me, who had subsequently left the AI Lab and created a successful
    267 company.  Russell was believed to have an aptitude for business. He
    268 demonstrated this aptitude for business by saying to the other people
    269 in the group, &ldquo;Let's ditch Greenblatt, forget his ideas, and
    270 we'll make another company.&rdquo; Stabbing in the back, clearly a
    271 real businessman. Those people decided they would form a company
    272 called Symbolics. They would get outside investment, not have
    273 scruples, and do everything possible to win.</p>
    274 
    275 <p>But Greenblatt didn't give up. He and the few people loyal to him
    276 decided to start Lisp Machines Inc. anyway and go ahead with their
    277 plans. And what do you know, they succeeded! They got the first
    278 customer and were paid in advance. They built machines and sold them,
    279 and built more machines and more machines. They actually succeeded
    280 even though they didn't have the help of most of the people in the
    281 group. Symbolics also got off to a successful start, so you had two
    282 competing Lisp machine companies. When Symbolics saw that LMI was not
    283 going to fall flat on its face, they started looking for ways to
    284 destroy it.</p>
    285 
    286 <p>Thus, the abandonment of our lab was followed by &ldquo;war&rdquo;
    287 in our lab.  The abandonment happened when Symbolics hired away all
    288 the hackers, except me and the few who worked at LMI part-time. Then
    289 they invoked a rule and eliminated people who worked part-time
    290 for MIT, so they had to leave entirely, which left only
    291 me. The AI lab was now helpless.  And MIT had made a very
    292 foolish arrangement with these two companies.  It was a three-way
    293 contract where both companies licensed the use of Lisp machine system
    294 sources. These companies were required to let MIT use
    295 their changes. But it didn't say in the contract that MIT
    296 was entitled to put them into the MIT Lisp machine
    297 systems that both companies had licensed. Nobody had envisioned that
    298 the AI lab's hacker group would be wiped out, but it was.</p>
    299 
    300 <p> So Symbolics came up with a plan&#8239;<a href="#foot-4">[4]</a>.  They
    301 said to the lab, &ldquo;We will continue making our changes to the
    302 system available for you to use, but you can't put it into
    303 the MIT Lisp machine system. Instead, we'll give you
    304 access to Symbolics' Lisp machine system, and you can run it, but
    305 that's all you can do.&rdquo;</p>
    306 
    307 <p>This, in effect, meant that they demanded that we had to choose a
    308 side, and use either the MIT version of the system or the
    309 Symbolics version.  Whichever choice we made determined which system
    310 our improvements went to. If we worked on and improved the Symbolics
    311 version, we would be supporting Symbolics alone. If we used and
    312 improved the MIT version of the system, we would be doing
    313 work available to both companies, but Symbolics saw that we would be
    314 supporting LMI because we would be helping them continue to exist. So
    315 we were not allowed to be neutral anymore.</p>
    316 
    317 <p>Up until that point, I hadn't taken the side of either company,
    318 although it made me miserable to see what had happened to our
    319 community and the software.  But now, Symbolics had forced the issue.
    320 So, in an effort to help keep Lisp Machines
    321 Inc. going&#8239;<a href="#foot-5">[5]</a>&mdash;I began duplicating all
    322 of the improvements Symbolics had made to the Lisp machine system.  I
    323 wrote the equivalent improvements again myself (i.e., the code was my
    324 own).</p>
    325 
    326 <p>After a while&#8239;<a href="#foot-6">[6]</a>, I came to the conclusion
    327 that it would be best if I didn't even look at their code. When they
    328 made a beta announcement that gave the release notes, I would see what
    329 the features were and then implement them. By the time they had a real
    330 release, I did too.</p>
    331 
    332 <p>In this way, for two years, I prevented them from wiping out Lisp
    333 Machines Incorporated, and the two companies went on. But, I didn't
    334 want to spend years and years punishing someone, just thwarting an
    335 evil deed. I figured they had been punished pretty thoroughly because
    336 they were stuck with competition that was not leaving or going to
    337 disappear&#8239;<a href="#foot-7">[7]</a>.  Meanwhile, it was time to start
    338 building a new community to replace the one that their actions and
    339 others had wiped out.</p>
    340 
    341 <p>The Lisp community in the 70s was not limited to
    342 the MIT AI Lab, and the hackers were not all
    343 at MIT. The war that Symbolics started was what wiped
    344 out MIT, but there were other events going on then. There
    345 were people giving up on cooperation, and together this wiped out the
    346 community and there wasn't much left.</p>
    347 
    348 <p>Once I stopped punishing Symbolics, I had to figure out what to do
    349 next. I had to make a free operating system, that was clear&mdash;the
    350 only way that people could work together and share was with a free
    351 operating system.</p>
    352 
    353 <p>At first, I thought of making a Lisp-based system, but I realized
    354 that wouldn't be a good idea technically. To have something like the
    355 Lisp machine system, you needed special purpose microcode. That's what
    356 made it possible to run programs as fast as other computers would run
    357 their programs and still get the benefit of typechecking. Without
    358 that, you would be reduced to something like the Lisp compilers for
    359 other machines. The programs would be faster, but unstable. Now that's
    360 okay if you're running one program on a timesharing system&mdash;if one
    361 program crashes, that's not a disaster, that's something your program
    362 occasionally does. But that didn't make it good for writing the
    363 operating system in, so I rejected the idea of making a system like
    364 the Lisp machine.</p>
    365 
    366 <p>I decided instead to make a Unix-like operating system that would
    367 have Lisp implementations to run as user programs. The kernel wouldn't
    368 be written in Lisp, but we'd have Lisp. So the development of that
    369 operating system, the GNU operating system, is what led me to write
    370 the GNU Emacs. In doing this, I aimed to make the absolute minimal
    371 possible Lisp implementation. The size of the programs was a
    372 tremendous concern.</p>
    373 
    374 <p>There were people in those days, in 1985, who had one-megabyte
    375 machines without virtual memory. They wanted to be able to use GNU
    376 Emacs. This meant I had to keep the program as small as possible.</p>
    377 
    378 <p>For instance, at the time the only looping construct was
    379 <code>while</code>, which was extremely simple. There was no way to
    380 break out of the <code>while</code> statement, you just had to do a
    381 catch and a throw, or test a variable that ran the loop. That shows
    382 how far I was pushing to keep things small. We didn't have
    383 <code>caar</code> and <code>cadr</code> and so on; &ldquo;squeeze
    384 out everything possible&rdquo; was the spirit of GNU Emacs, the spirit
    385 of Emacs Lisp, from the beginning.</p>
    386 
    387 <p>Obviously, machines are bigger now, and we don't do it that way
    388 any more. We put in <code>caar</code> and <code>cadr</code> and so
    389 on, and we might put in another looping construct one of these
    390 days. We're willing to extend it some now, but we don't want to extend
    391 it to the level of common Lisp. I implemented Common Lisp once on the
    392 Lisp machine, and I'm not all that happy with it. One thing I don't
    393 like terribly much is keyword arguments&#8239;<a href="#foot-8">[8]</a>.
    394 They don't seem quite Lispy
    395 to me; I'll do it sometimes but I minimize the times when I do
    396 that.</p>
    397 
    398 <p>That was not the end of the GNU projects involved with Lisp. Later
    399 on around 1995, we were looking into starting a graphical desktop
    400 project. It was clear that for the programs on the desktop, we wanted
    401 a programming language to write a lot of it in to make it easily
    402 extensible, like the editor. The question was what it should be.</p>
    403 
    404 <p>At the time, <abbr title="Tool Command Language">TCL</abbr>
    405 was being pushed heavily for this purpose. I had a very low opinion
    406 of TCL, basically because it wasn't Lisp. It looks
    407 a tiny bit like Lisp, but semantically it isn't, and it's not as
    408 clean.  Then someone showed me an ad where Sun was trying to hire
    409 somebody to work on TCL to make it the
    410 &ldquo;de-facto standard extension language&rdquo; of the world. And I
    411 thought, &ldquo;We've got to stop that from happening.&rdquo; So we
    412 started to make Scheme the standard extensibility language for
    413 GNU. Not Common Lisp, because it was too large. The idea was that we
    414 would have a Scheme interpreter designed to be linked into
    415 applications in the same way TCL was linked into
    416 applications. We would then recommend that as the preferred
    417 extensibility package for all GNU programs.</p>
    418 
    419 <p>There's an interesting benefit you can get from using such a
    420 powerful language as a version of Lisp as your primary extensibility
    421 language.  You can implement other languages by translating them into
    422 your primary language. If your primary language
    423 is TCL, you can't very easily implement Lisp by
    424 translating it into TCL. But if your primary
    425 language is Lisp, it's not that hard to implement other things by
    426 translating them. Our idea was that if each extensible application
    427 supported Scheme, you could write an implementation
    428 of TCL or Python or Perl in Scheme that translates
    429 that program into Scheme. Then you could load that into any
    430 application and customize it in your favorite language and it would
    431 work with other customizations as well.</p>
    432 
    433 <p>As long as the extensibility languages are weak, the users have to
    434 use only the language you provided them. Which means that people who
    435 love any given language have to compete for the choice of the
    436 developers of applications&mdash;saying &ldquo;Please, application
    437 developer, put my language into your application, not his
    438 language.&rdquo; Then the users get no choices at all&mdash;whichever
    439 application they're using comes with one language and they're stuck
    440 with [that language]. But when you have a powerful language that can
    441 implement others by translating into it, then you give the user a
    442 choice of language and we don't have to have a language war
    443 anymore. That's what we're hoping Guile, our scheme
    444 interpreter, will do. We had a person working last summer finishing up
    445 a translator from Python to Scheme. I don't know if it's entirely
    446 finished yet, but for anyone interested in this project, please get in
    447 touch. So that's the plan we have for the future.</p>
    448 
    449 <p>I haven't been speaking about free software, but let me briefly
    450 tell you a little bit about what that means. Free software does not
    451 refer to price; it doesn't mean that you get it for free. (You may
    452 have paid for a copy, or gotten a copy gratis.) It means that you have
    453 freedom as a user. The crucial thing is that you are free to run the
    454 program, free to study what it does, free to change it to suit your
    455 needs, free to redistribute the copies of others and free to publish
    456 improved, extended versions. This is what free software means. If you
    457 are using a nonfree program, you have lost crucial freedom, so don't
    458 ever do that.</p>
    459 
    460 <p>The purpose of the GNU project is to make it easier for people to
    461 reject freedom-trampling, user-dominating, nonfree software by
    462 providing free software to replace it. For those who don't have the
    463 moral courage to reject the nonfree software, when that means some
    464 practical inconvenience, what we try to do is give a free alternative
    465 so that you can move to freedom with less of a mess and less of a
    466 sacrifice in practical terms. The less sacrifice the better. We want
    467 to make it easier for you to live in freedom, to cooperate.</p>
    468 
    469 <p>This is a matter of the freedom to cooperate. We're used to
    470 thinking of freedom and cooperation with society as if they are
    471 opposites. But here they're on the same side. With free software you
    472 are free to cooperate with other people as well as free to help
    473 yourself. With nonfree software, somebody is dominating you and
    474 keeping people divided. You're not allowed to share with them, you're
    475 not free to cooperate or help society, anymore than you're free to
    476 help yourself.  Divided and helpless is the state of users using
    477 nonfree software.</p>
    478 
    479 <p>We've produced a tremendous range of free software. We've done what
    480 people said we could never do; we have two operating systems of free
    481 software. We have many applications and we obviously have a lot
    482 farther to go. So we need your help. I would like to ask you to
    483 volunteer for the GNU project; help us develop free software for more
    484 jobs. Take a look at <a href="/help/help.html">gnu.org/help</a> to
    485 find suggestions for how to help. If you want to order things, there's
    486 a link to that from the home page. If you want to read about
    487 philosophical issues, look in /philosophy. If you're looking for free
    488 software to use, look in /directory, which lists about 1900 packages
    489 now (which is a fraction of all the free software out there). Please
    490 write more and contribute to us. My book of essays, &ldquo;Free
    491 Software and Free Society,&rdquo; is on sale and can be purchased at
    492 www.gnu.org&#8239;<a href="#foot-9">[9]</a>.  Happy hacking!</p>
    493 <div class="column-limit"></div>
    494 
    495 <h3 class="footnote">Footnotes</h3>
    496 <ol>
    497 <li id="foot-1">Guy Steele designed the original symmetrical Emacs
    498 command set; then he and I began implementing Emacs (on top of TECO),
    499 but after one long joint development session, Steele began drifting
    500 away, so I finished Emacs.  Others particularly including Eugene
    501 C. Cicciarelli and Mike McMahon contributed substantially later
    502 on.</li>
    503 
    504 <li id="foot-2">Bernie Greenberg says that Dan Weinreb's
    505 implementation of Emacs for the Lisp Machine came before Greenberg's
    506 implementation for Multics.  I apologize for the mistake.</li>
    507 
    508 <li id="foot-3">Greenblatt's plan, as I understood it, was to hire lab
    509 people part time, so that they could continue working at the AI Lab.
    510 Symbolics hired them full time instead, so they stopped working at
    511 MIT.</li>
    512 
    513 <li id="foot-4">The background of this plan, which I did not state
    514 explicitly in the talk, is that during an initial period the ex-AI-Lab
    515 hackers, whether at Symbolics or LMI, continued contributing their
    516 changes to the MIT Lisp Machine system&mdash;even though the
    517 contract did not require this.  Symbolics' plan was to rupture this
    518 cooperation unilaterally.</li>
    519 
    520 <li id="foot-5">It was not that I cared particularly about the fate of
    521 LMI, but rather I did not want to let Symbolics gain through its
    522 aggression against the AI Lab.</li>
    523 
    524 <li id="foot-6">This statement has been misconstrued as saying that I
    525 never, ever looked at Symbolics' code.  Actually it says I did look,
    526 at first.  The Symbolics source code was available at MIT, where I was
    527 entitled to read it, and at first that's how I found out about their
    528 changes.
    529 
    530 <p>But that meant I had to make a special effort to solve each problem
    531 differently, in order to avoid copying Symbolics code.  After a while,
    532 I concluded it was better not to even look.  That way I could write
    533 code in whatever way was best, without concern for what might be in
    534 Symbolics' code.</p></li>
    535 
    536 <li id="foot-7">Symbolics at one point protested to MIT that my work,
    537 by thwarting their plan, had cost Symbolics a million dollars.</li>
    538 
    539 <li id="foot-8">I don't mind if a very complex and heavyweight
    540 function takes keyword arguments.  What bothers me is making simple
    541 basic functions such as &ldquo;member&rdquo; use them.</li>
    542 
    543 <li id="foot-9">In 2021, this book can be purchased from <a
    544 href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition">
    545 GNU Press</a>.</li>
    546 </ol>
    547 </div>
    548 
    549 </div><!-- for id="content", starts in the include above -->
    550 <!--#include virtual="/server/footer.html" -->
    551 <div id="footer" role="contentinfo">
    552 <div class="unprintable">
    553 
    554 <p>Please send general FSF &amp; GNU inquiries to
    555 <a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.
    556 There are also <a href="/contact/">other ways to contact</a>
    557 the FSF.  Broken links and other corrections or suggestions can be sent
    558 to <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>
    559 
    560 <p><!-- TRANSLATORS: Ignore the original text in this paragraph,
    561         replace it with the translation of these two:
    562 
    563         We work hard and do our best to provide accurate, good quality
    564         translations.  However, we are not exempt from imperfection.
    565         Please send your comments and general suggestions in this regard
    566         to <a href="mailto:web-translators@gnu.org">
    567         &lt;web-translators@gnu.org&gt;</a>.</p>
    568 
    569         <p>For information on coordinating and contributing translations of
    570         our web pages, see <a
    571         href="/server/standards/README.translations.html">Translations
    572         README</a>. -->
    573 Please see the <a
    574 href="/server/standards/README.translations.html">Translations
    575 README</a> for information on coordinating and contributing translations
    576 of this article.</p>
    577 </div>
    578 
    579 <!-- Regarding copyright, in general, standalone pages (as opposed to
    580      files generated as part of manuals) on the GNU web server should
    581      be under CC BY-ND 4.0.  Please do NOT change or remove this
    582      without talking with the webmasters or licensing team first.
    583      Please make sure the copyright date is consistent with the
    584      document.  For web pages, it is ok to list just the latest year the
    585      document was modified, or published.
    586      
    587      If you wish to list earlier years, that is ok too.
    588      Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
    589      years, as long as each year in the range is in fact a copyrightable
    590      year, i.e., a year in which the document was published (including
    591      being publicly visible on the web or in a revision control system).
    592      
    593      There is more detail about copyright years in the GNU Maintainers
    594      Information document, www.gnu.org/prep/maintain. -->
    595 
    596 <p>Copyright &copy; 2003, 2007, 2013, 2021 Free Software Foundation, Inc.</p>
    597 
    598 <p>This page is licensed under a <a rel="license"
    599 href="http://creativecommons.org/licenses/by-nd/4.0/">Creative
    600 Commons Attribution-NoDerivatives 4.0 International License</a>.</p>
    601 
    602 <!--#include virtual="/server/bottom-notes.html" -->
    603 
    604 <p class="unprintable">Updated:
    605 <!-- timestamp start -->
    606 $Date: 2021/11/02 13:56:41 $
    607 <!-- timestamp end -->
    608 </p>
    609 </div>
    610 </div><!-- for class="inner", starts in the banner include -->
    611 </body>
    612 </html>