首页 - 日志 - 维基 - 读书 - 跑步 - 关于

《若为自由故:自由软件之父理查德·斯托曼传》-–—第9章:GNU通用公共许可证

1985年新春伊始,理查德⋅斯托曼完成了GNU工程中第一个完整的里程碑式的软件:用Lisp语言编写的Emacs编辑器。为了能让别的用户可以真正自由地使用这个软件,他面临着两大挑战。首先,他需要改写出一个跨平台的Emacs版本;其次,他需要基于早期的“Emacs公社”探索一种全新的发布方式。

与UniPress之间的纠纷暴露出了Emacs公社契约中的一些不足:这些条款都过度依赖斯托曼个人在这个社区中的地位。对于那些斯托曼所没有触及到的领域,比如1984年以前的Unix系统,其他个人和公司都可以制定他们自己的规则。

在GOSMACS之前,修改软件的自由与软件作者的特权之间就已经形成了一种矛盾的关系。1976年修订的美国版权法案把法案适用范围扩展到了软件作品上。根据该法案的第102(b)节的规定,个人或公司可以对软件程序的“表现方式”声明版权,但不能对程序中的“实际处理过程和方法”声明版权。换句话说,程序员与软件公司可以像对待一个故事或一首歌那样来对待一个软件,可以从一个已有的软件中获取灵感,但是在没有得到原作者允许的前提下,不能直接复制代码或在它的基础上直接衍生出新的版本。尽管这部新的法律规定了软件中即使没有包含版权声明也同样受到法律保护,程序员们还是纷纷开始在他们的程序中添加上了版权声明,声张自己的权力。

刚开始,斯托曼把这些版权声明看成是一个不好的兆头。那时候,大部分程序都会从其他以前的程序中借鉴一些代码,然而,总统的大笔一挥,议会就给予了程序员和软件公司把社区开发的软件变为专有软件的权力。这就使得原来游走在灰色地带的事情变得公开合法化。即使黑客们有能力去追朔一段代码最初的来源——也许没有办法找到几十年前的源头,但至少可以往前查几年,但是为了证明这些原本属于社区的代码不应当被专有化而对每一段代码进行这种追查所要花费的时间和金钱都远远超出了大部分黑客所能接受的范围。简单地说,这项法案使得原先黑客之间的较量变成了律师之间的较量。在这样的法律框架下,软件公司相对于黑客们来说占据了天然的有利地位。

然而,软件版权的支持者也有他们相反的观点:如果没有版权的保护,程序员的作品可能会在不经意间进入公有领域。同时,在自己的作品中加入版权声明常常也象征着对软件质量的负责,程序员或软件公司在代码中加入了署名的版权声明也就意味着把自己的信誉与这份代码绑定在一起。另一方面,版权声明也可以看成是一种合约或是所有权的声明。软件作者可以把版权声明用作一种具有弹性的许可证,通过版权声明放弃部分权利,换取用户方某种形式的行为。比如,软件的作者可以允许人们随意复制软件,但是不得把这些副本用于商业用途。

这些观点最终使斯托曼反对软件版权声明的态度慢慢发生了变化。回顾GNU工程的历史,斯托曼说他直到差不多Emacs 15.0发布的时候才逐渐意识到使用版权来保护软件的好处,Emacs 15.0是GNU诞生前的最后一个Emacs大版本。斯托曼回忆道:``那时我看到有些人在电子邮件中也开始使用版权声明,还加上了一行‘允许原文复制’的许可声明,这触发了我的灵感。’’

从Emacs 15开始,斯托曼在软件中加入了一项版权声明,允许用户随意复制并分发软件。他还允许软件的用户修改软件,但不允许用户把修改过的软件作为自己的作品并享有排他特权,就跟GOMACS一样。

斯托曼认为,Emacs 15的版权声明虽然为Emacs公社树立了一个很好的样板,但它的内容还“不够正式”,不适合用作GNU工程的软件许可证。在开始编写GNU版本的Emacs时,斯托曼开始与自由软件基金会的成员一起探讨应该如何来完善许可证的文本。他还咨询了帮助他创建了自由软件基金会的律师。

马克⋅费雪(Mark Fischer)是波士顿一名专注于知识产权法的律师,他回忆起当年与斯托曼讨论许可证问题的情景:“对于许可证的用处,斯托曼有非常清醒的认识。他有两条原则,第一条是要让软件变得尽可能的开放,第二条是尽可能鼓励其他人接受和使用类似的许可证协议。”

