转自译言网:http://article.yeeyan.org/view/88497/59257/

第一个软件共享社区

当我在1971年开始在麻省理工人工智能实验室工作时, 我成为一个已经存在多年的软件共享社区的一员. 共享软件曾经不仅限于我们这个特定的社区,它的历史与计算机一样长,就如分享烹饪技巧的历史与做饭的历史一样长一样。但我们曾经做得比很多事情更多.

人工智能实验室曾用一个分时计算操作系统叫互斥分时操作系统ITS(the Incompatible Timesharing System), 是当时的实验室黑客们用来写汇编语言给 PDP-10用,那个时代最大的计算机其中一台。作为这个社区的一员,一个人工智能系统的黑客⑴,我的工作是改进这个系统。

我们不把我们的软件叫做 "自由软件", 因为当时这个词还未发明,但当时就是如此。只要有大学或公司的人想移植和使用这些程序,我们很高兴地给他们。如果有人看到陌生和有趣的软件,你会问他要源代码,然后你就可以读它,改写它,或直接使用它的一部分来写个新程序。

⑴ “黑客”这个词被认为是“系统安全破坏者” 是一个被传媒混淆概念的词。我们黑客拒绝接受这个意思,而且坚持使用这个词描绘“那些喜欢编程并享受变得聪明的人”

社区的崩溃

情况在1980年代初发生了戏剧性的改变,当Digital公司不再继续支持PDP-10系列计算机。它在60年代时那种结构,优雅和强大的运算能力在80年代需要更大的寻址空间的需求下不能自然扩展使之难以为继。这意味着所有为ITS系统写的代码变成废物。

人工智能实验室已经解散了。在1981年,副产品公司Symbolics雇用了几乎人工智能实验室的所有黑客,然而这个非主流的社区并不能自已养活自己。(有本书 Hackers,作者是 Steve Levy,描述了这件事,同时让人看到这个社区的崇高荣誉).当人工智能实验室在1982年买了一台新的PDP-10时,它的管理员决定使用Digital公司的收费分时操作系统而不是ITS。

在那个时代最先进的计算机,比如 VAX,或68020,有它们自己的操作系统,但它们全部不是免费的:你获得一份拷贝时甚至要签一份保密协议。

这意味着当你一开始使用计算机时就不能帮助你的邻居。一个互助的社区是不允许的。拥有软件专利的人制定的规则是:“如果你和邻居共享代码,你就是海盗。如果你希望改进任何代码,你就得求他们。“

这种专利软件社会系统--你不允许分享和改变软件的系统--是反社会的,不是道德的,它根本上是个错误,可能对于一些读者来说有些惊讶。但我们对于一个基于把大众分裂开并让他们无助的系统,我们还能怎样形容呢?读者看到这里觉得惊讶可能是源于对专利软件销售这个生意的影响。软件发布者使用了很长的时间和努力让大众认为只有一个方法看待这个问题。

当软件发布者在讲“保护”他们的“权力”或“停止盗版”,他们实际上是在说另一个意思。这些词语的真正意思是一种假定;而大众不加鉴别和思考地接受了。让我们分析一下。

一个假定是,软件公司拥有不可置疑的天然权力拥有他们的软件以及他们的软件用户。(如果这是个天然权力,那么无论这对于大众产生多大的危害,我们也不能怀疑)。有趣的是,美国宪法和法治传统反对这个观点;版权并不是自然权力,但一个人为的政府施加的垄断专利系统限制了用户的拷贝软件的天然权力。

另一个没有明文的假定是,软件的唯一重要的事情是允许你做什么--我们计算机用户不应该关心我们允许拥有怎样的社会。

第三个假定是如果我们没有赋于一个软件公司控制用户和软件的权力,我们就没有可用的软件了(或者说没有软件去做这个那个事情)。这个假定看上去好像有道理,那是在自由软件运动彰显出我们可以有很多好用软件并且没有在上面加上枷锁的时候。

如果我们不接受这些假定,并且用常识和伦理去判断,把用户放在第一位,我们得到一个非常不同的结论。计算机用户应该能够自由地修改程序去符合他们的要求,自由地分享软件,因为帮助其他人是这个社会的基础。

关于基于这个结论的扩展的宣言要找另一个空间放,我给个链接  http://www.gnu.org/philosophy/why-free.html.

一个严酷的道德选择

随着我的社区的消亡,继续以前的美好变得不可能。相反,我面对一个严酷的道德选择。

一个简单的选择是加入专利软件世界,签署保密协议并承诺不去帮助我的黑客朋友。很可能我会开发软件并公布它们使用保密协议,所以也给其他人施加压力去背叛他们的朋友。

我可以用这个方法赚钱,或许能让我为了写程序很开心。但我知道这样做的话在我的事业结束时,我会看到我建立了很多墙去分裂人们,而且我会感到我用了一生的时间让这个世界变得更糟糕。

我已经感受过签署保密协议的结果,当有人拒绝给我和麻省理工人工智能实验室一个打印机的控制程序。(那个程序缺少一些特定的功能令我们使用打印机时感到非常沮丧)。所以我不能告诉自己保密协议是无辜的。当他不共享给我的时候我非常的愤怒;我不能对其他人做这种事情。

