什么是自由软件?
自由软件(Free Software)强调的是自由,而不是价格。在理解“Free Software”中的“Free”的时候,我们要理解成“free speech”中的“free”,而不是“free beer”中的“free”。
自由软件强调的是用户运行、拷贝、发行、学习和改进软件的自由。具体来讲,自由软件赋予了用户如下4个自由度:
- 出于任何目的,运行软件的自由。
- 学习软件如何工作,以及为了满足自己的需要修改软件的自由。(显然,这个自由度的前提是能够访问软件的源代码)
- 为了帮助你的邻居,将软件拷贝给他的自由。
- 为了能够让整个社团受益,公开发行改进之后的软件的自由。(显然,这个自由度的前提是能够访问软件的源代码)
1983年,Richard Stallman发起了自由软件运动,那时,他30岁。对于现在的人们来说,那是远古时代了。如果我们不了解计算机的早期历史,尤其是计算机软件的早期历史,那么我们无法准确地理解自由软件运动。去年自由软件基金会发布了GNU GPL version 3,我希望利用这个机会,和大家一起回顾一下自由软件运动。我将和Richard Stallman(通过对话的形式)撰写一个系列文章,来向大家全面阐述自由软件的历史,哲学和技术。
为了方便大家的理解,我们的第一篇文章是关于自由软件运动的早期历史,时间跨度涵盖了从计算机的早期历史到GNU GPL version 2的发布。
徐继哲:现在让我们回到20世纪70年代。那时,软件都是自由的。对于现在的年轻人来说,那个时代已经很遥远了。作为一个老牌计算机黑客,请给我们介绍一下当时的情况,比如:当时用的计算机、操作系统、编程语言。那个时候,程序员之间是如何合作的?当时的主要挑战是什么?
Richard Stallman:那个时候,MIT人工智能实验室有一台强大的计算机,PDP-10,其内存非常大,达到了1MB(后来扩展到2MB)。PDP-10的操作系统是ITS(Incompatible Timsharing System),实验室的黑客用PDP-10的汇编语言开发了ITS,唯一支持的高级语言是Lisp(我们对于其他高级语言都不感兴趣),其用户也都是黑客(和其他的研究人员)。
命令解释器是DDT,同时它也是调试器,当用作登录时的命令解释器的时候,它也被称为 HACTRN(这个命名是对Fortran的恶搞)。这样,当一个程序崩溃的时候,黑客可以立即使用调试器展开调试。顶极黑客熟悉几乎全部的系统程序,可以立刻调试这些错误,除非他们没有时间。
我们还有一个内核级的DDT,用于调试内核的bug。通常,一个优秀的黑客能够很快找到无效的数据并且修正bug,尽管他可能还没有找到出现bug的原因。这让继续分时执行程序而不用重新启动系统成为可能,所以每个人的工作能继续进行。这就是早期的自动保存:当你在文本编辑器里面输入越多,调试错误的动力也就越足。
徐继哲:我们知道你毕业于Harvard大学。当你读Harvard本科的时候,你却在MIT人工智能实验室工作,为什么选择在MIT而不是Harvard呢?你能介绍一下当时MIT的黑客文化吗?
Richard Stallman:我之所以选择去MIT人工智能实验室工作是因为那里一台强大的PDP-10计算机(1M内存之巨),但是从根本上来说是因为那里的黑客社区。
在Harard大学,教授们权力很大。他们拥有自己保留的终端,可是他们几乎不用。其他人经常根本不能登录,因为没有足够多的终端。与此相反,在MIT里面,系统黑客们能有效地负责实际的工作,不允许任何人霸占和浪费终端,即使是很“重要”的人也不例外。
我应该解释一下“hacker”的真正意思。在MIT人工智能实验室,有一个程序员社区,他们热爱编程,并通过编程让自己变得更加聪明。社区里面有不少ITS系统的开发者。其中的一些黑客是付费雇员,一些是MIT的学生,少数几个是由于纯属个人兴趣要求加入到社区的来自校外的人(我们当然欢迎他们贡献力量)。所有人都对编程着迷,并且在生活的其他方面,我们也愿意展示自己的才华。我们称自己叫“hacker”。
黑客有时做的一件事情是打破计算机上的安全。通常事情是这样的,他们会想办法登录一台被浪费的终端,或者绕过愚蠢的管理规则。偶尔他们还会和其他黑客开个玩笑。可是,打破安全这件事情在ITS系统上是不可能的,因为系统里面根本就没有安全特性。我们发现,管理者可能会用安全特性控制我们,因此我们决定不实现这些所谓的安全特性。在ITS上,任何人都能以任何名字登录,然后读写任何文件。
到了1980年左右,一些新闻记者开始关注黑客,他们误解了这个词的意思,认为“hacker”就是“安全破坏者”。为了避免这种混淆,我们把安全破坏者叫着“crackers”。
在1971年加入人工智能实验室之后,我的工作就是完善ITS系统,也就是说成为一个系统黑客。我们非常慷慨地把自己的软件与那些需要它的其他人共享,同时ITS系统里面的程序在其他地方也被改写。可以想到,这是多么令人高兴的一件事情,完善我周围的人每天都在使用的软件,并因此得到用户的尊重和感谢。
编程的快乐永远都不会消亡,但是黑客们自由编程的社区在八十年代中期消失了。我要重建这个社区,我发起了GNU项目。
徐继哲:直到某一天,有个人将传统的版权法引入计算机软件领域,接着计算机软件变成专有,用户失去了使用软件的自由。
Richard Stallman:在二十世纪六十年代,是否用版权法来发行软件还不明朗。但是那时候已经有人通过合同的方式来开发专有软件了。与此同时,也有很多的自由软件,比如在1970年,DEC公司的PDP-8、PDP-9和PDP-10的操作系统都是自由软件。
在七十年代,专有软件渐渐变得很普遍。当1982年的时候,MIT人工智能实验室是硕果仅存的自由软件社区。后来社区里面的黑客们一个个被商业公司挖走。我觉得照这样下去,丑陋的专有软件必将盛行,于是我对专有软件说了“No!”。
徐继哲:于是你发起了自由软件运动。因此,自由软件运动是一个社会运动,而不(仅)是技术运动。
Richard Stallman:可以这么说。在专有软件开发者的限制下生活的主意是令人厌恶的。即使我成为主宰者,这也是不能让人接受的。因为我可能会因此做坏事,所以我决定开发自由的操作系统。
徐继哲:你怎样看待传统的版权法?它是否适合计算机软件?对专利法和商标法的看法呢?
Richard Stallman:他们是完全不同的。这也是不应该使用“知识产权(intellectual property)”的一个主要原因,这将会导致人们认为上面提到的三个法案是类似的。实际上,它们在各个方面都是不同的,产生争议的问题也不是类似的。
计算机程序是用于生活的功能性工具。我相信所有功能的,实用的工具都应该是完全自由的。
为了通过改变法律的手段达到目标,需要版权法不应用于计算机软件,同样其他法律也需要做相应的修改。例如,我们也需要让合同不能用于使程序专有化。另外,一些法律也必须保证得到二进制代码的人也能得到软件的源代码。因此,有人说我期盼软件版权法的废除是一种误导。另外,上面这些法律上的变化如果没有其他的措施的话将是十分有害的。
对于专利法来说,这个问题有很大的不同。应用专利法到软件是荒谬的。一个大程序组合了很多的思想,如果10%申请了专利,那就意味着开发者要面对很多不同的诉讼。这将是软件开发者的灾难--仅仅全球性的大公司能从中受益。
正如前面所说,版权法和专利法对于软件来说都是完全不同的。把这些法律混为一谈将是灾难性的混淆。为了避免这种混淆,一定不要使用“intellectual property”这个词。(详细可以看一下
http://www.gnu.org/philosophy/not-ipr.html
)
商标法是一个完全不同的话题。商标的目的是告诉你,你正在买的东西是什么。我想这是一个不错的法律体系,因此一般情况下我支持商标法应用于软件。
徐继哲:由于在1983年没有存在的自由软件可用,你需要通过新的方式来授予用户使用软件的自由,因此你发明了对称版权(copyleft)。这是一个伟大的发明。我们想知道你是如何想到和实现,以及背景是什么?另外,copyleft是自由软件运动的法律基础吗?
Richard Stallman:为了回答你的问题,我应该解释一下自由软件和对称版权(copyleft)的含义。
自由软件赋予了用户有四个方面的自由度:
- 出于任何目的,运行软件的自由。
- 学习软件如何工作,以及为了满足自己的需要修改软件的自由。(显然,这个自由度的前提是能够访问软件的源代码)
- 为了帮助你的邻居,将软件拷贝给他的自由。
- 为了能够让整个社团受益,公开发行改进之后的软件的自由。(显然,这个自由度的前提是能够访问软件的源代码)
所有的自由软件程序给予了用户这些自由。所以当用户A有一个自由软件程序,他就有以上的这些自由。当用户A把软件重新分发给用户B时,哪些事情会发生呢?用户B会得到相同的自由度吗?换句话说,如果程序是用户A的自由软件,它对用户B来说必须是自由软件吗?
一些自由软件许可坚持认为用户A必须将这四个自由度传递给用户B,这种情况是copyleft许可。其他的自由软件许可没有这一条,他们允许用户A将自己的限制强加于用户B,这种情况是non-copyleft许可。
总之,一个自由软件许可尊重你的自由,不会将你的自由抛在脑后。一个copyleft许可考虑得更周到,它阻止中间人剥夺你的自由。
徐继哲:在版权法的世界里面,二个主要的思想是copyleft和copyright,专有软件许可通常基于copyright,而自由软件许可通常基于copyleft,可以这样说吗?
Richard Stallman:这是一种误解。所有的自由软件都是有版权的。自由软件许可操作是基于版权法。 尤其是copyleft许可操作是基于版权法。通过发明copyleft,我想出了使用版权法定义用户自由度的方法。
徐继哲:当你决定开发GNU操作系统的时候,理想的目标是软件自由。但是,我们需要一种务实的途径让越来越多的人加入到这项运动中来,互相分享和合作,保持源代码自由。后来你编写了GNU GPL v1。具体情况是怎么样的?GNU GPL v1主要解决的问题是什么?那时人们的反应怎么样?
Richard Stallman:我在1985年开始为GNU Emacs开发copyleft许可。刚开始的几年,每个GNU的软件包都有自己的许可。例如,GNU Emacs有GNU Emacs通用公共许可, GCC也有GCC通用公共许可。这二个copyleft许可差不多是一样的,但是他们却是不同的许可,因为每个软件包都声明许可适用的程序名称。因此,GNU Emacs通用公共许可是GNU Emacs许可,而GCC通用公共许可是GCC许可。
这是不方便的。所以在1989年我想出了一个在许可上避免声明程序名字的方法。也就是,相同名称的许可条款能用于所有的程序。这就是当时我发布GNU通用公共许可的过程。
徐继哲:在二年以后, 也就是1991年,你发布了GNU GPL v2。 什么让你如此急的重新修订呢?在这个新的版本里面,要解决的主要问题是什么?你是如何做的呢?能说说1991年那时候的计算机工业是什么样子吗?
Richard Stallman:GNU GPL的总体目的是保护使用一个程序所有版本的用户的四个自由度,这一点从v1到现在一直没有变过。GPL后续版本变化的地方是在如何实现这一目标的细节上。大部分改变的都是应对我们身边出现的情况所作出的反应。
我记得在GPL v2里面二个主要的变化是:
增加第七节,为了阻止专利所有者通过专利许可对重新分发者强制施加限制条件,使程序变得不自由。
为了处理使用非捆绑式编译器的系统,重新设计了“system library”异常。我们决定和编译器一起发布的类库能作为系统类库。
徐继哲:与此同时,Linus Torvalds开始开发Linux,一个MINIX的非商业实现。在1992年,他将Linux的许可改成GNU GPL v2,准备和GNU的系统一起工作。
Richard Stallman:这里有一些误解。不是Linux是否和GNU系统一起工作的问题,因为一开始就是这样的。这个问题应该是Linux是否是自由软件。
在1992年2月以前,Linux不是自由软件,因为它的许可有太多的限制(它不允许商业的重新分发)。你能使用Linux和不完整的GNU系统一起工作,但是这种组合不是自由的操作系统。
当Linux于1992年在GNU GPL许可下发布的时候,它变成了一个自由软件。因此,不完整的GNU系统和Linux组合在一起是一个完整的自由操作系统。这点非常重要,这是自1970年以来的第一个可用的自由操作系统,也是第一个运行在PC上的自由操作系统。
徐继哲:Linux和GNU的开发者把Linux和GNU集成起来,这是一个困难但是有趣的工作。GNU和FSF做了那些工作呢?
Richard Stallman:为了将Linux作为GNU/Linux系统的一部分,FSF成员对GNU的libc库进行了比较大的修改, 对在几个其他的不能移植的GNU组件也进行了修改。可是我们从来没有参与到Linux本身的开发中。
徐继哲:当时GNU的开发者正在开发Hurd,一个设计更完美的内核。但你发现Linux的时候,它影响了Hurd的开发计划了吗?
Richard Stallman:GNU Hurd是我们为了GNU系统从1990开始开发的内核。它有由几个模块化的服务器(已经被开发出来,运行在已经存在的Mach微内核上)组成。
在1992年Linux的出现并没有立刻影响到Hurd的开发,当时我们期望Hurd能很快开发出来。可是,一些问题拖延了Hurd的开发,使它仍旧不适合通常的使用。实际上,这是可能是基于微内核设计的一些基本问题。在1998年我们停止雇佣程序员开发Hurd。
自愿者继续了Hurd的开发,并且在一个新的微内核上运行。或许最终它将能作为一般的用途,但是可能不会太快。 Hurd没有开发成功的事实是令人悲伤的,但不是灾难 --因为我们有Linux可以使用。
徐继哲:甚至在GNU和Linux集成在一起以后,新的GNU系统的变体也是非常难于安装和使用的。那时候还没有发行版的概念。我记得,FSF帮助启动了Debian项目,然后更多的GNU/Linux发行版出现了。因为GNU/Linux是GNU操作系统的变体,为什么FSF或者GNU不自己开发一个发行版呢?能告诉我们关于这个更多的细节吗?
Richard Stallman:我们在1994年决定资助一个GNU/Linux发行版,它的名字叫Debian。可是Debian从GNU项目中分离出来,开始发行非自由软件(直到现在,Debian仍旧这么做)。这就是为什么GNU项目不推荐Debian的原因。
九十年代以来,基本上所有的GNU/Linux发行版都包含非自由软件,因此没有我们可以推荐的GNU/Linux版本。这是自由软件运动的一个大倒退,因为开发GNU的出发点就是要逃离非自由的软件。这样的结果是,大部分使用GNU/Linux发行版的用户希望它更加实用,而不考虑得到使用它的自由。
由于开发一个新的发行版的工作非常大,而且资助Debian也出现了问题,我们决定不再尝试这条路。相反,我们尽力相信各种发行版的开发者能制作自由的发行版。例如,我们尽力相信Debian会改变它的策略。遗憾的是,他一直没有这么做。
第一个现代的自由发行版叫Ututo,在2004或2005可用。在2006年,100%自由的gNewSense发行版发布了。它是一个Ubuntu的修改版本,而Ubuntu是Debian的修改版本。
现在的任务是引导用户崇尚自由,一种非自由软件不能提供的自由。
徐继哲:直到现在,我对历史、哲学、自由软件运动的技术有了一个简短的理解。在下篇文章中,我们将讨论GNU GPL v3许可。
Richard Stallman:Happy hacking!