《若为自由故:自由软件之父理查德·斯托曼传》-–—第7章:道分左右,义无旁支

1983年9月27日,众多计算机用户像往常一样,登录Usenet的net.unix-wizards新闻组。一条不太寻常的消息映入眼帘。这条消息在当天凌晨过后发出来的,准确时间是零点三十分。消息来自署名rms@mit-oz的用户。标题甚是简单,却异常乍眼:《重写UNIX系统》(New UNIX implementation)。这个消息并非是介绍新的UNIX发行版,而是更像一篇邀人入伍的檄文,文章开头写道:

这个感恩节假期,我将开始写一个完全的UNIX兼容系统,叫作GNU,意为“GNU’s Not Unix(GNU不是UNIX)”。这个系统任何人都可以自由使用。你如果愿意贡献时间、金钱、程序或者设备,我随时欢迎。

对于UNIX的资深用户来说,这个消息显得太过理想主义,甚至有些自大傲慢。面对已经非常成熟的UNIX系统,这则消息不仅号称要从头克隆一套类似的操作系统,甚至还要在开发过程中改进现有UNIX的设计。这则消息的作者声称,新的GNU系统会提供各种常用软件,包括文本编辑器、用来执行各种命令和程序的Shell、编译器,以及“一些其他的东西”。除此以外,它还提供很多原本UNIX并不具备的功能,包括一套基于Lisp语言的图形用户界面;一个防崩溃的文件系统;以及一套基于麻省理工学院内部网络系统的网络协议栈。这些都非常吸引眼球。

“GNU可以运行现有的UNIX程序,但和现有的UNIX并不完全相同,”作者写道,“我们会在开发过程中融合我们的经验和对其他操作系统的了解,不断改进现有的UNIX系统设计。”

读者的各种质疑显然早在意料之中。整个消息最后,作者加入了一段《我是谁》的自我介绍:

我是理查德⋅斯托曼,EMACS编辑器的作者。如今,有很多人都在效仿这个编辑器。现在在麻省理工学院人工智能实验室,我的工作涉及编译器、编辑器、调试器、解释器,以及非兼容分时系统(ITS)以及Lisp机的操作系统。我创造了ITS上早期的独立于各终端硬件的显示技术。我还在Lisp机上实现了一个防崩溃的文件系统和两个窗口系统。

似乎是命中注定一般,斯托曼的GNU系统没能赶在感恩节假期结束前发布。不过,斯托曼依旧赶在1984年1月的时候做出了不小的成果,他自己也完全融入到了UNIX软件开发的世界之中。对于这位从ITS世界来的架构师来说,在UNIX中设计软件似乎更像是设计城郊购物中心,而非设计紫禁城皇宫。即便如此,设计成类UNIX系统依旧有它的优势。ITS的确强大,但仍有一处致命缺陷:麻省理工学院的黑客们创造的ITS系统,是专门针对当时强大的DEC PDP-10计算机设计。可到了20世纪80年代,人工智能实验室的管理员决定淘汰掉实验室的PDP-10计算机。当年辉煌一时的ITS系统也因此成了一座无人的“鬼城”。而UNIX的设计则与此不同。它的设计非常强调移植性,它并不依赖于某个特定的硬件环境。因此,面对硬件更替,UNIX毫无压力。UNIX最初是由当时AT&T贝尔实验室的几个年轻科学家创造的。之后,这套系统被大家纷纷传阅,不断改进。在资金并不富裕的学术界,UNIX系统甚是流行。和麻省理工学院的同僚们不同,UNIX的作者可用的硬件资源非常有限。他们必须把软件设计得可以在各种良莠不齐的硬件上运行无阻。最初是针对PDP-11系统设计,PDP-11是DEC推出的另一种16位计算机。在麻省理工人工智能实验室的黑客们看来,它顶多只能用来跑些小程序。之后,UNIX又陆续开始支持32位计算机,比如VAX11/780。到了1983年,一些公司开始推出更强大的一代被称作“工作站”的桌面计算机。其中,以Sun公司产品最为引人注目。这些运行着UNIX的计算机有着更小的体积,却和当年的PDP-10性能相当。

为了增强可移植能力,UNIX的开发者在软件和计算机之间,加入了一个抽象层。和人工智能实验室的ITS系统不同,UNIX并非使用特定于某个硬件平台的指令集开发。它的开发者们创造了一种被称为“C语言”的更抽象的编程语言,借此屏蔽了底层的硬件差异。开发者们于是可以放眼全局,集中设计各个组件之间的协调机制,设计组件的接口,而不必把精力分散到每个组件的开发和移植上。他们由此创造了一套系统,可以轻易地被移植到几乎各种计算机上。如果某个用户对哪个组件并不满意,他们可以按照定义好的接口,修改现有组件,甚至重新开发一个同样功能的组件,再把改进的组件放回原位,一切依旧会运行正常。简而言之,UNIX的设计具备极大的灵活性,这也促进了计算机这个市场的发展,更为UNIX带来了无限生机。

斯托曼之所以决定开发一套名为GNU的类UNIX系统,是因为人工智能实验室已经停止使用ITS了。而整个实验室的黑客文化,也伴随这ITS的消亡,渐渐分崩离析。这个改变对斯托曼来说,可谓打击重大。施乐公司打印机事件,让他意识到了专有软件的不义。而实验室的黑客社区几乎解散,则让斯托曼必须面对抉择:要么在专有软件面前投降,要么起身反抗它。

ITS的消亡过程历经了很长时间。1980年的时候,实验室里的大部分黑客都在开发Lisp机(Lisp Machine)和运行其上的操作系统。