另一个选择,直接但不愉快地,离开计算机领域。这样的话我的能力不会被错误地使用,但同样会被浪费掉。我不会因为分裂人们和限制计算机用户而成为罪人,但这事情同样会继续发生。

所以我探索一种方法使程序员可以成为好人。我问自己,有没有一个程序或一些程序我能自己写,然后使软件共享社区再次成为可能?

答案很明确:首先需要一个操作系统。这是一个关键的软件去开始使用一台计算机。有了操作系统,你可以做很多事情;没有的话,你不能使用一台计算机。只有有一个自由软件操作系统,我们就可以再次联合黑客们--以及邀请任何人加入进来。而且任何人都不需要由于阴谋而丧失他们的朋友同时使用计算机。

作为一个操作系统开发者,我刚好有能力做这个工作。所以虽然我不能保证能成功,但我明白我是被选中做这个工作的人。我使这个系统兼容UNIX所以它能够被移植,而且UNIX用户可以轻易地换成使用这个系统。GNU这个名字是根据黑客传统起的,它是一个递归的名字“GNU不是UNIX”。

一个操作系统不仅是一个核心,仅仅能运行其它程序。在1970年代,所有的操作系统都应包括命令解释器,汇编程序,编译器,解释程序,调试器,文本编辑器,邮件服务,以及其它。ITS有它们,Multics有它们,VMS有它们,以及UNIX也有。GNU操作系统也有它们。

后来我听到了以下的警句,Hillel说的⑴:

如果我不为自己着想,谁会为我着想?
如果我只为自己着想,那么我是什么东西?
现在不做,更待何时?

开始建设GNU项目基于一个简单的精神。

⑴作为一个无神论者,我不尊崇任何宗教领袖,但有时我会钦佩他们所说的话。

FREE是自由的意思

这个词组“free software"有时被误解了--它与价格毫无关系。它与自由有关。在这里,我们定义自由软件:一个程序是自由软件,对于你,一个特定的用户,如果:

  • 你能够自由地运行这个程序,为了任何目的。
  • 你能够自由地修改这个程序以符合你的需求。(为了使这一条件能够实现,你必须能够得到它的源代码,如果没有源代码要更改它是极端困难的)。
  • 你能自由地发布它的拷贝,无论是免费的还是收费的。
  • 你能自由地发布它的修改过的版本,所以社区能够因为你的改进受益.

因为"free"是关于自由的,而不是价格,免费软件和出卖拷贝并不矛盾。事实上,自由地销售拷贝非常重要:使用CD-ROM贩卖自由软件集合对于社区很重要,而且销售它们是一个重要的为了开发软件而获得经费的渠道。所以,如果一个软件不能被自由地包含在这些软件集合中就不是自由软件。

由于"free"这个单词的歧意,人们长时间以来在寻找一个更好的词来取代它,但没人能够找到一个合适的替代词。英语比其它的语言有更多的词汇以及更多的微妙之处,但它缺乏一个明确的单词来表述“自由”,比如说"unfettered"(释放)是最接近的。相似的词汇如“liberated","freedom",以及"open"都有不准确的意思或其它缺点。

GNU软件和GNU系统

开发整个系统是个巨大的工程。为了实现它,我决定把已经存在的自由软件的碎片尽可能移植过来。例如,我决定使用Tex作为原则上的文字格式化标准;一些年之后,我决定使用Xwindow系统而不是重新写一个视窗系统给GNU。

由于这些决定,GNU系统与所有的GNU集合系统都不一样。GNU系统包括非GNU软件,一些其他人为了他们自己的目的开发的软件,但我们可以使用因为它们是自由软件。

开始着手这个项目

在1984年1月,我辞掉了在麻省理工的工作开始写GNU软件。离开MIT是必需的所以MIT不能干预GNU作为一个自由软件发行。如果我不辞职,MIT就会说他们拥有我的工作成果,以及附加他们自己的使用条款,甚至把它们变成专利保护软件包。我可不打算白白浪费我的大量精力,看着我的最大目的失败:创造一个新的共享软件社区。

不管怎样,Winston教授,然后MIT人工智能实验室,很友善地邀请我继续使用实验室的设施。

第一步

在开始GNU项目的前不久,我听说过一个自由的大学编译程序工具包,叫做VUCK。(荷兰语中的“自由”是以V开头)。这个编译器是为了能够多种语言,包括C语言和Pascal,以及能够在不同的机器上运行。我写信询问作者这个软件能否给GNU使用。

他马上嘲笑地回信,说大学是自由的但这编译器不是。所以我决定我的第一个给GNU项目的程序是一个支持多语言,多平台的编译器。

我希望避免整个编译器都由我一个人写,我得到了Pastel编译器的源代码,是一个多平台的编译器由Lawrence Livermore实验室开发。它支持,并被写成一个扩展版本支持Pascal,被设计成一个系统程序语言。我加了C语言的前段,然后开始移植到 Motorola 68000计算机。但我很快就放弃了,因为这编译器需要几兆字节的堆栈空间,但68000UNIX系统只有64K。

后来我明白了Pastel编译器的功能是把整个文件放进语法树,把语法树放进一个"说明性的“链中,然后生成整个输出文件,而且没有翻译任何空间。我得出一个结论就是必须从头写一个编译器。这个编译器就是现在的GCC;没有任何的Pastel编译器代码在里面,但我移植了我写的C前段代码。但那是几年后的事了;一开始,我做了GNU Emacs。

