GNU计划

类别:软件工程 点击:0 评论:0 推荐:
作者:[美]理查德·斯托曼(Richard Stallman)
来源:http://www.gnu.org/gnu/thegnuproject.html
翻译:江雄 1999年2月25日
版本:0.6

译后感

可以说GNU之父理查德·斯托曼这篇文章非常好地回答了一个经常被问
到的问题:“什么是GNU?”,因此尽管可能已经有人译出了全文,我
仍然忍不住自己译了一次,就当是一遍仔细的阅读。这遍细读没有白
费,我澄清了自己很多以前不太清楚的关于GNU及自由软件的问题。比
如:

- GNU的历史和RMS的早期经历如何?
- GPL和LGPL是什么,有何区别?
- 我们仅需要自由软件就够了吗?还是应关注自由?
- 自由软件能否用于商业目的?
- 开放源码和自由软件的区别
- Qt和KDE面临什么样的问题,GNOME和Harmony是怎么来的?
- 自由软件为何不能使用GIF格式,为何gzip需要重写?
- 软件专利对自由软件的威胁
- 为何需要好的自由文档?
- GNU HURD是什么?
- 完整的操作系统是怎么定义的?(甚至可以理解为“使人能够操作计算机的系统”)

由于本人水平有限,译文中的有不少词语翻译得不是很恰当,语法毛病一定也不少,不当之处希望大家
协助改进,以形成一个比较完善的译本。谢谢。

名词翻译疑问:
- community      现译为社团
- hacker         黑客,还有其它更确切的译法吗?
- windows        一般意义上的windows,如X window、Windows System,译作窗口还是视窗?
- SASE           是什么词的缩写?
- Copyleft       copyright是版权,即出版权;copyleft如何译呢?:)
- shell          如何翻译才顺口?
- philosophy     哲学,还是思想?

----------------------------------------------------------------------------------------
版权

作为GNU文档的中译版本,此文的版权遵照GNU GPL的规定以及任何GNU GPL为文档发行专设的条款。

因此你有权:

自由地阅读此文档。
自由地复制此文档,包括电子版或者生成纸制品拷贝。
自由地修改并再发行此文档。
自由地将其应用于商业目的,只要保持它的GPL许可条件不变。
----------------------------------------------------------------------------------------

GNU计划

       —— 理查德·斯托曼, 发表在《开放源代码》一书中。

最初的软件共享社团

当我1971年进入麻省理工大学的人工智能(AI)实验室工作的时候,我成了多年来就已经存在的软件共
享社团的一部份。软件共享并不局限于我们特定的社团;它就象计算机一样古老,正如同菜谱共享和烹
饪的出现一样古老。但是我们所做的远不止这些。

AI实验室使用了一种分时的操作系统ITS(非兼容分时系统),由实验室的黑客[注1]职员设计并在当时
的大型机Digital PDP-10上用汇编语言写成。作为这个社团中的一员,一名AI实验室的系统黑客,我的
工作是改进它。

当时我们的软件并未称为“自由软件”,因为这个词还没有出现;但事实就是如此。当其它大学或者公
司的人想要移植或者使用一个软件时,我们很高兴就让他们用。如果看到有人用的是你不熟悉的、有趣
的系统,你总是可以要求拿到源码,来阅读、修改、或者拆开它的模块用在你的新程序中。

[注1]“黑客”这个词常用来意指“破坏安全者”,实际上是大众媒体导致的混淆。我们这些黑客拒绝
使用这种意思,而是用它来指代那些“热爱编程并且乐意使用聪明技巧”的人。

该社团的瓦解

情况在八十年代Digital停产PDP-10系列的时候发生了急剧的变化。六十年代PDP-10优雅、强大的体系
结构无法自然地过渡到八十年代认为是合理的大地址空间,这意味着构成ITS的所有程序都过时了。

AI实验室的黑客社团在此不久后就瓦解了。1981年,迅速发展Smbolics公司雇用了AI实验室的几乎全部
黑客,人数减少后的社团无法继续维持。(Steve Levy的《黑客》一书记叙了这些事件,并清楚地描写
了当时最初的黑客社团。)当AI实验室在1982年购置一台新的PDP-10机器时,它的管理员决定使用
Digital的非免费的分时系统,而不是ITS。

当时的现代计算机,如VAX或者68020有它们自己的操作系统,但都不是免费的:即使是获得一个可执行
版本,你也需要签署保密协议。

这意味着,在使用一台计算机之前,你必须承诺不去帮助你的邻居。相互协作的团体是不允许的。私有
软件所有者的惯例是,“如果你和邻居共享软件,你就如同海盗。如果你需要什么改进,乞求我们来做
吧。”

这样一种观念也许会令一些读者吃惊:私有软件社会系统——声称你不能共享或者修改软件的社会——
是反社会的、不道德的、完全错误的。但是对这样一个分割大众、令我们无助的社会,我们还能说什么
呢?对这种观念吃惊的读者也许是对私有软件社会已经习惯了,或者是在从私有软件工业的角度来判断
它,软件出版商花费了很长时间的艰难工作使人们确信这才是看问题的唯一方法。