Lisp是一种非常优雅的编程语言。它最初由人工智能领域的先驱,约翰·麦卡锡(John McCarthy)发明。二十世纪五十年代,他曾是麻省理工学院人工智能领域的科学家。他发明的Lisp语言,非常适合编写复杂程序,来处理不具备很好结构的数据。Lisp这个名字来自LISt Processing,即链表处理。之后,约翰·麦卡锡离开了麻省理工学院,去了斯坦福大学的人工智能实验室。麻省理工学院的黑客们则改进了Lisp语言,并创造了一个Lisp方言,名为MACLISP。其中的“MAC”,指的是“MAC项目”。MAC项目是一个由美国国防部高等研究计划局(DARPA)资助的项目。借助这个项目,诞生了如今的人工智能实验室。整个实验室由黑客理查德·格林布拉特(Richard Greenblatt)领导。在七十年代末期,他们设计出了专门用来高效地执行Lisp程序的计算机,命名为Lisp机。接着,开发了一整套基于Lisp的操作系统。

到了1980年,两组互相竞争的黑客各自成立了公司,分别制造和销售Lips机。理查德·格林布拉特成立了“Lisp机公司”(Lisp Machines Incorporated)。他试图避免引入外界的投资,创造一个真正的“黑客公司”。另外一大部分黑客们,则加入了名为Symbolics的传统创业公司。到了1982年,这些黑客则完全放下了在麻省理工学院的工作。

随着黑客们的离去,实验室的程序和机器要么没人修,要么也要等上好久才有人打理。理查德·斯托曼说,更糟糕的是,实验室正经历了前所未有的“人事变动”。以前,黑客们虽说人少,却是实验室中很重要的一伙人。如今,黑客几乎绝迹,而“不喜欢PDP-10的教授和学生则依旧那么多。”

1982年,人工智能实验室接到通知,要求替换那台已经服役了12年的PDP-11计算机。PDP-11曾是迪吉多公司(Digital Equipment Corporation,简称DEC)出品的16位计算机。在1982年,迪吉多公司的主打产品是Decsystem 20。对于应用程序来说,Decsystem 20和PDP-11兼容。但是如果想要在上面运行ITS这样的操作系统,则需要投入大量劳力,把系统从PDP-11移植到Decsystem 20上。当下的人工智能实验室早已物是人非,实验室中的编程能手几乎都已走光。而实验室中的一些教授则大力鼓吹Twenex系统,它是一款由迪吉多开发的商业操作系统。由于黑客们在人数上处于劣势,只好将就着用Twenex系统。

KL10_1979.jpg

PDP-10与KL-10。图片拍摄地点为斯坦福大学人工智能实验室,摄于1979年。

几年之后,斯托曼回忆起那时的情景:``那些教授们说,‘没有足够的黑客们来维护ITS系统,我们将会面临各种灾难。要避免这些发生,我们只能投靠商业软件。我们可以让商业公司来提供维护。’后来的事实证明,他们的这番论调大错特错。可当时他们的确这么做了。’’

一开始,黑客们觉得Twenex只不过又是一个专制的标志。和之前那些专制标志一样,只要把它推翻,就万事大吉了。这个系统从名字看,就像是对黑客们的挑衅:迪吉多公司对这个系统的官方名字是TOPS-20,意为“顶尖20”。它是TOPS-10的后继产品,而TOPS-10则是迪吉多当年给PDP-10配备的标准系统。不过,TOPS-20并非是在TOPS-10基础上做的开发。它的主要代码都继承自BBN公司(Bolt,Beranek and Newman)为PDP-10开发的Tenex系统。斯托曼则由此把TOPS-20称作Twenex,因为他实在不想用TOPS-20这个名字。他说:“这个系统根本算不上‘顶尖’,我说什么也不会这么夸它。所以我在Tenex里添了个字母w,把它叫作Twenex。”

在黑客界,人们把跑着TOPS系统的Decsystem计算机戏称作Oz,意为“奥兹国”。奥兹国这名字源自《绿野仙踪》这部小说。因为在黑客界,人们都说这样一台计算机需要有个PDP-11作为终端机才能运行。于是,人们看到这台计算机连着PDP-11作为终端,就不禁想到了《绿野仙踪》中那位吹牛皮的奥兹国大法师。黑客们常戏谑道:“我是伟大全能的奥兹国大法师!我可没看到身后那台PDP-11。”

黑客们当年第一次看到Decsystem的时候也许还会借机嘲笑两句,可是,很快他们就在Twenex面前笑不起来了。Twenex系统增进了系统的安全强度,而且Twenex上的软件也都考虑了各种安全措施。当年,黑客们试图避免设置任何密码和安全设施,那些行为就好像在和管理员玩猫捉老鼠的游戏。而如今,他们面对的,则是一场彻头彻尾的战斗了。系统管理员辩解说,如果没有这些安全设施,Oz系统就随时都会面临崩溃。而黑客们则辩解说,避免崩溃的最好办法,就是公开程序的源代码。遗憾的是,黑客人数上不占优势,而且大多数黑客也逐渐失去了当年的那份果断。最终,系统管理员还是胜利了。

一开始的政策是,任何一个人工智能实验室的成员,都拥有一个“特权车服务”(wheel privilege),可以用来绕过系统的安全限制。可是,任何有“特权车”的人,都有权吊销别人的“特权车”。这样一来,就促使一小撮黑客总是尝试吊销其他人的特权,借此掌控全局。

见得此状,斯托曼破解了密码,利用开机时的调试器,成功破坏了几个这样企图夺权的阴谋。在第二轮“政变”之后,斯托曼向全体人工智能实验室的人发出了警告信。

信中写道:“还有另外一波强大的力量,企图剥夺我们的权利。不过现在,这些官僚们已经暂时被我们打败了。”这是封匿名信,信底的签名是“自由奥兹国电台”。

不过,所谓的匿名信并没把斯托曼挡在幕后。到了1982年,斯托曼关于密码和安全设施的抗议早就内外闻名。以至于有不少人工智能实验室以外的人,通过ARPAnet网络,使用斯托曼的登录账号,访问人工智能实验室的计算机。他们当初使用的ARPAnet,是如今互联网的雏形。它曾是一个研究项目,旨在构造一个大型计算机网络。这个网络之后不断发展,最终成了今天大家见到的互联网。唐⋅霍普金斯(Don Hopkins)在20世纪80年代是加利福尼亚州的一名程序员,他当年就曾利用斯托曼的账号访问人工智能实验室的计算机。他从黑客圈的小道消息里听说,想要使用麻省理工学院大名鼎鼎的ITS系统,只需要使用一个简单的用户名和密码登录就可以:用户名,RMS;密码,RMS。