GNU Emacs

我开始做GNU Emacs是1984年9月,而在1985年初的时候它就能用了。它让我使用Unix系统做文件编辑工作;没有兴趣学习使用vi 或ed,在那之前我是用其它的机器写程序的。

在那以后,人们开始想使用GNU Emacs,这带来一个问题,就是如何发布它。当然,我把它放在我自己使用的MIT的匿名FTP服务器上。(这台机器,prep.ai.mit.edu,所以成为了GNU ftp发布站;直到几年后它退役了,我们把名字改成新的FTP服务器)。但在当时,很多有兴趣的人并没有联上互联网而且不能通过FTP得到拷贝,所以问题是,我该怎么跟他们讲?

我可以说:“找个上网的朋友帮你COPY一份吧”,或者使用以前PDP-10 Emacs的方法,告诉他们:“寄给我一个带子和SASe,然后我拷完Emacs之后回邮给你。“,但当时我没有工作,并且在寻求一个方法给自由软件筹集资金。所以我宣布我会寄一个带子给任何想要软件的人,收费150美元。就这样,我开始了自由软件销售生意,是现在发布整个linux系统公司的先驱者。

软件对于所有用户都是自由的吗?

如果一个软件在离开它的作者的时候是自由的,不等于说对于任何拥有它的拷贝的人都是自由的。比如说,public domain software(没有版权的软件)是自由软件;但任何人都可以使用它制作有版权的软件。同样的,很多版权保护软件可以在简单授权协议下发布版权保护的修改版本。一个典型的案例就是X Window系统。由MIT开发,使用一个许可协议作为自由软件发布,它很快被很多计算机公司移植整合。他们把X加入他们的版权保护UNIX系统,只有二进制文件,以及有保密协议。这些X的拷贝版权就不再是自由软件了。

X Window的开发者并不认为这是个问题--他们期望以及故意让这种事情发生。他们的目的不是“自由”,而是“成功”,定义是“有很多用户”。他们并不在意这些用户有自由,只要他们有数量就行。

这里产生了一个悖论情况当有两个方法统计自由的数量时,对这个问题有两个答案:“这个程序是自由的吗?”如果你使用MIT发布软件时的使用协议来判断的话, 你会说X是自由软件。但如果你是以自由使用它的用户数量来衡量X,你会说它是个版权保护软件。很多X的用户是使用版权保护UNIX系统来跑,不是自由的版本。

Copyleft 和 GNU GPL

GNU的目的是给用户自由,而不仅成为流行的。所以我们需要一个协议保护GNU软件变成版权保护软件。我们使用的这个方法叫做“COPYLEFT"⑴
COPYLEFT使用COPYRIGHT的法律,但反转它来为与之相反的目的服务:不是盗版软件,它成为一个保护软件自由的功能。

copyleft的中心思想是我们给于任何用户权力去运行程序,拷贝程序,修改程序,以及发布它的修改过的版本--但不允许用户增加限制。所以“自由软件”的定义中最重要的自由这个要素得以被拥有软件的用户保证了;他们(这个协议)成为不可分割的一部分。

作为有效的copyleft,被修改的版本也必须是自由的。这保证了基于我们工作的成果在社区中发布的时候是能用的。当程序员自愿为GNU软件作出贡献的时候,copyleft可以防止他们的雇主说“你不能共享修改过的版本,因为我们将用它制作我们的专利保护程序。”

修改版本必须是自由的这一点可以保护使用这个软件的每一个用户。私有化X window的公司通常对之进行了一定的修改以移植到他们的系统和硬件中。虽然这些修改相对于X来说是小意思,但他们并不是无意义的。如果修改程序成为反对用户拥有自由的借口,那它将会被任何人使用这个借口。

 
还有个相关的问题是自由软件整合了非自由的代码。这样的组合将会导致非自由;无论哪个部分缺乏自由都会使整体缺乏自由。允许这样的一个漏洞足以让整条船沉没。因此,copyleft需要一个关键的要求去补上这个漏洞:任何整合了或加入了copyleft程序的的软件,它都必须是自由和遵循copyleft协议的。 
 
我们给GNU软件落实了一个协议叫做GNU通用公共许可证(GNU Public License),或者简短地说GPL。我们有其它的copyleft协议用于特定的情况。GNU的手册也是copyleft的,但使用了一个简化的copyleft协议,因为手册 不需要协议那么复杂。⑵
 
⑴在1984或1985年,Don Hopkins(一个非常有想象力的家伙)给我发了一封邮件。在信封上他写了一些搞笑的谚语,包括这句:"Copyleft--all rights reserved." 我使用了这个词 "copyleft"来描述我在当时想出来的软件发布概念。
⑵我们现在使用GNU Free Documentation License给文档。
 
自由软件基金
 
对Emacs感兴趣的人越来越多,其他人开始加入GNU项目,然后我们决定是时候再一次寻找资金了。所以在1985年我们创立了自由软件基金(Free Software Foundation),一个免税的慈善团体给自由软件开发活动。FSF同时接管了Emacs的磁带生意;然后它通过加入其它自由软件(包括GNU和非GNU)软件进入磁带而发展壮大,以及贩卖自由的使用手册。
 
