/[www]/www/philosophy/stallman-kth.html
ViewVC logotype

Annotation of /www/philosophy/stallman-kth.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.9 - (hide annotations) (download) (as text)
Tue Jul 22 12:13:45 2008 UTC (16 years, 3 months ago) by yavor
Branch: MAIN
Changes since 1.8: +7 -7 lines
File MIME type: text/html
Proper markup for the Q/A session.

1 yavor 1.8 <!--#include virtual="/server/header.html" -->
2     <title>Speech in Sweden - GNU Project - Free Software Foundation (FSF)</title>
3     <!--#include virtual="/server/banner.html" -->
4     <h2>RMS lecture at KTH (Sweden), 30 October 1986</h2>
5 webcvs 1.1
6     <center>
7 yavor 1.8 <p><em>(Kungliga Tekniska H&ouml;gskolan (Royal Institute of
8     Technology))<br />
9     Stockholm, Sweden</em></p>
10     <p><em>
11     Arranged by the student society<br />
12     &ldquo;Datorf&ouml;reningen Stacken&rdquo;<br />
13     30 October 1986
14     </em></p>
15 webcvs 1.1 </center>
16    
17 yavor 1.8 <p><strong>[Note: This is a slightly edited transcript of the talk.
18     As such it contains false starts, as well as locutions that are
19     natural in spoken English but look strange in print. It is not clear
20     how to correct them to written English style without &lsquo;doing
21     violence to the original speech&rsquo;.]</strong></p>
22    
23     <p>It seems that there are three things that people would like me to
24     talk about. On the one hand I thought that the best thing to talk
25     about here for a club of hackers, was what it was like at the
26     <acronym title="Massachusettes Institute of Technology">MIT</acronym>
27     in the old days. What made the Artificial Intelligence Lab such a
28     special place. But people tell me also that since these are totally
29     different people from the ones who were at the conference Monday and
30     Tuesday that I ought to talk about what's going on in the GNU project
31     and that I should talk about why software and information can not be
32     owned, which means three talks in all, and since two of those subjects
33     each took an hour it means we're in for a rather long time. So I had
34     the idea that perhaps I could split it in to three parts, and people
35     could go outside for the parts they are not interested in, and that
36     then when I come to the end of a part I can say it's the end and
37     people can go out and I can send Jan Rynning out to bring in the other
38     people. (Someone else says: &ldquo;Janne, han trenger ingen
39     mike&rdquo; (translation: &ldquo;Janne, he doesn't need a
40     mike&rdquo;)). Jan, are you prepared to go running out to fetch the
41     other people? Jmr: I am looking for a microphone, and someone tells
42     me it is inside this locked box. Rms: Now in the old days at the AI
43     lab we would have taken a sledgehammer and cracked it open, and the
44     broken door would be a lesson to whoever had dared to lock up
45     something that people needed to use. Luckily however I used to study
46     Bulgarian singing, so I have no trouble managing without a
47     microphone.</p>
48    
49     <p>Anyway, should I set up this system to notify you about the parts
50     of the talk, or do you just like to sit through all of it? (Answer:
51     Yeaaah)</p>
52 webcvs 1.1
53     <p>When I started programming, it was 1969, and I did it in an IBM
54 yavor 1.8 laboratory in New York. After that I went to a school with a computer
55     science department that was probably like most of them. There were
56 webcvs 1.1 some professors that were in charge of what was supposed to be done,
57 yavor 1.8 and there were people who decided who could use what. There was a
58 webcvs 1.1 shortage of terminals for most people, but a lot of the professors had
59     terminals of their own in their offices, which was wasteful, but
60     typical of their attitude. When I visited the Artificial Intelligence
61     lab at MIT I found a spirit that was refreshingly different from that.
62     For example: there, the terminals was thought of as belonging to
63     everyone, and professors locked them up in their offices on pain of
64 yavor 1.8 finding their doors broken down. I was actually shown a cart with a
65 webcvs 1.1 big block of iron on it, that had been used to break down the door of
66     one professors office, when he had the gall to lock up a terminal.
67     There were very few terminals in those days, there was probably
68     something like five display terminals for the system, so if one of
69 yavor 1.8 them was locked up, it was a considerable disaster.</p>
70 webcvs 1.1
71     <p>In the years that followed I was inspired by that ideas, and many
72     times I would climb over ceilings or underneath floors to unlock rooms
73     that had machines in them that people needed to use, and I would
74     usually leave behind a note explaining to the people that they
75 yavor 1.8 shouldn't be so selfish as to lock the door. The people who locked
76     the door were basically considering only themselves. They had a
77     reason of course, there was something they thought might get stolen
78     and they wanted to lock it up, but they didn't care about the other
79     people they were affecting by locking up other things in the same
80     room. Almost every time this happened, once I brought it to their
81     attention, that it was not up to them alone whether that room should
82     be locked, they were able to find a compromise solution: some other
83     place to put the things they were worried about, a desk they could
84     lock, another little room. But the point is that people usually don't
85     bother to think about that. They have the idea: &ldquo;This room is
86     Mine, I can lock it, to hell with everyone else&rdquo;, and that is
87     exactly the spirit that we must teach them not to have.</p>
88 webcvs 1.1
89     <p>But this spirit of unlocking doors wasn't an isolated thing, it was
90 yavor 1.8 part of an entire way of life. The hackers at the AI lab were really
91 webcvs 1.1 enthusiastic about writing good programs, and interesting programs.
92     And it was because they were so eager to get more work done, that they
93     wouldn't put up with having the terminals locked up, or lots of other
94 yavor 1.8 things that people could do to obstruct useful work. The differences
95 webcvs 1.1 between people with high morale who really care about what they're
96 yavor 1.8 trying to do, and people who think of it as just a job. If it's just
97     a job, who cares if the people who hired you are so stupid they make
98     you sit and wait, it's their time, their money but not much gets done
99     in a place like that, and it's no fun to be in a place like that.</p>
100 webcvs 1.1
101     <p>Another thing that we didn't have at the AI lab was file
102 yavor 1.8 protection. There was no security at all on the computer. And we
103     very consciously wanted it that way. The hackers who wrote the
104     Incompatible Timesharing System decided that file protection was
105     usually used by a self-styled system manager to get power over
106     everyone else. They didn't want anyone to be able to get power over
107     them that way, so they didn't implement that kind of a feature. The
108     result was, that whenever something in the system was broken, you
109     could always fix it. You never had to sit there in frustration
110     because there was NO WAY, because you knew exactly what's wrong, and
111     somebody had decided they didn't trust you to do it. You don't have
112     to give up and go home, waiting for someone to come in in the morning
113     and fix the system when you know ten times as well as he does what
114     needs to be done.</p>
115 webcvs 1.1
116     <p>And we didn't let any professors or bosses decide what work was
117 yavor 1.8 going to be done either, because our job was to improve the system!
118     We talked to the users of course; if you don't do that you can't tell
119     what's needed. But after doing that, we were the ones best able to
120     see what kind of improvements were feasible, and we were always
121     talking to each other about how we'd like to see the system changed,
122     and what sort of neat ideas we'd seen in other systems and might be
123     able to use. So the result is that we had a smoothly functioning
124     anarchy, and after my experience there, I'm convinced that that is the
125     best way for people to live.</p>
126    
127     <p>Unfortunately the AI lab in that form was destroyed. For many
128     years we were afraid the AI lab would be destroyed by another lab at
129     MIT, the Lab for Computer Science, whose director was a sort of empire
130 webcvs 1.1 builder type, doing everything he could to get himself promoted within
131     MIT, and make his organization bigger, and he kept trying to cause the
132     AI lab to be made a part of his lab, and nobody wanted to do things
133     his way because he believed that people should obey orders and things
134 yavor 1.8 like that.</p>
135 webcvs 1.1
136     <p>But that danger we managed to defend against, only to be destroyed
137     by something we had never anticipated, and that was commercialism.
138     Around the early 80's the hackers suddenly found that there was now
139 yavor 1.8 commercial interest in what they were doing. It was possible to get
140     rich by working at a private company. All that was necessary was to
141 webcvs 1.1 stop sharing their work with the rest of the world and destroy the
142     MIT-AI lab, and this is what they did despite all the efforts I could
143 yavor 1.8 make to prevent them.</p>
144 webcvs 1.1
145     <p>Essentially all the competent programmers except for me, at the AI
146     lab were hired away, and this caused more than a momentary change, it
147     caused a permanent transformation because it broke the continuity of
148 yavor 1.8 the culture of hackers. New hackers were always attracted by the old
149 webcvs 1.1 hackers; there were the most fun computers and the people doing the
150     most interesting things, and also a spirit which was a great deal of
151 yavor 1.8 fun to be part of. Once these things were gone, there is nothing to
152 webcvs 1.1 recommend the place to anyone new, so new people stopped arriving.
153     There was no-one they could be inspired by, no-one that they could
154     learn those traditions from. In addition no-one to learn how to do
155     good programming from. With just a bunch of professors and graduate
156     students, who really don't know how to make a program work, you can't
157 yavor 1.8 learn to make good programs work. So the MIT AI lab that I loved is
158     gone and after a couple of years of fighting against the people who
159 webcvs 1.1 did it to try to punish them for it I decided that I should dedicate
160 yavor 1.8 my self to try to create a new community with that spirit.</p>
161 webcvs 1.1
162     <p>But one of the problems I had to face was the problem of
163 yavor 1.8 <a href="/philosophy/categories.html#ProprietarySoftware">proprietary
164     software</a>. For example one thing that happened at the lab, after
165     the hackers left, was that the machines and the software that we had
166     developed could no longer be maintained. The software of course
167     worked, and it continued to work if nobody changed it, but the
168     machines did not. The machines would break and there would be no-one
169     who could fix them and eventually they would be thrown out. In the old
170     days, yes we had service contracts for the machines, but it was
171     essentially a joke. That was a way of getting parts after the expert
172     hackers from the AI lab fixed the problem. Because if you let the
173     field-service person fix it it would take them days, and you didn't
174     want to do that, you wanted it to work. So, the people who knew how
175     to do those things would just go and fix it quickly, and since they
176     were ten times as competent as any field service person, they could do
177     a much better job. And then they would have the ruined boards, they
178     would just leave them there and tell the field service person
179     &ldquo;take these back and bring us some new ones&rdquo;.</p>
180 webcvs 1.1
181     <p>In the real old days our hackers used to modify the machines that
182 yavor 1.8 came from Digital also. For example, they built paging-boxes to put
183     on the PDP-10's. Nowadays I think there are some people here [in
184     Stockholm] who do such things too, but it was a pretty unusual thing in
185     those days. And the really old days, the beginning of the 1960's
186 webcvs 1.1 people used to modify computers adding all sorts of new instructions
187     and new fancy timesharing features, so that the PDP-1 at MIT by the
188     time it was retired in the mid-seventies had something like twice as
189     many instructions as it had when it was delivered by Digital in the
190     early sixties, and it had special hardware scheduler assisting
191     features and strange memory-mapping features making it possible to
192     assign individual hardware devices to particular timesharing jobs and
193 yavor 1.8 lots of things that I hardly really know about. I think they also
194 webcvs 1.1 built in some kind of extended addressing modes they added index
195     registers and indirect addressing, and they turned it essentially from
196 yavor 1.8 a weak machine into a semi-reasonable one.</p>
197 webcvs 1.1
198     <p>I guess it is one of the disadvantages of VLSI that it's no longer
199 yavor 1.8 so feasible to add instructions to your machines.</p>
200 webcvs 1.1
201     <p>The PDP-1 also had a very interesting feature, which is that it was
202 yavor 1.8 possible to interesting programs in very few instructions. Fewer that
203     any other machine since then. I believe for example that the famous
204     display hack &ldquo;munching squares&rdquo; which made squares that
205     get bigger and break up into lots of smaller squares which gets bigger
206     and break up into smaller squares. That was written in something like
207     five instructions on the PDP-1. And many other beautiful display
208     programs could be written in few instructions.</p>
209    
210     <p>So, that was the AI lab. But what was the culture of hackers like
211     aside from their anarchism? In the days of the PDP-1 only one person
212     could use the machine, at the beginning at least. Several years later
213 webcvs 1.1 they wrote a timesharing system, and they added lots of hardware for
214 yavor 1.8 it. But in the beginning you just had to sign up for some time. Now
215     of course the professors and the students working on official projects
216     would always come in during the day. So, the people who wanted to get
217 webcvs 1.1 lots of time would sign up for time at night when there were less
218     competition, and this created the custom of hackers working at night.
219     Even when there was timesharing it would still be easier to get time,
220 yavor 1.8 you could get more cycles at night, because there were fewer users.
221     So people who wanted to get lots of work done, would still come in at
222     night. But by then it began to be something else because you weren't
223 webcvs 1.1 alone, there were a few other hackers there too, and so it became a
224 yavor 1.8 social phenomenon. During the daytime if you came in, you could
225     expect to find professors and students who didn't really love the
226     machine, whereas if during the night you came in you would find
227     hackers. Therefore hackers came in at night to be with their culture.
228     And they developed other traditions such as getting Chinese food at
229     three in the morning. And I remember many sunrises seen from a car
230     coming back from Chinatown. It was actually a very beautiful thing to
231     see a sunrise, cause' that's such a calm time of day. It's a
232     wonderful time of day to get ready to go to bed. It's so nice to walk
233     home with the light just brightening and the birds starting to chirp,
234     you can get a real feeling of gentle satisfaction, of tranquility
235     about the work that you have done that night.</p>
236 webcvs 1.1
237     <p>Another tradition that we began was that of having places to sleep
238 yavor 1.8 at the lab. Ever since I first was there, there was always at least
239     one bed at the lab. And I may have done a little bit more living at
240 webcvs 1.1 the lab than most people because every year of two for some reason or
241     other I'd have no apartment and I would spend a few months living at
242 yavor 1.8 the lab. And I've always found it very comfortable, as well as nice
243     and cool in the summer. But it was not at all uncommon to find people
244 webcvs 1.1 falling asleep at the lab, again because of their enthusiasm; you stay
245     up as long as you possibly can hacking, because you just don't want to
246 yavor 1.8 stop. And then when you're completely exhausted, you climb over to
247     the nearest soft horizontal surface. A very informal atmosphere.</p>
248 webcvs 1.1
249     <p>But when the hackers all left the lab this caused a demographic
250     change, because the professors and the students who didn't really love
251     the machine were just as numerous as before, so they were now the
252 yavor 1.8 dominant party, and they were very scared. Without hackers to
253     maintain the system, they said, &ldquo;we're going to have a disaster,
254     we must have commercial software&rdquo;, and they said &ldquo;we can
255     expect the company to maintain it&rdquo;. It proved that they were
256     utterly wrong, but that's what they did.</p>
257 webcvs 1.1
258     <p>That was exactly when a new KL-10 system was supposed to arrive,
259     and the question was, would it run the Incompatible Timesharing System
260 yavor 1.8 or would it run digital's Twenex system. Once the hackers were gone
261 webcvs 1.1 who probably would have supported using ITS, the academic types chose
262     to run the commercial software, and this had several immediate
263 yavor 1.8 effects. Some of them weren't actually so immediate but they followed
264     inevitably as anyone who thought about it would see.</p>
265 webcvs 1.1
266     <p>One thing was that that software was much more poorly written, and
267     harder to understand; therefore making it harder for people to make
268 yavor 1.8 the changes that were in fact needed. Another was, that that software
269 webcvs 1.1 came with security, which had the inevitable effect of causing people
270 yavor 1.8 to cooperate with each other less. In the old days on ITS it was
271 webcvs 1.1 considered desirable that everyone could look at any file, change any
272 yavor 1.8 file, because we had reasons to. I remember one interesting scandal
273     where somebody sent a request for help in using Macsyma. Macsyma is a
274     symbolic algebra program that was developed at MIT. He sent to one of
275 webcvs 1.1 the people working on it a request for some help, and he got an answer
276 yavor 1.8 a few hours later from somebody else. He was horrified, he sent a
277     message &ldquo;so-and-so must be reading your mail, can it be that
278     mail files aren't properly protected on your system?&rdquo; &ldquo;Of
279     course, no file is protected on our system. What's the problem? You
280     got your answer sooner; why are you unhappy? Of course we read each
281     other's mail so we can find people like you and help them&rdquo;.
282     Some people just don't know when they're well off.</p>
283 webcvs 1.1
284     <p>But of course Twenex not only has security, and by default turns on
285     security, but it's also designed with the assumption that security is
286 yavor 1.8 in use. So there are lots of things that are very easy to do that can
287 webcvs 1.1 cause a lot of damage, and the only thing that would stop you from
288 yavor 1.8 doing them by accident, is security. On ITS we evolved other means of
289 webcvs 1.1 discouraging people from doing those things by accident, but on Twenex
290     you didn't have them because they assumed that there was going to be
291     be strict security in effect and only the bosses were going to have
292 yavor 1.8 the power to do them. So they didn't put in any other mechanism to
293     make it hard to do by accident. The result of this is that you can't
294 webcvs 1.1 just take Twenex and turn of the security and have what you'd really
295     like to have, and there were no longer the hackers to make the changes
296     to put in those other mechanisms, so people were forced to use the
297 yavor 1.8 security. And about six months after the machine was there they
298     started having some coups d'etat. That is, at first we had the
299 webcvs 1.1 assumption that everyone who worked for the lab was going to have the
300     wheel bit which gave full powers to override all security measures,
301     but some days you'd come in some afternoon and find out that the wheel
302 yavor 1.8 bits of just about everybody had been turned off.</p>
303 webcvs 1.1
304 yavor 1.8 <p>When I found out about those, I overthrew them. The first time, I
305 webcvs 1.1 happened to know the password of one of the people who was included
306     among the elite, so I was able to use that to turn everyone back on.
307     The second time he had changed his password, he had now changed his
308 yavor 1.8 sympathies, he was now part of the aristocratic party. So, I had to
309     bring the machine down and use non-timeshared DDT to poke around. I
310 webcvs 1.1 poked around in the monitor for a while, and eventually figured out
311     how to get it to load itself in and let me patch it, so that I could
312     turn off password checking and then I turned back on a whole bunch of
313 yavor 1.8 people's wheel bits and posted a system message. I have to explain
314 webcvs 1.1 that the name of this machine was OZ, so I posted a system message
315 yavor 1.8 saying: &ldquo;There was another attempt to seize power. So far the
316     aristocratic forces have been defeated &mdash; Radio Free OZ&rdquo;.
317     Later I discovered that &ldquo;Radio Free OZ&rdquo; is one of the
318     things used by Firesign Theater. I didn't know that at the time.</p>
319 webcvs 1.1
320     <p>But gradually things got worse and worse, it's just the nature of
321     the way the system had been constructed forced people to demand more
322 yavor 1.8 and more security. Until eventually I was forced to stop using the
323     machine, because I refused to have a password that was secret. Ever
324 webcvs 1.1 since passwords first appeared at the MIT-AI lab I had come to the
325     conclusion that to stand up for my belief, to follow my belief that
326     there should be no passwords, I should always make sure to have a
327     password that is as obvious as possible and I should tell everyone
328 yavor 1.8 what it is. Because I don't believe that it's really desirable to
329     have security on a computer, I shouldn't be willing to help uphold the
330     security regime. On the systems that permit it I use the &ldquo;empty
331     password&rdquo;, and on systems where that isn't allowed, or where
332     that means you can't log in at all from other places, things like
333     that, I use my login name as my password. It's about as obvious as
334     you can get. And when people point out that this way people might be
335     able to log in as me, i say &ldquo;yes that's the idea, somebody might
336     have a need to get some data from this machine. I want to make sure
337     that they aren't screwed by security&rdquo;.</p>
338 webcvs 1.1
339     <p>And an other thing that I always do is I always turn of all
340     protection on my directory and files, because from time to time I have
341     useful programs stored there and if there's a bug I want people to be
342 yavor 1.8 able to fix it.</p>
343 webcvs 1.1
344     <p>But that machine wasn't designed also to support the phenomenon
345 yavor 1.8 called &ldquo;tourism&rdquo;. Now &ldquo;tourism&rdquo; is a very old
346     tradition at the AI lab, that went along with our other forms of
347     anarchy, and that was that we'd let outsiders come and use the
348     machine. Now in the days where anybody could walk up to the machine
349     and log in as anything he pleased this was automatic: if you came and
350     visited, you could log in and you could work. Later on we formalized
351     this a little bit, as an accepted tradition specially when the Arpanet
352     began and people started connecting to our machines from all over the
353     country. Now what we'd hope for was that these people would actually
354     learn to program and they would start changing the operating system.
355     If you say this to the system manager anywhere else he'd be horrified.
356     If you'd suggest that any outsider might use the machine, he'll say
357     &ldquo;But what if he starts changing our system programs?&rdquo; But
358     for us, when an outsider started to change the system programs, that
359     meant he was showing a real interest in becoming a contributing member
360     of the community. We would always encourage them to do this.
361     Starting, of course, by writing new system utilities, small ones, and
362     we would look over what they had done and correct it, but then they
363     would move on to adding features to existing, large utilities. And
364     these are programs that have existed for ten years or perhaps fifteen
365     years, growing piece by piece as one craftsman after an other added
366     new features.</p>
367 webcvs 1.1
368     <p>Sort of like cities in France you might say, where you can see the
369     extremely old buildings with additions made a few hundred years later
370 yavor 1.8 all the way up to the present. Where in the field of computing, a
371     program that was started in 1965 is essentially that. So we would
372 webcvs 1.1 always hope for tourists to become system maintainers, and perhaps
373     then they would get hired, after they had already begun working on
374     system programs and shown us that they were capable of doing good
375 yavor 1.8 work.</p>
376 webcvs 1.1
377     <p>But the ITS machines had certain other features that helped prevent
378 yavor 1.8 this from getting out of hand, one of these was the &ldquo;spy&rdquo;
379     feature, where anybody could watch what anyone else was doing. And of
380     course tourists loved to spy, they think it's such a neat thing, it's
381     a little bit naughty you see, but the result is that if any tourist
382 webcvs 1.1 starts doing anything that causes trouble there's always somebody else
383 yavor 1.8 watching him. So pretty soon his friends would get very mad because
384 webcvs 1.1 they would know that the continued existence of tourism depended on
385 yavor 1.8 tourists being responsible. So usually there would be somebody who
386 webcvs 1.1 would know who the guy was, and we'd be able to let him leave us
387     alone. And if we couldn't, then what we would do was we would turn off
388     access from certain places completely, for a while, and when we turned
389 yavor 1.8 it back on, he would have gone away and forgotten about us. And so it
390     went on for years and years and years.</p>
391 webcvs 1.1
392     <p>But the Twenex system wasn't designed for this sort of thing, and
393     eventually they wouldn't tolerate me with my password that everybody
394     knew, tourists always logging in as me two or three at a time, so they
395 yavor 1.8 started flushing my account. And by that time I was mostly working on
396 webcvs 1.1 other machines anyway, so eventually I gave up and stopped ever
397 yavor 1.8 turning it on again. And that was that. I haven't logged in on that
398     machine as myself &hellip; [At this point RMS is interrupted by
399     tremendous applause] &hellip; for.</p>
400 webcvs 1.1
401     <p>But when they first got this Twenex system they had several changes
402 yavor 1.8 in mind that they wanted to make. Changes in the way security worked.
403 webcvs 1.1 They also wanted to have the machine on both the ARPA network and the
404     MIT-chaos network, and it turns out that they were unable to do this,
405     that they couldn't get anyone who was sufficiently competent to make
406 yavor 1.8 such changes. There was no longer talent available to do it, and it
407     was to hard to change. That system was much harder to understand,
408 webcvs 1.1 because it was to poorly written, and of course, Digital wouldn't do
409     these things, so their ideas that a commercial system would
410 yavor 1.8 essentially maintain it self, proved to be mistaken. They had just as
411 webcvs 1.1 much need for system hackers, but they had no longer the means to
412 yavor 1.8 entice system hackers. And nowadays at MIT there are more people
413 webcvs 1.1 interested in hacking on ITS, than there are interested in hacking on
414 yavor 1.8 Twenex.</p>
415 webcvs 1.1
416     <p>And the final reason why this is so, is that Twenex can't be
417 yavor 1.8 shared. Twenex is a proprietary program and you're only allowed to
418 webcvs 1.1 have the sources if you keep them secret in certain nasty ways, and
419 yavor 1.8 this gives them a bad flavor. Unless a person is oblivious (which
420     some people in computers are, there's some people who'll do anything
421     if it's fun for them, and won't think for a minute whether they're
422 webcvs 1.1 cooperating with anyone else, but you'd have to be pretty oblivious to
423     not to notice what a sad thing it is to work on a program like that,
424 yavor 1.8 and that is a further discouragement). And if that isn't enough there
425 webcvs 1.1 is the fact that every year or so they're going to give you a new
426     release full of 50 000 additional lines of code all written by
427 yavor 1.8 monkeys. Because they generally follow the &ldquo;million monkeys
428     typing, and eventually they'll come up with something useful&rdquo;
429     school of system development.</p>
430 webcvs 1.1
431     <p>It was clear to me from what I saw happening to these proprietary
432     systems that the only way we could have the spirit of the old AI lab
433 yavor 1.8 was to have a free operating system. To have a system made up of free
434     software which could be shared with anyone. So that we could invite
435     everyone to join in improving it. And that's what led up to the GNU
436     project. So I guess we've arrived at the second part of the talk.</p>
437 webcvs 1.1
438     <p>About three and a half year ago it was clear to me that I should
439 yavor 1.8 start developing a <a href="/philosophy/free-sw.html">free
440     software</a> system. I could see two possible kinds of systems to
441 webcvs 1.1 develop: One: A LISP-machine-like system, essentially a system just
442     like the MIT LISP machine system that had just been developed, except
443     free, and running on general purpose hardware, not on special LISP
444 yavor 1.8 machines. And the other possibility was a more conventional operating
445 webcvs 1.1 system, and it was clear to me that if I made a conventional operating
446 mattl 1.5 system, I should make it compatible with Unix, because that would make
447 yavor 1.8 it easy for people all around to switch to it. After a little while,
448     I concluded I should do the latter and the reason was, that I saw that
449 webcvs 1.1 you can't have something really like the LISP machine system on
450 yavor 1.8 general purpose hardware. The LISP machine system uses special
451 webcvs 1.1 hardware plus special writable microcode to gain both good execution
452     speed and robust detection of errors at runtime, specially data-type
453 yavor 1.8 errors. In order to make a LISP system run fast enough on ordinary
454 webcvs 1.1 hardware, you have to start making assumptions. Assuming that a
455     certain argument is the right type, and then if it isn't the system
456 yavor 1.8 just crashes.</p>
457 webcvs 1.1
458     <p>Of course you can put in explicit checks, you can write a robust
459     program if you want, but the fact is that you are going to get things
460     like memory addressing errors when you feed a function an argument of
461 yavor 1.8 the wrong type if you did NOT put in things to check for it.</p>
462 webcvs 1.1
463     <p>So the result is then that you need something running underneath
464     the LISP system to you catch these errors, and give the user the
465 yavor 1.8 ability to keep on running, and debug what happened to him. Finally I
466 webcvs 1.1 concluded that if I was going to have to have a operating system at a
467 yavor 1.8 lower level, I might as well make a good operating-system&mdash;that
468     it was a choice between an operating system and the lisp, or just an
469 webcvs 1.1 operating system; therefore I should do the operating system first,
470 yavor 1.8 and I should make it compatible with Unix. Finally when I realized
471 webcvs 1.1 that I could use the most amusing word in the English language as a
472 yavor 1.8 name for this system, it was clear which choice I had to make. And
473     that word is of course GNU, which stands for &ldquo;Gnu's Not
474     Unix&rdquo;. The recursive acronym is a very old tradition among the
475     hacker community around MIT. It started, I believe, with an editor
476     called TINT, which means: &ldquo;Tint Is Not Teco&rdquo;, and later on
477     it went through names such as &ldquo;SINE&rdquo; for &ldquo;SINE Is
478     Not Emacs&rdquo;, and FINE for &ldquo;Fine Is Not Emacs&rdquo;, and
479     EINE for &ldquo;Eine Is Not Emacs&rdquo;, and ZWEI for &ldquo;Zwei Was
480     Eine Initially&rdquo;, and ultimately now arrives at GNU.</p>
481 webcvs 1.1
482     <p>I would say that since the time about two and a half years ago when
483     I actually started working on GNU, I've done more than half of the
484 yavor 1.8 work. When I was getting ready to start working on the project, I
485 webcvs 1.1 first started looking around for what I could find already available
486 yavor 1.8 free. I found out about an interesting portable compiler system which
487     was called &ldquo;the free university compiler kit&rdquo;, and I
488     thought, with a name like that, perhaps I could have it. So, I sent a
489     message to the person who had developed it asking if he would give it
490     to the GNU project, and he said &ldquo;No, the university might be
491     free, but the software they develop isn't&rdquo;, but he then said
492     that he wanted to have a Unix compatible system too, and he wanted to
493     write a sort of kernel for it, so why didn't I then write the
494     utilities, and they could both be distributed with his proprietary
495     compiler, to encourage people to buy that compiler. And I thought
496     that this was despicable and so I told him that my first project would
497     be a compiler.</p>
498 webcvs 1.1
499     <p>I didn't really know much about optimizing compilers at the time,
500     because I'd never worked on one. But I got my hands on a compiler,
501     that I was told at the time was free. It was a compiler called PASTEL,
502 yavor 1.8 which the authors say means &ldquo;off-color PASCAL&rdquo;.</p>
503 webcvs 1.1
504     <p>Pastel was a very complicated language including features such as
505     parametrized types and explicit type parameters and many complicated
506 yavor 1.8 things. The compiler was of course written in this language, and had
507     many complicated features to optimize the use of these things. For
508     example: the type &ldquo;string&rdquo; in that language was a
509     parameterized type; you could say &ldquo;string(n)&rdquo; if you
510     wanted a string of a particular length; you could also just say
511     &ldquo;string&rdquo;, and the parameter would be determined from the
512     context. Now, strings are very important, and it is necessary for a
513     lot of constructs that use them to run fast, and this means that they
514     had to have a lot of features to detect such things as: when the
515     declared length of a string is an argument that is known to be
516     constant throughout the function, to save to save the value and
517     optimize the code they're going to produce, many complicated things.
518     But I did get to see in this compiler how to do automatic register
519     allocation, and some ideas about how to handle different sorts of
520     machines.</p>
521 webcvs 1.1
522     <p>Well, since this compiler already compiled PASTEL, what i needed to
523     do was add a front-end for C, which I did, and add a back-end for the
524 yavor 1.8 68000 which I expected to be my first target machine. But I ran into
525     a serious problem. Because the PASTEL language was defined not to
526 webcvs 1.1 require you to declare something before you used it, the declarations
527 yavor 1.8 and uses could be in any order, in other words: Pascal's
528     &ldquo;forward&rdquo; declaration was obsolete, because of this it was
529     necessary to read in an entire program, and keep it in core, and then
530     process it all at once. The result was that the intermediate storage
531     used in the compiler, the size of the memory needed, was proportional
532     to the size of your file. And this also included stack-space, you
533     needed gigantic amounts of stack space, and what I found as a result
534     was: that the 68000 system available to me could not run the compiler.
535     Because it was a horrible version of Unix that gave you a limit of
536     something like 16K words of stack, this despite the existence of six
537     megabytes in the machine, you could only have 16Kw of stack or
538     something like that. And of course to generate its conflict matrix to
539     see which temporary values conflicted, or was alive at the same time
540     as which others, it needed a quadratic matrix of bits, and that for
541     large functions that would get it to hundreds of thousands of bytes.
542     So i managed to debug the first pass of the ten or so passes of the
543     compiler, cross compiled on to that machine, and then found that the
544     second one could never run.</p>
545 webcvs 1.1
546     <p>While I was thinking about what to do about these problems and
547     wondering whether I should try to fix them or write entirely new
548 yavor 1.8 compiler, in a roundabout fashion I began working on GNU Emacs. GNU
549     Emacs is the main distributed portion of the GNU system. It's an
550 webcvs 1.1 extensible text editor a lot like the original emacs which I developed
551     ten years ago, except that this one uses actual LISP as its extension
552 yavor 1.8 language. The editor itself is implemented in C, as is the LISP
553 webcvs 1.1 interpreter, so the LISP interpreter is completely portable, and you
554 yavor 1.8 don't need a LISP system external to the editor. The editor contains
555 webcvs 1.1 its own LISP system, and all of the editing commands are written in
556     LISP so that they can provide you with examples to look at for how to
557     write your own editing commands, and things to start with, so you can
558 yavor 1.8 change them into the editing commands that you really want.</p>
559 webcvs 1.1
560     <p>In the summer of that year, about two years ago now, a friend of
561     mine told me that because of his work in early development of Gosling
562     Emacs, he had permission from Gosling in a message he had been sent to
563 yavor 1.8 distribute his version of that. Gosling originally had set up his
564 webcvs 1.1 Emacs and distributed it free and gotten many people to help develop
565     it, under the expectation based on Gosling's own words in his own
566     manual that he was going to follow the same spirit that I started with
567 yavor 1.8 the original Emacs. Then he stabbed everyone in the back by putting
568 webcvs 1.1 copyrights on it, making people promise not to redistribute it and
569 yavor 1.8 then selling it to a software-house. My later dealings with him
570 webcvs 1.1 personally showed that he was every bit as cowardly and despicable as
571 yavor 1.8 you would expect from that history.</p>
572 webcvs 1.1
573     <p>But in any case, my friend gave me this program, and my intention
574     was to change the editing commands at the top level to make them
575 yavor 1.8 compatible with the original Emacs that I was used to. And to make
576 webcvs 1.1 them handle all the combinations of numerical arguments and so on that
577     one might expect that they would handle and have all the features that
578 yavor 1.8 I wanted. But after a little bit of this, I discovered that the
579 webcvs 1.1 extension language of that editor, which is called MOCKLISP, was not
580 yavor 1.8 sufficient for the task. I found that that I had to replace it
581     immediately in order to do what I was planning to do. Before I had
582     had the idea of someday perhaps replacing MOCKLISP with real LISP, but
583     what I found out was that it had do be done first. Now, the reason
584 webcvs 1.1 that MOCKLISP is called MOCK, is that it has no kind of structure
585     datatype: it does not have LISP lists; it does not have any kind of
586 yavor 1.8 array. It also does not have LISP symbols, which are objects with
587 webcvs 1.1 names: for any particular name, there is only one object, so that you
588 yavor 1.8 can type in the name and you always get the same object back. And
589     this tremendously hampers the writing of many kinds of programs, you
590     have to do things by complicated string-manipulation that don't really
591     go that way.</p>
592 webcvs 1.1
593     <p>So I wrote a LISP interpreter and put it in in place of MOCKLISP
594     and in the process I found that I had to rewrite many of the editor's
595 yavor 1.8 internal data structures because I wanted them to be LISP objects. I
596 webcvs 1.1 wanted the interface between the LISP and the editor to be clean,
597     which means that objects such as editor buffers, sub-processes,
598     windows and buffer-positions, all have to be LISP objects, so that the
599     editor primitives that work on them are actually callable as LISP
600 yavor 1.8 functions with LISP data. This meant that I had to redesign the data
601 webcvs 1.1 formats of all those objects and rewrite all the functions that worked
602     on them, and the result was that after about six months I had
603 yavor 1.8 rewritten just about everything in the editor.</p>
604 webcvs 1.1
605     <p>In addition, because it is so hard to write things in MOCKLISP, all
606     the things that had been written in MOCKLISP were very unclean and by
607     rewriting them to take advantage of the power of real LISP, I could
608 yavor 1.8 make them much more powerful and much simpler and much faster. So I
609 webcvs 1.1 did that, and the result was that when I started distributing this
610 yavor 1.8 program only a small fraction remained from what I had received.</p>
611 webcvs 1.1
612     <p>At this point, the company that Gosling thinks he sold the program
613     to challenged my friend's right to distribute it, and the message was
614 yavor 1.8 on backup tapes, so he couldn't find it. And Gosling denied having
615     given him permission. And then a strange thing happened. He was
616 webcvs 1.1 negotiating with this company, and it seemed that the company mainly
617     was concerned with not having anything distributed that resembled what
618 yavor 1.8 they were distributing. See, he was still distributing, and the
619 webcvs 1.1 company where he worked, which is Megatest, was still distributing the
620     same thing he had given me, which really was an old version of Gosling
621     Emacs with his changes, and so he was going to make an agreement with
622     them where he would stop distributing that, and would switch to using
623     GNU Emacs, and they would then acknowledge that he really had the
624 yavor 1.8 permission after all, and then supposedly everyone would be happy.
625     And this company was talking to me about wanting to distribute GNU
626     Emacs, free of course, but also sell various sorts of supporting
627     assistance, and they wanted to hire me to help do the work. So it's
628     sort of strange that they then changed their mind and refused to sign
629     that agreement, and put up a message on the network saying that I
630     wasn't allowed to distribute the program. They didn't actually say
631     that they would do anything, they just said that it wasn't clear
632     whether they might ever someday do something. And this was enough to
633     scare people so that no one would use it any more, which is a sad
634     thing.</p>
635 webcvs 1.1
636     <p>(Sometimes I think that perhaps one of the best things I could do
637     with my life is: find a gigantic pile of proprietary software that was
638     a trade secret, and start handing out copies on a street corner so it
639     wouldn't be a trade secret any more, and perhaps that would be a much
640     more efficient way for me to give people new free software than
641     actually writing it myself; but everyone is too cowardly to even take
642 yavor 1.8 it.)</p>
643 webcvs 1.1
644     <p>So I was forced to rewrite all the rest that remained, and I did
645 yavor 1.8 that, it took me about a week and a half. So they won a tremendous
646     victory. And I certainly wouldn't ever cooperate with them in any
647     fashion after that.</p>
648 webcvs 1.1
649     <p>Then after GNU Emacs was reasonably stable, which took all in all
650     about a year and a half, I started getting back to other parts of the
651 yavor 1.8 system. I developed a debugger which I called GDB which is a symbolic
652     debugger for C code, which recently entered distribution. Now this
653 webcvs 1.1 debugger is to a large extent in the spirit of DBX, which is a
654 yavor 1.8 debugger that comes with Berkeley Unix. Commands consist of a word
655     that says what you want to do, followed by arguments. In this
656     debugger, commands can all be abbreviated, and the common commands
657     have single character abbreviations, but any unique abbreviation is
658     always allowed. There are extensible HELP facilities, you can type
659     HELP followed by any command or even subcommands, and get a lengthy
660     description of how to use that command. Of course you can type any
661     expression in C, and it will print the value.</p>
662 webcvs 1.1
663     <p>You can also do some things that are not usual in symbolic C
664     debuggers, for example: You can refer to any C datatype at any memory
665 yavor 1.8 address, either to examine the value, or to assign the value. So for
666 webcvs 1.1 example if you want to store a floating point value in a word at a
667 yavor 1.8 certain address, you just say: &ldquo;Give me the object of type FLOAT
668     or DOUBLE at this address&rdquo; and then assign that. Another thing
669     you can do is to examine all the values that have been examined in the
670     past. Every value examined gets put on the &ldquo;value
671     history&rdquo;. You can refer to any element in the history by its
672     numerical position, or you can easily refer to the last element with
673     just dollar-sign. And this makes it much easier to trace list
674     structure. If you have any kind of C structure that contains a
675     pointer to another one, you can do something like &ldquo;PRINT
676     *$.next&rdquo;, which says: &ldquo;Get the next field out of the last
677     thing you showed me, and then display the structure that points
678     at&rdquo;. And you can repeat that command, and each time you'll see
679     then next structure in the list. Whereas in every other C debugger
680     that I've seen the only way to do that is to type a longer command
681     each time. And when this is combined with the feature that just
682     typing carriage-return repeats the last command you issued, it becomes
683     very convenient. Just type carriage-return for each element in the
684     list you want to see.</p>
685 webcvs 1.1
686     <p>There are also explicitly settable variables in the debugger, any
687 yavor 1.8 number of them. You say dollar-sign followed by a name, and that is a
688     variable. You can assign these variables values of any C datatype and
689     then you can examine them later. Among the things that these are
690 webcvs 1.1 useful for are: If there's a particular value that you're going to
691     examine, and you know you are going to refer to it a lot, then rather
692 yavor 1.8 than remember its number in the history you might give it a name. You
693 webcvs 1.1 might also find use for them when you set conditional breakpoints.
694     Conditional breakpoints are a feature in many symbolic debuggers, you
695 yavor 1.8 say &ldquo;stop when you get to this point in the program, but only if
696     a certain expression is true&rdquo;. The variables in the debugger
697     allow you to compare a variable in the program with a previous value
698     of that variable that you saved in a debugger variable. Another thing
699     that they can be used for is for counting, because after all,
700     assignments are expressions in C, therefore you can do
701     &ldquo;$foo+=5&rdquo; to increment the value of &ldquo;$foo&rdquo; by
702     five, or just &ldquo;$foo++&rdquo; you can do. You can even do this
703     in a conditional breakpoint, so that's a cheap way of having it break
704     the tenth time the breakpoint is hit, you can do
705     &ldquo;$foo--==0&rdquo;. Does everyone follow that? Decrement foo
706     and if it's zero now, break. And then you set $foo to the number of
707     times you want it to skip, and you let it go. You can also use that
708     to examine elements of an array. Suppose you have an array of
709     pointers, you can then do:</p>
710    
711     <pre>PRINT X[$foo++]</pre>
712    
713     <p>But first you do</p>
714    
715     <pre>SET $foo=0</pre>
716    
717     <p>Okay, when you do that [points at the &ldquo;Print&rdquo;
718     expression], you get the zeroth element of X, and then you do it again
719     and it gets the first element, and suppose these are pointers to
720     structures, then you probably put an asterisk there [before the X in
721     the PRINT expression] and each time it prints the next structure
722     pointed to by the element of the array. And of course you can repeat
723     this command by typing carriage-return. If a single thing to repeat
724     is not enough, you can create a user-defined-command. You can say
725     &ldquo;Define Mumble&rdquo;, and then you give some lines of commands
726     and then you say &ldquo;end&rdquo;. And now there is defined a
727     &ldquo;Mumble&rdquo; command which will execute those lines. And it's
728     very useful to put these definitions in a command file. You can have
729     a command file in each directory, that will be loaded automatically
730     when you start the debugger with that as your working directory. So
731     for each program you can define a set of user defined commands to
732     access the data structures of that program in a useful way. You can
733     even provide documentation for your user-defined commands, so that
734     they get handled by the &ldquo;help&rdquo; features just like the
735     built-in commands.</p>
736 webcvs 1.1
737     <p>One other unusual thing in this debugger, is the ability to discard
738 yavor 1.8 frames from the stack. Because I believe it's important not just to
739     be able to examine what's happening in the program you're debugging,
740     but also to change it in any way conceivable. So that after you've
741     found one problem and you know what's wrong, you can fix things up as
742     if that code were correct and find the next bug without having to
743     recompile your program first. This means not only being able to
744     change the data areas in you program flexibly, but also being able to
745     change the flow of control. In this debugger you can change the flow
746     of control very directly by saying:</p>
747    
748     <pre>SET $PC=&lt;some number&gt;</pre>
749 webcvs 1.1
750 yavor 1.8 <p>So you can set the program counter. You can also set the stack
751     pointer, or you can say</p>
752 webcvs 1.1
753 yavor 1.8 <pre>SET $SP+=&lt;something&gt;</pre>
754 webcvs 1.1
755 yavor 1.8 <p>If you want to increment the stack pointer a certain amount. But
756     in addition you can also tell it to start at a particular line in the
757 webcvs 1.1 program, you can set the program counter to a particular source line.
758     But what if you find that you called a function by mistake and you
759 yavor 1.8 didn't really want to call that function at all? Say, that function
760     is so screwed up that what you really want to do is get back out of it
761     and do by hand what that function should have done. For that you can
762     use the &ldquo;RETURN&rdquo; command. You select a stack frame and you
763     say &ldquo;RETURN&rdquo;, and it causes that stack-frame, and all the
764     ones within it, to be discarded as if that function were returning
765     right now, and you can also specify the value it should return. This
766     does not continue execution; it pretends that return happened and then
767     stops the program again, so you can continue changing other
768     things.</p>
769 webcvs 1.1
770     <p>And with all these things put together you thus have pretty good
771 yavor 1.8 control over what's going on in a program.</p>
772 webcvs 1.1
773     <p>In addition one slightly amusing thing: C has string constants,
774     what happens if you use a string constant in an expression that you're
775 yavor 1.8 computing in the debugger? It has to create a string in the program
776     you were debugging. Well it does. It sets up a call to MALLOC in
777     that debugged program, lets MALLOC run, and then gets control back.
778     Thus it invisibly finds a place to put the string constant.</p>
779 webcvs 1.1
780     <p>Eventually when this debugger is running on the real GNU system, I
781     intend to put in facilities in the debugger to examine all of the
782 yavor 1.8 internal status of the process that is running underneath it. For
783 webcvs 1.1 example to examine the status of the memory map, which pages exist,
784     which are readable, which are writable, and to examine the inferior
785 yavor 1.8 program's terminal status. There already is a bit of a command; this
786 mattl 1.5 debugger, unlike the debuggers on Unix, keeps the terminal status
787 webcvs 1.1 completely separate for the debugger and the program you're debugging,
788     so that it works with programs that run in raw mode, it works with
789     programs that do interrupt driven input, and there's also a command
790     that enables you to find out something about the terminal settings at
791 yavor 1.8 the program you're debugging is actually using. I believe that in
792 webcvs 1.1 general a debugger should allow you to find out everything that's
793 yavor 1.8 going on in the inferior process.</p>
794 webcvs 1.1
795     <p>There are two other main parts of the GNU system that already
796 yavor 1.8 exist. One is the new C compiler, and one is the TRIX kernel.</p>
797 webcvs 1.1
798     <p>The new C compiler is something that I've written this year since
799 yavor 1.8 last spring. I finally decided that I'd have to throw out PASTEL.
800     This C compiler uses some ideas taken from PASTEL, and some ideas
801     taken from the University of Arizona Portable Optimizer. Their
802     interesting idea was to handle many different kinds of machines by
803     generating simple instructions, and then combining several simple
804     instructions into a complicated instruction when the target machine
805     permits it. In order to do this uniformly, they represent they
806     represent the instructions in algebraic notation. For example, an ADD
807     instruction might be represented like this:</p>
808 webcvs 1.1
809     <pre>
810     r[3]=r[2]+4
811     </pre>
812 yavor 1.8
813 webcvs 1.1 <p>This would be a representation inside their compiler for
814     instruction to take the contents of register two, add four and store
815 yavor 1.8 it in register three. In this fashion you can represent any possible
816     instruction for any machine. So they actually did represent all the
817 webcvs 1.1 instructions this way and then when it came time to try to combine
818     them, they would do this by substituting one expression into another,
819     making a more complicated algebraic expression for the combined
820 yavor 1.8 instruction.</p>
821 webcvs 1.1
822     <p>Sometimes depending on whether the result of the first instruction
823     had any further use, it might be necessary to make a combined
824 yavor 1.8 instruction with two assignment operators. One for this value
825 webcvs 1.1 [pointing at ???]and another one with this value [pointing at ???]
826 yavor 1.8 substituted in it with what came from the second instruction. But if
827 webcvs 1.1 this value was only used that once, you could eliminate it after
828 yavor 1.8 substituting for it; there'd be no need to compute it any more. So
829 webcvs 1.1 it's actually somewhat complicated doing the substitution correctly
830     checking that the intervening instructions don't change any of these
831 yavor 1.8 values and other such things. When you support such things as
832 webcvs 1.1 auto-increment and auto-decrement addressing, which I do now, you also
833     have to do various checks for those to check for situations where what
834 yavor 1.8 you're doing is not value preserving.</p>
835 webcvs 1.1
836     <p>But after checking all those things, then you take the substituted
837     combined expression and put it through a pattern matcher, which
838     recognizes all the valid instructions of your chosen target machine.
839     And if it's recognized, then you replace those two instructions with
840 yavor 1.8 the combined one, otherwise you leave them alone. And their technique
841 webcvs 1.1 is to combine two or three instructions related by data flow in this
842 yavor 1.8 way.</p>
843 webcvs 1.1
844     <p>In the Arizona compiler, they actually represent things as text
845 yavor 1.8 strings like this, and their compiler is horribly slow. First I had
846 webcvs 1.1 some idea of just using their compiler and making changes in it, but
847     it was clear to me I had to rewrite it entirely to get the speed I
848     wanted, so I have rewritten it to use list structure representations
849 yavor 1.8 for all these expressions. Things like this:</p>
850 webcvs 1.1
851     <pre>
852     (set (reg 2)
853     (+ (reg 2)
854     (int 4)))
855     </pre>
856    
857     <p>This looks like Lisp, but the semantics of these are not quite
858 yavor 1.8 LISP, because each symbol here is one recognized specially. There's a
859 webcvs 1.1 particular fixed set of these symbols that is defined, all the ones
860 yavor 1.8 you need. And each one has a particular pattern of types of
861     arguments, for example: &ldquo;reg&rdquo; always has an integer,
862     because registers are numbered, but &ldquo;+&rdquo; takes two
863     subexpressions, and so on. And with each of these expressions is also
864     a data type which says essentially whether it's fixed or floating and
865     how many bytes long it is. It could be extended to handle other
866     things too if you needed to.</p>
867 webcvs 1.1
868     <p>And the way I do automatic register allocation is that when I
869     initially generate this code, and when I do the combination and all
870     those things, for every variable that conceivably go into a register,
871     I allocate what I call a pseudo register number, which is a number
872     starting at sixteen or whatever is to high to be a real register for
873 yavor 1.8 your target machine. So the real registers are numbered zero to
874     fifteen or whatever and above that comes pseudo registers. And then
875 webcvs 1.1 one of the last parts of the compiler consists of going through and
876 yavor 1.8 changing all the pseudo registers to real registers. Again it makes a
877 webcvs 1.1 conflict graph, it sees which pseudo registers are alive at the same
878     point and they of course can't go in the same real register, and then
879     it tries packing pseudo registers into real registers as much as it
880 yavor 1.8 can, ordering them by priority of how important they are.</p>
881 webcvs 1.1
882     <p>And finally it then has to correct the code for various problems,
883     such as happen when there were pseudo registers that don't fit in the
884 yavor 1.8 real registers, that had to be put into stack slots instead. When
885     that happens on certain machines, some of the instructions may become
886     invalid. For example on the 68000 you can add a register into memory
887 webcvs 1.1 and you can add memory into register, but you can't add one memory
888 yavor 1.8 location into another. So if you have an ADD instruction, and you're
889 webcvs 1.1 headed for a 68000 and both of the things end up in memory, it's not
890 yavor 1.8 valid. So this final pass goes through and copies things into
891     registers and out of registers as needed to correct those
892     problems.</p>
893 webcvs 1.1
894 yavor 1.8 <p>Problems can also arise with index registers. If you're trying to
895 webcvs 1.1 index by something, then most of the time that code will become
896     invalid if the index quantity is in memory, except in a few cases on
897 yavor 1.8 some machines where you can it with indirect addressing. In the cases
898 webcvs 1.1 when you're doing auto-increment on an index register you may have to
899     copy the value into a register, do the instruction, and then copy the
900 yavor 1.8 incremented value back to the memory slot where it really lives.</p>
901 webcvs 1.1
902     <p>There's got room for a lot of hair, and I've not finished
903 yavor 1.8 implementing all the hair needed to make really fully efficient.</p>
904 webcvs 1.1
905     <p>This compiler currently works by having a parser which turns C code
906     into effectively a syntax tree annotated with C datatype information.
907     Then another pass which looks at that tree and generates code like
908 yavor 1.8 this [LISP like code]. Then several optimization passes. One to
909     handle things like jumps across jumps, jumps to jumps, jumps to .+1,
910     all of which can be immediately simplified. Then a common
911     subexpression recognizer, then finding basic blocks, and performing
912 webcvs 1.1 dataflow-analysis, so that it can tell for each instruction which
913 yavor 1.8 values are used in that instruction and never used afterward. And
914     also linking each instruction to the places where the values it uses
915     were generated, so if I have one instruction which generates pseudo
916 webcvs 1.1 register R[28], and then another instruction later which uses R[28]
917     and it's the first place to use R[28], I make the second one point
918     back to the first one, and this pointer is used to control the
919 yavor 1.8 attempts to combine the instructions. You don't combine adjacent
920 webcvs 1.1 instructions, you combine an instruction that uses a value with the
921 yavor 1.8 instruction that produced that value. Even if there are other
922 webcvs 1.1 instructions in between, they don't matter for this, you just have to
923 yavor 1.8 check them to make sure they don't do anything to interfere. Then
924 webcvs 1.1 after the combiner comes the dynamic register allocator, and finally
925 yavor 1.8 something to convert it into assembly code.</p>
926 webcvs 1.1
927     <p>In the Arizona compiler the instruction recognizer was generated
928 yavor 1.8 with LEX. Your machine description was simply a LEX program that LEX
929 webcvs 1.1 would turn into a C function to recognize valid instructions as
930 yavor 1.8 strings. What I have is instead a special purpose decision tree
931     that's generated from a machine description written in this syntax as
932     if it were LISP. And this recognizer is used as a subroutine for many
933     different parts of the compiler.</p>
934 webcvs 1.1
935 yavor 1.8 <p>Currently this compiler runs about as fast as PCC. It runs
936 webcvs 1.1 noticeably faster if you tell it not to do the hairy register
937     allocation, in which case it allocates registers the same way as PCC
938 yavor 1.8 does. In its super hairy mode it does a much better job of allocating
939 webcvs 1.1 registers than PCC, and I observe that for the VAX it generates the
940 yavor 1.8 best code I've seen from any C compiler on the VAX.</p>
941 webcvs 1.1
942 yavor 1.8 <p>For the 68000 the code is still not ideal. I can see places where
943 webcvs 1.1 early stages do things that are not the best, because it can't fully
944 yavor 1.8 look ahead. It has a choice in an early stage, and it does the thing
945 webcvs 1.1 that it thinks is going to be best, but really if it did the other
946     one, a later stage is actually smart enough to do something even
947 yavor 1.8 better. But the early stage doesn't know what the later stage is
948     going to do, so I have more work to do on some of these things.</p>
949 webcvs 1.1
950     <p>Sometimes this causes it to free up registers unnecessarily.
951     Because when things wind up in memory and it needs to copy them into
952 yavor 1.8 registers, it needs to get registers to copy them into. This means
953 webcvs 1.1 taking registers that it has already allocated to, and kicking those
954 yavor 1.8 temporary quantities out to stack slots. Of course this may
955     invalidate more instructions now that those things are in memory, not
956     registers, so it has to check again and again. Sometimes it thinks it
957     has to copy things to registers and really it isn't going to have to,
958     so it may free up too many things and thus not use all the registers
959     that it could.</p>
960 webcvs 1.1
961     <p>(Question: Do you have a code generator for 32000?) Not yet, but
962     again, it's not a code generator it's just a machine description that
963 yavor 1.8 you need. A list of all the machine instructions described in this
964     [LISP like] form. So in fact aside from the work of implementing the
965 webcvs 1.1 idea of constraints on which arguments can be in registers and which
966     kind of registers, which is something which was needed for the 68000
967     and was not needed for the VAX, the work of porting this compiler from
968 yavor 1.8 the VAX to the 68000 just took a few days. So it's very easy to
969     port.</p>
970 webcvs 1.1
971     <p>The compiler currently generates assembler code and it can generate
972     debugging information either in the format that DBX wants, or in the
973 yavor 1.8 special internal format of GDB. I'd say the only work needed on this
974     compiler is in three areas. One: I have to add a
975     &ldquo;profiling&rdquo; feature, like the one that the Unix compilers
976     have. Two: I have to make these register allocation things smarter,
977     so that I can stop seeing stupid things appearing in the output. And
978     three: There are various bugs, things that doesn't handle correctly
979     yet, although it has compiled itself correctly. I expect this will
980     just take a few months, and then I will release the compiler.</p>
981 webcvs 1.1
982     <p>The other sizable part of the system that exist, is the kernel.
983     (Question: A pause?) Ah, yeah I guess we've forgotten about breaks.
984     Why don't I finish talking about the kernel, which should only take
985 yavor 1.8 about five minutes, and then we can take a break.</p>
986 webcvs 1.1
987     <p>Now, for the kernel I am planning to use a system called TRIX (it
988     doesn't stand for anything that I know of) which was developed as a
989 yavor 1.8 research project at MIT. This system is based on Remote Procedure
990     Call. Thus programs are called domains. Each domain is a address
991     space and various capabilities, and a capability is none other than
992     the ability to call a domain. Any domain can create &ldquo;capability
993     ports&rdquo; to call it, and then it can pass these ports to other
994     domains, and there is no difference between calling the system and
995     calling another user domain. In fact you can't tell which you have.
996     Thus it is very easy to have devices implemented by other user
997     programs. A file system could be implemented by a user program,
998     transparently. It's also transparent to communicate across networks.
999     You think that you're directly calling another domain, but really
1000     you're calling the network server domain. It takes the information
1001     that you gave in the call, and passes this over the network to another
1002     server program which then calls the domain that you're trying to talk
1003     to. But you and that other domain see this as happening
1004     invisibly.</p>
1005 webcvs 1.1
1006 mattl 1.5 <p>The TRIX kernel runs, and it has a certain limited amount of Unix
1007 yavor 1.8 compatibility, but it needs a lot more. Currently it has a file
1008     system that uses the same structure on disk as the ancient Unix file
1009     system does. This made it easier to debug the thing, because they
1010     could set up the files with Unix, and then they could run TRIX, but
1011     that file system doesn't have any of the features that I believe are
1012     necessary.</p>
1013 webcvs 1.1
1014     <p>Features that I believe must be added include: Version numbers,
1015     undeletion, information on when and how and where the file was backed
1016 yavor 1.8 up on tape, atomic superseding of files. I believe that it is good
1017 webcvs 1.1 that in Unix when a file is being written, you can already look at
1018 yavor 1.8 what's going there, so for example, you can use &ldquo;tail&rdquo; to
1019     see how far the thing got, that's very nice. And if the program dies,
1020     having partly written the file, you can see what it produced. These
1021     things are all good, but, that partly written output should not ever
1022     be taken for the complete output that you expected to have eventually.
1023     The previous version of that should continue to be visible and used by
1024 webcvs 1.1 everyone who tries to use it, until the new version is completely and
1025 yavor 1.8 correctly made. This means that the new version should be visible in
1026     the file system but not under the name it is supposed to have. It
1027     should get renamed when it's finished. Which is by the way what
1028 webcvs 1.1 happens in ITS, although there each user program has to do this
1029 yavor 1.8 explicitly. For Unix compatibility with the user programs, it has to
1030     happen invisibly.</p>
1031 webcvs 1.1
1032     <p>I have a weird hairy scheme to try to make version numbers fit with
1033 yavor 1.8 the existing Unix user programs. And this is the idea that you
1034     specify a file name leaving the version number implicit, if you just
1035     specify the name in the ordinary way. But if you wish to specify a
1036     name exactly, either because you want to state explicitly what version
1037     to use, or because you don't want versions at all, you put a point at
1038     the end of it. Thus if you give the filename &ldquo;FOO&rdquo; it
1039     means &ldquo;Search the versions that exists for FOO and take the
1040     latest one&rdquo;. But if you say &ldquo;FOO.&rdquo; it means
1041     &ldquo;use exactly the name FOO and none other&rdquo;. If you say
1042     &ldquo;FOO.3.&rdquo; it says &ldquo;use exactly the name FOO.3 &rdquo;
1043     which of course is version three of FOO and none other. On output, if
1044     you just say &ldquo;FOO&rdquo;, it will eventually create a new
1045     version of &ldquo;FOO&rdquo;, but if you say &ldquo;FOO.&rdquo; it
1046     will write a file named exactly &ldquo;FOO&rdquo;.</p>
1047 webcvs 1.1
1048     <p>Now there's some challenges involved in working out all the details
1049     in this, and seeing whether there are any lingering problems, whether
1050 mattl 1.5 some Unix software actually breaks despite feeding them names with
1051 yavor 1.8 points in them and so on, to try to make it get the same behavior.</p>
1052 webcvs 1.1
1053     <p>I would expect that when you open a file for output whose name ends
1054     in a point, you should actually open that name right away, so you get
1055 mattl 1.5 the so you get the same Unix behavior, the partially written output is
1056 yavor 1.8 immediately visible, whereas when you output a name that doesn't end
1057     in a point, the new version should appear when you close it, and only
1058     if you close it explicitly. If it gets closed because the job dies, or
1059 webcvs 1.1 because the system crashes or anything like that, it should be under a
1060 yavor 1.8 different name.</p>
1061 webcvs 1.1
1062 yavor 1.8 <p>And this idea can be connected up to &ldquo;star matching&rdquo;,
1063     by saying that a name that doesn't end in a point is matched against
1064     all the names without their version numbers, so if a certain directory
1065     has files like this:</p>
1066 webcvs 1.1
1067     <pre>
1068     foo.1 foo.2 bar.8
1069     </pre>
1070    
1071 yavor 1.8 <p>If I say &ldquo;*&rdquo;, that's equivalent to</p>
1072 webcvs 1.1 <pre>
1073     foo bar
1074     </pre>
1075    
1076 yavor 1.8 <p>because it takes all the names and gets rid of their versions, and
1077     takes all the distinct ones. But if I say &ldquo;*.&rdquo; then it
1078     takes all the exact names, puts a point after each one, and matches
1079     against them. So this gives me all the names for all the individual
1080     versions that exist. And similar, you can see the difference between
1081     &ldquo;*.c&rdquo; and &ldquo;*.c.&rdquo; this [the first] would give
1082     you essentially versionless references to all the &ldquo;.c&rdquo;
1083     files, whereas this [the second] will give you all the versions
1084     &hellip; well this actually wouldn't, you'd have to say
1085     &ldquo;*.c.*.&rdquo;. I haven't worked out the details here.</p>
1086 webcvs 1.1
1087     <p>Another thing, that isn't a user visible feature and is certainly
1088 yavor 1.8 compatible to put in, is failsafeness in the file system. Namely, by
1089 webcvs 1.1 writing all the information on disk in the proper order, arranging
1090 yavor 1.8 that you can press &ldquo;halt&rdquo; at any time without ever
1091     corrupting thereby the file system on disk. It is so well known how
1092     to do this, I can't imagine why anyone would neglect it. Another idea
1093     is further redundant information. I'm not sure whether I'll do this
1094     or not, but I have ideas for how to store in each file all of its
1095     names, and thus make it possible if any directory on disk is lost, to
1096     reconstruct it from the rest of the contents of the disk.</p>
1097    
1098     <p>Also I think I know how to make it possible to atomically update
1099     any portion of a file. Thus if you want to replace a certain subrange
1100     of a file with new data in such a fashion that any attempt to read the
1101     file will either see only the old data, or only the new data. I
1102     believe I can do that, without any locking even.</p>
1103    
1104     <p>For network support, I intend eventually to implement TCP/IP for
1105     this system. I also think it's possible to use KERMIT to get
1106     something effectively equivalent to UUCP.</p>
1107    
1108     <p>A shell I believe has already been written. It has two modes, one
1109     imitating the BOURNE shell, and one imitating the C-shell in the same
1110     program. I have not received a copy of it yet, and I don't know how
1111     much work I'll have to do on it. Also many other utilities exists. A
1112     MAKE exists, LS, there's a YACC replacement called BISON which is
1113     being distributed. Something pretty close to a LEX exits, but it's
1114     not totally compatible, it needs some work. And, in general what
1115     remains to be done is much less that what's been done, but we still
1116     need lots of people to help out.</p>
1117    
1118     <p>People always ask me &ldquo;When is it going to be finished?&rdquo;
1119     Of course I can't know when it's going to be finished, but that's the
1120     wrong question to ask me. If you were planning to pay for it, it
1121     would make sense for you to want to know exactly what are you going to
1122     get and when. But since you're not going to pay for it, the right
1123     question for you to ask is &ldquo;how can you help make it get
1124     finished sooner?&rdquo; I have a list of projects, it is on a file at
1125     MIT, and people who are interested in helping could send me mail at
1126     this Internet address, and I will send back a list of projects. (I
1127     wonder if this is will work (looking at the chalk)). Is this
1128     readable? This is &ldquo;RMS@GNU.ORG&rdquo; (just follow the bouncing
1129     ball.) And now let's take a break, and after the break, I will say
1130     some really controversial things. So don't leave now. If you leave
1131     now, you're going to miss the real experience.</p>
1132 webcvs 1.1
1133 yavor 1.8 <p><strong>
1134 webcvs 1.1 [Here we had a 15 min. break]
1135 yavor 1.8 </strong></p>
1136 webcvs 1.1
1137 yavor 1.8 <p>I've been asked to announce how you can get copies of GNU software.
1138     Well, one way of course is if you know a friend who has a copy, you
1139     can copy it, but if you don't know a friend who has a copy, and you're
1140     not on the Internet, you can't FTP it, then you can always order a
1141     distribution tape, and send some money to the Free Software
1142     Foundation. Of course free programs is not the same thing as free
1143     distribution. I'll explain this in detail later.</p>
1144    
1145     <p>Here I have an EMACS manual, of the nicely printed variety. It has
1146     been phototypeset and then offset printed. Although you can also
1147     print it yourself from the sources that come in the EMACS
1148     distribution, you can get these copies from the Free Software
1149     Foundation. You can come afterwards and look at this and also this
1150     contains an order for you might copy some information from, and this
1151     [front] picture has also sometimes been enjoyed. This [pointing at a
1152     figure being chased by RMS riding a gnu] is a scared software hoarder,
1153     I'll be talking about him in a moment.</p>
1154    
1155     <p>Software is a relatively new phenomenon. People started
1156     distributing software perhaps thirty years ago. It was only about
1157     twenty years ago that someone had the idea of making a business about
1158     it. It was an area with no tradition about how people did things, or
1159     what rights anybody had. And there were several ideas for what other
1160     areas of life you might bring traditions from by analogy.</p>
1161    
1162     <p>One analogy that is liked by a lot of professors in Europe, is that
1163     between programs and mathematics. A program is sort of a large
1164     formula. Now, traditionally nobody can own a mathematical formula.
1165     Anybody can copy them and use them.</p>
1166    
1167     <p>The analogy that's most meaningful to ordinary people is with
1168     recipes. If you think about it, the thing that you have in ordinary
1169     life that's most like program is a recipe, it's instructions for doing
1170     something. The differences come because a recipe is followed by a
1171     person, not by a machine automatically. It's true there's no
1172     difference between source code and object code for a recipe, but it's
1173     still the closest thing. And no-one is allowed to own a recipe.</p>
1174    
1175     <p>But the analogy that was chosen was the analogy with books, which
1176     have copyright. And why was this choice made? Because the people
1177     that had the most to gain from making that particular choice were
1178     allowed to make the decision. The people who wrote the programs, not
1179     the people who used the programs, were allowed to decide, and they
1180     decided in a completely selfish fashion, and as a result they've
1181     turned the field of programming into an ugly one.</p>
1182    
1183     <p>When I entered the field, when I started working at MIT in 1971,
1184     the idea that programs we developed might not be shared was not even
1185     discussed. And the same was Stanford and CMU, and everyone, and even
1186     DIGITAL. The operating system from DIGITAL at that time was free.
1187     And every so often I got pieces of program from DIGITAL system such as
1188     a PDP-11 cross assembler, and I ported it to run on ITS, and added
1189     lots of features. It was no copyright on that program.</p>
1190    
1191     <p>It was only in the late seventies that this began to change. I was
1192     extremely impressed by the sharing spirit that we had. We were doing
1193     something that we hoped was useful and were happy if people could use
1194     it. So when I developed the first EMACS, and people wanted to start
1195     use it outside of MIT, I said that it belongs to the EMACS
1196     &ldquo;Commune&rdquo;, that in order to use EMACS you had to be a
1197     member of the commune, and that meant that you had the responsibility
1198     to contribute all the improvements that you made. All the
1199     improvements to the original EMACS had to be sent back to me so that I
1200     could incorporate them into newer versions of EMACS, so that everyone
1201     in the community could benefit from them.</p>
1202    
1203     <p>But this started to be destroyed when SCRIBE was developed at CMU,
1204     and then was sold to a company. This was very disturbing to a lot of
1205     us at many universities, because we saw that this was a temptation
1206     placed in front of everyone, that it was so profitable to be
1207     uncooperative and those of us who still believed in cooperation had no
1208     weapon to try to compel people to cooperate with us. Clearly, one
1209     after another, people would defect and stop cooperating with the rest
1210     of society, until only those of us with very strong consciences would
1211     still cooperate. And that's what happened.</p>
1212    
1213     <p>The field of programming has now become an ugly one, where everyone
1214     cynically thinks about how much money he is going to get by not being
1215     nice to the other people in the field, and to the users.</p>
1216    
1217     <p>I want to establish that the practice of owning software is both
1218     materially wasteful, spiritually harmful to society and evil. All
1219     these three things being interrelated. It's spiritually harmful
1220     because it involves every member of society who comes in contact with
1221     computers in a practice that is obviously materially wasteful to other
1222     people. And every time you do something for your own good, which you
1223     know is hurting other people more that it helps you, you have to
1224     become cynical in order to support such a thing in your mind. And
1225     it's evil because it is deliberately wasting the work done in society
1226     and causing social decay.</p>
1227    
1228     <p>First I want to explain the kinds of harm that are done by attempts
1229     to own software and other information that's generally useful, then
1230     I'll go on to rebut the arguments made to support that practice, and
1231     then I want to talk about how to fight that phenomenon, and how I'm
1232     fighting it.</p>
1233 webcvs 1.1
1234     <p>The idea of owning information is harmful in three different
1235 yavor 1.8 levels. Materially harmful on three different levels, and each kind
1236     of material harm has a corresponding spiritual harm.</p>
1237 webcvs 1.1
1238 yavor 1.8 <p>The first level is just that it discourages the use of the program,
1239     it causes fewer people to use the program, but in fact it takes no
1240     less work to make a program for fewer people to use. When you have a
1241     price on the use of a program this an incentive, that's the word these
1242     software hoarders love to use, the price is an incentive for people
1243     not to use the program, and this is a waste. If for example only half
1244     as many people use the program because it has a price on it, the
1245     program has been half wasted. The same amount of work has produced
1246     only half as much wealth.</p>
1247    
1248     <p>Now in fact, you don't have to do anything special to cause a
1249     program to get around to all the people who want to use it, because
1250     they can copy it themselves perfectly well, and it will get to
1251     everyone. All you have to do after you've written the program is to
1252     sit back and let people do what they want to do. But that's not what
1253     happens; instead somebody deliberately tries to obstruct the sharing
1254     of the program, and in fact, he doesn't just try to obstruct it, he
1255     tries to pressure other people into helping. Whenever a user signs a
1256     nondisclosure agreement he has essentially sold out his fellow users.
1257     Instead of following the golden rule and saying, &ldquo;I like this
1258     program, my neighbor would like the program, I want us both to have
1259     it&rdquo;, instead he said, &ldquo;Yeah, give it to me. To hell with
1260     my neighbor! I'll help you keep it away from my neighbor, just give
1261     it to me!&rdquo;, and that spirit is what does the spiritual harm.
1262     That attitude of saying, &ldquo;To hell with my neighbors, give ME a
1263     copy&rdquo;.</p>
1264    
1265     <p>After I ran into people saying they wouldn't let me have copies of
1266     something, because they had signed some secrecy agreement, then when
1267     somebody asked me to sign a thing like that I knew it was wrong. I
1268     couldn't do to somebody else the thing that had made me so angry when
1269     it was done to me.</p>
1270    
1271     <p>But this is just one of the levels of harm. The second level of
1272     harm comes when people want to change the program, because no program
1273     is really right for all the people who would like to use it. Just as
1274     people like to vary recipes, putting in less salt say, or maybe they
1275     like to add some green peppers, so people also need to change programs
1276     in order to get the effects that they need.</p>
1277    
1278     <p>Now, the software owners don't really care whether people can
1279     change the program or not, but it's useful for their ends to prevent
1280     people. Generally when software is proprietary you can't get the
1281     sources, you can't change it, and this causes a lot of wasted work by
1282     programmers, as well as a lot of frustration by users. For example: I
1283     had a friend who told me how she worked for many months at a bank
1284     where she was a programmer, writing a new program. Now, there was a
1285     commercially available program that was almost right, but it was just
1286     not quite the thing they needed, and in fact as it was it was useless
1287     for them. The amount of change it would have taken to make it do what
1288     they needed was probably small, but because the sources of that
1289     program were not available, that was impossible. She had to start
1290     over from scratch and waste a lot of work. And we can only speculate
1291     about what fraction of all the programmers in the world are wasting
1292     their time in this fashion.</p>
1293    
1294     <p>And then there is also the situation where a program is adequate
1295     make do, but it's uncomfortable. For example: The first time we had a
1296     graphics printer at MIT, we wrote the software ourselves, and we put
1297     in lots of nice features, for example it would send you a message when
1298     your job had finished printing, and it would send you a message if the
1299     printer ran out of paper and you had a job in the queue, and lots of
1300     other things that were what we wanted. We then got a much nicer
1301 webcvs 1.1 graphic printer, one of the first laser printers, but then the
1302 yavor 1.8 software was supplied by Xerox, and we couldn't change it. They
1303     wouldn't put in these features, and we couldn't, so we had to make do
1304     with things that &ldquo;half worked&rdquo;. And it was very
1305     frustrating to know that we were ready, willing and able to fix it,
1306     but weren't permitted. We were sabotaged.</p>
1307    
1308     <p>And then there are all the people who use computers and say that
1309     the computers are a mystery to them, they don't know they work. Well
1310     how can they possibly know? They can't read the programs they're
1311     using. The only way people learn how programs should be written, or
1312     how programs do what they do, is by reading the source code.</p>
1313    
1314     <p>So I could only wonder whether the idea of the user who just thinks
1315     of the computer as a tool is not actually a self-fulfilling prophecy,
1316     a result of the practice of keeping source code secret.</p>
1317    
1318     <p>Now the spiritual harm that goes with this kind of material harm,
1319     is in the spirit of self-sufficiency. When a person spends a lot of
1320     time using a computer system, the configuration of that computer
1321     system becomes the city that he lives in. Just as the way our houses
1322     and furniture are laid out, determines what it's like for us to live
1323     among them, so that the computer system that we use, and if we can't
1324     change the computer system that we use to suit us, then our lives are
1325     really under the control of others. And a person who sees this
1326     becomes in a certain way demoralized: &ldquo;It's no use trying to
1327     change those things, they're always going to be bad. No point even
1328     hassling it. I'll just put in my time and &hellip; when it's over
1329     I'll go away and try not to think about it any more&rdquo;. That kind
1330     of spirit, that unenthusiasm is what results from not being permitted
1331     to make things better when you have feelings of public spirit.</p>
1332    
1333     <p>The third level of harm is in the interaction between software
1334     developers themselves. Because any field of knowledge advance most
1335     when people can build on the work of others, but ownership of
1336     information is explicitly designed to prevent anyone else to doing
1337     that. If people could build on other people's work, then the
1338     ownership would become unclear, so they make sure each new entry to
1339     the field has to start from the beginning, and thus they greatly slow
1340     down the advance of the field.</p>
1341 webcvs 1.1
1342     <p>So we can see: How many spreadsheet systems were made all by
1343 yavor 1.8 different companies, all without any benefit of understanding how it
1344     was done before? Yes it's true, the first spreadsheet written wasn't
1345     perfect. It probably only ran on certain kinds of computers, and it
1346     didn't do some things in the best possible way. So there were various
1347     reasons why certain people would want to rewrite parts of it. But if
1348     they had only to rewrite the parts that they really wanted to improve,
1349     that would have made for a lot less work. You may see how to make one
1350     aspect of a system better, you may not see how to make another aspect
1351     of the same system any better, in fact you might have a great deal of
1352     trouble doing it as well. Now if you could take the part that you
1353     like and redo only the part that you have an inspiration for, you
1354     could have a system that's better in all ways, with much less work
1355     than it now takes to write a completely new system. And we all know
1356     that system can often benefit from being completely rewritten, but
1357     that's only if you can read the old one first.</p>
1358    
1359     <p>Thus, the people in the programming field have evolved a way of
1360     wasting a lot of their time and thus making apparently a need for more
1361     programmers than we really need. Why is there a programmer shortage?
1362     Because with intellectual property programmers have arranged to waste
1363     half the work they do, so we seem to need twice as many programmers.
1364     And so, when people point to the system of intellectual property and
1365     say &ldquo;look at the large employment statistics, look at how big
1366     this industry is&rdquo; what that really proves is that people are
1367     wasting a lot of money and time. If they talk about looking for ways
1368     to improve programmer productivity, they're happy to do this if it
1369     involves superior tools, but to improve programmer productivity by
1370     getting rid of the explicit things that is done to reduce programmer
1371     productivity, that they're against. Because that would reduce the
1372     number of programmers employed. There's something a little bit
1373     schizophrenic there.</p>
1374    
1375     <p>And the spiritual harm that corresponds to this level of material
1376     harm is to the spirit of scientific cooperation, which used to be so
1377     strong that scientists even in countries that were at war would
1378     continue cooperating, because they knew that what they were doing had
1379     nothing to do with the war, it was just for the long term benefit of
1380     humanity. Nowadays, people don't care about the long term benefit of
1381     humanity any more.</p>
1382    
1383     <p>To get an idea of what it's like to obstruct the use of a program,
1384     let's imagine that we had a sandwich, that you could eat, and it
1385     wouldn't be consumed. You could eat it, and another person could eat
1386     it, the same sandwich, any number of times, and it would always remain
1387     just as nourishing as originally.</p>
1388    
1389     <p>The best thing to do, the thing that we ought to do with this
1390     sandwich is carry it around to the places where there are hungry
1391     people; bringing it to as many mouths as possible, so that it feeds as
1392     many people as possible. By all means, we should not have a price to
1393     eat from this sandwich, because then people would not afford to eat
1394     it, and it would be wasted.</p>
1395    
1396     <p>The program is like this sandwich, but even more so because it can
1397     be in many different places at once being eaten, used by different
1398     people one after the other. It is as if this sandwich was enough to
1399     feed everyone, everywhere, forever, and that were not allowed to
1400     happen, because someone believed he should own it.</p>
1401    
1402     <p>Now, the people who believe that they can own programs, generally
1403     put forward two lines of argument for this. The first one is &ldquo;I
1404     wrote it, it is a child of my spirit, my heart, my soul is in this.
1405     How can anyone take it away from me? Wherever it goes it's mine,
1406     mine, MINE!!&rdquo;. Well, it's sort of strange that most of them
1407     signs agreements saying it belongs to the company they work for.</p>
1408    
1409     <p>So I believe this is one of the things you can easily talk yourself
1410     into believing is important, but you can just as easily convince
1411     yourself it doesn't matter at all.</p>
1412    
1413     <p>Usually, these people use this argument to demand the right to
1414     control even how people can change a program. They say: &ldquo;Nobody
1415     should be able to mess up my work of art&rdquo;. Well, imagine that
1416     the person who invented a dish that you plan to cook had the right to
1417     control how you can cook it, because it's his work of art. You want
1418     to leave out the salt, but he says &ldquo;Oh, no. I designed this
1419     dish, and it has to have this much salt!&rdquo; &ldquo;But my doctor
1420     says it's not safe for me to eat salt. What can I do?&rdquo;.</p>
1421    
1422     <p>Clearly, the person who is using the program is much closer to the
1423     event. The use of the program affects him very directly, whereas it
1424     only has a sort of abstract relation to the person who wrote the
1425     program. And therefore, for the sake of giving people as much control
1426     as possible over their own lives, it has to be the user who decides
1427     those things.</p>
1428 webcvs 1.1
1429     <p>The second line of argument they make is the economic one.
1430 yavor 1.8 &ldquo;How will people get payed to program?&rdquo; they say, and
1431     there's a little bit of real issue in this. But a lot of what they
1432     say is confusion. And the confusion is, it's not at all the same to
1433     say &ldquo;if we want to have a lot of people programming we must
1434 webcvs 1.1 arrange for them not to need to make a living in any other
1435 yavor 1.8 fashion&rdquo; on the one hand, and to say &ldquo;We need to have the
1436     current system, you need to get rich by programming&rdquo; on the
1437     other hand. There's a big difference between just making a living
1438     wage and making the kind of money programmers, at least in the US make
1439     nowadays. They always say: &ldquo;How will I eat?&rdquo;, but the
1440     problem is not really how &ldquo;Will he eat?&rdquo;, but &ldquo;How
1441     will he eat sushi?&rdquo;. &ldquo;How will I have a roof over my
1442     head?&rdquo;, but the real problem is &ldquo;How can he afford a
1443     condo?&rdquo;.</p>
1444    
1445     <p>The current system were chosen by the people who invest in software
1446     development, because it gives them the possibility of making the most
1447     possible money, not because it's the only way anyone can ever come up
1448     with money to support a system development effort. In fact, even as
1449     recently as ten and fifteen years ago it was common to support
1450     software development in other ways. For example, those DIGITAL
1451     operating systems that were free, even in the early seventies, were
1452     developed by people who were paid for their work. Many useful
1453     programs has been developed at universities. Nowadays those programs
1454     are often sold, but fifteen years ago they were usually free, yet the
1455     people were paid for their work.</p>
1456    
1457     <p>When you have something like a program, like an infinite sandwich,
1458     like a road, which has to be built once, but once it is built it
1459     pretty much doesn't matter how much you use it, there's no cost in
1460     using it, generally it's better if we don't put any price on using it.
1461     And there are plenty of those things that we develop now, and pay
1462     people to build. For example, all the streets out there. It's very
1463     easy to find people who will program without being paid; it really is
1464     impossible to find people who will build streets without being paid.
1465     Building streets is not creative and fun like programming. But we
1466     have plenty of streets out there, we do come up with the money to pay
1467     them, and it's much better the way we do it than if if we said:
1468     &ldquo;Let's have companies go and build streets and put toll booths
1469     up, and then every time you turn another street corner, you pay
1470     another toll. And then the companies that picked the good places to
1471     put their streets, they will be profitable, and the others will go
1472     bankrupt.&rdquo;</p>
1473    
1474     <p>There's a funny thing that happens whenever someone comes up with a
1475     way of making lots of money by hoarding something. Until that time
1476     you've probably had lots and lots of people who were really
1477     enthusiastic and eager to work in that field, the only sort of
1478     question is how can they get any sort of livelihood at all. If we
1479     think of mathematicians for example, there are a lot more people who
1480     want to be pure mathematicians than there is funding for anybody to be
1481     pure mathematicians. And even when you do get funding, you don't get
1482     very much, they don't live well. And for musicians it's even worse.
1483     I saw a statistics for how much the average musician, the average
1484     person devoting most of his time trying to be a musician, in
1485     Massachusetts made; it was something like half the median income or
1486     less. It is barely enough to live on, it's difficult. But there are
1487     lots of them trying to do that. And then, somehow when it gets
1488     generally possible to get very well paid to do something, all those
1489     people disappear, and people start saying &ldquo;nobody will do it
1490     unless they get paid that well&rdquo;.</p>
1491    
1492     <p>And I saw this happen in the field of programming. The very same
1493     people who used to work at the AI lab and get payed very little and
1494     love it, now wouldn't dream of working for less than fifty thousand
1495     dollars a year. What happened? When you dangle before people the
1496     possibility of making lots of money, when they see that other people
1497     doing similar work are getting paid that much money, they feel that
1498     they should get the same, and thus no-one is willing to continue the
1499     old way. And it's easy after this has happened to think that paying
1500     people a lot of money is the only way it could be, but that's not so.
1501     If the possibility of making a lots of money did not exist, you would
1502     have people who would accept doing it for a little money, specially
1503     when it's something that is creative and fun.</p>
1504    
1505     <p>Now I saw the unique world of the AI lab destroyed, and I saw that
1506     selling software was an intrinsic part of what had destroyed it, and I
1507     saw also, as I explained before, how you need to have free software in
1508     order to have a community like that. But then thinking about it more,
1509     I realized all these ways in which hoarding software hurts all of
1510     society, most specially by pressuring people to sell out their
1511     neighbors and causing social decay. The same spirit that leads people
1512     to watch while somebody in the street is getting stabbed and not tell
1513     anyone. The spirit that we can see so many companies all around us
1514     displaying all the time. And it was clear to me I had a choice, I
1515     could become part of that world and feel unhappy about what I was
1516     doing with my life, or I could decide to fight it. So I decided to
1517     fight it. I've dedicated my career to try to rebuild the software
1518     sharing community, to trying to put an end to the phenomenon of
1519     hoarding generally useful information. And the GNU system is a means
1520     to this end. It is a technical means to a social end. With the GNU
1521     system, I hope to vaccinate the users against the threat of the
1522     software hoarders.</p>
1523    
1524     <p>Right now the hoarders essentially claims the power to render a
1525     person's computer useless. There used to be people in the US, most
1526     commonly about fifty years ago, they were in the Mafia, they would go
1527     up to stores and bars, especially bars when bars were illegal of
1528     course. They would go up and say: &ldquo;A lot of places around here
1529     have been burning down lately. You wouldn't want your place to burn
1530     down, would you? Well we can protect you from fires, you just have to
1531     pay us a thousand dollars a month, and we'll make sure you don't have
1532     a fire here&rdquo;. And this was called &ldquo;the protection
1533     racket&rdquo;. Now we have something where a person says &ldquo;You
1534     got a nice computer there, and you've got some programs there that
1535     you're using. Well, if you don't want those programs to disappear, if
1536     you don't want the police to come after you, you better pay me a
1537     thousand dollars, and I'll give you a copy of this program with a
1538     license&rdquo;, and this is called &ldquo;the software protection
1539     racket&rdquo;.</p>
1540    
1541     <p>Really all they're doing is interfering with everybody else doing
1542     what needs to be done, but they're pretending as much to them selves
1543     as to the rest of us, that they are providing a useful function.
1544     Well, what I hope is that when that software Mafia guy comes up and
1545     says, &ldquo;You want those programs to disappear on your
1546     computer?&rdquo;, the user can say &ldquo;I'm not afraid of you any
1547     more. I have this free GNU software, and there's nothing you can do
1548     to me now.&rdquo;</p>
1549    
1550     <p>Now, one of the justifications people sometimes offer for owning
1551     software, is the idea of giving people an incentive to produce things.
1552     I support the idea of private enterprise in general, and the idea of
1553     hope to make money by producing things that other people like to use,
1554     but it's going haywire in the field of software now. Producing a
1555     proprietary program is not the same contribution to society as
1556     producing the same program and letting it be free. Because writing
1557     the program is just a potential contribution to society. The real
1558     contribution to the wealth of society happens only when the program is
1559     used. And if you prevent the program from being used, the
1560     contribution doesn't actually happen. So, the contribution that
1561     society needs is not these proprietary programs that everyone has such
1562     an incentive to make, the contribution we really want is free
1563     software, so our society is going haywire because it gives people an
1564     incentive to do what is not very useful, and no incentive to do what
1565     is useful. Thus the basic idea of private enterprise is not being
1566     followed, and you could even say that the society is neurotic. After
1567     all when an individual encourages in others behavior that is not good
1568     for that individual we call this a neurosis. Here society is behaving
1569     in that fashion, encouraging programmers to do things that is not good
1570     for society.</p>
1571    
1572     <p>I'm unusual. I'd rather believe that I'm a good member of society
1573     and that I'm contributing something, than feel that I'm ripping
1574     society off successfully, and that's why I've decided to do what I
1575     have done. But every one is at least a little bit bothered by the
1576     feeling that they are getting paid to do what's not really useful. So
1577     let's stop defending this idea of incentives to do the wrong thing and
1578     let's at least try to come up with arrangements to encourage people to
1579     do the right thing, which is to make free software.</p>
1580    
1581     <p>Thank you.</p>
1582    
1583     <p><strong>[After this RMS answered questions for about an hour. I
1584     have only included a very few of the questions and answers in this
1585     version. The tape was bad, and I didn't have the time to do a proper
1586     job on all of it]
1587     </strong></p>
1588 webcvs 1.1
1589     <dl>
1590 yavor 1.9 <dt><b>Q</b>: Has anyone tried to make problems for you?</dt>
1591 webcvs 1.1
1592 yavor 1.9 <dd><b>A:</b> The only time anyone has tried to make a problem for me
1593 yavor 1.8 was those owners, so called, self-styled owners of Gosling Emacs.
1594     Aside from that they have no grounds to do so, so there is not much
1595     they can do. By the way, I'd like to call everyone's attention to the
1596     way in which people use language to try to encourage people to think
1597     certain thoughts and not think of others. Much of the terminology
1598     current in the field was chosen by the self-styled software owners to
1599     try to encourage you to try to make you see software as similar to
1600     material objects that are property, and overlook the differences. The
1601     most flagrant example of this is the term &ldquo;pirate&rdquo;.
1602     Please refuse to use to use the term &ldquo;pirate&rdquo; to describe
1603     somebody who wishes to share software with his neighbor like a good
1604 webcvs 1.1 citizen.
1605    
1606 yavor 1.8 <p>I forgot to tell you this: The idea of copyright was invented after
1607     the printing press. In ancient times authors copied from each other
1608     freely, and this was not considered wrong, and it was even very
1609     useful: The only way certain authors works have survived, even in
1610     fragments, is because some of them were quoted at length in other
1611     works which have survived.</p>
1612    
1613     <p>This was because books were copied one copy at the time. It was
1614     ten times as hard to make ten copies as it was to make one copy. Then
1615     the printing press was invented, and this didn't prevent people from
1616     copying books by hand, but by comparison with printing them, copying
1617     by hand was so unpleasant that it might as well have been
1618     impossible.</p>
1619    
1620     <p>When books could only be made by mass production, copyright then
1621     started to make sense and it also did not take away the freedom of the
1622     reading public. As a member of the public who didn't own a printing
1623     press, you couldn't copy a book anyway. So you weren't losing any
1624     freedom just because there were copyrights. Thus copyright was
1625     invented, and made sense morally because of a technological change.
1626     Now the reverse change is happening. Individual copying of
1627     information is becoming better and better, and we can see that the
1628     ultimate progress of technology is to make it possible to copy any
1629     kind of information. [break due to turning of tape]</p>
1630 webcvs 1.1
1631 yavor 1.8 <p>Thus we are back in the same situation as in the ancient world
1632     where copyright did not make sense.</p>
1633 webcvs 1.1
1634     <p>If we consider our idea of property, they come from material
1635 yavor 1.8 objects. Material objects satisfy a conservation law, pretty much.
1636     Yes it's true I can break a chalk in half, that's not it, and it gets
1637     worn down, it gets consumed. But basically this is one chair
1638     [pointing at a chair]. I can't just sort of snap my finger and have
1639     two chairs. The only way to get another one is to build it just the
1640     way the first one was build. It takes more raw materials, it takes
1641     more work of production, and our ideas of property were evolved to
1642     make moral sense to fit these facts.</p>
1643    
1644     <p>For a piece of information that anyone can copy, the facts are
1645     different. And therefore the moral attitudes that fit are different.
1646     Our moral attitudes comes from thinking how much it will help people
1647     and how much it will hurt people to do certain things. With a material
1648     object, you can come and take away this chair, but you couldn't come
1649     and copy it. And if you took away the chair, it wouldn't be producing
1650     anything, so there's no excuse. I somebody says: &ldquo;I did the work
1651     to make this one chair, and only one person can have this chair, it
1652     might as well me&rdquo;, we might as well say: &ldquo;Yeah, that makes
1653     sense&rdquo;. When a person says: &ldquo;I carved the bits on this
1654     disk, only one person can have this disk, so don't you dare take it
1655     away from me&rdquo;, well that also make sense. If only one person is
1656     going to have the disk, it might as well be the guy who owns that
1657     disk.</p>
1658    
1659     <p>But when somebody else comes up and says: &ldquo;I'm not going to
1660     hurt your disk, I'm just gonna magically make another one just like it
1661     and then I'll take it away and then you can go on using this disk just
1662     the same as before&rdquo;, well it's the same as if somebody said:
1663     &ldquo;I've got a magic chair copier. You can keep on enjoying your
1664     chair, sitting in it, having it always there when you want it, but
1665     I'll have a chair too&rdquo;. That's good.</p>
1666    
1667     <p>If people don't have to build, they can just snap their fingers and
1668     duplicate them, that's wonderful. But this change in technology
1669     doesn't suit the people who wants to be able to own individual copies
1670     and can get money for individual copies. That's an idea that only
1671     fits conserved objects. So they do their best to render programs like
1672     material objects. Have you wondered why, when you go to the software
1673     store and buy a copy of a program it comes in something that looks
1674     like a book? They want people to think as if they were getting a
1675     material object, not to realize what they have really got in the form
1676     of digital copyable data.</p>
1677    
1678     <p>What is a computer after all but a universal machine? You've
1679     probably studied universal Turing machines, the machines that can
1680     imitate any other machine. The reason a universal machine is so good
1681     is because you can make it imitate any other machine and the
1682     directions can be copied and changed, exactly the things you can't do
1683     with a material object. And those are is exactly what the software
1684     hoarders want to stop the public from doing. They want to have the
1685     benefit of the change in technology, to universal machines, but they
1686     don't want the public to get that benefit.</p>
1687    
1688     <p>Essentially they are trying to preserve the &ldquo;material object
1689     age&rdquo;, but it's gone, and we should get our ideas of right and
1690     wrong in sync with the actual facts of the world we live in.</p>
1691     </dd>
1692    
1693 yavor 1.9 <dt><b>Q</b>: So it boils down to ownership of information. Do you
1694 yavor 1.8 think there are any instances where, you opinion, it's right to own
1695 yavor 1.9 information?</dt>
1696 yavor 1.8
1697 yavor 1.9 <dd><b>A:</b> With information that's not generally useful, or is of a
1698     personal nature, I would say it's OK. In other words not information
1699 yavor 1.8 about how to do things, but information about what you intend to do.
1700     Information whose only value to others is speculative, that is they
1701     can take some money away from you, but they can't actually create
1702     anything with it. It's perfectly reasonable I'd say to keep that sort
1703     of thing secret and controlled.
1704    
1705     <p>But in terms of creative information, information that people can
1706     use or enjoy, and that will be used and enjoyed more the more people
1707     who have it, always we should encourage the copying.</p>
1708     </dd>
1709     </dl>
1710    
1711     </div>
1712    
1713     <!--#include virtual="/server/footer.html" -->
1714     <div id="footer">
1715    
1716     <p>
1717     Please send FSF &amp; GNU inquiries to
1718     <a href="mailto:gnu@gnu.org"><em>gnu@gnu.org</em></a>.
1719     There are also <a href="/contact/">other ways to contact</a>
1720     the FSF.
1721     <br />
1722     Please send broken links and other corrections or suggestions to
1723     <a href="mailto:webmasters@gnu.org"><em>webmasters@gnu.org</em></a>.
1724     </p>
1725    
1726     <p>
1727     Please see the
1728     <a href="/server/standards/README.translations.html">Translations
1729     README</a> for information on coordinating and submitting
1730     translations of this article.
1731     </p>
1732    
1733     <p>
1734     Copyright &copy; 1987 Richard Stallman and Bjrn Remseth
1735     </p>
1736     <p>
1737     Permission is granted to make and distribute verbatim copies of this
1738 webcvs 1.1 transcript as long as the copyright and this permission notice appear.
1739 yavor 1.8 </p>
1740    
1741     <p>
1742 webcvs 1.1 Updated:
1743 paulv 1.2 <!-- timestamp start -->
1744 yavor 1.9 $Date: 2008/07/18 17:57:38 $
1745 paulv 1.2 <!-- timestamp end -->
1746 yavor 1.8 </p>
1747     </div>
1748    
1749     <div id="translations">
1750     <h4>Translations of this page</h4>
1751    
1752     <!-- Please keep this list alphabetical by language code. -->
1753     <!-- Comment what the language is for each type, i.e. de is German. -->
1754     <!-- Write the language name in its own language (Deutsch) in the text. -->
1755     <!-- If you add a new language here, please -->
1756     <!-- advise web-translators@gnu.org and add it to -->
1757     <!-- - /home/www/html/server/standards/README.translations.html -->
1758     <!-- - one of the lists under the section "Translations Underway" -->
1759     <!-- - if there is a translation team, you also have to add an alias -->
1760     <!-- to mail.gnu.org:/com/mailer/aliases -->
1761     <!-- Please also check you have the language code right; see: -->
1762     <!-- http://www.loc.gov/standards/iso639-2/php/code_list.php -->
1763     <!-- If the 2-letter ISO 639-1 code is not available, -->
1764     <!-- use the 3-letter ISO 639-2. -->
1765     <!-- Please use W3C normative character entities. -->
1766    
1767     <ul class="translations-list">
1768     <!-- English -->
1769     <li><a href="/philosophy/stallman-kth.html">English</a>&nbsp;[en]</li>
1770     <!-- French -->
1771     <li><a href="/philosophy/stallman-kth.fr.html">Fran&#x00e7;ais</a>&nbsp;[fr]</li>
1772     <!-- Japanese -->
1773     <li><a href="/philosophy/stallman-kth.ja.html">&#x65e5;&#x672c;&#x8a9e;</a>&nbsp;[ja]</li>
1774     </ul>
1775     </div>
1776     </div>
1777     </body>
1778     </html>

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26