霍普金斯说:“麻省理工学院让我和很多其他的人免费使用他们的计算机,这让我受益终生。这在当时,对大家来说可是份厚礼。”

这种允许“游客”的政策,在ITS时代还能被麻省理工学院的管理人员容忍。可等到Oz成为实验室连接ARPAnet的主节点后,这行为就被逐渐禁止了。一开始,斯托曼依旧使用原来简单的用户名和密码,这样,外部人员还是可以访问实验室的计算机。但是,脆弱的Oz禁不起这么折腾,管理员很快就禁止了外部人员的访问。因为有些访客会有意无意地把整个系统搞垮。再后来,管理员们严重警告了斯托曼公开用户名和密码的行为。对此,斯托曼并没有放弃使用Oz系统,而是在回应中强调了自己的底线。

斯托曼之后说:“当年人工智能实验室第一次要求设置密码,我依旧坚持自己的原则——计算机上不该有密码。因此,我也坚决不会帮助他们维护一个充满安全设施的计算机系统。”

20世纪80年代早期,斯托曼的这次抗议标志着黑客和系统管理员之间的矛盾进一步升级。不过随着时间的流逝,这种紧张关系反而被黑客圈子内部的矛盾逐渐取代。在KL-10来到实验室的时候,实验室的黑客圈子已经俨然分成了两派。一派主要围绕一家名为Symbolics的商业软件公司,另一派则围绕Symbolics的对手公司Lisp Machines Inc.(LMI)。这两家公司在Lisp机的市场竞争中不分上下,这种Lisp机是以Lisp编程语言为基础构建的。 八十年代早期,斯托曼的这次抗议,标志着黑客和系统管理员之间的矛盾进一步升级。不过随着时间的流逝,这种紧张关系反而被黑客圈子内部的矛盾逐渐取代。在Decsystem 20来到实验室的时候,实验室的黑客圈子已经俨然分成了两派:LMI派和Symbolics派。

Lisp是一种非常优雅的编程语言。它最初由人工智能领域的先驱,约翰⋅麦卡锡(John McCarthy)发明。20世纪50年代,他曾是麻省理工学院人工智能领域的科学家。他发明的Lisp语言,非常适合编写复杂程序,来处理不具备很好结构的数据。Lisp这个名字来自LISt Processing,即链表处理。之后,约翰⋅麦卡锡离开了麻省理工学院,去了斯坦福大学的人工智能实验室。麻省理工学院的黑客们则改进了Lisp语言,并创造了一个Lisp方言,名为MACLISP。其中的“MAC”,指的是“MAC项目”。MAC项目是一个由美国国防部高级研究计划局(DARPA)资助的项目。借助这个项目,诞生了如今的人工智能实验室。整个实验室由黑客理查德⋅格林布拉特领导。在70年代末期,他们设计出了专门用来高效地执行Lisp程序的计算机,命名为Lisp机。接着,开发了一整套基于Lisp的操作系统。到了1980年,由Lisp机项目产生了两家商业公司:由人工智能实验室的前主管,罗素⋅诺夫斯科(Russell Noftsker)创立的Symbolics公司;和理查德⋅格林布拉特创立的“Lisp机公司”(Lisp Machines Incorporated),即LMI。

Lisp机的软件系统本身是黑客创造的。它的版权归麻省理工学院所有。但是,按照黑客传统,任何人都可以获得源代码、复制或修改。然而,这种自由分享的方式却让商业公司很是烦恼:公司的产品无法在市场中显得独一无二,也就少了商机。为了获取优势、吸引用户,两家公司开始从人工智能实验室里挖走黑客。它们把黑客们安排在自己公司里,让他们的代码不再流入人工智能实验室。

在Symbolics和LMI两家公司里,Symbolics挖人的行为相比更加激进。20世纪80年代末期,这家公司已经吸纳了人工智能实验室的14位黑客作为兼职顾问,负责开发他们的Lisp机。剩下的黑客们,除了斯托曼以外,则都在LMI公司就职。

LMI和Symbolics分别是两家做Lisp机的计算机公司。Symbolics得到了一些外部的投资,它招募了很多人工智能实验室的黑客,把其中的一部分黑客安排去改进Symbolics的Lisp机的操作系统。八十年代末期,这家公司已经吸纳了人工智能实验室的14位黑客作为兼职顾问,负责开发他们的Lisp机。剩下的黑客们,除了斯托曼以外,则都在LMI公司就职。斯托曼则更享受人工智能实验室里没有压力的工作环境,更不想把自己划进哪个阵营。所以他哪个公司都没加入。 一开始,这些在公司干活的黑客们还会抽出些时间,在麻省理工学院继续做些工作,也会给麻省理工学院的Lisp机的操作系统贡献些代码。LMI和Symbolics的Lisp机操作系统都是从麻省理工学院的Lisp机操作系统上衍生而来。在使用许可证上,麻省理工学院要求两家公司必须允许麻省理工学院使用它们的操作系统。但是,这两家公司可以禁止麻省理工学院再发布他们的产品。不过,1981年间,两家公司之间倒是有个不成文的君子协议,他们都允许麻省理工学院使用并再发布两家公司的代码。这样,麻省理工学院的Lisp机操作系统就包含了来自外部公司的各种改进,而基于许可证,改进后的系统代码又可以继续流入各家公司。这相当于公司之间可以共享代码。如此,那些依旧在麻省理工学院工作的黑客们,就可以继续保持中立。