FSF接受捐款,但它的主要资金来源一直是贩卖--自由软件的拷贝,以及其它的相关服务。今天它贩卖有源代码的CD-ROM,有二进制执行程序的CD-ROM,印刷精美的手册(所有都是自由发布和修改的),以及豪华的发布版(当我们发布包含所有软件的整个应用平台的时候)。
 
FSF的雇员自己开发和维护一定数量的软件包。两个著名的就是C语言库和shell。GNU C语言库是给所有运行在GNU/Linux系统中的程序与Linux交互用的。它是其中一位自由软件基金的员工开发的,他叫 Roland McGrath。BASH呢则是多数的GNU/Linux系统中使用的shell程序,Bourne Again Shell⑴,开发者是FSF员工Brian Fox.
 
我们资助开发这些程序因为GNU项目不仅仅是一些工具或一个开发环境。我们的目标是完成一个操作系统,而这些程序对于目标是必须的。
 
⑴Bourne Again Shell 是使用"Bourne Shell"的小文字把戏,那是在UNIX环境下的shell程序。
 
自由软件的技术支持
 
自由软件的哲学反对特定的大范围扩展的商业模式,但它不反对商业。当生意是尊重用户的自由的时候,我们希望这个生意获得成功。
 
贩卖Emacs显示了一种自由软件的生意模式。当FSF接管了这个生意,我需要其它方式去求生存。我发可以贩卖我开发的自由软件的技术支持服务。这包括教授,内容包括如何写Emacs程序和如何修改GCC,以及软件开发,内容多数是如何把GCC移植到新的平台。
 
今天这些自由软件商业模式已经被很多公司实践了。一些公司通过CD-ROM发布自由软件集合;一些则是通过回答不同系列的用户问题,修复漏洞,增加重要的软件功能。我们甚至开始看到自由软件公司发布新的自由软件产品。
 
小心点,纵然--一定数量的公司使用“open source"(开源)来与他们联系起来,他们使用非自由软件冒充自由软件。这些不是自由软件公司,他们是专利保护软件公司诱使用户远离自由。他们称这为“增值服务”,这反映了他们希望我们适应他们的价值观:在自由之上的便捷。如果我们用金钱衡量自由,我们应该称呼他们“扣去自由的”产品。
 
技术目标
 
GNU项目的技术目标是成为自由软件。就算GNU对于UNIX来说没有技术上的优势,但它在社会意义上有优势,允许用户们合作,以及有道德上的优势,尊重用户的自由。
 
但把现实中好的操作方式加入工作中是很自然的--比方说,动态地分配数据结构以避免随心所欲的限定数据尺寸,管理所有可能的8位代码在任何时候都是合理的。
 
附加的,我们反对UNIX着眼于小的内存容量,所以我们支持16位系统(后来明确了当GNU系统完成的时候32位系统已经是主流了),以及不去限制内存使用除非它超过了兆字节。我们要做到在实际写程序时如果要操作大文件是很简单的,我们鼓励程序员把整个文件放进内核,然后读取它时不需要担心输入输出的问题。
 
这些决定使很多的GNU程序在可用性和速度上超越了UNIX上相应的版本。
 
捐赠的计算机
 
当GNU项目的声望提高后,人们开始捐赠运行UNIX的计算机给这个项目。这些机器非常有用,因为开发GNU组件最便捷的方式就是在UNIX系统上,然后一个一个程序地取代已有的组件。但这又有一个道德问题:我们拥有一个UNIX的拷贝是不是正确的呢?
 
UNIX曾经是(现在也是)版权保护软件,而GNU项目的哲学思想是我们不应该使用版权保护软件。但,就如正当防卫是合法的一样,我得出结论如果使用版权保护软件的目的是为了开发一个自由使用的版本去取代它从而让大众停止使用版权保护软件的话,这样做也是合法的。
 
但,尽管这做法是有道理的邪恶,但它仍然是邪恶。今天我们手上没有任何的UNIX拷贝,因为我们已经用自由的版本取代了它。如果我们不能使用自由的操作系统取代它,我们就把整个机器换掉。
 
GNU 任务列表
 
GNU项目不断地进行着,系统组件不断地增加和被开发出来,最后只剩下几道坎了。我们雇开发者来写缺失的部分。这个任务列表成为GNU任务列表。除了缺失的UNIX组件,我们还列出了一些有用的软件和文档工程,这些都是我们设想一个真正完整的系统应该有的东西。
 
今天,GNU任务列表中几乎所有的工作都完成了--那些工作都完成了,除了几个不重要的之外。但这个列表中满是软件工程,它们应该叫做“应用程序”。任何一个程序只要不限于一小簇群体使用的好用的话都应被呼吁加入到一个操作系统中。
 
甚至连游戏都被加入到这个任务列表中--从一开始就有了。UNIX包括游戏,所以自然的GNU也应该有。但兼容性对于游戏来说不是问题,所以我们没有把UNIX中的游戏加入列表。我们列出了一系列用户应该会喜欢的游戏进去。
 
程式庫GNU通用公共许可证
 
GNU C库使用一个特别的copyleft许可协议叫做GNU程式库通用许可证 GNU Library General Public License(1),它允许专利保护软件整合这个库。为什么有这个例外呢?
 
这不是原则上的问题;没有规则反对专利软件产品整合我们的代码。(为什么给专利保护软件贡献我们的代码呢?)使用LGPL协议给C库,或其它任何的库,是一个战略上的考虑。
 