鼓励其他人接受和使用类似的许可证就意味着不再允许专有的Emacs版本出现。为了实现这一目标,斯托曼与他的自由软件同僚们找了一种解决方案:用户们可以随意修改GNU Emacs,只要求他们把他们的改动都公布出来;并且,这些衍生出来的软件作品需要与GNU Emacs采用相同的许可证。

这最后一个条款是一个革命性的创造,人们需要一段时间才能真正理解它。费雪回忆说,在那个时候,他只是把这个条款看成是GNU Emacs与用户之间达成的一笔交易,也是相当于给GNU Emacs打上了“价格标签”。不过,这里的价格却不以金钱度量,它允许用户自由使用软件,但如果对软件进行修改,则必须把修改后的代码贡献出来。费雪认为,这条合同条款非常特别。

``在那个时候,让软件用户接受这样的一种软件‘价格’即便不是独一无二,也是数一数二的。’’费雪说。

1985年,斯托曼发布GNU Emacs的新版本时,GNU Emacs通用公共许可证第一次与公众见面。随后,斯托曼收到了很多来自黑客社区的对改进许可证用语的修改意见。约翰⋅吉尔摩(John Gilmore)是最早接受这种软件许可证的黑客之一,他后来成为了一名软件活动家并为Sun公司(Sun Microsystems)提供咨询服务。作为他工作的一部分,吉尔摩把Emacs移植到了SunOS上,SunOS是Sun公司开发的Unix发行版。在移植的过程中,吉尔摩按照GNU Emacs许可证的要求公开了他所作的修改。吉尔摩并不认为遵守GNU Emacs许可证是对他工作的一种限制,相反的,他认为这种许可证正好体现了黑客的精神气质。“不过,在那个时候,很多许可证的条款都还不是很正式。”吉尔摩回忆道。

吉尔摩引用了一个Unix工具软件trn的版权声明,从中也可以看出那时的许可证有多么的不正式。trn是拉里⋅华尔(Larry Wall)的作品,他后来还开发了Perl语言和Unix程序员用于给软件代码打补丁的Patch工具。华尔很清楚这一点,所以他把下面的版权声明写入了软件的README文档:

版权所有(C)1985,拉里⋅华尔
你可以任意的复制trn软件包或它的一部分,只要你保证不以它来牟利,并且不得假装你是这个软件的作者。

如此的声明在映射着黑客的精神和气质的同时,也映射出要把这种松散、非正式的精神转换为严谨的软件版权法律语言的困难之处。在撰写GNU Emacs许可证时,斯托曼做了很多的工作,保证许可证的表述中不存在任何可能被别人利用,进而把这个软件变成专有软件的漏洞。他以一种律师和黑客都可以理解的方式,向世人展现了黑客的精神。

吉尔摩回忆说,没过多久,就有一些黑客们开始讨论如何把GNU Emacs许可证移植到他们自己的其他软件作品上。1986年11月的一天,吉尔摩受到Usenet上一个帖子的启发,写了一封电子邮件给斯托曼,建议对GNU Emacs许可证做一些修改:

或许你可以考虑把许可证中的“EMACS”字眼替换为“软件”或其他类似的名词。在不久的将来,Emacs也许就不再是GNU系统中最大的一部分,但这种许可证可以适用于整个系统。

吉尔摩并不是唯一一个建议用这种更通用做法的人。1986年年底,斯托曼正着手开发GNU工程中的下一个里程碑——源代码调试器,与此同时,他也同样在考虑如何修改Emacs许可证使它可以适用于Emacs和这个新的调试器。斯托曼的解决方案是:移除许可证中所有的Emacs字眼并把它转变为一个保护所有GNU软件版权的许可证。GNU通用公共许可证就这样诞生了,缩写是GPL。

在打造GPL时,斯托曼使用了软件版本号的表示方式,用小数表示原型版本的许可证,用整数表示成熟的版本。1989年,也就是斯托曼打入Unix阵营的第二个重要作品GNU调试器发布的一年后,他发布了GPL的1.0版本(斯托曼从1985年就开始了GPL这个项目)。这个许可证包含了一个表明其政治态度的序言:

通用公共许可证被设计成确保你拥有分发或出售自由软件的权利,确保你可以获取软件的源代码,确保你可以修改软件或在别的自由软件中使用这个软件,并确保你了解你拥有以上权利。

为了保证你的权力,我们禁止任何人剥夺你的以上权力或要求你放弃这些权力。这些限制条件也作为你分发或修改这个软件时所必须承担的责任。