1982年3月16日,斯托曼清晰地记得这一天,那是他的生日。在这一天,Symbolics的主管们决定不再遵循当初那份君子协议。为了打击LMI,他们禁止麻省理工学院再发布包含Symbolics公司的代码。因为在LMI公司就职的黑客比较少,所以Symbolics的主管们觉得LMI从共享的代码中获益更多。通过切断代码流通的途径,Symbolics企图把LMI赶出市场。为了不让LMI获得自己的代码,他们决定执行许可证上的权利,仅仅允许麻省理工学院的学生运行他们的操作系统。借此,Symbolics可以间接地让学院中的用户为自己做测试。而任何用户提供的代码测试和改进都只能被Symbolics公司所用。 斯托曼在那时候负责维护实验室中的Lisp机,最开始的几个月还多亏了LMI公司的创始人,格林布拉特(Greenblatt)的指点帮助。当下,Symbolics的做法可是惹恼了斯托曼。那些在Symbolics公司工作的黑客们都曾给实验室的Lisp机系统贡献过代码,如今,还有很多错误和bug遗留在这些代码中,甚至有些特性还都是半成品。如今,Symbolics高层的做法无疑相当于下了“最后通牒”,令身在Symbolics的黑客们无法改进麻省理工学院的Lisp机系统。斯托曼也发起了反攻,他切断了连接实验室和Symbolics公司的微波通信信道,发誓再也不会在Symbolics生产的机器上工作。并且决心要继续完善麻省理工学院的Lisp机系统上,以此帮助LMI,打击Symbolics。斯托曼回忆说:“当初我觉得,人工智能实验室是个中立国,就好像二战时的比利时一样。如果德国入侵比利时,比利时就要对德宣战,就得和英法一个阵营。”

这样,一场“Symbolics之战”就打响了。而关于此事的实际情况,怕是无从考证,只能凭借当事人回忆来重现历史。Symbolics公司的主管们逐渐意识到,自己公司的操作系统的最新特性,总会依旧出现在麻省理工学院的Lisp机系统上,甚至是竞争对手LMI的Lisp机系统中。于是,他们在斯托曼的计算机上安装了间谍程序。斯托曼说,他为实验室的系统添加的特性都是自己从头开始写的。虽然许可证上允许他阅读Symbolics系统的源代码,但出于版权法的考虑,他必须要想办法把代码写得和Symbolics公司的代码有所不同。而Symbolics公司的主管们则声称斯托曼抄袭了他们的代码,并把这件事情告到麻省理工学院的管理层。根据1994年出版的哈维⋅纽奎斯特(Harvey Newquist)所著的《大脑创作家》(The Brain Makers: Genius, Ego, and Greed, and the Quest for Machines That Think)一书中的描述,麻省理工学院曾警告过斯托曼,让他“远离Lisp机项目”。而斯托曼则说麻省理工学院一直是支持他的:“他们没给过我警告。不过这件事倒是确实提醒了我。为了以防万一,对于新的特性和重大改变,我不再参考Symbolics的代码,而只是参考他们提供的用户文档来做开发。”

无论当初事实究竟是什么样,这事最终还是平息了。斯托曼不再读Symbolics的代码,他按照自己的想法去开发,也吸引了人工智能实验室的成员来为他报告Bug。同时,他也确保了LMI公司可以访问到他最新的代码。斯托曼说:“我当初就觉得,我要是这辈子只能再做一件事,那就是要惩罚Symbolics。”

这话说得甚是坦白。显然,斯托曼不是个和平主义者。随着矛盾的升级,给双方带来的情感变化也逐渐加大。根据哈维⋅纽奎斯特的说辞,斯托曼当年甚至发了一封邮件,扬言要“浑身绑满炸弹冲进Symbolics的办公室”。斯托曼则否认发过这样的邮件,并且说这完全是“恶毒的谣言”。不过,他倒是承认有过这种极端想法:“我倒的确幻想过要自杀式袭击毁掉他们的办公楼。”

Symbolics公司的主管们逐渐意识到,自己公司操作系统的最新特性,总会依旧出现在麻省理工学院的Lisp机系统上,甚至是LMI的Lisp机系统中。这让他们甚为不满。斯托曼知道版权法这么个东西,所以他为学院的系统添加的特性,都是自己从头开始写的。他身在人工智能实验室,可以读到Symbolics操作系统提供给实验室的源代码。他会先读读Symbolics的代码,理解要解决的问题和解决方案,最后再自己重新写一遍,确保和Symbolics的实现完全不同。可Symbolics公司的主管们却不管这个。他们在斯托曼使用的计算机终端上安装了间谍软件,企图抓住斯托曼剽窃的证据。到了1983年年初,他们把这件事情告到麻省理工学院的管理层。可依旧拿不出多少像样的证据,只有一些看似类似的代码片段。

人工智能实验室的主管找来斯托曼,给他看了Symbolics公司指责他的证据。斯托曼一一否认,他说这些相似的代码都是Symbolics诞生之前,在学院Lisp系统里就有的。之后,斯托曼话锋一转:他自己已经克隆了Symbolics公司的众多特性,在那几千行的代码中,如今Symbolics公司却只能提供这么点证据来证明斯托曼剽窃,这恰恰说明斯托曼的确没有抄袭Symbolics的代码。人工智能实验室最终承认了斯托曼并没有剽窃,他也就继续开发到1983年。

不过这件事倒是确实给斯托曼提了醒。“以防万一,对于新的特性和重大改变,我不再参考Symbolics的代码,而只是参考他们提供的用户文档来做开发。”对于一些重大的新特性,斯托曼则往往在文档发布之前就着手设计开发。等到Symbolics公司发布文档,他再对代码修改,以便兼容Symbolics的接口。之后,如果Symbolics提供了补丁,他再阅读补丁的代码,以便确认自己的实现中是否存在类似bug。如果存在,则尝试用不同的实现来解决。

整个过程也坚定了斯托曼的决心。斯托曼的开发,逐渐把人工智能实验室中的成员拉回到麻省理工学院的Lisp机系统上。这些用户也为斯托曼持续地提供错误报告。麻省理工学院继续允许LMI直接访问学院Lisp机系统的代码。斯托曼说:“我当初就觉得,我要是这辈子只能再做一件事,那就是要惩罚Symbolics。”这话说得甚是坦白。显然,斯托曼不是个和平主义者。随着矛盾的升级,给双方带来的情感变化也逐渐加大。