C库文件的作用是做基础工作;所有的专利保护系统或编译器都需要用C语言库。因此,如果C语言库只能用于自由软件的话对于自由软件没有优势--这只会让人不愿意使用我们的库。
 
我们的系统有这样的例外:在GNU系统(这包括GNU/Linux),GNU C语言库是唯一的C库。所以GNU C库的发行协议中决定了把专利保护软件编译进GNU系统是可以的。允许专利保护软件运行在GNU系统中没有道德理由,但在战略上允许它们的存在可以鼓励更多人使用这个系统,更多人在这个系统上开发自由软件。
 
这就是为什么C库使用GNU程式库通用许可证是个好的策略。对于其它的库文件,决策就要具体情况具体分析了。当一个库起到一个特定的作用帮助特定的程序,那么在GPL协议下发布,限定它只能用于自由软件,能够帮助其他的自由软件开发者获得对抗专利保护软件的优势。
 
我们看GNU软件Readline,一个帮助BASH进行命令行编辑的库。Readline是在GNU协议下发布的,不是GNU程式库通用许可证。这可能限制了Readline的使用,但我们没有损失。现在,至少有一个自由软件应用程序能使用Readline,对于社区来说这就是胜利。
 
专利保护软件开发者有一个资金上的优势;自由软件开发者需要互相帮助获得优势。我希望有一天我们将有一个巨大的GPL协议覆盖的软件库集合从此不再需要相应的专利保护软件,提供好用的模块给新的自由软件,给未来的自由软件开发增加重要的优势。
 
⑴这个协议现在叫轻量级通用公共许可证(又称宽通用公共许可证),避免产生一个所有的库都应使用它的想法。
 
给痒的地方搔一下?
 
Eric Raymond说过“每个好软件的开始是程序员想搔一下痒的地方”。可能有时候这是对的,但很多GNU的重要的软件开发是为了一个完整的自由操作系统。他们来自一个视点和计划,而不是一时的冲动。
 
例如,我们开发了C语言库因为一个山寨的UNIX系统需要一个C库,BASH的出现是因为一个山寨UINX系统需要一个shell程序,GNU tar程序是因为山寨UNIX需要一个tar程序。GNU C编译器,GNU Emacs,GDB调试程序和GNU Make程序都是出于同样的道理。
 
一些GNU程序的出现是因为我们的自由受到威胁。象这样,我们开发了gzip去取代压缩程序,社区曾经失去了这个程序由于LZw压缩算法的专利保护。我们找到了人去开发LessTif,和相对近期的GNOME和Harmony, 是为了解决一些专利保护库引起的问题(见下)。我们开发GNU隐私保护方法取代流行的非自由加密软件,是因为用户不应该在隐私和自由中做出选择。
 
当然,人们在开发这些程序中获得乐趣,很多功能被增加是由于他们自己有需要和有兴趣。但这不是这些程序存在的原因。
 
意想不到的开发
 
 在GNU项目的开端,我想象开发整个的GNU系统,然后整体一起发布。但后来事情不是这样的。
 
当每一个GNU系统的组件被完善,每个组件都能在UNIX系统上运行,但距离一个完整的系统还很遥远。有些程序变得流行起来,而用户开始扩展它们并移植它们--到很多不兼容的UNIX版本中去,有时是其它的系统。
 
这个进程使这些程序更加强大,同时也吸引了资金和贡献者加入GNU项目。但它同时也延迟了一个最小化能运行的系统的诞生,因为GNU开发者的时间很多都用来维护这些移植版本和为已有的程序加入更多功能,而不是继续写一些系统应有但缺失的部分。
 
GNU Hurd
 
在1900年,GNU系统差不多完成了;唯一缺失的组件是核心。我们曾决定使用在Mach上运行的系列服务进程来做我们的核心原型。Mach是一个小核心开发者是卡耐基梅隆大学以及犹他洲大学;GNU HURD是一个服务的集合(或者说 "gnus的hurd")运行在Mach机器上,以及做很多UNIX核心完成的工作。开发过程被延迟了因为我们在等待Mach成为自由软件,这是曾经被承诺过的事情。
 
选择这种设计的理由是为了避免看起来最困难的部分:没有一个源代码级别的调试器去调试一个核心程序。这个工作已经被完成了,在Mach中,我们曾希望像调试其它程序一样调试HURD服务,使用GDB。但那花了很长的时间才实现,而且多线程的服务互相发送消息使调试变得非常困难。让HURD稳定地运行的过程让我们搞了很多年。
 
ALIX
 
GNU核心并不是一开始就打算叫做HURD,它原来的名字叫Alix--是当时我心爱的人的名字。她,一个UNIX系统管理员,曾经指出她的名字如何适合一个UNIX系统版本的模式;作为一个笑话,她告诉她的朋友,“有人应该把一个核心用我的名字命名。”我什么也没说,但希望通过给核心用她的名字命名作为一个惊喜给她。
 
我没有坚持这样做,Michael Bushnell(现在叫Thomas),核心的主要开发人员,喜欢HURD这个名字,并且重新定义了Alix这名字给一个核心的重要部分--捕获系统调用和把他们的信号发给HURD服务的那部分程序。
 
最后,Alix和我分手了,后来她改了名;与之无关的,HURD的设计改变了,C库可以直接发消息给服务,这让Alix组件从此在设计中消失了。
 