[译注:好象我们并不会对这种观念感到意外。:)]

当软件出版商谈到“加强”他们的“权力”或“阻止盗版”的时候,他们所说的意思实际上是次要的,
这种说法的真正意义隐含于他们认为当然正确的未明说的假定中;期望公众无异议地接受它。那么,让
我们来看看这些假定。

一个假定是:软件本身连带着勿容置疑的、与生俱来的、拥有软件和对所有该软件用户的权利。(如果
这是与生俱来的权利,那么无论他们对大众产生多大的损害,我们都不该反对。)有趣的是,美国宪法
和司法传统拒绝承认这种观点,版权并非与生俱来的权利,而是人为的、政府强加的、限制用户拷贝软
件的天然权利的专利权。

另一个未明说的假定是:软件唯一重要的是他能让你做什么样的工作--亦即我们计算机用户不该关心我
们可以有什么样的社会。

第三个假定是:如果我们不对程序的使用者施加公司的权利,我们就得不到任何能用的软件(或者,就
无法得到完成这样那样工作的程序)。在自由软件运动显示出我们不用镣铐锁上软件就能制造充足的有
用软件之前,这个假定也许还有点道理。

如果我们拒绝于接受这些假定,并以用户为第一位,从普通的、通常的道德角度来判断这些问题,就会
得到截然不同的结论。计算机用户应该能自由地修改程序满足自己的需要、自由地共享软件,因为帮助
其他人是社会的根本。

限于篇幅,这里不再探究这个结论背后的大量推证,请读者参考万维网页
http://www.gnu.org/philosophy/why-free.html。

完全道义上的抉择

我所在的社团消失后,仍然一如继往是不可能了。我面临的是一个完全道义上的抉择。

很容易做出的选择是加入私有软件世界,签署保密协议,承诺不帮助我的黑客同道。很可能我也会在开
发在保密协议保护下发行的软件,于是增加了迫使其它人也背叛同道的压力。

这样我可以挣到钱,也许也可以拿编程来取乐。但我知道在我职业生涯之后,我将回顾的是花费数十年
时间来建造分隔人们的墙,会觉得自己毕生所做的事只是把世界变得更坏。

当有个人拒绝给我和AI实验室提供我们打印机控制程序的源码时(在这个程序中缺少某些功能,使用打
印机非常令人丧气),我体会到接受保密协议后的感受。因此我不能对自己说保密协议是无辜的。他拒
绝和我共享之后我非常生气;我无法转过脸来又对每个人都做同样的事。

另一个直接了当、但不愉快的选择,是离开计算机领域。这样我的技能不会被滥用,但他们会被浪费。
我不会因分隔阂限制计算机用户而负罪,但这种负罪感仍然会发生。

因此我寻找了一条编程者可以做点好事的道路。我问自己,是否有这样的一个或很多程序,我可以写出
来并让以前的社团再次成为可能呢?

答案是明显的:我们需要的首先是一个操作系统。这是开始使用计算机的关键软件。有了操作系统,你
可以做很多事;而没有的话,你根本就用不了计算机。有了一个自由的操作系统,我们就会又有一个合
作的黑客社团--并邀请任何其他人加入。而且任何人都可以不必图谋剥削他/她的朋友们就能使用计算
机。

作为一个操作系统开发者,我正好有这样的技能。因此,虽然我不能想当然地认为如此,我意思到我该
来做这件事。我选择了和Unix兼容的系统,以使它能够移植,而且Unix用户能很容易转到它上面来。它
的名字GNU源于黑客传统,是一个递归的缩写词:“GNU's Not Unix.”。

一个操作系统不仅仅是一个运行其它程序所需要的内核,七十年代,每个称得上是操作系统的都包含命
令处理、汇编器、编译器、解释器、调试器、文本编辑器、邮件阅读程序,以及很多其它程序。ITS有,
Multics有,VMS有,Unix也有。GNU操作系统也该有这些东西。

后来我听到这样的话,是Hillel说的[注1]

我不为自己,谁为我自己?  只为自己,我是什么东西?  现在不开始,更待何时?

[译注:也许就是:人不为己,天殊地灭;若只为己,是为何物?还不开始,更待何时?]

[注1]作为无神论者,我不崇拜任何宗教首领,但我有时发现自己会钦佩一些他们的话。

自由,自由

   “自由软件”这个词有时会导致误解--它和价格没有任何关系,不是“免费”的意思,而是自由。
   因此,这就是自由软件的定义:如果满足下列条件,一个程序对你而言,就是自由软件。

你有运行该程序的自由,不管出于什么目的。  你有修改该程序,满足自己需要的自由。(为在实践中
实现这样的自由,你必须能有源码,因为没有源码而想修改程序是极度困难的。)你有再发行它的拷贝
的自由,以无偿或者有偿的形式。  你有发行该程序修改后的版本的自由,使整个社团能从你的改进中
受益。