这样的绝望感,让斯托曼又有了家园被毁的感受。人心散了,人工智能实验室的黑客文化也逐渐褪去。之后在与史蒂芬⋅李维的采访邮件中,斯托曼把自己形容为Ishi——加利福尼亚州最后一位Yahi族印第安人。这样的说法倒是为斯托曼的经历平添了几分史诗色彩。现实中,斯托曼与实验室中的其他黑客的关系则越来越紧张。很多斯托曼当年的同事并非觉得Symbolics好像要上灭下绝。他们反倒认为Symbolics的行为是迟到的正义。在把Lisp机商业化的过程中,Symbolics把黑客文化中的“工程师做主”的原则从象牙塔中带入了商业公司里,让公司里不再有“外行领导内行”的现象。其他黑客们也没觉得斯托曼是在捍卫什么,而是觉得他只是代表着一种无政府主义的想法而已。 由此带来的绝望感,让斯托曼又有了家园被毁的感受。人心散了,人工智能实验室的黑客文化也逐渐褪去。之后在与史蒂芬·李维的采访邮件中,斯托曼把自己形容为Ishi——加利福尼亚州最后一位Yahi族印第安人。这样的说法倒是为斯托曼的经历平添了几分史诗色彩。不过在Symbolics工作的各位黑客们则另有看法。他们并非觉得Symbolics好像要上灭下绝。很多斯托曼当年的同事,都觉得Symbolics倒是迟到的正义。在把Lisp机商业化的过程中,Symbolics把黑客文化中的“工程师做主”的原则从象牙塔中带入了商业公司里,让公司里不再有``外行领导内行``的现象。其他黑客们也没觉得斯托曼是在捍卫什么,而是觉得他只是代表着一种过时的想法而已。

斯托曼倒也没有否认当年同事们的这种观点。这种私下的过结也促成了Symbolics下达“最后通牒”的决定。斯托曼说,Symbolics公司雇走大量黑客之前,斯托曼就觉得很多黑客都在有意躲避自己。这些黑客之后大部分都加入了Symbolics公司。斯托曼回忆:“他们很少问我去不去唐人街吃饭了。当年从格林布拉特开始,实验室就有个传统——谁要是去吃饭,谁就发个消息或者亲自走一圈,问问实验室里还有谁想一起去。可大概在1980年到1981年间,逐渐就没什么人问我了。他们不邀请我倒也罢了。之后,他们之中有人才告诉我,当年他被人告知,不许他跟我说大家一起出去吃饭故意不带我这个事。”

虽然斯托曼对这种排斥行为非常反感,但并没对此有什么行动。可Symbolics的最后通牒则改变了一切,这事从此也不再是私人恩怨了。当Symbolics公司不再给用户提供源代码的时候,斯托曼决心要对此进行反击。他日夜坐在他的办公室里,在麻省理工学院的Lisp机系统上,实现了Symbolics提供的各种新功能和Bug修正。他把修改后的版本代码分发给各个用户,包括LMI公司的客户。这样,LMI公司的客户也可以拥有Symbolics系统类似的功能。

这也为斯托曼在黑客圈子里平添了几分名气。斯托曼早就因为Emacs而名声大噪。如今,他一个人单枪匹马,对抗整个Symbolics公司的开发团队,而且这团队之中还尽是各色传奇黑客。斯托曼的这一行为本身,就足以成为信息时代的一段传奇。史蒂芬⋅李维在《黑客》一书中称这一行为是“黑客杰作”;并把斯托曼比作现代的约翰⋅亨利(John Henry)。史蒂芬⋅李维在书中说,很多Symbolics公司工作的黑客们都钦佩斯托曼的能力。他引述了曾在Symbolics的帕罗奥多分部工作的比尔⋅高斯伯的一席话,对于斯托曼那段时期的产出,比尔⋅高斯伯甚是惊奇:

“我读过斯托曼那段时期的一些代码,有些代码写的并不怎么出色(至少在我看来),但我还是要说,且慢,他就只有一个人,他没法和别人整晚探讨,他是单枪匹马啊!一个人能完成如此大量的工作,简直是逆天了!”

对于斯托曼来说,这段时期和Symbolics的竞争,既让他感到骄傲,又让他感到了深深的难过。斯托曼是个彻头彻尾的自由主义者,自己的父亲也曾在第二次世界大战期间为自由而战。他不会期盼勉强得来的和平。在加入人工智能实验室之前,他本就心向自由。如今与Symbolics之间燃起的硝烟,则又把他推向了一个极端。无巧不成书,这次的矛盾,恰恰发生在人工智能实验室黑客文化消退的时候。斯托曼曾被这文化滋润,如今眼见它消失殆尽,其中心酸,难以言表。曾有一日,在他编程的间歇,偶尔路过实验室的设备间。眼见那台曾在实验室服役的PDP-10摆放在房间之中,无人问津。当年那几个忙碌闪烁的状态灯,如今也黯淡无光。往事片段,涌上心头。眼看着这台几十年前的计算机,仿佛看着家中亲人,静静地躺放在那里,魂归西天。

“我当时泪如泉涌,”斯托曼说,“它就在那儿,可却没人关心,无人维护。眼前的一切在告诉我,我们当年的那个黑客大家庭,早就不复存在了。”

然而,留给斯托曼感伤怀古的时间却并不多了。无论曾投入过多少人力物力,整个Lisp机产业却仅仅是昙花一现。计算机小型化的脚步一步不停。带来了更新、更强大的微处理器。这一波趋势,如同风卷残云般,将其他竞争者一举赶出主流市场。