但在这事情发生之前,她的一个朋友在HURD的源代码中看到了Alix这名字,然后把这件事告诉了她。所以这个名字起到它应有的作用。
 
Linux 和 GNU/Linux
 
GNU Hurd还达不到产品级使用级别。幸运的,另一个核心能用了。在1991年,Linux Torvalds开发了一个兼容Unix的核心命名它Linux。大约在1992年,整合了Linux的尚不太完善的GNU系统诞生了一个完整的自由操作系统。(当然了,整合它们是一个复杂的工作)。因为LINUX这使我们今天能有一个GNU系统能够运行。
 
我们称这个系统版本 GNU/Linux,来阐释它是一个用GNU软件与LINUX核心组合而成的系统。
未来的挑战

我们已经证明了我们的能力胜任开发很多系列的自由软件。但这并不是说我们是不可战胜和所向无敌的。一些挑战使自由软件的未来不明朗;克服它们需要坚定不移的努力和持续的忍耐力,有时甚至需要数年的坚持。这将需要人们显示他们对自由这个价值观的决断的坚持并表示不会让任何人剥夺它。接下来的四个部分讨论这些挑战。

Secret hardware

硬件制造商不断增加这种趋势让硬件参数成为秘密。这会阻挠Linux和XFree86写新的驱动程序支持新硬件。今天我们有完整的自由操作系统,但我们如果明天不能支持新的硬件那就没有了。

有两个方法对付这个问题。程序员可以用反向工程来弄明白如何支持新硬件。其他人则选择那些能够被自由软件支持的硬件。只要我们的人数 不断增加,硬件信息保密会成为一种自我毁灭的策略。

反向工程是个很大的工程;我们将来有程序有足够的决断力承担它吗?是的--如果我们能够建立一个强力的信念,自由软件是一个大是大非的原则问题,非自由的驱动程序是不能容忍的。而我们有一大帮人会额外出钱,或甚至付出点时间,让我们能使用自由的驱动?是的,如果获得自由的信念能够被广为传播。

(2008年的笔记:这个问题也扩展到BIOS。有一个自由的BIOS,coreboot;问题是获得新硬件的微代码使coreboot能够支持它们。)

非自由的库

一个非自由库在自由的操作系统上运行成为一个给开发者的陷阱。库中有吸引力的功能成为诱饵;如果你使用了这个库,你就掉进了陷阱,因为你的程序会因为不能在自由操作系统中使用而成为废品。(严格来说,我们可以包含你的程序,但当库文件不存在时将不能运行。)甚至更糟糕的是,当使用了版权保护的程式库的程序变得流行起来,它会吸引更多程序员掉入这个陷阱。

这个问题的第一次发生是Motif 工具包,在80年代。虽然当时还没有一个自由的操作系统,Motif将会带来的问题已经显现了。GNU项目出现了两种反应:请求独立的自由软件项目支持自由的X工具包,就如Motif一样,另一个则是找人写一个Motif的替代品。这工作用了很多年;LessTif,由Hungry写了出来,已经足够强大支持多数的Motif应用程序,时间是1997年。

在1996年到1998年间,另一个非自由的图形界面工具库,叫做Qt,曾经是一个自由软件的重要组成部分--KDE桌面系统。

自由的GNU/Linux系统不能使用KDE,因为我们不能使用它的程式库。不管怎样,有些GNU/Linux的商业发行版没有严格遵循自由软件的精神整合了KDE进入他们的系统--制造出一个有更多功能,但自由更少的系统。KDE小组曾积极地鼓励更多的程序员使用Qt库,成百万的新“Linux 用户”从来没有发现这里有问题。这种情况非常糟糕。

自由软件社区以两种方式回应这个问题:GNOME和Harmony。

GNOME,GNU 网络物件模型环境(GNU Network Object Model Environment),是GNU的桌面环境项目。从1997年开始,领导者是Miguel de Icaza,在红帽公司的支持下开发,GNOME提供了相似的桌面功能,但排外地全部使用自由软件。它拥有很多技术优势,例如支持多语言,不仅是C++。但它的主要目的是自由:不需要任何非自由的软件。

Harmony是一个兼容的替代程式库,设计目的是不需要Qt运行KDE软件。

在1998年11月,Qt的开发者宣布改变发布协议,把Qt变成自由软件。虽然没办法证实,但我想这个原因是因为社区对于Qt不是自由软件的坚实的反击。(新的发布协议是不方便和不公正的,所以仍然不鼓励使用Qt)。

[后续的笔记:在2000年9月,Qt完全使用GNU的GPL协议发布,最终解决了这一问题。]

我们将如何面对下一个有吸引力的非自由程式库?整个社区将会明白避免掉入陷阱的重要性吗?或者我们会有很多人放弃了自由而选择便捷,从而产生根本性的麻烦?我们的未来取决于我们的哲学思考。

软件的专利

我们面对的最大威胁是软件专利,能够把算法和软件功能排除在自由软件之外长达20年。LZW压缩算法曾在1983年受到保护,而我们一直不能发布合适的GIF图片压缩程序。在1998年,一个压缩MP3的自由软件由于专利保护法律的原因被从发行版中移除。

