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ögskolan (Royal Institute of |
8 |
|
|
Technology))<br /> |
9 |
|
|
Stockholm, Sweden</em></p> |
10 |
|
|
<p><em> |
11 |
|
|
Arranged by the student society<br /> |
12 |
|
|
“Datorföreningen Stacken”<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 ‘doing |
21 |
|
|
violence to the original speech’.]</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: “Janne, han trenger ingen |
39 |
|
|
mike” (translation: “Janne, he doesn't need a |
40 |
|
|
mike”)). 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: “This room is |
86 |
|
|
Mine, I can lock it, to hell with everyone else”, 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 |
|
|
“take these back and bring us some new ones”.</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 “munching squares” 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, “we're going to have a disaster, |
254 |
|
|
we must have commercial software”, and they said “we can |
255 |
|
|
expect the company to maintain it”. 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 “so-and-so must be reading your mail, can it be that |
278 |
|
|
mail files aren't properly protected on your system?” “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”. |
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: “There was another attempt to seize power. So far the |
316 |
|
|
aristocratic forces have been defeated — Radio Free OZ”. |
317 |
|
|
Later I discovered that “Radio Free OZ” 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 “empty |
331 |
|
|
password”, 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 “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”.</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 “tourism”. Now “tourism” 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 |
|
|
“But what if he starts changing our system programs?” 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 “spy” |
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 … [At this point RMS is interrupted by |
399 |
|
|
tremendous applause] … 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 “million monkeys |
428 |
|
|
typing, and eventually they'll come up with something useful” |
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—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 “Gnu's Not |
474 |
|
|
Unix”. 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: “Tint Is Not Teco”, and later on |
477 |
|
|
it went through names such as “SINE” for “SINE Is |
478 |
|
|
Not Emacs”, and FINE for “Fine Is Not Emacs”, and |
479 |
|
|
EINE for “Eine Is Not Emacs”, and ZWEI for “Zwei Was |
480 |
|
|
Eine Initially”, 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 “the free university compiler kit”, 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 “No, the university might be |
491 |
|
|
free, but the software they develop isn't”, 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 “off-color PASCAL”.</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 “string” in that language was a |
509 |
|
|
parameterized type; you could say “string(n)” if you |
510 |
|
|
wanted a string of a particular length; you could also just say |
511 |
|
|
“string”, 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 |
|
|
“forward” 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: “Give me the object of type FLOAT |
668 |
|
|
or DOUBLE at this address” 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 “value |
671 |
|
|
history”. 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 “PRINT |
676 |
|
|
*$.next”, which says: “Get the next field out of the last |
677 |
|
|
thing you showed me, and then display the structure that points |
678 |
|
|
at”. 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 “stop when you get to this point in the program, but only if |
696 |
|
|
a certain expression is true”. 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 |
|
|
“$foo+=5” to increment the value of “$foo” by |
702 |
|
|
five, or just “$foo++” 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 |
|
|
“$foo--==0”. 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 “Print” |
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 |
|
|
“Define Mumble”, and then you give some lines of commands |
726 |
|
|
and then you say “end”. And now there is defined a |
727 |
|
|
“Mumble” 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 “help” 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=<some number></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+=<something></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 “RETURN” command. You select a stack frame and you |
763 |
|
|
say “RETURN”, 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: “reg” always has an integer, |
862 |
|
|
because registers are numbered, but “+” 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 |
|
|
“profiling” 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 “capability |
993 |
|
|
ports” 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 “tail” 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 “FOO” it |
1039 |
|
|
means “Search the versions that exists for FOO and take the |
1040 |
|
|
latest one”. But if you say “FOO.” it means |
1041 |
|
|
“use exactly the name FOO and none other”. If you say |
1042 |
|
|
“FOO.3.” it says “use exactly the name FOO.3 ” |
1043 |
|
|
which of course is version three of FOO and none other. On output, if |
1044 |
|
|
you just say “FOO”, it will eventually create a new |
1045 |
|
|
version of “FOO”, but if you say “FOO.” it |
1046 |
|
|
will write a file named exactly “FOO”.</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 “star matching”, |
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 “*”, 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 “*.” 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 |
|
|
“*.c” and “*.c.” this [the first] would give |
1082 |
|
|
you essentially versionless references to all the “.c” |
1083 |
|
|
files, whereas this [the second] will give you all the versions |
1084 |
|
|
… well this actually wouldn't, you'd have to say |
1085 |
|
|
“*.c.*.”. 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 “halt” 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 “When is it going to be finished?” |
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 “how can you help make it get |
1124 |
|
|
finished sooner?” 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 “RMS@GNU.ORG” (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 |
|
|
“Commune”, 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, “I like this |
1258 |
|
|
program, my neighbor would like the program, I want us both to have |
1259 |
|
|
it”, instead he said, “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!”, and that spirit is what does the spiritual harm. |
1262 |
|
|
That attitude of saying, “To hell with my neighbors, give ME a |
1263 |
|
|
copy”.</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 “half worked”. 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: “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 … when it's over |
1329 |
|
|
I'll go away and try not to think about it any more”. 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 “look at the large employment statistics, look at how big |
1366 |
|
|
this industry is” 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 “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!!”. 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: “Nobody |
1415 |
|
|
should be able to mess up my work of art”. 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 “Oh, no. I designed this |
1419 |
|
|
dish, and it has to have this much salt!” “But my doctor |
1420 |
|
|
says it's not safe for me to eat salt. What can I do?”.</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 |
“How will people get payed to program?” 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 “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” on the one hand, and to say “We need to have the |
1436 |
|
|
current system, you need to get rich by programming” 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: “How will I eat?”, but the |
1440 |
|
|
problem is not really how “Will he eat?”, but “How |
1441 |
|
|
will he eat sushi?”. “How will I have a roof over my |
1442 |
|
|
head?”, but the real problem is “How can he afford a |
1443 |
|
|
condo?”.</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 |
|
|
“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.”</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 “nobody will do it |
1490 |
|
|
unless they get paid that well”.</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: “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”. And this was called “the protection |
1533 |
|
|
racket”. Now we have something where a person says “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”, and this is called “the software protection |
1539 |
|
|
racket”.</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, “You want those programs to disappear on your |
1546 |
|
|
computer?”, the user can say “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.”</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 “pirate”. |
1602 |
|
|
Please refuse to use to use the term “pirate” 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: “I did the work |
1651 |
|
|
to make this one chair, and only one person can have this chair, it |
1652 |
|
|
might as well me”, we might as well say: “Yeah, that makes |
1653 |
|
|
sense”. When a person says: “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”, 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: “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”, well it's the same as if somebody said: |
1663 |
|
|
“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”. 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 “material object |
1689 |
|
|
age”, 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 & 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 © 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> [en]</li> |
1770 |
|
|
<!-- French --> |
1771 |
|
|
<li><a href="/philosophy/stallman-kth.fr.html">Français</a> [fr]</li> |
1772 |
|
|
<!-- Japanese --> |
1773 |
|
|
<li><a href="/philosophy/stallman-kth.ja.html">日本語</a> [ja]</li> |
1774 |
|
|
</ul> |
1775 |
|
|
</div> |
1776 |
|
|
</div> |
1777 |
|
|
</body> |
1778 |
|
|
</html> |