与此同时,斯托曼也不得不对原来那个不太正式的“Emacs公社”协议进行修改。在“Emacs公社”的协议中,社区的成员需要公开任何对Emacs所进行的改动,而现在,程序员只需跟斯托曼一样以相同协议公开衍生作品的代码即可。也就是说,程序员修改了Emacs并仅供自己个人使用时,就无须把代码发给斯托曼了。斯托曼粉碎了自由软件价格标签,免得它们破坏了自由软件的精神教义。用户可以不受斯托曼的限制对软件进行创新工作,并保证了整个社区都可以获得相同的软件版本。

回首往事,斯托曼说,GPL中所做出的妥协很大程度上是因为他个人对原先“Emacs公社”中存在的“老大哥”角色感到不满。当他对黑客社区了解的越深入,他越感觉到未来的源代码维护人员可以用他们的权力迫使他让GPL做出妥协。

“要求用户公开所有的改动是不对的,更何况还要求他们把这么多的改动都发给某一个拥有特权的开发者。这种中央集权的方式,与整个社区人人平等的氛围格格不入。”

历史证明,GPL是斯托曼最伟大的创造之一。它在现有的版权法律的框架中创造了一种平等的社区系统。更重要的是,它向世人展现了法律文书与软件代码之间的相似性。GPL的序言其实暗示了一个信息:与其用怀疑的眼光看待版权法,不如用黑客的精神渗入到这个系统中。

“GPL的设计过程与其他自由软件开发的过程非常相似,由一个大的社区共同来讨论它的结构、它的条款。社区成员的意见可能会相左,所以还需要对它的条款进行调整甚至进行妥协,这样才能更容易地为大众所接受。”另一位曾帮助斯托曼一起设计GPL的律师杰里⋅科恩(Jerry Cohen)说,“这样的设计方式非常有效,GPL的各个版本从被人们怀疑逐渐变为广为接受。”

1986年,斯托曼接受Byte杂志采访时,把GPL总结为一些富有趣味的条款。除了宣传黑客价值观,斯托曼说,读者还应该“把它看成是智力的较量。我们利用了软件版权法本身来对抗整个现有的版权系统。”几年后,斯托曼开始使用一些不那么敌对的条款来描述GPL。“我在考虑那些有关道德意识、政治意识和法律意识相关的问题,”他说,“我需要设法让它可以融入现有的法律系统。从本质上来说,这项工作是为一个新社会立法的过程,但是因为我不是政府,所以事实上我并不能改变法律。我需要设法在现有法律框架上去设计它,这在以前的设计中从来没有过。”

正当斯托曼在思考自由软件有关道德、政治和法律上的问题时,一位来自加州名叫堂⋅霍普金斯的黑客给他寄了一份68000微处理器的手册。霍普金斯是一名Unix黑客,同时也是一名科幻小说爱好者,这本手册是他早些时候向斯托曼借阅的。为了表达对斯托曼的感激之情,他在信封上贴了一些从当地科幻小说爱好者社团获得的一些贴纸。其中,有一张贴纸上的文字吸引了斯托曼的眼球:“Copyleft (L),保留所有权利。”在GPL的第一个版本发布以后,斯托曼称赞这张贴纸给了他灵感,并把“Copyleft”一词作为自由软件许可证的昵称。以后,Copyleft这个名字以及它的标识——一个倒着写的C,成为了GPL在自由软件基金会的官方标识。

德国著名社会学家马克斯·韦伯(Max Web)曾经说过,所有伟大的宗教都是建立在对神的感召力的“常规化”或“制度化”的基础上的。他认为,每一种成功的宗教,都是把神的感召力或这个宗教最初创始人的想法转换成一种社会化、政治化和道德化的东西,这样这种宗教的精神才可能长时间在不同的文化之间进行传播。

尽管GNU GPL不是家教,但是它可以看成是现代的去中心化软件开发模式中一种典型的“常规化”的例子。程序员和软件公司即使不信奉斯托曼的那套理论,也会很乐意去接受GPL表面上所呈现出来的普适价值。一部分人把GPL看成是对自己软件作品先发制人的保护机制而接受它,另一部分人虽然由于GPL的条款过于苛刻而反对它,但它在业界的影响力依然不可低估。