有一些方法对付专利保护:我们可以搜集证据证明版权是非法的,而且我们也可以寻找另一方法做到相同的事情。但所有的这些方法只是有时候生效;当都失败的时候,自由软件将会失去用户希望有的功能。当这种事情发生的时候我们要怎么办?

那些坚持自由软件价值观的人们会无论如何一直守护自由软件。我们会用没有专利保护的方法做到相同的事情。但有些希望自由软件在技术上有优势的人会把这种事情视为失败。因此, 当谈论“大主教式”开发模式⑴的效率,可用性和自由软件的力量的时候,我们不能停在那儿,我们必须要传递自由和原则。

⑴可能写成 "bazaar模式“会更明确些,可以减少争议

自由的文档

我们的自由操作系统最大的不方便不是软件,而是--能包括在我们系统中的自由的文档。文档在任何软件包中都是相当重要的;当一个自由软件没有好的自由的手册,那是个很大的坎,今天我们有很多这样的坎。

自由的文档,像自由软件一样,是一个自由的重要要素,不是价格。一个自由手册的标准与自由软件相同:给于所有的用户特定的自由。发行(包括商业的)必须被允许,在线或纸质,所以所有程序的拷贝都要附带一份。

允许被修改也是很重要的。作为一个通用的规则,我不相信允许人们修改所有的文章和书是必要的。例如,我不认为我或你会允许去修改这篇文章,描述我们的行为或视角。

但有一个重要的理由为什么允许修改自由软件的文档是重要的。当人们行使他们的权力去修改程序,增加或改变功能,如果他们认真地更改手册--所以他们能提供准确和可用的手册给他们的程序。如果一个手册不能允许程序员认真地完成他们的工作,就不符合社区的需要。

有一些限制关于如何修改是没问题的。例如,保留原作者的版权声明,发行协议,或作者的列表,都是OK的。当然对于软件作出了哪些的修改的列表也是没问题的,甚至是与技术无关的段落,整段保留。这些限制都不是问题因为它们不会阻止认真的程序员修改手册以适应修改过的程序。换句话说,这样不会阻止社区充分利用手册。

不管怎样,手册的技术部分必须能够被修改,以及使用任何的发布方式发布它,通过所有通常的渠道;不然的话,这些限制就会阻碍社区,手册不是自由的,那我们就需要另外的手册。

我们的软件开发人员将会有足够的觉悟和决断力去制作全系列的自由手册吗?再一次,我们的未来取决于我们的哲学。

我们必须谈论自由

现在大概的统计有千万的GNU/Linux用户,比如Debian GNU/Linux和红帽Linux,自由软件发展出一些现实的优势令到用户使用他们是为了纯粹现实的理由。

这个事情的好的结果很明显:对于自由软件更多的兴趣,自由软件业更多的客户,鼓励公司去开发更多的自由软件而不是专利保护软件。

但对于软件的兴趣的增加快于对于它的哲学思考,而这会引出问题。我们面对挑战的能力和应对上面描述的威胁取决于我们对于自由价值观的坚持。确保我们的社区有这个理想,我们需要把这个思想介绍给刚加入社区的人们。

但我们在这件事情上失败了:我们吸引新用户加入的速度大大快于我们教他们我们社区公民学的速度。我们需要两件事都做,两手抓,两手都要硬,保持平衡。

“开源”

在1998年教新用户关于自由的思想变得更难了,当社区决定使用“开源软件”而不是“自由软件”开始。

一些人喜欢这个词是因为可以避免“free“这个单词的”免费“的意思--一个逻辑正确的目标。其他人,不管怎样,不理会自由软件运动和GNU项目的精神,其中有很多人是那些把利润放在自由之上,在社区之上,在原则之上的人,是呼吁商业运作的用户和执行官们。因此,“开源”这个词在修辞学上重点是如何制作高质量,强大的软件,而没有了自由,社区和原则。
Linux杂志是这个情况的样板--他们满是专利软件的广告但运行在GNU/Linux之上。当下一个Motif或Qt出现的时候,这些杂志会警告程序员们远离它们呢,还是在上面刊登它们的广告呢?

商业运作可以给社区带来很多好处;只要是公平的,都是有用的。但如果用牺牲自由和原则来获得他们的支持是灾难性的;它会令到以前已经不平衡的缺失的公民教育更糟糕。

“自由软件”和“开源”描述了相同性质的软件,差不多,但却描述了软件的不同的东西,关于价值观。GNU项目继续使用“自由软件”这个词汇,来阐释关于自由的理想,不仅是技术上的,这非常重要。

尝试!