伴随这波风潮而来的,是成千上万的专有软件。每个专有软件都带着自己的使用许可证和保密协议扑向用户。令其他黑客无法触碰其中的代码。很多软件使用许可证对用户粗暴无礼。但是在1983年,这些专有软件依旧成了主流,填补了市场。也让潜在的竞争对手望而却步。软件曾经只是各个硬件厂商的随机赠品,如今却成了业界新宠。当下,用户们开始极度索要新软件、新功能,至于是否可以知道软件内部究竟做了什么,则甚少提及。

个人计算机的到来把这股潮流推向了巅峰。苹果、Commodore等公司跨入了富翁的行列。它们出售个人计算机,并在上面安装了自己公司的操作系统。这些计算机的用户们可不再像当年的黑客,他们并不关心软件的源代码,要是买来的软件不附带源代码,他们也不会大呼小叫。一些还恪守当年黑客信条的人,曾试图把黑客的这种传统带入个人计算机这个新兴市场。但无论如何,这个唯利是图的新兴市场推动着程序员写出更多的软件,也同时带来了更多的使用许可证。

这其中,最为著名的程序员恐怕要算比尔⋅盖茨了。这位哈佛的辍学生比斯托曼晚两年入学哈佛,算是斯托曼的学弟。不过,斯托曼当年并不认识他。1983年9月27日,斯托曼在net.unix-wizards新闻组上发布了GNU工程计划。而七年之前,比尔⋅盖茨在软件开发者的社区中发表了那封著名的公开信。当年,微软还是坐落在新墨西哥州阿尔伯克基市的一家小公司。那时,曾有很多个人计算机用户私下复制微软的软件。由此,才让比尔⋅盖茨发表了那封《致爱好者的公开信》。

“有谁会在没有任何报酬的情况下来做这些专业工作?”比尔⋅盖茨在信中发问:“什么样的爱好者可以为他的产品投入三人年的精力?开发完软件还得去发现错误,编写文档,最后还要免费发布他的产品。”

比尔⋅盖茨1976年2月发表了这封公开信,那时还没有几个人工智能实验室的黑客读过这信。可显然,这封信代表了商业软件公司和软件开发者对于软件态度的转变。既然市场都这么说了,那还为什么把软件当作免费赠品呢?从20世纪70年代走到20世纪80年代,出售软件已经不再仅仅为了弥补开发的成本,它变成了一种政治宣言。当年,里根政府正在极力清除大萧条时期政府制定的各种避免竞争的限制,越来越多的程序员也把黑客文化视为一种反对竞争,乃至违背美国精神的东西。最起码,他们觉得所谓黑客精神,最多是股复古风,不过是20世纪60~70年代反对大型企业态度的延续,一种企盼回到理想年代的情结。

斯托曼十几岁的时候,人们就觉得他少年老成。所以,所谓的复古、不赶潮流对他来说倒也没什么。可作为一个一度使用顶级计算机、顶级软件的程序员,面临着那些带有各种使用许可证,禁止用户随意复制或修改的专有软件,斯托曼却面临了一场艰难的道义选择:摆在眼前的有两条道,要么默许专有软件,然后忘掉自己当初对它的各种反对;要么倾其一生,创造一套独立于各种专有软件的系统。在和Symbolics公司对抗了两年之后,斯托曼自信有能力去走第二条路。他说:“我倒是可以从此不再使用计算机。可这是我看家本事了,别的工作怕也做不来。没准可以做个餐厅服务员,不过也去不了什么大餐馆。”

要让斯托曼放弃他所热爱的计算机和编程,放弃从搬到剑桥市以来这个最大的乐趣来源,转头去做个餐厅服务员或是别的工作,斯托曼可绝对不能答应。他没有退却,决定主动出击。

作为一个无神论者,斯托曼不愿把这一系列事件归咎于命运、因果或是缘分。他决定避免使用专有软件,并且创造完全自由的一套操作系统及其外围软件,来帮助其他用户获得自由。做出这个选择,对于他来说是再自然不过了。毕竟,凭借斯托曼内心的那份反抗精神和他的智慧能力,他选择了一条少有人走的路。这条路,甚至还没被很多人发现。在他的一篇名为《GNU工程》的文章中,斯托曼曾引用了犹太先贤希肋耳(Hillel)的话来表明他的决心: 作为一个无神论者,斯托曼不愿把这一系列事件归咎于命运,因果或是缘分。他决定避免使用专有软件,并且创造完全自由的一套操作系统及其外围软件,来帮助其他用户获得自由。做出这个选择,对于他来说是再自然不过了。毕竟,凭借斯托曼内心的那份反抗精神,和他的智慧能力,他选择了一条少有人走的路。这条路,甚至还没被很多人发现。在他的一篇名为《GNU工程》的文章中,斯托曼曾引用了犹太先贤希肋耳(Hillel)的话来表明他的决心:

我不为我,谁人为我?我只为我,我为何物?此时不为,更待何时?

在外演讲时,斯托曼会避免借用任何宗教语言,而采用一些世俗的说法来描述。他说:“我问自己,我作为一个操作系统开发者,究竟可以做些什么来改变现状?这个问题稍加思考,很快就可以看出来,解决这个问题需要的恰恰是一个操作系统开发者。”

斯托曼说,一旦想通了这点,其他的就“顺理成章了”。在1983年,麻省理工学院从Symbolics采购了他们公司的第二代的Lisp机。在这批Lisp机上,根本无法运行麻省理工学院自己的Lisp机操作系统。旧机器被这些新采购的机器替代,几乎没有什么人再使用麻省理工学院的Lisp机系统,也就没人来报告bug。斯托曼也就无法继续开发学院的Lisp机系统。他必须停下这个工作,不过这也恰恰是他想要做的。因为麻省理工学院的Lisp机系统并不是斯托曼心目中的自由软件:用户虽然可以获得系统的源代码,但是却不允许用户独立发行它。另一方面,麻省理工学院的系统也依旧继续开发着:LMI没有被Symbolics打倒,他们依旧在开发自己的软件。