基思⋅博斯蒂克(Keith Bostic)就是属于后一个群体中的一名黑客,GPL 1.0发布的时候,他是加州大学伯克利分校(University of California,Berkeley)的一名雇员。博斯蒂克所就职的计算机系统研究小组(Computer System Research Group,CSRG),从20世纪70年代就开始从事Unix系统的研究,并且负责Unix中很多重要组件的开发。比如,作为现代Internet通信基石的TCP/IP网络协议就是出自这个小组。到了80年代,Unix商标所有者AT&T开始专注于Unix的商业化,他们选择了由博斯蒂克和他在伯克利的同事们一起开发的“伯克利软件套件”(Berkeley Software Distribution,BSD)这个Unix的学术分支作为未来商用Unix的主要技术来源。

虽然伯克利的BSD的源代码在研究人员和商业软件程序员群体中广为分享,但是要把它商业化仍然是一个大问题。因为伯克利的代码中也混入了很多AT&T的专有代码,所以,伯克利套件只能在那些已经向AT&T购买了UNIX源代码许可的机构使用。当AT&T提高了它的软件许可费用后,这种看上去很无辜的授权协议就越来越成为一种负担。

1986年,博斯蒂克开始进行一个把BSD移植到DEC公司(Digital Equipment Corporation)的PDP-11计算机上的个人项目。博斯蒂克回忆说,在这段时间里,斯托曼有时会来西海岸,所以他有机会与斯托曼进行一些密切的接触。“我直到现在还清晰得记得当时的情景:斯托曼坐在我们研究小组一台借来的工作站上与我争论有关软件版权的问题。争论了一段时间,我们就一起去吃晚餐,然后在晚餐过程中继续争论有关版权的问题。”博斯蒂克不无得意地说。

这样的争论最终停止了,但并不是以一种斯托曼所喜欢的方式。1989年6月,伯克利把Unix中网络相关的代码从AT&T拥有版权的那部分代码中剥离出来,并以加州大学许可证的形式发布。许可证的条款非常的开明,代码的使用方只需在衍生代码中注明原始代码出自于加州大学即可。与GPL不同,在加州大学许可证中,对代码的商业化使用是被允许的。唯一制约这种许可证广为应用的原因是:BSD的网络部分并不是一个完整的操作系统。人家可以学习这份代码,但它只能与其他专有代码放到一起才能真正运行起来。

在接下来的几年中,博斯蒂克和其他加州大学的同事们一起,重新编写BSD中所缺少的组件,把BSD变为一个完整的可以自由分发的操作系统。虽然这项工作因为AT&T下属的Unix系统实验室(Unix System Laboratories)对于Unix这个品牌的所有权而陷入了一些法律上的困境,但是到了20世纪90年代初,这个项目几乎已经完成了。甚至在这之前,很多伯克利开发的工具软件就已经开始进入斯托曼的GNU工程中。

博斯蒂克回忆说:“如果没有GNU的影响,我想我们不可能如此坚定地走得那么远。GNU中有一种力量在推动我们的前进,那就是它让我们很欣赏的理念。”

到了20世纪80年代未,GPL开始在自由软件社区中产生了如地心引力般的效果。一个程序要成为自由软件并不一定要以GPL发布,比如那些BSD的工具软件,但是如果以GPL来发布,就会更直接地表明自己作为自由软件身份。布鲁斯⋅佩伦斯(Bruce Perens)说:“我觉得GPL的存在,激发了人们去思考自己的软件作品是否可以成为自由软件,以及应该以什么样的许可证来发布它。”佩伦斯是一个知名的Unix工具软件Electric Fence的开发者,也是Debian GNU/Linux开发团队的领头人。在GPL发布后的几年,佩伦斯说他决定废弃Electric Fence所使用的自己土法炮制的软件许可证而改用斯托曼所创造的、由律师审查过的许可证。他回忆说:“事实上这是非常容易做到的。”

作为一名程序员,李奇·莫林对斯托曼最初的GNU宣言在一定程度上是抱有怀疑的,但是他很惊讶的发现各种软件开始慢慢聚集到了GPL的大伞之下。作为一名SunOS用户组的领头人,莫林在80年代期间的一项重要工作就是分发一些载有优质免费软件和自由软件工具的磁带。为了完成这项工作,他需要去联系软件的原始作者,询问他们的作品是否有版权保护,以及他们是否愿意把这个软件放入公有领域。莫林说,到了1989年左右,很多出色的软件程序都开始使用GPL许可证了。“作为一名软件分发人员,我一看到GPL这个词,就知道我不用担心授权的问题了。”莫林回忆说。

