CSDN博客

img moxiaolong

GNU工程

发表于2005/1/2 1:13:00  636人阅读

GNU工程 理查德 斯托尔曼 首次出版于"开放的书" 第一个共享软件社团 1971年当我在MIT人工智能实验室开始工作时,成为了一个存在多年的共享软件社团的一员.在我们这个社团中共享软件是不受限制的,这个传统就像分享菜谱之于烹饪那样古老.但我们做得更多. 在人工智能实验室里有一个叫作ITS(the Incompatible Timesharing Systerm)的分时操作系统,是实验室的同事们在PDP-10--一台那个时代的大计算机--上用汇编语言设计编写的,作为社团的一员,一名人工智能系统的黑客,我的工作是改进这个系统. 我们不把我们的软件叫作"自由软件",因为那时还没这个说法,但它就是这么回事.不论是从哪个大学或公司来的人,想要移植或使用什么程序,我们都乐于提供.如果你看见有人在使用一个陌生的或有趣的程序,你都可以要来源程序,于是你就可以阅读,修改,使用它的部分代码制作新的程序. (1)许多媒体错误地用"黑客"这个词来指称"破坏网络安全的人".我们黑客从不接受这样的误用,并继续把这个词用作:"那些喜欢编写程序并使其更完善的人". 社团的消亡 在80年代早期,由于数字公司停止了PDP-11系列的生产,情况发生了剧变.60年代的这个优雅,强大的体系无法在80年代(更大的地址空间成为可行的)继续发展. 而人工智能实验室的黑客团体早就解散了.在1981年,现已烟消云散的符号(?)公司从人工智能实验室招收了几乎所有的黑客,于是这个社团就此消失.(斯蒂夫列维写了本书叫<<黑客们>>在描写这个社团早期的情况的同时也描述了这里所发生的事)当实验室在1982年买进一台新的PDP -10时,它的管理者决定采用数字公司商业的分时操作系统来代替ITS. 那个时代时髦的电脑,如VAX或68020,有它们自己的操作系统,但都不是自由软件,你就连复制一份可执行文件的拷贝都要签署保密协议. 这意味着使用电脑的第一件事是承诺不去帮助你的邻居.团体合作是被禁止的.专有软件的所有者制定的规则是:"如果你和邻居共享,你就是罪犯.如果你想要改变什么,来求我们吧." 这个专有软件的社会体制--这个社会体制说你不被许可分享或改变软件--的主意是反社会,反伦理的,出乎某些读者的意料,它的错误简单明了.不过除此以外,我们对于这样的一个构建于使公众隔离,使用户无助的系统,还能说什么呢?对这个观点感到惊讶的读者可能是从专有软件供应商那里接受了他们的观点.软件出版商长期以来不遗余力的使人们相信那是看待问题的唯一角度. 当软件出版商说到"维护"他们的"版权"或"制止侵权"时,他们实际上说了什么是次要的.这些声明的真实信息存在于他们认为不言自明的假设下,公众被要求不加质疑的接受它们.所以让我们来检验一下这些假设. 一个假设是软件公司对它们的软件有无庸质疑的权利并且对所有的用户都产生法律效力.(如果这是一种天然的权利,那么不管公众如何受到它的伤害,我们都无法反对.)有趣的是,美国的宪法和法律传统反对这种观点,版权不是天赋权利,只是一种人为的由政府?强加的限制用户拷贝这一天然权利的专有权. 另一个没有明说的假设是对软件来说唯一重要的事是它允许你做什么--就是说我们计算机用户不用关心自己身处怎样的社会. 第三种假设是如果我们不给电脑公司一种高于用户的权利,我们就没有有用的软件(或者,将没有能完成这件或那件工作的程序).这个观点看上去貌似有理,直到自由软件运动证明我们可以在不设限制的情况下制作出大量有用的软件. 如果我们决定不接受这些假设,并以正常的把用户放在首位的道德准则去衡量和判断,就可得出不同的结论.计算机用户应该有权根据自己的需要修改软件,并自由分享软件,因为帮助他人是社会的基石. 这里不是就此话题展开讨论的地方,所以我建议您读这个网页: http://www.gnu.org/philosophy/why-free.html 一个完全基于道义的选择 随着我的社团的瓦解,过去的生活不可能继续了.而是,我面临一个完全是道义上的选择. 比较容易的选择是加入专有软件世界,签署保密协议,并承诺不去帮助黑客伙伴.很可能我也去写在保密协议下发表的软件,去要胁其他人背判他们的伙伴. 我可以通过这种方式赚钱,并可能以写代码自娱自乐.但我知道这样在我退休之后,回首平生在人与人之间助长隔阂的岁月,只会感到自己使世界变得更糟. 我早就体验过被保密协议拒之门外的滋味,那是有个家伙拒绝给我和我们实验室一份打印机控制程序的源程序.(那个打印机的程序有缺陷,用起来真要命)所以我不能告诉自己对保密协议听之任之,当那个家伙不肯和我们共享的时候我很生气,所以我不能对其他人做同样的事. 另一个选择,直接了当但令人不快,就是离开电脑界.这样我的技能不会被误用,但仍然是浪费了.我将不会被指责把人们分裂和孤立起来,但这事依然会发生. 所以我要寻找一条使一个程序员做点好事的道路.我问自己能写一个或一些什么样的程序才能使社团重建? 答案很清楚:首先要有一个操作系统.对于一台电脑来说这是最基本的程序.有了一个操作系统,你就能做任何事;没有它,你什么都不能做.有了一个自由的操作系统,就可以建立一个黑客们组成的社团,并邀请大家参与.并且使任何人都能在不必阴谋算计朋友的情况下使用电脑. 作为一名操作系统设计员,我有完成这项工作的技能,所以尽管不能为人所接受,我认识到自己是命定要做这件事的.我选择使这个系统与UNIX兼容,以便移植程序,让UNIX的用户能方便的转到这个系统上工作.GNU的命称由来是根据黑客的传统,递归的被称为"GNU's Not Unix". 操作系统的含义并不仅仅是一个内核,只是用来运行其它程序.在70年代,每个被称为操作系统的都具有命令解释器,汇编器,编译器, interpreters,调试器,文本编辑器,邮件程序和更多的程序.ITS有,Multics有,VMS有,UNIX也有.GNU项目也该有这些. 后来我从希尔那儿听到这些: 如果我不是为了自己,那我是为了谁? 如果我只为了自己,我是谁? 如果不是现在,那是何时? GNU工程的开端也是基于同样的精神. 真正的自由 "自由软件(免费软件)"的意义有时被误解了-它与价格无关.它是一种自由的概念.这里是自由软件的定义:对你--一名普通的计算机用户来说,自由软件就是: *你可以自由的运行程序,无需什么理由. *你可以自由的改进程序使之更适应自己的需要.(要使这种自由成为可能,你必须拥有程序的源代码,因为没有源代码的话修改程序是极其困难的) *你可以自由的分发c程序的拷贝,不论是免费或收费的. *你可以自由的发布程序的改进版本,以使整个社团从中受益. 既然"免费软件"是指自由,而不是价格,在出售程序拷贝和免费软件之间就没有矛盾.实际上,出售拷贝的自由是基本的:以光盘形式出售自由软件的集锦对社团来说是重要的,能为自由软件的开发提供财政支援.另外,一个不能被自由收录到这个光盘中的程序就不是自由软件. 因为"自由"这个词的意思含糊不清,大家一直在找一个可以替代的词,但找不到(译注:中文里倒是5清楚,清楚到我不会翻了).在英语中有很多近义词可供区分词义,但就是缺少一个简单明晰的词来指称"自由"--自由,不受约束.有些词像"解放","自在","开放"都有词不达意之处. GNU软件和GNU系统 开发一个完整的系统是个巨大的工程.为使工作简化,我决定采用任何能找到的自由软件.例如,在一开始时,我决定用TeX作为基本的文本格式;一些年后,我决定用X Window系统而不是开发一个GNU自己的视窗程序. 基于这种观点,GNU系统不仅仅是GNU软件的集合.GNU系统中有不属于GNU的软件,有些是别的小组基于别的目d的开发的,但都是自由软件,所以我们能用. 开始工程 1984年一月我从MIT辞职开始写GNU软件,离开MIT是为了使MIT不要干扰GNU成为自由软件.如果我继续留下来,MIT就可能把GNU据为己有,强加他们自己的观点,甚至于将它改造成专有软件,我不想在做了一大堆事之后才发现结果完全背离初衷:建立一个新的分享软件的社团. 然而,温斯顿教授,当时MIT的头,非常友好的请我继续使用实验室的设施. 第一步 刚开始GNU工程时,我听说有个"自由大学编译工具",也就是VUCK.(荷兰语中的"自由"写作 V.)这是一个设计用来在多种机器上编译多种语言(包括C和Pascal)的编译器.我写信问作者能否让GNU使用它. 他以嘲笑的口吻声称大学是自由的而编译器不是免费的.于是我决定为GNU写的第一个程序是一个多语种,多平台的编译器. 为了避免自己重写整个编译器,我从Pastel编译器中取来源代码,那是一个由劳伦斯利弗莫实验室开发的多平台的编译器.它支持,并且是用扩展版本的Pascal语言写成用以作为系统设计语言.我给它加了个C语言的前端,然后移植到 Motorola68000处理器上.但我不得不最终放弃了这个方案,因为它需要好几兆的空间来容纳堆栈,而68000UNIX系统只有64K. 我然后意识到Pastel编译器的功能是把整个输入的文件剖析为一棵语法树,把整棵树转换为指令链,再生成输出文件,整个过程不释放任何空间.基于这点, 我决定从头开始写一个全新的编译器.这个编译器就是GCC;它没有用到Pastel编译器,但我设法保留了那个C前端.不过那是多年后的事了;首先,我做的是GNU的Emacs. GNU Emacs 我在1984年九月开始写GNU Emacs,在1985年早些时候它可以运行了.这使我可以用UNIX系统编辑文件;因为没兴趣学vi或ed,在这之前我不得不在别的机器上进行编辑. 从这开始,人们开始想要使用GNU Emacs,但问题是如何发布它?当然,我把它放在自己使用的MIT的计算机的ftp服务器上,(这台主机prep.ai.mit.edu,成了GNU的首个ftp站点;在它几年后退役时,我们把它的名字转到新的服务器上)但那时,还有很多人不能上网,所以不能取得拷贝,我该怎么对他们说呢? 我只能说:"找个能上网的朋友给你弄个拷贝."或者就像我在最初的PDP-11Emacs上做的那样,"寄盘磁带,我拷上Emacs再寄回来."但我没有工作,正在找个能靠自由软件赚钱的方法.所以我宣称只要有人愿意出150美元,我就寄盘磁带给他.通过这种方式,我开始了自由软件商业活动--今天的整个基于Linux的GNU系统的前身. 什么是对所有人都是自由的程序? 当一个自由软件离开他的作者发布出来之后,并不意味着对每个拥有一份拷贝的人而言都必须保持是自由软件.例如,在公共域许可证下发表的软件(无版权要求的软件)是自由软件;但任何人都可以制作出它的修饰过的专有版本.同样的,许多自由软件有版权但允许在简单的许可证下制作专有的修改版本. 一个范例是X窗口系统,由MIT开发,并在一份许可证下以自由软件形式发布,许多电脑公司改编了它.它们在自己专有的UNIX系统上加上了X,只以二进制包的形式,并加上了保密条款.这些拷贝及UNIX系统都不再是自由软件. X窗口的开发者并不认为这是个问题--他们希望并鼓励这样.他们的目标不是"自由",而是"成功",意思是"拥有许多用户".要不是人数众多,他们才不在乎用户是否拥有自由. 这种关于同一个主题--自由--的两种不同解读方式引起了一个产生矛盾的问题:"这个程序是自由的吗?"如果你以MIT小组的观点来判断,你会说X是自由软件.但如果你考量X的用户的自由程度,你会说它是专有软件.大多数UNIX用户运行的是X的专有版本,不是自由版本. "Copyleft"和GNU GPL GNU的目标是给用户自由,而不是普及.所以我们要使用出版条款来使GNU软件避免成为专有软件.我们的方法叫"Copyleft". Copyleft使用版权法,但反其本意而行之:不是用来使软件私有化,而是保持软件的自由性. Copyleft的中心思想是我们给人们运行,拷贝,修改,再出版修改版本--但不得在所拥有的东西上施加限制--的权利.这样,保证了赋于每个拥有自由软件拷贝者的基本的自由;使之不能被剥夺. 对一份实际的Copyleft,修改后的版本也必须是自由的.它保证了在我们工作基础上的进步能在出版时使整个社团受益.当程序员为改进GNU的软件工作时,Copyleft保证了他的老板不能这样说:"你不能共享这些改进,因为我们要用他发展我们的程序." 要求这些改进必须是自由的是保证我们的程序对任何人都是自由的关键所在.把X窗口系统私有化的公司为了移植都对它进行了修改.这些改变都不大,但并不是无关紧要的.如果改变是剥夺用户自由的借口,那么任何人都能以此为口实而变本加厉. 一个相关的问题是把自由软件与非自由的代码相连接.这样的连接必然是非自由的;非自由的部分必然使整体都不自由.承认这个观点就会造就溃堤蚁穴.因此 Copyleft的一个重要性就是要堵上这个洞:任何连接到一个Copyleft的程序必须同整个版本一样是自由和Copyleft的. 我们用来实现Copyleft思想的是GNU通用公共许可证,或称为GNU GPL.我们有用于其它场合的别种Copyleft.GNU手册也是Copyleft的,但使用一个简化的Copyleft,因为GNU GPL的复杂性不适用它. (1)在1984或1985年,唐 霍普金斯(名字是虚构的?(译注:我不知道是不是这个意思)给我写了封信,在信封上他写了些有趣的东西:"Copyleft--保留所有权利."于是我就用Copyleft这个词来命名我发展的这个原则. 自由软件基金会 由于使用GNU Emacs的热情高涨,其他人也开始加入GNU工程.我们决定要开始再次为它寻求赞助.所以在1985年我们创立了自由软件基金会(FSF),一个从事自由软件开发的免税的公益团体.FSF也接手了Emacs的磁带生意;后来把其它自由软件也加在磁带中(GNU的和非GNU的都有),也出售手册. FSF接受捐款,但它的大多数收入来于销售自由软件和提供其它相关服务.今天它销售源代码的光盘,配有精美手册的二进制程序光盘(都可以自由再发行和修改),和豪华套件(根据你的平台建立的完整的软件集锦) 自由软件基金会的雇员编写和维护GNU的软件包.两个著名的包是C库(glibc)和命令解释器(shell).Glibc是在Linux上运行的没个程序在和Linux打交道时必不可少的.它由FSF的成员罗兰德 麦克格拉什开发.GNU/linux上的shell是BASH,由FSF的成员布莱恩福克斯开发. 我们资助这些项目是因为GNU工程离不开这些程序.我们的目标是一个完整的系统,而这些程序是所必需的. (1)BASH是开了UNIX上的shell"Bourne Shell"的小玩笑. 自由软件的支持 自由软件拒绝特定的广范的生意尝试,但并不拒绝生意.如果生意关系到用户的自由,我们祝愿他们成功. 出售Emacs的拷贝是自由软件生意的一种证明.当FSF接手它的工作时,我就另谋生计了.我发现这条路是在提 供服务给与我开发的软件有关的方面.包括传授如何给GNU Emacs编程和定制GCC,以及开发软件(多数是移植GCC). 今天所有这些类型的商业活动都有商业机构在尝试.有的提供收集自由软件的光盘;有的提供从答疑解难到修复错误,增强特性的技术支持.我们还开始看到基于自由软件的公司不断开发出新的自由软件产品. 小心--一些公司组成了基于在它们自己非自由软件上,运行自由软件目的的,所谓的"开放源代码"运动.它们不是自由软件公司,它们是把用户的自由剥夺的专有软件公司.它们管这叫"增值",它反映了它们想要我们接受的价值观:超越自由的便利.如果我们更重视自由的话,该叫它"扣减自由"的产品. 技术目标 GNU的基本目标是成为自由软件.就算GNU不比UNIX更先进,它在社会学上也是体现出优势的,允许用户合作,更重要的是,尊重用户的自由. 但是使工作具有良好的品质标准也是非常重要的--例如,动态分配数据结构以避免强制的长度限制,从而可以正确处理8位的代码. 另外,我们抛弃了只盯住小内存的UNIX,决定不支持16位的机器(很明显在GNU工程完成时32位的机器是主流).也不去作减少内存使用的努力除非它超过1兆.在处理大型的输入文件的程序中,我们鼓励程序员一次读入整个文件,而不比为输入/输出的问题烦恼. 这些决定使多数GNU的软件在稳定性和速度上远胜于UNIX上的对应者. 捐赠的计算机 随着GNU名声鹊起,人们纷纷解囊相助,开始捐出运行UNIX的机器给工程.这给了我们很大帮助,因为开发UNIX的最简单的方法是在UNIX的系统上进行,并逐个更换其组成部分.这引起一个问题:我们是否可以拥有一份UNIX的拷贝? UNIX是专有软件,GNU的哲学是我们不使用专有软件.但,应用与正当防卫同样的理由,我认为 不过,即使是为了正义的罪恶,它依然是罪恶.今天我们不再拥有任何UNIX的拷贝,因为我们用自由软件系统代替了它.如果我们不能用自由软件代替一个机器的操作系统,我们就换掉机器. GNU的任务清单 随着GNU的发展,系统构件的不断涌现,终于使得列出一份未尽事项的清单成为有益之举.我们用它来招募开发者填补空白.这就是GNU任务表.在缺少的UNIX构件之外,我们加上了自认为是一个完整的系统重要组成部份的软件和文档. 今天的GNU任务表上几乎部再有UNIX的构件--那些任务已经完成,除了些无关紧要的部份.但这张表充满着被称为"应用程序"的东西.任何看上去有用户基础的软件都会被列上去. 就连游戏也在其中--从一开始起.UNIX有游戏,自然GNU也有.但兼容性不是游戏的重点,所以我们没有依循UNIX的游戏.代之以我们认为用户会喜欢的游戏. GNU库许可证 GNU的C库使用一种特殊的copyleft制度叫GNU库通用许可证(LGPL),允许将专有软件连接到这个库上.为什么有这个例外? 它不是原则上的问题;没有什么原则说专有软件被有权加入我们的代码.(为什么向一个拒绝和我们共享的工程捐助?)在C库上或其它库上使用LGPL是一种策略. C库完成的是一项广范的工作;每个专有软件系统和编译器都有自己的C库.因此,使我们的C库只适用于自由软件无助于给于自由软件任何优势--只会阻碍使用我们的库. 只有一个系统例外:在GNU系统中(它包括GNU/Linux,GNU的C库是唯一的库.因此是GNU的C库的开发者们决定一个专有软件是否能在GNU上编译.这里没有什么非此不可的理由必须使专有软件在GNU上运行,但看上去允许这样做更能促进GNU的应用. 那就是为什么LGPL是C库的好策略.对于其它的库,需要一个个酌情处理.当一个完成特定任务库对编写某些程序是必需的时候,在GPL下发表,限制在自由软件的范围,这是帮助其它自由软件开发者之道,给他们相对于专有软件的优势. 考量GNU Readline,一个开发为给BASH提供命令行编辑的库.Readline在GPL下发表,不是LGPL,这可能降低了Readline被使用的广度,但对我们没有损失.统时,至少我们有一个极有用的专门的自由软件可以用上Readline,这是社团的一件美事. 专有软件开发者有资金上的优势;自由软件开发者必须要有胜人一筹之处.我希望有一天我们能有一大批在GPL下发表的,令专有望尘莫及的库,为新的自由软件添砖加瓦,提供自由软件发展的巨大优势. 搔痒? 艾里克 雷蒙德说"每个优秀的软件都源于作者的技痒难耐."可能有时是这样,但许多GNU重要的组成部份是在构建完整的自由的操作系统的前提下完成的.它们源于远见和计划,不是冲动. 例如,我们发展GNU的C库是因为一个类UNIX的操作系统需要一个C库,也同样需要BASH,GNU Tar.我的GCC,GNU Emacs,GDB,GNU Make也是如此. 一些GNU程序是为了应对那些针对我们的自由的威胁.我们发展了gzip来代替Compress程序,因为LZW的专利使社团无法使用它.我们找到帮手开发LessTif.并在最近开发了GNOME和Harmany,来解决由某些专有软件库引起的问题.我们开发了GNU专有的"保密卫士"来代替市面上流行的非自由加密程序,因为用户不该为要隐私还是要自由而为难. 当然,编写这些程序的作者都是对此有兴趣的人,而且各人都在程序中加入许多所需的特性.但那并不是程序产生的原因. 意外的发展 在GNU工程的最初,我们只是想开发一个完整的GNU系统,然后发布.但事情的进展出人意料. 在GNU系统完成前,就有许多GNU的构件在UNIX上实行并运行起来了.其中一些变得流行,而用户们开始扩充并在不相容的UNIX系统上移植它们,有时也向其它系统移植. 这个进程使这些程序更为强大,为GNU吸引了更多资助.但它也可能把一个最小化的可运行系统的完成推迟了好几年,因为GNU开发者的时间被用在维护这些移植品和为现有产品增强特性上了,而很少用来编写我们尚缺的构件. GNU Hurd 在1990年,GNU接近完成;只是少了个内核.我们决定在Mach上将我们的内核实现为一系列服务进程的集合.Mach是首先由卡内基梅伦大学,然后由尤他大学开发的微内核;GNU Hurd在是一个在Mach上运行的由一些服务器组成的集合(或叫"牛群"),完成UNIX内核的各种工作.开发工作由于我们等待Mach成为它所承诺的成为自由软件而推迟了. 选择这个设计的一个理由是为了避免这项任务中最棘手的部分:在没有源代码级的调试器的支持下调试内核.在Mach上这部分工作早已完成了,而我们期待用 GDB像调试用户程序那样来调试HURD服务器.但这花了很长的时间,并且多线程的相互间通信很难调试.使HURD稳定的工作持续了好几年. Alix GNU的内核一开始并不是叫HURD.它的原名叫Alix--是我当时心上人的名字.她,一位UNIX系统管理员,她的名字很合UNIX的命名规则;她和朋友开玩笑说,"该用我的名字来命名一个内核."我没说什么,但决定想以Alix命名内核来给她一个惊喜. 但事情没成.米歇尔 布什奈尔(现 托马斯),内核的主要开发者,更喜欢叫HURD,把Alix用在命名内核的这个地方--通过向HURD服务器发送信息来跟踪系统呼叫和处理它们. 最后,Alix和我吹了,她改了名字;与此无关的是,HURD的设计改成了C库直接向内核发送消息,使Alix构件就此消失. 但在这事发生之前,她的一个朋友在内核的源代码中发现了她的名字,并告诉了她,所以还是起作用了的.(译注:我看作用不大,一厢情愿总是我们男人的致命弱点) Linux和GNU/Linux GNU的Hurd还没有准备好应用.幸运的是,其它的内核可用了.在1991年,林尼斯托瓦尔德开发了一个UNIX兼容的内核起名为Linux.在1992年,把Linux和未完成的GNU连接起来产生了一个完整的自由软件的操作系统.(当然,连接它们的工作是决定性的)正是通过Linux,我们今天才能运行一个GNU系统. 我们称这个版本的系统为GNU/Linux,来强调它在GNU系统中作为内核的重要地位. 未来的挑战 我们尽了自己的力量来开发了一个自由软件的新世界.但这并不能说我们是无敌的.一些挑战使自由软件的明天充满不确定性,面对它们需要坚韧不拔,持之以恒的精神.需要人们显示他们捍卫自由的决心. 以下四小节讨论这些挑战. 加密的硬件 硬件厂商热衷于对硬件的规格说明保密.这使得要为Linux和XFree86编写新硬件的驱动程序发生困难.今天我们有完整的自由软件系统,但明天就会因为失去对将来的电脑的支持而不再拥有它们. 有两个方法解决这个问题,程序员们做反向工程寻找对硬件的支持.我们其他人都只去购买支持自由软件的硬件(译注:千万别像我这样错买了NVIDIA的东东);随着我们人数的增加,保密策略就会成为自杀策略. 反向工程是个艰巨的工程;我们是否有足够坚定的程序员来完成它吗?是的--如果我们建立起坚定的决心--自由软件是基本的价值观,而非自由的硬件是不可容忍的.我们是否愿意多花点钱,或时间,来使得自由的驱动程序可用? 非自由的库 在一个自由的操作系统上运行的非自由的库对自由软件的开发者而言是个陷阱.库中附加的功能是个诱饵(译注:就像NVIDIA的glx);如果你用了这样的库,你就陷入其中,因为你的程序不再对自由软件有用了.(严格来说,我们可以接受你的程序,但在没有那个库的情况下程序无法运行)更糟的是,如果一个使用专有库的程序流行起来,它会诱使其他程序员误入歧途. 这个问题的第一个实例是80年代末的Motif工具箱.虽然当时没有自由的操作系统,但Motif将造成的问题仍凸现出来.GNU工程作出了两个反应:请求独立的自由软件工程支持自由的X的工具集,请求某些人写出Motif的替代品.任务持续了许多年;由"饥饿的程序员"组织开发的LessTif,在 1997年拥有了能运行绝大多数Motif应用程序的能力. 在1996年到1998年间,另一个非自由的GUI工具库,叫Qt,被用于支持自由软件的重要组成部分--KDE桌面. 自由的GNU/Linux系统不能使用KDE,因为我们不能使用这个库.但是,一些不严格限定于自由软件的GNU/Linux的商业版本在他们的系统中加上了KDE--使系统功能更多,但自由更少.KDE组织实际上鼓励人们使用Qt库,而许多Linux的新用户并没有意识到这问题.情形是很严酷的. 自由软件社团作出两个反应:GNOME和Harmony. GNOME,就是GNU网络对象操作模型,是GNU的桌面项目.在1997年由米格尔 德依卡扎发起,由RedHat支持开发,GNMOME提供类似的桌面工具,但只使用自由软件.它也具有技术上的优势,例如支持多种语言,而不只是C++.但它的主旨是自由:不需要使用非自由的软件. Harmony是一个用来代替Qt运行KDE程序的库. 在1998年,Qt的开发者宣布他们的许可证将进行改变,使Qt成为自由软件.不知是真是假,但我想这其中的部分原因也是社团面对Qt造成的麻烦而作出回应的结果.(新的许可证晦涩而不公正,大家还是不用为妙) [后记:在2000年九月,Qt在GPL下发表了,从而解决了这个问题] 软件专利 我们面对的最大威胁是软件专利,它可以将自由软件的算法和特性限制到20年前.LZW的压缩算法在1983年提出专利申请,而我们至今不能推出处理专有压缩算法的GIF图片的自由软件.1998年,一个处理MP3的自由软件在这专利诉讼中被迫退出自由软件的套件. 有很多方法可以对抗专利:我们可以搜集证明某专利违法的证据,我们可以找到变通之道,但所有这些方法只是暂解燃眉之急;当它们都失败时,一个专利可以让所有的自由软件都丧失用户所需的功能.这时我们该怎么办? 我们中的那些看重自由软件所带来的自由的人会继续与自由软件同进退.我们会设法绕过专利完成工作.但那些想在自由软件中寻求先进的技术特性,而被一份专利拉回去的人会把这叫作失败.因此,虽然讨论开发软件的"大教堂"模式的实际效力和自由软件的可靠和有力之处是很有益的,但我们不能仅止于此.我们必须谈谈自由和原则. 自由文档 我们的自由操作系统的最大不足之处不在软件--而是缺少我们可以接纳进来的自由的手册.文档是一切软件的精华;当一个重要的自由软件没有附上一份好的手册时,产生了鸿沟.今天我们有很多这样的鸿沟. 自由文档,就像自由软件,是自由的问题,不是钱的问题.一份自由手册的准则同一份自由软件是一样的:它要给予全体用户自由,允许再发行(包括商业的),在线的或书面的,于是这手册可以伴随程序的任何拷贝. 修改文档也必须是可行的.基本上,我不相信人们有权修改任何文章和书籍.例如,我不认为你或我有被强制授权去修改这份描述我们的行为和观点的文章. 但有个实际的理由使得对自由软件的文档的自由修改成为必须.当人们实践了他们修改软件的权利,并增加或改变它的特性时,出于责任心也会修改手册--因此它们可以提供对修改后的手册的精确而有用的描述.一份不允许程序员出于责任完成工作的手册,不是我们的社团所需要的. 一些限制文档修改的规定并没带来问题.例如,需要提供原作者的版权注释,出版团体,作者名单,不是问题.要求修改后的版本注明是经过修改的,甚至整段整段的删改,也没有问题--既然在技术已失去原意.这些限制不会带来问题,因为它不阻止程序员负责的为程序所需调整手册. 然而,修改手册中所有的技术内容,然后通过任何渠道,任何媒体使之出版,也是可以的;否则的话,就会阻碍社团--手册不是自由的--我们要另找一份. 我们必须谈谈自由 据估计今天的GNU/Linux系统,如Debian GNU/Linux和Red Hat Linux有为数千万的用户.自由软件开发出了如此强大的功能以至于用户们为了技术的先进蜂拥而至. 它的良性循环有目共睹:开发自由软件的兴趣越高,自由软件的生意就越好,促使公司开发商业的自由软件而不是专有的软件的动力就越强. 但我们在这事上没有成功:为吸引新用户进入社团的努力远胜过了教他们成为社团一员的努力.我们必须两手都要硬,要保持这两方面的平衡. "开放源代码" 在1998年,当社团的一部分决定不再使用"自由软件"而是称为"开源软件"时,教育新用户关于自由的含义变得困难起来. 一些欣赏他们的人看中的是避免了"自由"与"白送"的混淆--它有一个明的确目标.然而,其他人想要架空推动自由软件运动和GNU工程的基本精神,取悦经营者和商业用户,他们中的多数把利润看得重于自由,社团和原则.在美丽的言辞下,避开自由,社团和原则,推动"开源运动"制作高质量,强有力的软件. "Linux"的杂志们就是一例--它们充斥着能在GNU/Linux上工作的专有软件的广告.当下一个Motif或Qt出现时,它们是会警告大家避开陷阱,还是给它打广告? 商业活动的支持可以在许多方面帮助社团;平心而论,很有用.但要是以自由和原则为代价来换取,未免损失惨重.它使先前的发展和教育成员的差距更加拉大.(译注:我想物质上的发展和精神上的进步总是不平衡的,人心充满邪念,被外魔一引,神功全废矣) 或多或少,"自由软件"和"开源软件"都是描述同类的软件的词,却不是一回事.GNU工程继续使用"自由软件",去强调自由而不是技术,这才是重要的. 试一试! 犹大的哲学(那可不是"试试看")听上去不错,但对我没用.我怀着不知道是否能完成工作的焦虑做了绝大多数能做的工作,也不知道是否能达成我的目标.但不管怎样,我努力了,因为守在我的城市和敌人之间只有我一个人.令我吃惊的事,有时我是成功的. 有时我失败了;我的城池的一部分陷落了.我又发现来自其他城池的威胁,并准备随时战斗.久而久之,我学会了探查敌情,并挺身于城与敌之间,并召唤其他黑客并肩作战. 今天,我都不是孤军奋战.当我看见一大批黑客共同培育社团时感到欣慰,我知道,这个城池会幸存下来.但威胁与日俱增,现在微软显然瞄准了我们的社团.我们不能把未来的自由当作是必然的.不要想当然!想要保持你的自由,就要准备为之奋斗. 版权(C) 1998 理查德 斯托尔曼 允许在任何媒体逐字拷贝整篇文章,保持这个注意事项 翻译者:洪钧
0 0

相关博文

我的热门文章

img
取 消
img即使是一小步
也想与你分享
打开
img