由于“free”一词是指自由,而不是价格免费,软件的销售版和自由版之间没有冲突。事实上,销售软
件的自由是至关重要的:自由软件CD合集的销售对整个社团是很重要的,它们的销售也是为自由软件开
发筹集资金的重要途径。因此,一个人们不能自由地收集到这样的合集里的程序不是自由软件。

由于“free”一词的含混,人们已经花了很长时间想找个替代词,但还没有找到合适的。英语较其它语
言有更多的词汇和细微差别,但它没有一个简单的、无异义的词来表达“自由的”之意,即自由自在——
“unfettered”是意义最接近的一个。象“liberated(解放的)”、“freedom(自由)”和“Open
(开放)”等词都有不当的意思或某些缺点。

[译注:似乎中文在这里体现了一点点优势,尽管中文词汇未必有英文多,但“自由软件”一词足够,
含义相当明确。]

GNU软件和GNU系统

开发一个完整的系统是一项非常巨大的工程。为尽快发展,我决定改写和使用一些不管在哪里已经存在
的一些自由软件程序。例如,我很早就定下了用TeX作主要的文本编排器;几年后,我决定使用X
Windows系统,而不是为GNU重写一个视窗系统。

由于这个决定,GNU系统不同于一个所有GNU软件的合集,GNU系统包括一些不是GNU 的软件,即其它人
为其自己的目的开发的程序和项目,但因其为自由软件,我们可以使用。

项目的商业化

1984年1月,我从MIT辞职,开始写GNU软件。离开MIT是必要的,这样MIT就不能干涉GNU作为自由软件发
布。如果我还属于那里的职员,MIT就可以要求拥有这些工作,就会施加他们自己的发行条款,或者将
全部工作转为私有软件包。出于发起它的目的:建立一个新的软件共享社会,我不希望做了这么多工作
却于此目的毫无益处。

尽管如此,Winston教授,然后是MIT AI实验室的领导,亲切地邀请我仍然使用实验室的设备。

开始的脚步

在开始GNU计划之后不久,我听说了自由大学编译器工具,即VUCK(荷兰语中自由一词以V打头)。这是一
个为处理多种语言而开发的编译器,包括C和Pascal,并且支持多种机器。我给它的作者写了信问GNU计
划能否使用它。

他的回信是嘲笑式的,说大学是自由的但编译器不是。由此我决定我为GNU计划写的第一个程序是一个
多语言、多平台的编译器。

为避免全部由我重写整个编译器,我取得了Pastel编译器的源码,它是Lawrence Livermore实验室开发
的跨平台编译器,用扩展的Pascal语言写成,并设计为系统编程语言。我增加了一个C的前端处理,开
始把它移植到Motorola 68000计算机。

但是后来发现此编译器需要数兆字节的栈空间,而手头的68000 Unix系统只允许64K,因此我只好放弃
移植。

接着我确认,Pastel编译器被设计成这样的,分析整个输入文件,生成语法树,将整个语法树转变为一
串机器指令,然后生成整个输出文件,在这一系列过程中不释放任何存储空间。此时,我决定不得不自
己重写一个新的编译器,就是现在的GCC。Pastel编译器一点都没有用上,但我设法改写并使用了我写
的C前端处理。但这已经是好几年以后了。早先我写了GNU Emacs。

GNU Emacs

我在1984年9月开始写GNU Emacs,1985年初,它开始可以用了。这使我开始使用Unix系统进行编辑工作;
由于没有兴趣使用vi或ed,我以前一直在别的类型的机器上进行编辑工作。

此时,人们开始使用GNU Emacs,并产生了如何发布它的问题。当然,我把它放在我使用的MIT计算机的
ftp服务器上(这台机器,prep.ai.mit.edu就成为主要的GNU ftp发布站点;几年后它退役了,我们将此
名字转给了新的ftp服务器。)但在那个时候,很多有兴趣的人还不在互联网上,不能用ftp得到它。因
此问题就是,我该对这些人怎么说。

我可以说,“找一个上了网、而且愿意为你拿一份拷贝的朋友帮忙”。或者象我以前在最初的PDP-11
Emacs发布时做的:告诉他们:“寄给我一盘磁带和SASE,我把Emacs放在里面寄给你。”但我当时没有
工作,在设法从自由软件中挣钱。因此我宣布我愿意给想要的人寄一盘磁带,但要收150美金。就这样,
我开始了自由软件发行业,成为当今发行完整的基于Linux的GNU系统的公司的先驱。

一个程序是否对每个用户都是自由的呢?

如果一个程序在离开作者时是自由软件,并不意味着它对每个拿到拷贝的用户都是自由的。例如,公共
领域软件(没有版权的软件)是自由软件,但任何人都可以把它修改然后私有化。类似地,很多自由程
序是有版权的,但在简单的同意许可下发布,允许产生私有的改进版本。