斯托曼可不希望花费自己的一生,来惩罚那些摧毁黑客社区的人。他要自己创建一个新的社区。他决定远离那些与他理想背道而驰的软件。他打算要投入自己的全部精力,开发出心中理想的软件,帮助自己和他人远离那些不讲道义的程序。他发誓要创造一个自由的操作系统,“或者为此而奋斗致死”。为此,他在1984年1月辞去了麻省理工学院的工作,专职去开发GNU系统。

辞去工作可以让他在法律上与麻省理工学院断绝联系。不过,依然有很多人工智能实验室的朋友支持斯托曼的工作,让他得以继续使用实验室的设备。之后,甚至给他准备了一个独立的办公室。凭借斯托曼的能力,他在开发GNU系统之余,还兼职一些咨询师的职位,借此收入来支持GNU系统的继续开发。在从麻省理工学院辞职的过程中,他拒绝了任何机构拥有GNU系统。这位曾经一度畏惧社交活动的人,如今则把这种心理发挥到极致,让自己的社交障碍变成了一堵防火墙,隔离了各种可能的法律纠纷。

在项目开发的最初几个月,斯托曼甚至也把自己隔离在UNIX社区之外。尽管他在net.unix-wizards新闻组发布的消息获得了很多同道的支持,但在最初阶段,只有很少人加入了这个工程。

当年一个UNIX用户组的一位领导李奇⋅莫林(Rich Morin)说:``整个社区(对于斯托曼的项目)的反响比较一致。大家都会说,‘嗯,不错,好啊。是个挺棒的想法。期待你的代码,希望能看到它成功。’

可说到底,这可确实是个超级大的工程。凭着黑客做事风格,斯托曼决定尽量采用已有的自由软件。于是他开始调研已有的自由或免费的程序,试着修改它们并把它们纳入GNU工程之中。第一个相中的,是一款名为VUCK的编译器。它可以把C语言编写的程序转换成可执行的机器码。VUCK是荷兰人开发的,荷兰语中,是“自由大学编译器”(Free University Compiler Kit)的缩写。带着几分期待,斯托曼联系VUCK的作者,询问它们这个软件是不是自由的。作者告诉斯托曼,所谓“自由大学”,指的是阿姆斯特丹自由大学(Vrije Universiteit in Amsterdam)。虽然大学的名字里有“自由”二字,但并不意味着软件也是自由的。这番回复令斯托曼非常沮丧。

斯托曼回忆:“他的回复带着几分嘲讽。他说,这所大学是自由的,可编译器不是。”VUCK的作者非但没能给斯托曼提供什么帮助,反而建议斯托曼放弃开发GNU工程,并希望他转而为VUCK开发些插件,没准可以提高VUCK的销量,而且答应会按利润给斯托曼分成。斯托曼说:“由此,我决定为GNU工程开发的第一个软件,将是一个多语言、跨平台的编译器。”

放弃了VUCK,斯托曼转向另一款名为Pastel的Pascal编译器。它由劳伦斯⋅利弗莫尔国家实验室(Lawrence Livermore National Lab)开发。Pastel的作者告诉斯托曼,这个编译器可以被自由传播和修改。遗憾的是,这款编译器占用内存太多,以至于在很多平台上无法运行。它会对整个文件做语法分析,然后把所有的状态都存入内存,等到编译结束,才释放所占用的空间。在当年,这种做法只能在大型机上行得通。而运行UNIX的机器,普遍没有那么大的内存。哪怕是运行32位UNIX系统的机器,也很少能提供如此大的内存给一个程序。一开始,斯托曼还取得了一些小进展。他给这个编译器做了一个C语言的前端,然后跑在内存较大些的Vax机器上。可是,当他把这个编译器移植到68010上的时候,编译器则总是崩溃。仔细查清原因,斯托曼发现是内存太小造成的。于是,他决定只能从头开发一个编译器。最终,他实现了这个编译器,并把它命名为GNU C编译器,缩写GCC。不过,在1984年,大家也还不知道这个编译器后续开发将会如何。于是,斯托曼一方面慢慢等着编译器相关的计划逐渐成型;另一方面着手开发GNU的其他组件。

在1984年9月,斯托曼开始开发GNU版本的Emacs编辑器。这个编辑器试图克隆并改进他主导了十几年的Emacs项目。在当年,UNIX社区里有两大流行的编辑器:一款是Sun公司的创始人比尔⋅乔伊(Bill Joy)开发的vi编辑器;另一款是贝尔实验室的科学家,UNIX创始人肯⋅汤普森(Ken Thompson)开发的ed编辑器。这两款编辑器都很不错,也很流行。但是它们都没有提供类似Emacs的扩展功能。为UNIX系统提供一个Emacs编辑器,斯托曼可以更好地展示他的才能,也能让更多Emacs用户参与进来。

如今回忆起来,斯托曼说,他决定为UNIX开发Emacs,并没从什么战略角度考虑。“我就是想在GNU系统里用Emacs。而且由我来开发它再合适不过了。”

有一次,他找到了一些现成代码,希望能借此节省些时间。在开发UNIX版的Emacs的过程中,斯托曼很快找到了卡耐基·梅隆大学毕业的一位博士生詹姆斯·高斯林(James Gosling)。他用C语言开发了一款名为Gosling Emacs的编辑器,简称Gosmacs。它克隆了部分Emacs的功能,内建了一个简单的Lisp语言解释器,实现了简单的Lisp语法,并把这种Lisp方言成为Mocklisp。尽管高斯林已经把Gosmacs卖给了一家名为UniPress的私人软件公司,但是高斯林在读博士期间,还曾通过邮件,授权给了一位参与过Gosmacs早期开发的人,让这位开发者可以独立发布Gosmacs。本着互助的精神,这位开发者将代码给了斯托曼,并担保可以自由使用。

一开始,斯托曼以为他只要修改一些用户命令,就可以实现当年PDP-10上的Emacs的功能。然而,他发现Gosmacs使用的Mocklisp解释器实在太山寨,很难称得上是个真正的Lisp解释器。于是斯托曼不得不先去实现一个真正的Lisp系统。斯托曼要大刀阔斧地修改Gosmacs的代码了。他要让这个编辑器用上Lisp的灵活又强大的数据结构。1985年中期,GNU Emacs正式在因特网上发布。发布的代码中,只有很少的几个文件里,还保留着Gosmacs原来的代码。

