-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathchap01.tex
413 lines (315 loc) · 49.1 KB
/
chap01.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
%% Copyright (c) 2002, 2010 Sam Williams
%% Copyright (c) 2010 Richard M. Stallman
%% Permission is granted to copy, distribute and/or modify this
%% document under the terms of the GNU Free Documentation License,
%% Version 1.3 or any later version published by the Free Software
%% Foundation; with no Invariant Sections, no Front-Cover Texts, and
%% no Back-Cover Texts. A copy of the license is included in the
%% file called ``gfdl.tex''.
\chapter{\ifdefined\eng
For Want of a Printer
\fi
\ifdefined\chs
从一台打印机说起
\fi
}
\ifdefined\eng
\begin{quotation}
\begin{flushright}
I fear the Greeks. Even when they bring gifts.\\
-- Virgil, \textit{The Aeneid}
\end{flushright}
\end{quotation}
\fi
\ifdefined\chs
\begin{quotation}
\begin{flushright}
我畏惧希腊人,哪怕他们带着礼物来。\\
——维吉尔,《\textit{埃涅阿斯纪}》
\end{flushright}
\end{quotation}
\fi
\ifdefined\eng
The new printer was jammed, again.
\fi
\ifdefined\chs
这可是台全新的打印机!怎么又卡纸了?
\fi
\ifdefined\eng
Richard M. Stallman, a staff software programmer at the Massachusetts Institute of Technology's Artificial Intelligence Laboratory (AI Lab), discovered the malfunction the hard way. An hour after sending off a 50-page file to the office laser printer, Stallman, 27, broke off a productive work session to retrieve his documents. Upon arrival, he found only four pages in the printer's tray. To make matters even more frustrating, the four pages belonged to another user, meaning that Stallman's print job and the unfinished portion of somebody else's print job were still trapped somewhere within the electrical plumbing of the lab's computer network.
\fi
\ifdefined\chs
理查德·M·斯托曼(Richard M. Stallman)刚刚发现了这令他头痛不已的卡纸问题,那年他27岁,是麻省理工学院人工智能实验室一名资深的程序员。一个小时前,他给那台激光打印机提交了一个50页的打印任务,之后,他就忙于其它事务去了。回来时,本想拿到一叠散发着油香的文件,可这会儿,他只能站在那台毫无生机打印机前,直楞楞地看着它,上面,总共才四页并非他想要的文档。换句话说,斯托曼那份50页的文件,外加别人的半份文档,全被卡住了,成了实验室网络上的两个孤魂野鬼。
\fi
\ifdefined\eng
Waiting for machines is an occupational hazard when you're a software programmer, so Stallman took his frustration with a grain of salt. Still, the difference between waiting for a machine and waiting on a machine is a sizable one. It wasn't the first time he'd been forced to stand over the printer, watching pages print out one by one. As a person who spent the bulk of his days and nights improving the efficiency of machines and the software programs that controlled them, Stallman felt a natural urge to open up the machine, look at the guts, and seek out the root of the problem.
\fi
\ifdefined\chs
干程序员这行也是有风险的:你总得等着机器干活。不过斯托曼可是个能苦中做乐的人。再怎么说,等着机器干活与盯着机器干活,毕竟是两码事。就说现在吧,斯托曼正盯着打印机,看它慢吞吞地一页一页往外吐纸。这情景对他来说可一点也不陌生。作为一个程序员,他成天都在改进机器和控制这些机器的程序,好让它们更有效率的工作。当下,他恨不得掀开这台打印机,仔细查查究竟是哪出的毛病。
\fi
\ifdefined\eng
Unfortunately, Stallman's skills as a computer programmer did not extend to the mechanical-engineering realm. As freshly printed documents poured out of the machine, Stallman had a chance to reflect on other ways to circumvent the printing jam problem.
\fi
\ifdefined\chs
可惜,凭编程的能耐,没法解决机械工程的问题。斯托曼只能在重新打印文件的这会功夫,想点别的:能不能用别的办法,绕道解决这个卡纸的问题呢?
\fi
\ifdefined\eng
How long ago had it been that the staff members at the AI Lab had welcomed the new printer with open arms? Stallman wondered. The machine had been a donation from the Xerox Corporation. A cutting edge prototype, it was a modified version of a fast Xerox photocopier. Only instead of making copies, it relied on software data piped in over a computer network to turn that data into professional-looking documents. Created by engineers at the world-famous Xerox Palo Alto Research Facility, it was, quite simply, an early taste of the desktop-printing revolution that would seize the rest of the computing industry by the end of the decade.
\fi
\ifdefined\chs
这台打印机来人工智能实验室有多久了?斯托曼努力的回忆着。这机器是施乐公司(Xerox Corporation)捐赠的。它可是新一代产品的原型,是从上一代的复印机改进而来。和上一代比,它不再是简单地复印,而是从网络上接收数据,打印成专业品质的文档。它诞生于著名的施乐帕罗奥多研究中心(Xerox Palo Alto Research Facility)。再过大约十年,将会发生一场打印机革命,那时,许多计算机厂商都会投身其中。而这款打印机则是这场革命的先行者。
\fi
\ifdefined\eng
Driven by an instinctual urge to play with the best new equipment, programmers at the AI Lab promptly integrated the new machine into the lab's sophisticated computing infrastructure. The results had been immediately pleasing. Unlike the lab's old printer, the new Xerox machine was fast. Pages came flying out at a rate of one per second, turning a 20-minute print job into a 2-minute print job. The new machine was also more precise. Circles came out looking like circles, not ovals. Straight lines came out looking like straight lines, not low-amplitude sine waves.
\fi
\ifdefined\chs
人工智能实验室的程序员们,本能般地喜欢折腾这些新酷产品。当初他们麻利地把这打印机请回来,把它和实验室中的各种复杂的计算设备连在了一起,结果甚是喜人。比起以前的打印机,这台新打印机打印速度飞快。平均大约一秒钟打印一页纸。以前要花二十来分钟打印的东西,如今两分钟就解决了。新机器的打印精度也更高了。让它给画个圆,它决不会给你打出个鸡蛋来;让它划条直线,它也绝不会给你拐着弯瞎划拉。
\fi
\ifdefined\eng
It was, for all intents and purposes, a gift too good to refuse.
\fi
\ifdefined\chs
怎么看,这打印机都是份难以拒绝的珍贵礼物。
\fi
\ifdefined\eng
Once the machine was in use, its flaws began to surface. Chief among the drawbacks was the machine's susceptibility to paper jams. Engineering-minded programmers quickly understood the reason behind the flaw. As a photocopier, the machine generally required the direct oversight of a human operator. Figuring that these human operators would always be on hand to fix a paper jam, if it occurred, Xerox engineers had devoted their time and energies to eliminating other pesky problems. In engineering terms, user diligence was built into the system.
\fi
\ifdefined\chs
可没过几周,这机器的缺点就逐渐显现了。其中最要命的,就是卡纸问题。凭着工程师的直觉,程序员们很快就洞察出了这问题背后的原因。倘若是一台复印机,它旁边总会站个人直接操作它。遇到卡纸问题,这个人总能立即发现,着手解决,不至于有什么大影响。而施乐公司的那些工程师们则可以把时间和精力,用在其他更棘手的问题上了。用工程师的行话讲:这系统需要用户参与。
\fi
\ifdefined\eng
In modifying the machine for printer use, Xerox engineers had changed the user-machine relationship in a subtle but profound way. Instead of making the machine subservient to an individual human operator, they made it subservient to an entire networked population of human operators. Instead of standing directly over the machine, a human user on one end of the network sent his print command through an extended bucket brigade of machines, expecting the desired content to arrive at the targeted destination and in proper form. It wasn't until he finally went to check up on the final output that he realized how little of it had really been printed.
\fi
\ifdefined\chs
如今,施乐公司在复印机的基础之上,设计了这个打印机。这个小小的变化,却使得人机关系发生了微妙而深刻的变化。现在,在同一时刻,这机器不再只服务于一个用户。它要同时给整个网络的用户提供打印服务。这些用户也不再老老实实地站在机器前面,而是坐在网络的另一端,可能还远离打印机,向这台机器发布打印命令,并指望它能按要求完成任务。等这些用户忙过其它事情回过神来,想起打印的文件时,他们才发现,大部分的内容已被一张纸卡住了。
\fi
\ifdefined\eng
Stallman was hardly the only AI Lab denizen to notice the problem, but he also thought of a remedy. Years before, for the lab's previous printer, Stallman had solved a similar problem by modifying the software program that regulated the printer, on a small PDP-11 machine, as well as the Incompatible Timesharing System that ran on the main PDP-10 computer. Stallman couldn't eliminate paper jams, but he could insert software code that made the PDP-11 check the printer periodically, and report jams back to the PDP-10. Stallman also inserted code on the PDP-10 to notify every user with a waiting print job that the printer was jammed. The notice was simple, something along the lines of ``The printer is jammed, please fix it,'' and because it went out to the people with the most pressing need to fix the problem, chances were that one of them would fix it forthwith.
\fi
\ifdefined\chs
斯托曼是人工智能实验室中第一个发现这个问题的人,也是他第一个提出了解决方案。几年前,实验室还用着一台旧打印机,也有类似的问题。这台打印机的控制程序,运行在实验室里的一台PDP-11计算机上。那会儿,斯托曼修改了这个控制程序,解决了这个问题。当然,他没法直接修理打印机来解决卡纸的问题。他只是修改控制程序,让程序定期检查打印机是否工作正常,再把检查结果传给实验室的核心计算机——一台PDP-10。同时,他也修改了运行在PDP-10主机上的“不兼容分时系统(ITS,Incompatible Timesharing System)“,处理这些检查结果。生怕哪个粗心用户忘了去查看打印机,斯托曼还让控制程序在卡纸的时候,向所有等待打印任务的用户发送一条提醒消息。消息简短明确:“打印机被卡住了,请前去维修。”收到这消息的人都是等着要用打印机的,所以问题就迎“人”而解。
\fi
\ifdefined\eng
As fixes go, Stallman's was oblique but elegant. It didn't fix the mechanical side of the problem, but it did the next best thing by closing the information loop between user and machine. Thanks to a few additional lines of software code, AI Lab employees could eliminate the 10 or 15 minutes wasted each week in running back and forth to check on the printer. In programming terms, Stallman's fix took advantage of the amplified intelligence of the overall network.
\fi
\ifdefined\chs
斯托曼这解决方案虽然并不能说很讨巧,但却也漂亮。它没解决打印机机械部件的问题,却提出了一个次优方案:完善人机交互,及早报告问题。多亏了斯托曼加的几行代码,人工智能实验室的员工,不用再跑来跑去地查看打印机状态了。这样,每周起码节省了10到15分钟时间。用编程的术语讲,斯托曼的方案提高了网络的整体智能。
\fi
\ifdefined\eng
``If you got that message, you couldn't assume somebody else would fix it,'' says Stallman, recalling the logic. ``You had to go to the printer. A minute or two after the printer got in trouble, the two or three people who got messages arrive to fix the machine. Of those two or three people, one of them, at least, would usually know how to fix the problem.''
\fi
\ifdefined\chs
“你要是收到这条消息,你可就坐不住了。你多半等不及别人去解决卡纸问题。”斯托曼回忆着其中的逻辑,“你得亲力亲为,跑到打印机跟前。一两分钟之后,要是问题还没解决,就会聚来两三个人。这其中,总会有个人知道怎么修理。”
\fi
\ifdefined\eng
Such clever fixes were a trademark of the AI Lab and its indigenous population of programmers. Indeed, the best programmers at the AI Lab disdained the term programmer, preferring the more slangy occupational title of hacker instead. The job title covered a host of activities -- everything from creative mirth making to the improvement of existing software and computer systems. Implicit within the title, however, was the old-fashioned notion of Yankee ingenuity. For a hacker, writing a software program that worked was only the beginning. A hacker would try to display his cleverness (and impress other hackers) by tackling an additional challenge: to make the program particularly fast, small, powerful, elegant, or somehow impressive in a clever way.\endnote{For more on the term ``hacker,'' see \nameref{Appendix A}.}
\fi
\ifdefined\chs
类似的巧法子是人工智能实验室的一大特色。尤其在其中的资深程序员之间,屡见不鲜。实际上,那些天才的程序员,不屑于用“程序员”这词。他们更喜欢用圈子里的行话,用“黑客”这个词。这词儿涵盖了不少内容:从抖机灵、甩包袱,到改进现有软件,优化计算机系统。而更深之处,则蕴含着旧时美国移民的智慧。对于黑客来说,有这么一条铁律:从头开发个软件只是小儿科;要想在别人面前展现自己的聪明才智(并让别人对自己留下印象),就得做点更有意思的事:改进一个程序让它体积更小、跑得更快、功能更强,代码更优雅,这才是真本事。\endnote{参考\nameref{Appendix A},深入了解“黑客”这个词的内在含义。}
\fi
\ifdefined\eng
Companies like Xerox made it a policy to donate their products (and software) to places where hackers typically congregated. If hackers used these products, they might go to work for the company later on. In the 60s and early 70s, they also sometimes developed programs that were useful for the manufacturer to distribute to other customers.
\fi
\ifdefined\chs
这条铁律,恰恰影响着施乐这样的公司,让它们乐意把自己的产品(和配套的软件)捐赠到黑客聚集的地方。要是这些黑客们对这些产品产生了兴趣,他们以后就可能有兴趣去这个公司工作。在20世纪60年代到70年代初,黑客们也常常会开发一些实用的软件,提供给公司发布给其他顾客使用。
\fi
\ifdefined\eng
When Stallman noticed the jamming tendency in the Xerox laser printer, he thought of applying the old fix or ``hack'' to this printer. In the course of looking up the Xerox laser-printer software, however, Stallman made a troubling discovery. The printer didn't have any software, at least nothing Stallman or a fellow programmer could read. Until then, most companies had made it a form of courtesy to publish source-code files--readable text files that documented the individual software commands that told a machine what to do. Xerox, in this instance, had provided software files only in compiled, or binary, form. If programmers looked at the files, all they would see was an endless stream of ones and zeroes -- gibberish.
\fi
\ifdefined\chs
凭着这份礼尚往来的精神,斯托曼在这台新打印机面前并不慌张。他只要找个法子,把以前那套修改方案拿过来,修理修理这机器,或者用圈子里的话说,“黑”它一下,就万事大吉了。可是,他刚找了找这台施乐激光打印机的软件,就碰了一鼻子灰。这打印机根本不提供软件,至少没提供任何给人读的程序代码。要知道,那个时代,大多数公司都会发布软件的源代码(一系列可供人阅读的文本文件,用于详细定义程序的行为)。可当下,施乐公司提供的程序,却只有编译好的可执行文件。程序员倒是可以打开这些文件,可打开之后看见的,全是零和一。除非他们乐意去翻译这些二进制信息,否则这些东西看起来只是一堆胡言乱语。
\fi
\ifdefined\eng
There are programs, called ``disassemblers,'' to convert the ones and zeroes into low-level machine instructions, but figuring out what those instructions actually ``do'' is a long and hard task, known as ``reverse engineering.'' To reverse engineer this program could have taken more time than five years' worth of jammed printouts. Stallman wasn't desperate enough for that, so he put the problem aside.
\fi
\ifdefined\chs
有一种叫作”反汇编器”的程序,可以把这些看不懂的零和一转换成机器底层指令,但是要进一步了解这些指令实际在“做”的事情则是一件费时费力的工作,这样的工作被称作“反向工程”。要想把打印机的控制程序进行反向工程,也许会花去超过五年的时间。卡纸的问题还没有严重到让斯托曼愿意花这么多时间去解决,所以他把这件事放到了一边。
\fi
\ifdefined\eng
Xerox's unfriendly policy contrasted blatantly with the usual practices of the hacker community. For instance, to develop the program for the PDP-11 that ran the old printer, and the program for another PDP-11 that handled display terminals, the AI Lab needed a cross-assembler program to build PDP-11 programs on the PDP-10 main computer. The lab's hackers could have written one, but Stallman, a Harvard student, found such a program at Harvard's computer lab. That program was written to run on the same kind of computer, the PDP-10, albeit with a different operating system. Stallman never knew who had written the program, since the source code did not say. But he brought a copy back to the AI Lab. He then altered the source code to make it run on the AI Lab's Incompatible Timesharing System (ITS). With no muss and little fuss, the AI Lab got the program it needed for its software infrastructure. Stallman even added a few features not found in the original version, making the program more powerful. ``We wound up using it for several years,'' Stallman says.
\fi
\ifdefined\chs
施乐公司看上去不太友好的软件条款与黑客社区所习惯的氛围格格不入。打个比方,如果想为一台老式的打印机开发一个在PDP-11上运行的控制程序,或为另一台PDP-11开始一个处理显示终端的程序,人工智能实验室的黑客们需要在PDP-10主机上运行一个交叉汇编的程序,才能创建出他们需要的程序。他们可以自己从头开发一个这样的交叉汇编程序,但是上哈佛大学上学的斯托曼,在哈佛的计算机实验室中找到了这样一个程序。这个程序都可以在PDP-10这种型号的计算机上运行,即使两台机器上运行的操作系统不同也没有关系。斯托曼并不需要知道这份代码是谁写的,因为源代码中并没有标明。但是他可以把这份代码带到人工智能实验室,通过修改其中的一部分代码,这个程序就可以在人工智能实验室的“不兼容分时系统(ITS)”上运行了。没花多大劲,人工智能实验室就得到了一个可以用于充实他们的软件架构的程序。斯托曼甚至还在程序中加入了一些原来没有的新功能,使程序变得更加强大了。“这个程序我们一直用了很多年。”斯托曼说。
\fi
\ifdefined\eng
From the perspective of a 1970s-era programmer, the transaction was the software equivalent of a neighbor stopping by to borrow a power tool or a cup of sugar from a neighbor. The only difference was that in borrowing a copy of the software for the AI Lab, Stallman had done nothing to deprive anyone else of the use of the program. If anything, other hackers gained in the process, because Stallman had introduced additional features that other hackers were welcome to borrow back. For instance, Stallman recalls a programmer at the private engineering firm, Bolt, Beranek \& Newman, borrowing the program. He made it run on Twenex and added a few additional features, which Stallman eventually reintegrated into the AI Lab's own source-code archive. The two programmers decided to maintain a common version together, which had the code to run either on ITS or on Twenex at the user's choice.
\fi
\ifdefined\chs
对于七十年代的程序员来说,把软件拷贝来拷贝去,就好比从邻居家借碗酱油那么稀松平常。所不同的是,你从邻居那拿了多少酱油,邻居就少了多少。而从别人那里拷贝一个程序出来,并不影响别人继续使用那个程序。要说有影响,也是正面的。因为斯托曼对这程序还加了些功能,别的黑客可以自由地拷来斯托曼改进的程序,这也算是计算机世界的礼尚往来了。后来,有个从Bolt, Beranek \& Newman这家公司来的程序员,拷走了斯托曼的程序,他把这个程序移植到了Twenex系统上,并加上了一些新的功能,斯托曼则又把改进后的程序拷了回来,用回到人工智能实验室里。他们两人打算共同来维护一个通用的版本,这个版本既可以在ITS上运行,也可以在Twenex上运行。
\fi
\ifdefined\eng
``A program would develop the way a city develops,'' says Stallman, recalling the software infrastructure of the AI Lab. ``Parts would get replaced and rebuilt. New things would get added on. But you could always look at a certain part and say, `Hmm, by the style, I see this part was written back in the early 60s and this part was written in the mid-1970s.'\hspace{0.01in}''
\fi
\ifdefined\chs
“开发一个程序就好比开发一座城市。”斯托曼回忆着人工智能实验室的软件设施:“有些部分会被换掉,有些得重建翻修。新的东西会逐步加进来。可如果你仔细看某个部分,也许会感慨道:‘这块从风格看应该是六十年代早期的;之后的部分估计是七十年代中期完成的。’”
\fi
\ifdefined\eng
Through this simple system of intellectual accretion, hackers at the AI Lab and other places built up robust creations. Not every programmer participating in this culture described himself as a hacker, but most shared the sentiments of Richard M. Stallman. If a program or software fix was good enough to solve your problems, it was good enough to solve somebody else's problems. Why not share it out of a simple desire for good karma?
\fi
\ifdefined\chs
这套简洁的系统得以让知识逐渐积累。这种积累为发明和创造提供了稳固的基石。人工智能实验室以及世界各地的黑客们,都得益于这一系统。参与到这个文化小圈子的程序员,不一定都把自己称为黑客。不过绝大多数人都有着理查德·M·斯托曼那般的情结:要是一个程序或者一个补丁可以解决你自己的问题,它没准也能帮到别人。独乐乐不如众乐乐,何不分享给大家,起码也算积德行善了。
\fi
\ifdefined\eng
This system of cooperation was being undermined by commercial secrecy and greed, leading to peculiar combinations of secrecy and cooperation. For instance, computer scientists at UC Berkeley had built up a powerful operating system called BSD, based on the Unix system they had obtained from AT\&T. Berkeley made BSD available for the cost of copying a tape, but would only give these tapes to schools that could present a \$50,000 source license obtained from AT\&T. The Berkeley hackers continued to share as much as AT\&T let them, but they had not perceived a conflict between the two practices.
\fi
\ifdefined\chs
这种合作的精神不断的被商业秘密限制和贪婪之心所侵蚀,变成了一种商业秘密和合作精神的古怪搭配。加州大学伯克利分校的计算机科学家们基于他们从AT\&T得到的Unix系统开发了一个名为BSD的操作系统。伯克利向那些已经向AT\&T支付了50000美元软件许可证费用的学院提供BSD系统,仅仅只收取复制磁带的成本费。伯克利的黑客们还是尽可能的发扬分享合作的精神,但只能在AT\&T所允许的范围内,并且他们还没有意识这两种不同的模式之间所存在的巨大冲突。
\fi
\ifdefined\eng
Likewise, Stallman was annoyed that Xerox had not provided the source-code files, but not yet angry. He never thought of asking Xerox for a copy. ``They had already given us the laser printer,'' Stallman says. ``I could not say they owed us something more. Besides, I took for granted that the absence of source code reflected an intentional decision, and that asking them to change it would be futile.''
\fi
\ifdefined\chs
施乐公司不分享源代码的行为虽然让斯托曼感到烦恼,不过倒也没激怒到他。斯托曼在找源代码的过程中,甚至都没想过去联系施乐公司:“人家都送咱打印机了,何必还非得兴师动众地直接管他们要代码呢?再说了,我敢肯定他们不发布源代码是有一种有意的行为,非要找他们要代码也是徒劳的。”
\fi
\ifdefined\eng
Good news eventually arrived: word had it that a scientist at the computer-science department at Carnegie Mellon University had a copy of the laser printer source code.
\fi
\ifdefined\chs
好消息最终还是来了:一名卡耐基梅隆大学计算机科学系的教授手头有一份这台激光打印机的源代码。
\fi
\ifdefined\eng
The association with Carnegie Mellon did not augur well. In 1979, Brian Reid, a doctoral student there, had shocked the community by refusing to share his text-formatting program, dubbed Scribe. This text formatter was the first to have mark-up commands oriented towards the desired semantics (such as ``emphasize this word'' or ``this paragraph is a quotation'') rather than low-level formatting details (``put this word in italics'' or ``narrow the margins for this paragraph''). Instead Reid sold Scribe to a Pittsburgh-area software company called Unilogic. His graduate-student career ending, Reid says he simply was looking for a way to unload the program on a set of developers that would take pains to keep it from slipping into the public domain. (Why one would consider such an outcome particularly undesirable is not clear.) To sweeten the deal, Reid also agreed to insert a set of time-dependent functions -- ``time bombs'' in software-programmer parlance -- that deactivated freely copied versions of the program after a 90-day expiration date. To avoid deactivation, users paid the software company, which then issued a code that defused the internal time-bomb anti-feature.
\fi
\ifdefined\chs
斯托曼对卡耐基梅隆大学并没有什么好印象。1979年,一位在卡耐基梅隆大学的计算机博士研究生,名叫布莱恩·瑞德(Brian Reid)。他开发了一个很不错的文本排版软件,名叫Scribe。但是他却拒绝公开这个软件的代码,震惊了整个开发社区。这个文本排版软件是世界上第一个可以通过标记来指定特定语意(比如“强调这个单词”或“这是一段引文”)的排版软件,而在它之前,一般的排版软件都是通过低级的排版命令(比如“把这个词改为斜体“或”缩小这一段的页边距“)来表达类似的需求。瑞德决定把Scribe出售给一家匹兹堡名叫Unilogic的公司。他当时刚好博士毕业,正打算把开发Scribe的任务转手给别人,免得它流落到公共领域(Public Domain)里。(为什么他会做出这样的决定,迄今为止还令人费解。)为了让这笔交易更具吸引力,瑞德在Scribe中动了点小手脚:他在里面放了个“定时炸弹”,让用户有90天的免费试用期,90天一过,如果用户不交费,则不能再使用这个软件。
\fi
\ifdefined\eng
For Stallman, this was a betrayal of the programmer ethos, pure and simple. Instead of honoring the notion of share-and-share alike, Reid had inserted a way for companies to compel programmers to pay for information access. But he didn't think deeply about the question, since he didn't use Scribe much.
\fi
\ifdefined\chs
在斯托曼看来,这样的做法背叛了程序员应有单纯、简单的精神气质。瑞德的做法不但没有弘扬分享再传播的精神,而且竟然还助纣为虐,开辟了一条让软件公司强迫程序员为信息付费的新途径。不过斯托曼也没有太在意这个问题,因为他本人并不太使用Scribe这个软件。
\fi
\ifdefined\eng
Unilogic gave the AI Lab a gratis copy to use, but did not remove or mention the time bomb. It worked, for a while; then one day a user reported that Scribe had stopped working. System hacker Howard Cannon spent hours debugging the binary until he found the time-bomb and patched it out. Cannon was incensed, and wasn't shy about telling the other hackers how mad he was that Unilogic had wasted his time with an intentional bug.
\fi
\ifdefined\chs
Unilogic提供了一个免费的版本给人工智能实验室使用,但是这个版本中仍然保留了那个“定时炸弹”。这个软件在实验室中正常使用了一段时间,但是有一天,有用户发现它不能正常工作了。一位名叫霍华德·坎农(Howard Cannon)的系统工程师花了几个小时调试了这个软件,最终发现了隐藏在软件内部的“定时炸弹”,他改动了一些代码,把它绕了过去。坎农对此非常愤慨,遇到人就抱怨说Unilogic浪费了他好几个小时的时间去解决一个故意隐藏在软件中的问题。
\fi
\ifdefined\eng
Stallman had a Lab-related reason, a few months later, to visit the Carnegie Mellon campus. During that visit, he made a point of looking for the person reported to have the printer software source code. By good fortune, the man was in his office.
\fi
\ifdefined\chs
几个月后,斯托曼因为工作原因,需要去卡耐基梅隆大学出差访问。访问过程中,他在计算机系找到了那位据说拥有激光打印机软件代码的教授。运气不错,那天他还刚好就在办公室。
\fi
\ifdefined\eng
In true engineer-to-engineer fashion, the conversation was cordial but blunt. After briefly introducing himself as a visitor from MIT, Stallman requested a copy of the laser-printer source code that he wanted to modify. To his chagrin, the researcher refused.
\fi
\ifdefined\chs
工程师之间的讨论总是开门见山的。几句寒暄之后,斯托曼就直入主题,说明自己是为了激光打印机的控制程序代码而来,有了这份代码,他就可以对此进行一些改进。可令斯托曼感到吃惊的是,这位教授竟然拒绝了他的要求。
\fi
\ifdefined\eng
``He told me that he had promised not to give me a copy,'' Stallman says.
\fi
\ifdefined\chs
“他跟我说他答应公司不能泄露代码。”斯托曼说。
\fi
\ifdefined\eng
Memory is a funny thing. Twenty years after the fact, Stallman's mental history tape is blank in places. Not only does he not remember the motivating reason for the trip or even the time of year during which he took it, he also has no recollection of who was on the other end of the conversation. According to Reid, the person most likely to have fielded Stallman's request is Robert Sproull, a former Xerox PARC researcher and current director of Sun Laboratories, a research division of the computer-technology conglomerate Sun Microsystems. During the 1970s, Sproull had been the primary developer of the laser-printer software in question while at Xerox PARC. Around 1980, Sproull took a faculty research position at Carnegie Mellon where he continued his laser-printer work amid other projects.
\fi
\ifdefined\chs
记忆总是这么有趣。二十年过去了,斯托曼关于这段经历的回忆大部分都是空白。他都不记得当初为了什么事去的卡耐基梅隆大学,连具体哪年都给忘了。他也不记得那位教授是谁。根据Scribe的作者瑞德的回忆,惹到斯托曼的那位很可能是罗伯特·斯布鲁(Robert Sproull)。他曾是施乐公司PARC研究所的研究员,如今在Sun研究所任部门主管。二十世纪七十年代,斯布鲁在施乐公司PARC研究所负责激光打印机程序的主要开发者。八十年代他拿到了卡耐基梅隆大学的教职,并在那里继续他的激光打印机相关的工作。
\fi
\ifdefined\eng
When asked directly about the request, however, Sproull draws a blank. ``I can't make a factual comment,'' writes Sproull via email. ``I have absolutely no recollection of the incident.''
\fi
\ifdefined\chs
可是,直接给斯布鲁发邮件,询问当初的事情,他却不记得这事了:“实在是无可奉告。”斯布鲁在邮件中写道:“我确实没记得有这么一件事。”
\fi
\ifdefined\eng
``The code that Stallman was asking for was leading-edge, state-of-the-art code that Sproull had written in the year or so before going to Carnegie Mellon,'' recalls Reid. If so, that might indicate a misunderstanding that occurred, since Stallman wanted the source for the program that MIT had used for quite some time, not some newer version. But the question of which version never arose in the brief conversation.
\fi
\ifdefined\chs
“斯托曼想要的代码包含的可都是前沿技术,那可是斯布鲁去卡耐基梅隆之前,花了几年的时间研发的成果。”瑞德回忆道。如果确实是这样,那可是一个重大的误解,因为斯托曼想要的代码是麻省理工学院已经用了很长一段时间的打印机的程序代码,并不是要的最新版本。不过在他们那次简短的交谈中,也许根本都还没来得及谈及是要的哪个版本。
\fi
\ifdefined\eng
In talking to audiences, Stallman has made repeated reference to the incident, noting that the man's unwillingness to hand over the source code stemmed from a nondisclosure agreement, a contractual agreement between him and the Xerox Corporation giving the signatory access to the software source code in exchange for a promise of secrecy. Now a standard item of business in the software industry, the nondisclosure agreement, or NDA, was a novel development at the time, a reflection of both the commercial value of the laser printer to Xerox and the information needed to run it. ``Xerox was at the time trying to make a commercial product out of the laser printer,'' recalls Reid. ``They would have been insane to give away the source code.''
\fi
\ifdefined\chs
在后来的各种演讲中,斯托曼一再提及这件事。强调斯布鲁由于签署了保密协议,从而不能泄露源代码。如今在各个IT公司,签署保密协议(NDA)已经非常普遍,而在当时为软件代码签署保密协议还算先例。这也间接地反映出施乐公司对激光打印机项目的重视程度。“施乐公司打算把激光打印机做成商业产品。”瑞德说,“他们除非疯了,才会把代码泄露出去。”
\fi
\ifdefined\eng
For Stallman, however, the NDA was something else entirely. It was a refusal on the part of some CMU researcher to participate in a society that, until then, had encouraged software programmers to regard programs as communal resources. Like a peasant whose centuries-old irrigation ditch had grown suddenly dry, Stallman had followed the ditch to its source only to find a brand-spanking-new hydroelectric dam bearing the Xerox logo.
\fi
\ifdefined\chs
但在斯托曼看来,签署这种保密协议完全是一种自私的行径。那会儿大家都把软件认为是一种共有的资源,卡耐基梅隆大学一些研究员的做法,就意味着否定这个公理。这对斯托曼来说,就好比是一个农夫眼看着用来灌溉庄稼的河流干枯了。循着河道往上巡查,竟然看到一道大坝从天而降,拦住河水。大坝上赫然印着几个大字:施乐公司。
\fi
\ifdefined\eng
For Stallman, the realization that Xerox had compelled a fellow programmer to participate in this newfangled system of compelled secrecy took a while to sink in. In the first moment, he could only see the refusal in a personal context. ``I was so angry I couldn't think of a way to express it. So I just turned away and walked out without another word,'' Stallman recalls. ``I might have slammed the door. Who knows? All I remember is wanting to get out of there. I went to his office expecting him to cooperate, so I had not thought about how I would respond if he refused. When he did, I was stunned speechless as well as disappointed and angry.''
\fi
\ifdefined\chs
现在来看,那时施乐公司用各种花言巧语,把一位程序员同胞带入了这片新天地,与世隔绝。不过一开始,斯托曼也没把矛头指向施乐公司,而是怪罪到了个人性格上。“我当时非常生气,都不知道怎么表达。我二话没说,扭头就走了。”斯托曼说,“没准我还使劲摔了门,谁知道呢。我能记得的,就是当时想赶快离开。我特地拜访他的原因就是希望能与他合作,所以我完全没想到过会被拒绝。当他拒绝我的时候,我觉得无话可说,非常的失望与生气。”
\fi
\ifdefined\eng
Twenty years after the fact, the anger still lingers, and Stallman presents the event as one that made him confront an ethical issue, though not the only such event on his path. Within the next few months, a series of events would befall both Stallman and the AI Lab hacker community that would make 30 seconds worth of tension in a remote Carnegie Mellon office seem trivial by comparison. Nevertheless, when it comes time to sort out the events that would transform Stallman from a lone hacker, instinctively suspicious of centralized authority, to a crusading activist applying traditional notions of liberty, equality, and fraternity to the world of software development, Stallman singles out the Carnegie Mellon encounter for special attention.
\fi
\ifdefined\chs
二十多年过去了,可斯托曼当初的怨气还在。他甚至把这个事件描述为人生转折点。然而,那之后几个月中,在人工智能实验室以及斯托曼身上发生的各种事,却比这次打印机事件还令人难以接受。斯托曼,本是一名孤独的黑客,本能地对绝对权威有戒心。在经历了这一系列事件后,变成了一位斗士,把传统的自由、平等、博爱的精神引入软件开发领域。而这次的打印机事件,在其一生的无数事件中则最值得一书。
\fi
\ifdefined\eng
``It was my first encounter with a nondisclosure agreement, and it immediately taught me that nondisclosure agreements have victims,'' says Stallman, firmly. ``In this case I was the victim. [My lab and I] were victims.''
\fi
\ifdefined\chs
“这是我第一次遭遇所谓的保密协议,但这马上让我明白,在保密协议面前,总会有一些无辜受害者。”斯托曼坚定的说,“在这次事件中,我就是那个受害者。人工智能实验室和我本人都扮演了受害者的角色。”
\fi
\ifdefined\eng
Stallman later explained, ``If he had refused me his cooperation for personal reasons, it would not have raised any larger issue. I might have considered him a jerk, but no more. The fact that his refusal was impersonal, that he had promised in advance to be uncooperative, not just to me but to anyone whatsoever, made this a larger issue.''
\fi
\ifdefined\chs
斯托曼后来解释说:“如果他只是因为个人原因拒绝与我合作,也许事情也就这样不了了之了。也许我会觉得他是一个蠢蛋,但也就仅此而已。但是事实上,他并不是因为个人原因而拒绝我,是因为他先前已经向公司保证了不会泄露源代码,不但不能把源代码给我,也不能给其它任何人,那这个事情性质就变得严重了。”
\fi
\ifdefined\eng
Although previous events had raised Stallman's ire, he says it wasn't until his Carnegie Mellon encounter that he realized the events were beginning to intrude on a culture he had long considered sacrosanct. He said, ``I already had an idea that software should be shared, but I wasn't sure how to think about that. My thoughts weren't clear and organized to the point where I could express them in a concise fashion to the rest of the world. After this experience, I started to recognize what the issue was, and how big it was.''
\fi
\ifdefined\chs
尽管之前也有过类似的不快经历,可都不能与这次的打印机事件相提并论。这次事件让斯托曼彻底意识到,这些一系列的事件,正悄悄地侵蚀自己所珍视的文化——那个神圣不可侵犯的“黑客”小圈子的核心文化。他说:“我一直有个信念,那就是软件应该可以可以被分享的,但是我不太确定应该怎么去把它变成现实。我的想法还不太成熟,也不太系统,所以没有办法把它精确的表达出来,让其它人理解。经历了这些事件,我开始渐渐认识到问题的本质和它的严重性。”
\fi
\ifdefined\eng
As an elite programmer at one of the world's elite institutions, Stallman had been perfectly willing to ignore the compromises and bargains of his fellow programmers just so long as they didn't interfere with his own work. Until the arrival of the Xerox laser printer, Stallman had been content to look down on the machines and programs other computer users grimly tolerated.
\fi
\ifdefined\chs
作为一个世界顶级研究机构的顶级程序员,斯托曼之前一直都无视那些程序员同行所作的各种妥协和让步,因为他们还不至于影响到斯托曼的工作。而如今施乐激光打印机的到来,让斯托曼开始注意到其他计算机用户一直在忍受的程序和机器。
\fi
\ifdefined\eng
Now that the laser printer had insinuated itself within the AI Lab's network, however, something had changed. The machine worked fine, barring the paper jams, but the ability to modify software according to personal taste or community need had been taken away. From the viewpoint of the software industry, the printer software represented a change in business tactics. Software had become such a valuable asset that companies no longer accepted the need to publicize source code, especially when publication meant giving potential competitors a chance to duplicate something cheaply. From Stallman's viewpoint, the printer was a Trojan Horse. After a decade of failure, software that users could not change and redistribute -- future hackers would use the term ``proprietary'' software -- had gained a foothold inside the AI Lab through the sneakiest of methods. It had come disguised as a gift.
\fi
\ifdefined\chs
如今,这台激光打印机已经强势入驻到人工智能实验室了,而外面的世界也悄悄发生着变化。除了偶尔卡纸以外,打印机工作还算正常。可是按照个人喜好修改软件则不可能了。从软件业的角度看,这打印机的出现是个信号,预示着软件是公司的重要财产。谁也不再愿意发布软件源代码,因为这可能会给潜在竞争对手机会,让他们可以轻松山寨自己的产品。而在斯托曼看来,这打印机简直就是个卧底。十来年的尝试,私有软件总算在人工智能实验室中占得一角。私有软件,也就是如今所说的专有软件,这次被打扮成礼物,潜入得悄无声息。
\fi
\ifdefined\eng
That Xerox had offered some programmers access to additional gifts in exchange for secrecy was also galling, but Stallman takes pains to note that, if presented with such a quid pro quo bargain at a younger age, he just might have taken the Xerox Corporation up on its offer. The anger of the Carnegie Mellon encounter, however, had a firming effect on Stallman's own moral lassitude. Not only did it give him the necessary anger to view such future offers with suspicion, it also forced him to turn the situation around: what if a fellow hacker dropped into Stallman's office someday and it suddenly became Stallman's job to refuse the hacker's request for source code?
\fi
\ifdefined\chs
施乐公司后来还发出邀请,让一些程序员再使用它们的礼品。斯托曼说,要是再早几年,他没准也无法拒绝这种免费午餐。是那次打印机事件,让斯托曼建立起了道德防线。它不仅燃起了斯托曼久抑的怒火,还让他对以后的各种礼品心存戒备;它更让斯托曼开始思考一个让他自己也坐立不安的问题:要是以后哪个黑客同行进到自己的办公室,向他索要代码,他究竟会不会拒绝呢?
\fi
\ifdefined\eng
``When somebody invited me to betray all my colleagues in that way, I remembered how angry I was when somebody else had done that to me and my whole lab,'' Stallman says. ``So I said, `Thank you very much for offering me this nice software package, but I can't accept it on the conditions that you're asking for, so I'm going to do without it.'\hspace{0.01in}''
\fi
\ifdefined\chs
“要是谁跟我建议,让我以这种方式背叛我的同事,我就会回忆起在打印机事件中,我和我的同事,被别人背叛的感觉,那份怒火终生难忘。”斯托曼说,“我会回敬给分发专有软件的人:‘谢谢你的软件,非常棒!可是我不能接受你的那些保密协议,很遗憾,我不会用它。’”
\fi
\ifdefined\eng
It was a lesson Stallman would carry with him through the tumultuous years of the 1980s, a decade during which many of his MIT colleagues would depart the AI Lab and sign nondisclosure agreements of their own. They may have told themselves that this was a necessary evil so they could work on the best projects. For Stallman, however, the NDA called the the moral legitimacy of the project into question. What good is a technically exciting project if it is meant to be withheld from the community?
\fi
\ifdefined\chs
斯托曼带着这种态度,经历了动荡的八十年代。在这期间,麻省理工学院的同事们纷纷离开人工智能实验室,走进公司,签署了保密协议。大多数保密协议都有解密时间,而这则成了很多黑客们的借口。他们会辩解说:软件迟早会成为公共资源。只要保证软件在早期的开发阶段不被泄露,就可以保证让各位黑客朋友们可以进入到顶尖项目中工作。这些借口,在斯托曼看来,是迈向深渊的第一步。把一个出色的项目放到社区以外去开去,能有什么好处可言呢?
\fi
\ifdefined\eng
As Stallman would quickly learn, refusing such offers involved more than personal sacrifice. It involved segregating himself from fellow hackers who, though sharing a similar distaste for secrecy, tended to express that distaste in a more morally flexible fashion. Refusing another's request for source code, Stallman decided, was not only a betrayal of the scientific mission that had nurtured software development since the end of World War II, it was a violation of the Golden Rule, the baseline moral dictate to do unto others as you would have them do unto you.
\fi
\ifdefined\chs
斯托曼很快就会明白,要拒绝这些要求和邀请,不仅需要一些个人牺牲,更会被其他一些黑客们疏远。这些黑客虽然也对各种保密协议嗤之以鼻,但却会更圆滑地对它加以评判。拒绝提供源代码,在斯托曼看来,不仅违背了二战以来深植入软件开发中的科学精神,更违背了“己所不欲,勿施于人”的道德准则。
\fi
\ifdefined\eng
Hence the importance of the laser printer and the encounter that resulted from it. Without it, Stallman says, his life might have followed a more ordinary path, one balancing the material comforts of a commercial programmer with the ultimate frustration of a life spent writing invisible software code. There would have been no sense of clarity, no urgency to address a problem others weren't addressing. Most importantly, there would have been no righteous anger, an emotion that, as we soon shall see, has propelled Stallman's career as surely as any political ideology or ethical belief.
\fi
\ifdefined\chs
打印机事件的重要意义恰在于此。正如斯托曼所言,倘若没有这次事件,他的人生也许就会落入平常,纠结着,一边开发专有软件,一边痛苦地编写没人会看到的代码。当然也不会有着如今清晰的思路,更不会去解决别人沿未想过的各种问题。最重要的,他心中也不会再有那份不平,推动着他去追求他的政治理想和道德信仰。
\fi
\ifdefined\eng
``From that day forward, I decided this was something I could never participate in,'' says Stallman, alluding to the practice of trading personal liberty for the sake of convenience -- Stallman's description of the NDA bargain -- as well as the overall culture that encouraged such ethically suspect deal-making in the first place. ``I decided never to make other people victims as I had been a victim.''
\fi
\ifdefined\chs
“从那日起,我决定绝不参与其中。”谈起软件保密协议和类似的事情,斯托曼如是说。在他看来,这是一场以个人自由换取便利的交易。“我决定绝不让第二个人为此成为像我一样的受害者。”
\fi
\theendnotes
\setcounter{endnote}{0}