一个很好的例子就是X Window系统。它是MIT开发的,作为自由软件在同意许可下GNU软件变成私有软件
的发行条款。我们使用的办法叫“copyleft”。[注1]

Copyleft使用版权法,但是把它反过来用,服务于与通常相反的目的:不是作为软件私有的方法,而是
保持软件的自由。

Copyleft的中心思想是:我们允许每个人运行程序、拷贝程序、修改程序以及发布改进版--但不允许施
加他们自己的限制。这样,作为“自由软件”标志的关键的自由就授予了每个拥有拷贝的用户;这样的
自由成为不可剥夺的权利。

为有效地使用copyleft,修改的版本也必须是自由的。这确保在我们工作的基础上的其它工作发表后也
能为我们的社团所用。当从事编程工作的编程者自愿改进GNU软件时,要靠Copyleft保护他们,防止他
们的雇主说:“你不能共享这些改动,因为我们将用它来做我们此程序的私有版。”

如果我们想确保我们程序的每个用户的自由,改动也必须自由的要求非常关键。私有化X Window系统的
公司通常作的改动是移植到他们的系统和硬件上。这些改动和X的大量代码相比是比较小的部份,但他
们不是无关紧要的。如果进行改动是成为否认用户的自由的借口,那么这个借口就很容易被任何人都利
用。

一个与此相关的问题是:把自由的程序和非自由的代码相结合。这种组合不可避免地成为不自由的;非
自由部份所缺少的任何自由,在组合整体都将缺乏。允许这样的组合好比在大船上凿个致沉的窟窿。因
此copyleft的一个关键要求是堵上这个洞:任何对copyleft程序的增加和组合都必须使组合后的更大的
版本也是自由的和copyleft的。

我们为大多数GNU软件使用的特定copyleft是GNU一般公用许可,缩写为GNU GPL。

在特定情况下我们有其它类型的copyleft。GNU手册也是copyleft的,但使用一种简单得多的类型,因
为用于手册的GNU GPL不必如此复杂。

[注1] 在不知1984还是1985年,Don Hopkins(非常有想象力的一个家伙)寄给我一封信,信封上写了
一些有趣的话,包括这么一句:“Copyleft--all rights reserved.”我于是借用了“copyleft”一词
来为我当时发展的发行观念命名。

自由软件基金会

随着对Emacs的兴趣不断增长,其他人加入到GNU计划中来,我们决定此时又是寻求资助的时候了。于是
1985年我们建立了自由软件基金会,一个用于自由软件开发的免税的慈善机构。FSF同时接管了Emacs的
磁带发行业务;后来它扩展到在磁带中包含其他自由软件(GNU的以及不是GNU的),并出售自由的手册。

自由软件基金会也接受捐赠,但它的大部份收入来源于销售--销售自由软件以及其它相关业务。今天它
销售源码CD、执行码CD、印刷精美的手册(全都可以再自由发行和修改)以及豪华发行版(我们为你所
挑选的平台制作所有软件的合集)。

自由软件基金会的雇员写出并维护了许多GNU软件包。著名的两个是C程序库和shell程序。GNU C程序库
是在GNU/Linux上运行的每个程序和Linux打交道的东西。它是自由软件基金会的成员Roland McGrath开
发的。多数GNU/Linux系统上使用的shell程序是BASH,即Bourne Again Shell[注1],由FSF雇员Brian
Fox开发。

我们资助这些程序的开发,因为GNU计划不仅是开发工具和环境。我们的目标是完整的操作系统,这些
程序是达到目的所需要的。

[注1]“Bourne Again Shell”是对“Bourne Shell”开的玩笑,后者是Unix上常用的shell程序。

自由软件支持

自由软件思想排斥了特定的普遍的商业实践,但它并不反对商业化。当商业机构尊重用户的自由时,我
们祝愿他们早日成功。

销售Emacs拷贝演示了一种自由软件业务。FSF接管此业务时,我需要另一条谋生的途径,在和我开发的
自由软件有关的销售服务中我找到了它。这包括教学指导,如如何对GNU Emacs编程、如何定制GCC、软
件开发等,多数是移植GCC到新的平台。

现在这些类型的自由软件业务都有很多公司在从事它们。一些公司发行自由软件CD合集;其它的出售从
回答用户问题到修补bug,到增加新功能各种层次的技术支持。我们甚至还看到有依靠发起新的自由软
件产品的自由软件公司。

然而要注意,很多公司冠有“开放源码”的称号,实际上其业务却是和自由软件一起运行的非自由软件。
这些不是自由软件公司。它们是私有软件公司,其产品将用户引向偏离自由的方向。他们称之为“增
值”,这反映了他们希望我们采纳的价值观:便利高于自由。如果我们更看重自由,我们应该称它们
“弱自由”产品。

技术目标

GNU的主要目标是成为自由软件。即使GNU在技术上并无优于Unix之处,它还有社会方面的优点:允许用
户彼此合作,以及道义上的优点:尊重用户的自由。