为了补偿在Sun用户组中制作分发磁带的成本,莫林会向订阅者收取少量的费用。现在,这些程序都改用GPL了,莫林收集软件并制作磁带只需要花以前一半的时间,从此就有了一点小小的盈利。莫林有着灵敏的商业嗅觉,自此,他把自己的爱好变成了一项事业,并创办了Prime Time Freeware公司。

这样的商业探索完全是在自由软件推广计划框架之中的。斯托曼在GPL的序言中说:“当我们说自由软件这个词的时候,我们在说的是自由,而不是免费”。到了20世纪80年代后期,斯托曼用一句更容易记忆的话来表述这个观点``不要把`Free’理解成是`免费啤酒’中的‘免费’,它是`自由言论’中的‘自由’”。

但是从总体上来看,商业界还是无视了斯托曼的诉求。对于少数企业家来说,自由软件所关注的自由依然与自由市场中的自由是一样的。在商业市场中如果不考虑软件的所有权,就算是一个很小的软件公司,也有机会与IBM和DEC这样的大公司自由竞争。

迈克尔⋅蒂曼(Michael Tiemann)是最初少数几个抓住了这个理念的企业家之一,他是一名程序员,同时也是斯坦福大学的一名研究生。在20世纪80年代,蒂曼曾经一度像一名爵士乐发烧友追随一名他所喜爱的音乐家一样追随着GNU工程。1987年GNU C编译器的发布,让他开始真正认识到自由软件内在的巨大潜力。GCC的诞生可以看成是一个爆炸性的新闻,蒂曼觉得,GCC的出现进一步巩固了斯托曼作为一个传奇程序员的地位。

“就像所有的作家都梦想要写出一部伟大的小说一样,20世纪80年代时,每个程序员都在梦想要写出一个伟大的编译器,”蒂曼回忆说,“斯托曼以迅雷不及掩耳之势完成了这项工作,这实在是很让其他的程序员蒙羞。”

“这就是所谓的单点故障,GCC就是一个很好的例子,”博斯蒂克回应说,“那时候没有别的编译器,GCC就是唯一的一个。”

在蒂曼看来,与其与斯托曼正面竞争,不如在他的作品基础上进行二次开发。GCC最早的版本大概有110000行代码,但是在蒂曼眼里,这些代码都很容易理解。他只用了不到五天的时间就掌握了这些代码,并且只花了一周时间就把它移植到了另一个新的硬件平台上——国家半导体公司(National Semiconductor)的32032微处理器上。次年,蒂曼就开始进一步修改GCC的源代码,并开发了一个原生的C++语言的编译器。有一天,蒂曼在贝尔实验室做一个关于GCC的报告,他发现有些AT&T的开发者还在努力地做着相同的事情。

“教室里大概有四五十人,我问他们有多少人在参与开发原生的编译器,”蒂曼回忆说,“主持人说具体的开发人员的人数是保密的,但是如果看看这个教室里的人,就可以得出一个大概的结论。”

蒂曼继续回忆说,不久以后,他就灵光一闪,有了个想法:“我已经在这个项目上投入了半年的时间。我开始思考,能如此高效的开发出新的编译器,这到底是我自己的功劳,还是这份代码的功劳?谁更应该在自由市场中获得嘉奖?”

蒂曼从《GNU宣言》中获得了更多灵感,这虽然会让一部分软件开发商的利益受损,但是它鼓励其他软件开发商更多从消费者的角度出发,更好地利用自由软件。虽然GPL让商业软件无法垄断市场,但是它让一些更有眼光的开发商可以从提供服务和咨询的角度去开拓业务、开展竞争,而这些其实是软件市场中利润最高的几个领域之一。

在1999年的一篇文章中,蒂曼回忆起斯托曼的宣言带来的影响。“它听上去像是一个社会主义者的呐喊,但是它们还是大不相同的。我在里面发现了一个隐蔽的商业计划。”

约翰⋅吉尔摩也是一位GNU工程的粉丝,蒂曼和他一起成立了一个软件咨询服务公司,专注于提供对GNU程序的定制化服务,这就是后来的Cygnus Support公司。1990年2月,Cygnus Support与客户签订了第一份软件开发合同。同年年底,该公司已经签订了价值超过72.5万美元的软件支持和开发合同。

GNU Emacs、GDB和GCC是三个最为重要的开发工具,不过它们并不是斯托曼在GNU工程的最初五年时间中开发的唯一软件。截至1990年,斯托曼还开发了GNU版本的Bourne Shell(改名为Bourne Again Shell,BASH)、YACC(改名为Bison)和awk(改名为gawk)。与GCC一样,这些GNU程序都被设计为可以在各种系统上运行,而不是局限于某一个开发商的平台。斯托曼和他的同事们不但把程序做得更具弹性,也把它们做得越来越有用。

Prime Time Freeware公司的莫林提到了一个很简单但很重要的自由软件包:hello,这个软件包体现了GNU软件大一统的设计理念。莫林说:``hello软件包其实就是一个只有五行代码的‘hello world’C语言程序,但这个程序按照GNU发行包的标准进行了打包。里面包含了标准的Texinfo的文档和configuration配置脚本。这个软件包为其他的软件开发者提供了一个很好的示例,展示了GNU工程是如何让软件包可以平滑地移植到不同的环境中的。这件事非常重要,这不但影响到所有斯托曼的软件作品,也影响到其他所有的GNU工程的软件。’’

在斯托曼看来,开发新的软件是第一要务,而改进软件则是位于第二位的。斯托曼在接受Byte杂志采访时说:“对于某个软件作品来说,我可以去改进它。但有时重新实现整个软件也许是更好的做法,因为这样会让整个系统变得更好。从某种程度上来说,我在这个领域已经工作了很多年,并且接触过很多不同的系统,因此,我有很多想法可以对其产生积极的影响。”

不管怎么说,GNU的工具在80年代后期发挥出了它的优势,斯托曼所在的人工智能实验室也以能设计出严密的程序而在整个软件开发社区中建立了良好的声誉。

杰瑞米⋅埃里森(Jeremy Allison)在20世纪80年代曾是一名Sun的用户。90年代,他开发了Samba这个著名的软件。谈笑间,他说起了斯托曼当年的声望。80年代后,埃里森开始使用Emacs,并且对它的社区开发模式产生了兴趣。他曾满怀希望地给Emacs贡献过代码,结果他的补丁却没能被采用。

埃里森说:``这就像是美国《洋葱报》(The Onion)的头条新闻,孩子们在祈祷,但是上帝回答说‘不’。

斯托曼作为一名程序员的名气越来越大,但他也在努力尝试转型为一名项目经理。尽管GNU工程在开发各种系统工具上捷报频传,但它还是没有能够开发出一个真正可用的内核。所谓“内核”,是指在所有的Unix系统中起到“交通警察”作用的核心程序,它决定了各种设备和程序应该如何去使用处理器和各种资源。到了20世纪80年代末,GNU工程因为没有自主开发的内核引发了越来多的抱怨。跟其他GNU工程的软件一样,斯托曼先是试图寻找一个现有的程序,通过修改它来开展内核的开发工作。根据1987年1月的“GNUsletter”所描述的,那时斯托曼已经开始尝试修改TRIX,TRIX是一个麻省理工学院开发的Unix内核。

回顾80年代末“GNUsletter”中的新闻,GNU工程在软件开发管理上的压力在那个时候已经渐渐显现出来。1987年1月,斯托曼宣布GNU工程正在尝试修改TRIX这个由MIT开发的Unix内核。一年以后,1988年2月,GNU工程又宣布他们已经把注意力转向Mach,一个由卡内基美隆大学开发的“微内核”。这也就意味着,在1990年以前,GNU工程并没有真正开始官方的内核。

这个时期,内核开发的延迟只是困扰斯托曼的众多问题中的一个。1989年,莲花公司(Lotus Development Corporation)起诉了它的一家竞争对手——Paperback Software International公司,控告该公司抄袭了莲花公司的1-2-3电子表格程序中的菜单设计。莲花公司的官司,加上苹果和微软之间的“视觉体验”的斗争,给GNU工程带来了颇多麻烦。虽然这两场官司跟GNU工程都没有直接的关系,因为他们都主要是与个人电脑上的操作系统和应用软件相关,而不是关注于类Unix的硬件系统,但是他们对整个软件开发的文化产生了深远的影响。斯托曼觉得自己不能袖手旁观,他召集了几个程序员朋友在一本杂志上刊登了一则广告。然后,他基于这则广告成立了一个抗议小组,反对那些参与诉讼的公司。他把自己的这个组织命名为“自由编程联盟”,他们在莲花公司门口以及波士顿审理莲花公司这起案子的法庭外发起了抗议。

这次抗议非常引人注目,他们的行动在软件工业发展史上留下了浓重的一笔。应用软件正悄悄地取代操作系统成为软件公司竞争的主要战场。然而,GNU工程想要建立一个自由操作系统的愿景都尚未实现,这使它看起来有点跟不上时代了。不过也正是这个原因,让斯托曼觉得有必要组织一股新的力量来对付这次对“视觉体验”的诉讼,但这在一些观察家眼中,则更显得GNU工程正在变得更加过时。

1990年,麦克阿瑟基金会授予了斯托曼“麦克阿瑟院士”的称号,嘉奖他出众的能力,并授予他“杰出人才奖金”。这份24万美元的奖金用于奖励他发起了GNU工程和他在宣传自由软件哲学上所取得的成就,这帮助GNU工程在短期内缓解了经济上的困难。最重要的一点就是,它让斯托曼这个在自由软件基金会不拿薪水而仅靠做咨询来养活自己的员工,可以有更多的时间专注于编写GNU的代码。

麦克阿瑟奖还戏剧性地赋予了斯托曼选举权。在获奖前不久,发生在斯托曼公寓里的一场大火几乎让他损失了一切财产。在获奖的时候,斯托曼还只是在技术广场545号大楼存生的一名流浪汉。“选举中心不同意我把那里作为我的住址,”斯托曼后来回忆说,“不过报纸上那篇有关麦克阿瑟奖的新闻帮我证实了这个现状,于是他们就让我注册了。”

最关键的是,麦克阿瑟捐助的资金让斯托曼有了更多的自由,他可以全身心地投入软件自由的事业了。有了这些资助,他决定更多地去四处宣讲GNU工程的使命。

有意思的是,GNU工程和自由软件运动最终的胜利差不多就是源于这些旅行。1990年,斯托曼去芬兰的赫尔辛基大学访问。在听众中,有一名叫林纳斯⋅托瓦兹的学生,那时他只有21岁。后来托瓦兹发明了Linux内核,Linux内核完美的填补了GNU工程中所空缺的那一部分。

托瓦兹那时在附近的赫尔辛基大学上学,斯托曼给他留下的第一印象是颇为奇怪的。“我这辈子头一次看到这样一个长头发、长胡子的古怪黑客。在赫尔辛基很少能见到这样的人。”托瓦兹在2001年的自传《乐者为王》中回忆到。

虽然托瓦兹并不了解斯托曼的宏大计划中的政治性的一面,但他仍然很欣赏这个计划在内在逻辑:没有人可以写出没有错误的代码。通过共享软件代码,黑客们把不断改进程序作为终极的目标,甚至超越了个人野心。

与他同辈的很多程序员一样,托瓦兹并不关注类似于IBM 7094这样的大型机,而是对那些五花八门配置的家用电脑更感兴趣。作为一名大学生,托瓦兹是通过在学校的MicroVAX上学习C语言,一步步进入Unix的世界的。这种阶梯式的学习曲线使托瓦兹对于访问大型机的不方便之处有着一种不同的视角。对于斯托曼来说,主要的不方便是官僚作风和特权控制。对于托瓦兹来说,则是地理位置和赫尔辛基寒冷的冬天。为了避免穿过整个赫尔辛基大学的校园去登录他的Unix系统,托瓦兹开始设法寻找一种可以在他温暖的校外公寓中远程访问学校的Unix系统的方法。

不久,托瓦兹就发现了Minix操作系统,Minix操作系统是一名荷兰的大学教授安德鲁⋅塔嫩鲍姆(Andrew Tanenbaum)所开发的一个用于教学用途的轻量级Unix系统。这个系统可以在386电脑上正常运行,这正好是托瓦兹能买得起的最强大的机器,但是,这个系统仍然缺乏一些必要的功能。最明显的一点是他没有终端模拟的功能,有了这项功能才能使托瓦兹足不出户模拟出一个学校电脑的终端并登录到学校的MicroVAX计算机上。

1991年的夏天,托瓦兹把Minix从头重写了一遍,并加了上了一些他所开发的新特性。到了夏天快要过去的时候,他完成了这个名为“GNU/Emacs of terminal emulation programs”的程序。他对这个作品很有信心。他开始在一个Minix新闻组上寻找POSIX标准,POSIX标准定义了与Unix兼容的程序应有的行为。几周后,托瓦兹发布了一则让人可以联想到斯托曼在1983年启动GNU工程时的所发的帖子的消息:

我正在开发一个(自由的)操作系统(只是出于兴趣,这个系统不会像386(486)AT上的GNU系统那么庞大和专业)。这个系统从4月开始开发,现在已经逐渐可用了。我期待听到各位喜欢或不喜欢Minix的人们的反馈,因为这个系统参考了它的不少设计(比如出于实用的需要,它们的文件系统采用了相同的物理布局,除此之外还有一些别的相同之处)。

在不到一个月的时间内,这个帖子收到了大量的回复。托瓦兹在Internet上的一个FTP服务器上发布了这个操作系统的0.01版,这是最早向公众开放征求意见的版本。为了实现这个目标,托瓦兹需要给这个新的系统起一个名字。在他自己的电脑硬盘上,这个程序被命名为Linux,这个名字体现了它是一个Unix的变形版本,所以名字以字母X结尾。托瓦兹认为这个名字太过于自恋,所以在FTP上把它的名字改成了Freax,但FTP管理员又把名字改了回来。

尽管托瓦兹准备开发一个完整的操作系统,但他和其他开发人员都意识到,大部分重要的工具软件其实都已经有了现成的版本,这些软件是由GNU、BSD和无数自由软件开发者共同完成的。对于Linux的开发团队来说,GNU C编译器是这些工具软件中最重要的一个,有了它才让使用C语言进行开发成为可能。

整合GCC大大提升了Linux的可用性,但也带来了一些问题。仅管GPL的“传染性”并不影响到Linux内核,但托瓦兹在他的自由软件操作系统中使用了GCC,也造成其他用户产生了从Linux借用更多东西的愿望。事后托瓦兹说,“我需要站在巨人们的肩膀上”。因此,他开始思考,当别人开始利用Linux时并需要更多依赖Linux时事情会变成什么样子。在做出这个最终决定的十年后,托瓦兹回应了自由软件基金会的罗伯特⋅查瑟尔,把他的想法总结如下:

你花了你生命中宝贵的半年时间去做一个东西,并且希望它能广为流传并从中获利,但你不希望别人用它来牟取暴利。我希望人们都能了解Linux,并且能对它进行修改,让它更符合每个人的期望。但我同样希望能知道别人都拿它来做了些什么,我希望我一直可以看到那些别人所改动过的源代码,这样的话,我也能有机会对它继续进行改进。

Linux的0.12版本中第一次完整的集成了GCC,托瓦兹决定在这次发布时宣布他与自由软件运动的联盟。他废除了Linux内核原有的许可证,替换为GPL。这个决定带来了一场移植软件的狂欢,托瓦兹和其他Linux爱好者寻找了各种GNU程序并把它们移植到了Linux中。短短不到三年的时间,Linux开发者发布了第一个可以用于生产环境的Linux1.0版本。里面包含了经过大面积修改的GCC、GDB和一系列BSD工具。

到了1994年,这个混杂了各种程序的操作系统在黑客圈子里赢得了极大的关注,很多观察家因此认为托瓦兹在把Linux内核许可证切换到GPL后的最初几个月中,并没有把程序真正的交给社区。在第一期《Linux通讯》杂志中,杂志编辑罗伯特⋅杨对托瓦兹进行了一次面对面的采访。当杨向这名芬兰程序员提问是否后悔放弃了对Linux源代码的专有权时,托瓦兹的回答是否定的。托瓦兹说:“即使是做一次事后诸葛亮,我仍觉得选择GPL是Linux项目初期一个最佳的设计决策。”

这个决策与斯托曼和自由软件基金会所宣称的GPL的普适性完全没有冲突。虽然斯托曼一开始并没有注意到这点,但是Linux爆发式的成长反过来让Emacs受到了更多的关注。这一次的创新,绝非是一个像Control-R这样的小小的软件技巧,而是一个让类Unix系统可以在个人计算机上运行的新奇事物。虽然动机不同,但是结果是一致的:创造一个只由自由软件构成的完整的操作系统。

就像托瓦兹在最初发表到comp.os.minix新闻组的电子邮件所写的那样,他最初确实只是把Linux作为是GNU开发者发布Hurd内核前的一个替代品。这个毫无政治目的的原始想法对于自由软件基金会而言是个打击。

托瓦兹自己觉得,他只是跟很多小朋友一样,喜欢把玩具拆开再组装起来。但事实上,他利用闲暇时光在一块废弃的硬盘上创造出一个成功的项目,他放弃了对Linux的控制权,接受GPL的恩泽,这一切都足以证明年轻的托瓦兹所拥有的过人智慧。

托瓦兹回忆起1991年斯托曼的演讲以及其后他决定对Linux使用GPL的往事,他写道:“我也许没有看到指路的明灯,但我从他的演讲中领悟到了一些更为深刻的东西。”


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