Yoda的哲学(“There is no 'try'")听起来不错,但对我不起作用。在我做大多数工作的时候我都在担忧我能否胜任这个工作,也不确定我是否能达到目标。但不管怎样我尝试了,因为除了我之外没有人站在我的城市和敌人之间。我自己也感到惊讶,有时候我胜利了。

有时我失败了;我的一些城市沦陷了。然后我发现了另一个受到威胁的城市,然后准备下一场战斗。长久以来,我学会了看出威胁以及把我放在我的城市和他们之间,招集其他的黑客加入我。

现在,很多时候我不是一个人在战斗。当我看到黑客军团在奋力守住战线的时候我感到宽慰,我也明白,这个城市将会生存下去--现在。但危险每一年都在增强,现在微软也在把我们社区视为要消灭的目标。我们不能把我们的未来的自由寄望于被赐于的。不要接受被赐于的自由!如果你想保留你的自由,你必须准备捍卫它。

GNU 项目(开源社区的由来,背后的哲学)的更多相关文章

  1. Android 开源项目 eoe 社区 Android 客户端(转)

    本文内容 环境 开源项目 eoe 社区 Android 客户端 本文介绍 eoe 社区 Android 客户端.它是一个开源项目,功能相对简单,采用侧边菜单栏.可以学习一下.点击此处查看 GitHub ...

  2. Android 开源项目 eoe 社区 Android 客户端

    本文内容 环境 开源项目 eoe 社区 Android 客户端 本文介绍 eoe 社区 Android 客户端.它是一个开源项目,功能相对简单,采用侧边菜单栏.可以学习一下.点击此处查看 GitHub ...

  3. DevOps|乱谈开源社区、开源项目与企业内部开源

    之前的一篇文章<从特拉斯辞职风波到研发效能中的荒唐事>中关于企业内源的内容在研发效能群内引起了大家的热烈讨论.有的小伙伴不同意,有的小伙伴非常不同意,我觉得这都是非常正常的反馈,话不说不透 ...

  4. 做一名开源社区的扫地僧——从Bug report到Google Summer of Code(GSoC):从200个bug到5000美金

    今年的软件自由日(SFD),我在广州Linux用户组的线下活动上做了一个分享,主题叫做<做一名开源社区的扫地僧(上)>.我把演讲的内容重新整理扩充, 写出了文字版, 希望可以跟更多朋友分享 ...

  5. Linux内核版本 uname命令 GNU项目 Linux发行版

    1.内核版本由linux内核社区统一编码和发布,格式如下图: major.minor.patch-build.desc 主版本号.次版本号.对次版本号的修订次数-编译次数.当前版本的特殊信息 次版本号 ...

  6. 为开源社区尽一份力,翻译RocketMQ官方文档

    正如在上一篇文章中写道:"据我所知,现在RocketMQ还没有中文文档.我打算自己试着在github上开一个项目,自行翻译."我这几天抽空翻译了文档的前3个小节,发现翻译真的不是一 ...

  7. Linux已经全然统治了这个世界:反对开源社区愚不可及

    原文来自:http://readwrite.jp/archives/9977 不管一个企业多强大,它都不存在和开源社区抗衡的实力 十年前.Unix占有最快的计算机世界排名前10位的五席,以及超级计算机 ...

  8. 积极拥抱.NET Core开源社区

    潘正磊在上海的Tech Summit 2018 大会上给我们的.NET Core以及开源情况带来了最新信息. .Net Core 开源后取得了更加快速的发展,目前越活跃用户高达400万人,每月新增开发 ...

  9. 算法工程师想进一步提高竞争力?向TensorFlow开源社区贡献你的代码吧

    算法工程师为什么也要向社区贡献代码? [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] “做算法的人要熟悉算法框架源码吗?算法工程师难 ...

随机推荐

  1. sscanf()函数的用法

    来自:http://blog.csdn.net/tigerjibo/article/details/6442151 sscanf 名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. ...

  2. Android物业动画研究(Property Animation)彻底解决具体解释

     前p=1959">Android物业动画研究(Property Animation)全然解析具体解释上已经基本展示了属性动画的核心使用方法: ObjectAnimator实现动画 ...

  3. JS Tree

    jQuery插件实例七:一棵Tree的生成史 在需要表示级联.层级的关系中,Tree作为最直观的表达方式常出现在组织架构.权限选择等层级关系中.典型的表现形试类似于: 一颗树的生成常常包括三个部分:1 ...

  4. utf8 和 UTF-8 在使用中的差别

    在使用中经常遇到utf-8和utf8,如今最终弄明确他们的使用不同之处了,如今来和大家分享一下,以下我们看一下utf8 和 UTF-8 有什么差别  "UTF-8"是标准写法,ph ...

  5. leetcode先刷_Merge Two Sorted Lists

    非常easy问题. 唯一的地方可以具有更具挑战是确保不会引入额外的空间.查找开始值最小的名单列表的新掌门人,头从列表中删除.其他操作应该没有问题. class Solution { public: L ...

  6. Enum:枚举

    原文:Enum:枚举 枚举 (enum) 是值类型的一种特殊形式,它从 System.Enum 继承而来,并为基础的基元类型的值提供替代名称.枚举类型有名称.基础类型和一组字段.基础类型必须是一个内置 ...

  7. angular实例

    angular实例教程(用来熟悉指令和过滤器的编写) angular的插件太少了,  所以很多指令和过滤器都要自己写,  所以对指令传进来的参数, 以及angular编译的流程更加熟悉才行写出好的插件 ...

  8. android rawquery和query对照

    Cursor cursor = db.rawQuery("select name from *** where id=? ", new String[]{"1" ...

  9. windows 开机自动登录,或者说是开机后自动进入桌面

    这篇文章,对于XP以及XP以上版本有效,包括Windows Server服务器操作系统. 1.原理 --Windows自动登录的原理是,开始后,自动输入登录所使用的账号的用户名和密码,并且自动进入桌面 ...

  10. SQL点滴22—性能优化没有那么神秘

    原文:SQL点滴22-性能优化没有那么神秘 经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做.很早的时候我在网上看到一位高手写的博客,介绍了SQ ...