但很自然地要用已知的好的实践标准来衡量这些工作--如,动态分配的数据结构可以避免任何固定尺寸
的限制,以及在任何有意义的时候都支持可能的8位字节数据。

另外,由于决定不支持16位机器,我们排除了Unix集中于小内存的考虑(显然GNU系统完成的时候32位
机器会成为标准),除非在超出1M的时候,并不设法降低内存消耗。在处理特别大的文件不是那么重要
的程序中,我们鼓励编程者将整个输入文件一次性读入内存,然后扫描其内容,这样无需再考虑I/O。
这些决定使很多GNU程序在速度和可靠性上超过了它们的Unix同伴。

捐赠的计算机

随着GNU计划名声的增长,人们开始给GNU捐赠运行Unix的机器。这些机器非常有用,因为开发GNU的部
件的最容易的办法就是在Unix系统上做,然后逐渐替换掉该 系统中的部件。但是它产生了道义上的问
题:我们使用Unix的拷贝到底合不合适。

Unix过去(和现在)是私有软件,GNU的思想是我们应该不使用私有软件。但是,根据自我防卫的暴力
行为是正当的这样一种推理逻辑,我认为如果私有软件包对于开发自由的替代软件、从而帮助其他人停
止使用私有软件非常关键时,这样的私有软件的使用是正当的。

但是,即使这是一种正当的恶行,它毕竟还是恶行。如今我们没有任何Unix的拷贝,因为我们已经用自
由的操作系统替换了它。在无法替换一台机器的操作系统时,我们连机器也换掉。

GNU任务清单

随着GNU计划的进行和越来越多的系统部件被找到或开发出来,终于列出一个剩余的差距变得很有用了。
我们用它来雇用开发人员写需要的部分。这个清单成为GNU的任务清单。除了缺少的Unix部件,我们列
出了各种各样其它的有用的软件和文档计划。我们认为,这是一个真正完整的系统是应该具备的。

如今,GNU任务清单中几乎不缺少任何Unix部件了——除了一些不太要紧的,其它工作已经完成了。但
清单中充满了可能要称作是“应用程序”的项目。任何对一小部分用户有吸引力的程序都可能会很有用,
可以加到操作系统中。

甚至游戏也被包括在任务清单中——一开始就有。Unix包括游戏,因此GNU也该有。但游戏的兼容性不
成其为问题,因此我们不必遵从Unix包含的游戏清单。相反地,我们列出了广泛的、不同种类的、会受
用户欢迎的游戏。

GNU库通用公共许可证

GNU C程序库使用了一类特别的copyleft,叫GNU库通用公用许可证,允许该程序库和私有软件相链接。
为什么要有这个例外呢?

这和根本原则无关;没有任何规则说私有软件有资格使用我们的源码。(为何要为 一个断然拒绝和我
们共享的项目作贡献呢?)C程序库以及其它任何库代码,使用LGPL是出于策略性的考虑。

C程序库完成的是一般性的工作;每个私有系统或者编译器都带有C程序库。因此,仅使我们的C程序库
可被自由软件使用不会给自由软件带来任何额外的好处--它只会打击对我们的程序库的使用。

一个系统是个例外:在GNU系统(包括GNU/Linux)中,GNU C程序库是唯一的C程序库。因此GNU C程序
库的发行条款决定了私有程序是否可以在GNU系统上编译。道义上没有理由要让私有软件在GNU系统上运
行,但从战略上看,排斥它们会更加对推广使用GNU系统的不利,而不是鼓励自由应用程序的开发。

这就是为何C程序库使用LGPL是一个好的战略。对于其它库,需要就具体情况进行考虑来作出战略上的
决定。当一个库完成了一个特别的工作,有助于写出某类特定的程序,就用GPL发行它,使它限于自由
软件使用,这是帮助其它自由软件开发者的一个方法,让他们获得对私有软件的优势。

[译注:关于库代码使用LGPL还是GPL的问题,也有颇多争论,一种更加仁慈的看法是,即使某些库能让
自由软件获得优势,为“re-invent the wheel”避免做无用功,也应该使用LGPL发行,将其开放给私
有软件使用。]

考虑GNU Readline库,它是开发出来提供BASH的命令行编辑功能的。Readline是在通常的GPL下发行的,
而不是LGPL。这可能的确减少了Redline被使用的机会,但这对我们没有损失。同时,为使用Readline,
至少有一个有用的应用软件成为了自由软件,这对整个社团的确是件好事。

私有软件开发者拥有金钱能提供的好处;自由软件开发者需要相互之间提供优势。我希望有一天我们能
有一大批GPL保护下的程序库,而私有软件中没有类似的东西,来提供构造新的自由软件的有用的模块,
形成将来自由软件开发的主要优势。

的确挠到痒处?

Eric Raymond说“每个优秀的软件都是从挠到开发者的痒处开始的”。也许有时的确是这样,但很多基
本的GNU软件都是为一个完整的操作系统开发出来的,它们源于预想和计划,不是来自冲动。