接下来,UniPress得到了斯托曼利用Gosmacs开发GNU Emacs的消息。他们拒绝承认高斯林曾把发行权授予了别人。斯托曼找不到当初的通信邮件,来证明自己的清白。于是,他把剩下的那些从Gosmacs拿来的代码清理干净,解决了这场纠纷。

不过,这次的纠纷又让斯托曼对专有软件有了更多的思考。在1986年,斯托曼在瑞典皇家技术研究所的演讲中曾引用了这次与UniPress的纠纷,并把它作为典型案例,来说明专有软件的危害。

斯托曼曾说:“有时候,我真觉得我这辈子应该找来一大堆专有软件,给它们一个个破解刻成光盘,然后拿到街角去免费赠送给路人。没准那样倒是可以更快地给用户带来些自由。要比自己亲自操刀写软件方便得多。不过要是那样,可能很多人都不敢要我送出的光盘。”

抛开各种压力不说,抛弃高斯林写的代码倒未必是件坏事。长远来看,对于斯托曼和整个自由软件运动,这个做法不失为明智之举。它让斯托曼必须去直面Emacs社区里的各种弱点。让他重新思考这种非正式的信任关系带来的额外麻烦。它也催促着斯托曼更加明确自由软件运动的政治目标。在1985年,斯托曼照常又发布了新一版的Emacs。同时,他也发布了《GNU宣言》。这个宣言是他1983年9月那篇文章的扩展。在宣言中,斯托曼用了很长的一节引述了各种在商业或学术领域里为专有软件辩护的观点。其中一个经典观点就是:“难道程序员们的这些创造就不值得什么物质奖励吗?”

斯托曼对此的回应是:“如果要让大家对什么行为做物质上的奖励,那么这个行为必须是对社会有一定贡献的。创造本身的确是一种有益于社会的活动。但前提是这个社会可以自由地使用那些创造出来的东西。程序员创造了某些有用的软件,如果这值得奖励,那么按照这个逻辑,要是他们借着作者的身份限制软件的使用,那他们就得接受惩罚了。”

随着GNU Emacs的发布,GNU工程也慢慢地积累起了给大家读的代码。而GNU工程也逐渐要面对越来越多的琐事。越来越多的UNIX开发人员开始使用GNU的软件,各种捐款、礼品,以及索取磁带的请求也接踵而至。为了解决这些非技术类问题,斯托曼拉来了一些挚友,组建了自由软件基金会(Free Software Foundation,FSF)。这是一个非营利组织,旨在促进GNU工程完成目标。理查德⋅斯托曼担任主席,斯托曼的很多朋友和黑客同道都成为了董事会成员。自由软件基金会为GNU提供了一个对外的窗口。

罗伯特⋅查瑟尔(Robert Chassell)当年曾是LMI公司的一名程序员,之后成为了自由软件基金会的五个注册董事会成员之一。他曾在自由软件基金会担任会计。这个职务一开始并不起眼,后来却越来越重要了。

查瑟尔回忆:“我们在1985年那会,花费和收入大概在两万三千美元这个级别。理查德有一间自己的办公室,我们还租了点地方。我把所有东西,尤其是很多磁带放在我桌子底下。后来,LMI借给我们一点地方,我们才把磁带和类似的东西放在了那里。”

除了提供一个门面以外,自由软件基金会还吸引了很多抱有类似理想的程序员。UNIX市场融入了越来越多的竞争者,斯托曼的GNU工程也逐渐占有了一席之地。UNIX厂商们为了能栓住用户,它们开始拒绝为用户提供UNIX的源代码。不过这个行为最终倒让GNU获得了更多的用户。UNIX界的人士曾一度把斯托曼视为不切实际的疯子。如今则有不少人把他看作软件界的预言家。因为有越来越多的人,遇到了斯托曼描述的那些专有软件的问题。

查瑟尔曾描述过这种感觉:``很多人一直对此没有意识。等到事情真的发生在自己身上,才有所察觉。他们花了几年的时间,去开发和完善一个软件,可到头来却被别人占为己有,不许他们再碰。等这种事情发生几次,你就会对自己说,‘等会,这真的不对头。’

查瑟尔加入自由软件基金会的一个重要原因,源自曾经的一次个人经历。在加入LMI之前,查瑟尔曾为Cadmus公司写了一本UNIX的入门书。Cadmus是美国剑桥市的一家软件公司,之后关门倒闭了。而查瑟尔写的这本书,也随之灰飞烟灭。查瑟尔曾几次试图买回这本书的版权,都无果而终。

“我知道,那本书如今就在某个书架上,别人用不了,读不上也没法复印。从此,它就与世长辞,不见天日,”查瑟尔说,“容我自夸一下,它真的是本不错的入门书。要是能再给我三四个月的时间,可没准可以把它改成一本很好的GNU/Linux的入门书。整个经历,只能留在我的记忆中,别的都没了。”

眼睁睁地看着自己的作品就此消失,曾经的雇主破产关门,查瑟尔说,他好像感受到了当年斯托曼心中的那份怒火。“对我来说,有件事情越来越清楚:你要想过个像样的日子,你就不想有一丝遗憾,”查瑟尔说,“有深入了解的自由,有修改的自由,无论这是什么,这想法本身确实改变了这个世界。他让人觉得,在自己短短的生命之中,所做之事是值得付出的。因为它还没被谁夺走,也许还没被人弃置遗忘。至少,你还和它有所联系。不会让你觉得自己丢失了一段美妙的人生。”


本页最后更新时间:2015-12-04 Fri 14:58.
小过的布拉格 - Copyright©2013-2017 - @xiaoguo - Powered by Emacs 28.0.50 (Org mode 9.3)
行路难,行路难, 多歧路,今安在。长风破浪会有时,直挂云帆济沧海。