例如,我们开发了GNU C程序库,是因为类Unix系统需要C程序库,开发了Bourne-Again Shell(bash)是
因为类Unix系统需要shell,开发了GNU tar是因为类Unix系统需要tar程序。我自己的程序也一样--GNU
C编译器、GNU Emacs、GDB和GNU Make。

有一些GNU程序是开发出来对付对我们的自由的某些威胁的。因此,我们开发了gzip来代替Compress程
序,由于LZW算法的专利它不再能用于我们这个社团。我们找到人来开发LessTif,更近期的是GNOME和
Harmony,解决某些私有程序库带来的问题(如下所示)。我们在开发GNU Privacy Guard,来代替流行
的、非自由的加密软件,因为用户应该不需要在隐私和自由之间作出抉择。

当然,写这些程序的人变得对它很感兴趣,而且有很多功能由于很多人自己的需要和兴趣被他们加到里
面。但这并不必须是这些程序之所以存在的理由。

意料之外的发展

在GNU计划之初,我想象我们会开发出整个GNU系统,然后作为一个整体发行它,然而事情却不是这样。

由于GNU系统的每个部件都在Unix系统上实现,远在完整的GNU系统出现之前,每个部件都可以运行在
Unix上。其中有些程序变得非常流行,用户们开始扩展和移植它们--移植到多种不兼容的Unix版本中,
有时也移植到其它系统。

这种过程使这些程序更加强大,并且成为引入资金和贡献者到GNU计划的纽带。但它很可能也将起码能
工作的系统的完成延迟了几年时间,因为GNU开发者的时间被用来维护这些移植版和在已有的部件中增
加功能,而不是继续一个接一个地开发缺少的其它部件。

GNU Hurd

到1990年,GNU系统几乎完成了;唯一缺少的主要部件是内核。我们已经决定将我们的内核实现为一组
运行在Mach之上的服务进程。Mach是先后在Carnegie Mellon大学和Utah大学开发出来的微内核。GNU
HURD是在Mach上层运行的一组服务进程(或gnu羚羊群[译注:因为GNU的标志就是一只羚羊的头]),完
成Unix内核的种种功能。开始开发的日子被拖延了,因为我们要等待Mach以自由软件形式发行,它曾作
过如此许诺。

选择这个设计的一个原因是要避免似乎是最艰巨的一项工作:在没有源码调试器的情况下调试核心程序。
Mach已经解决了这个问题,我们预期用GDB把HURD服务进程当用户程序来调试。但花了很多时间才使它
成为可能,而且多线程的服务进程彼此还发送消息,使其非常难以调试。为使HURD稳定地工作花了好多
年时间。

Alix

GNU核心最初并没有要称为HURD,它原来的名字叫Alix——源于我当时的情人的名字。她是一个Unix系
统管理员,曾经指出她的名字如何适合于作为Unix系统版本的通常命名模式;她还跟朋友开玩笑说,
“应该有个人用我的名字命名一个核心”我没说什么,但决定用一个叫Alix的核心来让她惊喜一下。

这个名字没有长久。主要的核心开发者,Michael Bushnell(现在的Thomas)喜欢用名字HURD,并重新
定义Alix为核心中的某一部分——负责捕获系统调用并给HURD服务进程发送消息来处理它的部分。

最后,Alix和我的关系破裂了,并且她改了个名字;与此无关的是,HURD的设计也修改了,C程序库直
接发送消息给服务进程,这使得Alix这个部件从设计中消失了。

但在这些事情发生之前,她的一个朋友在HURD源码中邂逅了Alix这个名字并告诉了她,因此这个名字也
算完成了使命。

Linux和GNU/Linux

GNU Hurd还没有准备好作为产品使用。幸运的是,另一个内核出现了。1991年,Linus Trovalds开发出
Unix兼容的内核并称它为Linux。1992年左右,Linux和尚未很完整的GNU系统相结合,产生了一个完整
的自由操作系统。(当然,组合它们是个充实的工作。)我们今天能真正运行一个GNU系统,的确要归
功于Linux。

我们称这个版本的系统为GNU/Linux,来表明它的组成是GNU系统和Linux核心。

未来的挑战

我们已经证明了我们开发大范围的自由软件的能力。这并非意味着我们是不可征服和无可阻挡的。有几
个挑战令自由软件的未来未为可知;遭遇它们需要坚定的努力和毅力,有时要持续数年。它将需要人们
在重视他们的自由、不让任何人夺去它时所展示的那种决心。

下面四个段落讨论这些挑战。

硬件秘密

硬件制造商越来越倾向于对其硬件规范保密。这给写自由的驱动程序让Linux和XFree86支持新的硬件带
来困难。我们现在有了完全自由的系统,但如果不能支持明天的硬件我们将不再拥有它们。

有两种办法对付这个问题。编程者可以通过逆向工程来查明如何支持这些硬件。我们其它人可以使用自
由软件支持的硬件;但我们的人数增加时,硬件规范保密将成为弄巧成拙的做法。

逆向工程是艰巨的工作;我们有决心足够坚定的编程者去从事它吗?是的——如果我们建立起强大的观
念让自由软件成为原则性问题,并且非自由的驱动程序令人无法忍受的话。我们中大量的人会花费额外
的钱,或者甚至一点额外的时间,使我们能使用自由的驱动程序吗?是的,如果拥有自由的决心深入人
心的话。

非自由的程序库

让非自由的程序库运行在自由操作系统上实际上是自由软件开发者的陷阱。该库的吸引人的功能就是诱
饵;如果你使用它,就掉入了陷阱中,因为你的程序对一个自由操作系统就没用了。(严格地说,我们
可以包含进你的程序,但没有那个程序库,你的程序运行不了。)更糟的是,如果一个使用私有程序库
的程序流行起来,就会诱使更多其他编程者进入这样的陷阱。

头一个这样的例子是80年代的Motif工具。虽然那时还没有自由操作系统,很明显Motif会给它带来什么
样的问题。GNU计划的回应有两种:要求各个自由软件项目同时支持自由的X工具控件以及Motif,或者
要求有人来写一个Motif的替代品。这项工作进行了很长时间;直到1997年,由Hungry.com的编程者开
发得LessTif才强大到可以支持大多数Motif应用程序的程度。

在1996和1998年之间,在一个丰富的自由软件合集KDE中使用了另外一个非自由的GUI工具库:Qt。

自由的GNU/Linux系统无法使用KDE,因为我们无法使用Qt库。然而,有些GNU/Linux的商业发行者并不
特别严格遵循自由软件原则,在他们的系统中加进了KDE--成为了一个功能更强但自由更少的系统。KDE
开发组还在积极地吸引更多编程者使用Qt,而且上百万的新“Linux用户”从未了解到这里面存在的问
题。情况很严重。

[译注:最近有消息说Qt改变了许可方式(下面作者会提到的),这对所有GNU/Linux的使用者和开发者
无疑是个好消息,也可以说是GNOME项目的一个胜利。为此而开发的GNOME,更是给大家带来了福音。相
信在1999年,GNOME日渐成熟的的新版本会让大家惊喜不已。]

自由软件社团的反应有两种:GNOME和Harmony项目。

GNOME,即GNU网络对象环境(GNU Network Object Model Environment),是GNU的桌面系统计划。它由
Miguel de Icaza于1997年开始,在Red Hat 软件公司的支持下开发。GNOME开始旨在提供类似的桌面工
具,但专使用自由软件。它有技术上的优势,如支持多种语言,而不仅限于C++。但它的主要目的是为
了自由:不受限于任何非自由软件的使用。

Harmony项目是Qt的一个兼容替代库,其设计目的是让KDE软件没有Qt也可以运行。

在1998年11月,Qt的开发者宣布了其许可方式的改变,这种改变实行后,能让Qt成为自由软件。虽然无
法肯定,但我想这部份归功于我们社团对Qt非自由软件带来的问题的坚定反应。(新的许可方式不太方
便而且不公正,因此仍应该尽量避免使用Qt。)

我们如何对付下一个非自由程序库的诱惑呢?整个社团都能对这样的陷阱保持警惕吗?或者说我们中很
多人会为便利而放弃自由,从而导致大问题吗?我们的未来处决于我们的思想。

软件专利

我们面临的最坏的威胁来自软件专利,它可以把自由软件使用专利算法和功能的限制延伸到20年之久。
LZW压缩算法专利是在1983年申请专利的,我们现在仍然无法发行能正确生成GIF压缩文件的自由软件。
1998年,由于专利诉讼的危险,有个生成MP3压缩音频文件的自由程序被迫从GNU发行中去掉了。

[译注:GIF图形文件压缩格式的改进和替代者PNG(Portable Network Graphics,
http://www.cdrom.com/pub/png/)应该不久就能实用。但MP3的确是一个问题。]

有多种对付专利的办法:我们可以寻找证据表明某项专利已经无效,也可以寻找替代的办法。但这些办
法都只能在有时候行得通。一旦它们都没有效果,某项专利可能会迫使所有的自由软件都缺少用户需要
的某些功能。如果这样我们怎么办?

我们中为自由而看重自由软件的人当然还会使用自由软件。我们会设法不使用专利的功能来完成工作。
但那些因希望成为技术高手而看重自由软件的人可能会因为某项专利妨碍了它而称其为一种失败。因此,
虽然需要讨论“教堂”开发模式在实际中的效力和一些自由软件的可靠性及能力,我们不能停留于此,
我们必须关注自由和原则。

自由文档

我们的自由操作系统的最大缺陷不在于软件——而是在其中缺少好的自由手册。文档是任何软件包的基
本部份;如果一个重要的自由软件没有配上好的自由文档,那将是一个重大缺陷。如今我们有很多这样
的缺陷。

[译注:更不用说中文文档了。]

和自由软件一样,自由文档也是一种自由,而不是价格上的问题。自由文档的规则几乎完全和自由软件
一样:它关系到给予所有的用户某种自由。必须允许再发行(包括商业销售)、以及电子和印刷版本,
以使程序的每个拷贝都能配有手册。

允许修改也非常关键。根据一般的规则,我想允许人们修改任何种类的文章和书籍并非必需的。例如,
我想你或者我都没有义务要允许修改类似此篇的文章,因它阐述的是我们的行为和看法,不能篡改。

但也存在特定的原因,需要认为自由软件文档的修改权是至关重要的。当人们行使他们修改软件、增加
或者改变其功能的权利时,如果他们尽责的话,也会修改其手册——以便仍然能为改过的程序提供确实
有用的文档。不允许编程者尽责完成工作的手册不符合我们社团的要求。

施加一些如何修改文档的限制没有问题。例如,要求保留原作者的版权声明、发行条款、或者作者名单
都是可以的。要求修订版带有修订声明也是没有问题的。甚至可以包含不允许被删除或修改的章节,只
要这些章节和技术性问题无关。这些限制是可以的,因为他们不会阻碍尽责的编程者为改过的程序修订
文档。换句话说,它们不妨碍整个社团最大限度地利用这些手册。

然而,必须允许修改手册中的所有技术内容,并通过常用的媒体发布、通过所有的常用渠道;否则,这
些限制就妨碍了社团,手册就不是自由的了,我们就需要另一个手册。

自由软件开发者会有此理智和决心来生产全部范围的自由手册吗?仍然,我们的未来依靠我们的思想。

我们必需关注自由

目前估计有一千万GNU/Linux系统的用户,如Debian GNU/Linux和Red Hat Linux。自由软件开发的优势,
已经使得用户纯粹因为实际需要而来支持它。

它的良好结果是显而易见的:更大的开发自由软件的兴趣,更多自由软件业务的顾客,更能鼓励商业公
司开发商业自由软件,而不是私有软件产品。

但对软件的兴趣比对其思想的了解要发展得快得多,这导致一些问题。如上所述,我们迎接挑战和威胁
的能力依赖于我们为自由而战的意愿。为确使我们的社团有这个意愿,我们需要将其传播给进入社团的
新的用户。

但我们这方面做得不好:吸引新用户加入社团的努力远远超过了指引他们成为社团公民的努力。我们两
方面都得做,并保持两者的平衡。

“开放源码”

当一部份社团成员在1998年决定停止使用“自由软件”一词而是用“源码开放软件”时,教给新用户自
由的观念变得更加困难了。

[译注:关于这个措辞上的问题现在有不少讨论,但我想中文的使用者没有这个问 题。这些讨论主要是
想明确“自由”和“免费”在英文中的区别(因它们都拼作“free”),在中文中没有这个问题。]

有些人倾向于这个新词,其目的在于避免“自由”和“免费”的区别--是个正当的目标。然而,其他一
些人是在分离推动自由软件运动的精神原则而迎合商业主管和用户,他们中许多人的想法是利益比自由、
社团和原则更重要。因此,“开放软件”的“花言巧语”关注的是制作高质量、强大的软件的潜力,而
回避了自由、社团和原则的问题。

众多Linux杂志是这样一个鲜明的例子——它们充斥着能运行在GNU/Linux上的私有软件的广告。当下一
个Motif或Qt诱饵出现时,这些杂志会警告编程者远离它吗?还是为它做广告呢?

商业支持可以从很多途径为自由软件社团作贡献;所有其它途径都是平等的、有用的。但为赢得他们的
支持而更少地关注自由和原则是危险的;它使前面提到的吸引和教导公民的不平衡更加严重了。

“自由软件”和“开放源码”描述的是软件的同样的范畴,但或多或少,它们表达了不同的意思,关于
软件、关于价值的含义。GNU计划仍将使用“自由软件”一词,来表达这样的思想:自由,而不仅是技
术,才是重要的。

努力!

犹大的哲学(它里面没有“尝试”一词)[抱歉我不太懂犹大的哲学。——译注]看来很优雅,但不适合
于我。我在做大部份工作的时候,还在为我是否能完成而焦急,还不太清楚我所做的是否足够达到其目
标。但我努力了,因为在我敌人和我的城堡间只有我一人[意指作者自己是此运动的先锋——译注。]。
令我惊喜的是,我有时也有成功。

有时我会失败;我的城堡会垮掉一些。于是我发现另一个威胁我的城堡,并准备又一次战斗。日复一日,
我学会了寻找威胁来源,并挡在我的城堡前,呼吁其他黑客来加入战斗。

目前,我经常并非是单独一人。看到大群的黑客加入队伍使我欣慰和高兴。我意思到,这座城堡将继续
存在——至少到现在。但危险逐年增加,现在微软已经明确地针对我们的社团。我们不能想当然认为未
来是自由的。不要抱有幻想!如果你要保住自由,你必须准备来保卫它。

版权所有:Copyright (C) 1998 Richard Stallman

本文地址:http://com.8s8s.com/it/it36007.htm