采访由 David Betz 和 Jon Edwards 主持
Richard Stallman 与 《BYTE》的编辑讨论了他的
与 UNIX 兼容的软件系统
(1986 年 7 月)
到现在为止,Richard Stallman 一直在从事最有志向的 “自由软件'' 开发项目-- GNU 系统。 1985 年 3 月,《Dr. Dobb's》杂志刊登了 Richard Stallman 的 GNU 宣言。在宣言中, 他是这样描述 GNU 系统的: “是我正在编写的一个与 unix 完全兼容的软件系统的名称, 为的是可以自由地送给任何可以使用 GNU 的人 ... 一旦完成了 GNU, 每个人都将能够免费地得到优良的系统软件,就象得到空气一样。'' (GNU 是 Gnu's Not UNIX 递归的缩写,"G" 的发音要读出来。)
作为 EMACS 编辑器的作者,Richard Stallman 已经广为人知。 EMACS 是一个功能强大的文本编辑器,是他在麻省理工学院人工智能实验室开发出来的。 GNU 工程中的第一个软件成果就是 EMACS 的重新推出。GNU EMACS 已经赢得了信誉, 它是目前以任何价格可获得的最好的实用 EMACS 之一。
《BYTE》:我们读了你在 1985 年 3 月发表在 《Dr. Dobb's》上的《GNU 宣言》。 从那时以来又发生过什么?那真的是一个开始吗?从那时以来你有什么进展吗?
Stallman : 在《Dr. Dobb's》上发表《GNU 宣言》并非工程的开始。 我是在准备启动这个工程时写的这个宣言,目的是想争取计算机制造商的赞助。 但他们不愿卷入。与其说服他们,还不如把时间用来编写程序。宣言是在写好一年半以后发表的,在写宣言的那时侯,我刚开始公开地发布 GNU EMACS。从那时以来,除了进一步完善 GNU EMACS, 使它能在更多的计算机上运行以外,我也差不多完成了优化的 C 编译器,以及运行 C 程序所需的软件。 其中包括源代码的调试器。这个调试器具有许多其它 UNIX 上的源代码调试软件所没有的特点。例如,你可以将数值存储在它提供的变量中,而且可以将存储的历史数值打印下来,这使得跟踪调试简单了很多。
BYTE : 你已经完成了一个编辑器,现在已经被广泛地使用,而且你又快完成这个 C 编译器了。
Stallman : 我希望今年 10 月份能把它做完。 BYTE : 那内核呢?
Stallman : 我正计划开始编写在麻省理工学院就已经开始编写的内核。内核最近已由 MIT 向公众发布, 发布中提到了我将使用这个内核。这个内核被叫作 TRIX ,它是基于 “远程过程调用'' 。 我还要增添许多目前的 UNIX 系统还不具备的兼容性。不过这方面的工作我还没有开始。在做内核之前, 我要先把编译器完成。我还准备重写文件系统,为了把它做成一个具有防故障特征的系统,我会以适当的顺序组织文件块来保持磁盘结构的完整性。然后我要加上版本号。我有一个更大的计划, 让经常使用 UNIX 的人适应这些版本号。你可以在没有版本号的情况下给文件起名,但是,也可以在版本号的名目下来给文件起名。这两项工作都需要对 UNIX 的常用程序进行修改以适应文件名的新特征,这些程序的修改工作还没有开始。我想我已经有了一个工作方案,只要我试着做一下,就会知道是否行得通。
BYTE : 你是否能给我们描述一下 GNU 系统是如何优于其它系统的?我们知道你的目标之一就是要设计出与 UNIX 系统兼容的东西。但是,至少在文件系统方面, 你说过要超越 UNIX ,做出一个更好的系统。
Stallman : 我的这个语言编译器能编译出更好的代码,运行速度更快。调试器也比现在的更好。 我也许能,也许不能改进每一部分。对此,是没有一个唯一的答案的。在一定程度上,我从对很多系统的不断完善中得到了益处。在一定程度上这是因为我在这个领域已有很长时间, 有很多其他系统的经验,所以,我能提得很多出值得考虑的想法。其中一个就是让系统能够支持不限大小,不限行数的文件。实际上 UNIX 系统在这方面是做得很糟糕的。软件工程的原则是不应该有专横武断的限制, 这其实也不是什么新东西。也许他们当时是在很低性能的计算机上编写 UNIX,而实际上编写系统时, 需要把这一切考虑进去。在 GNU 系统中,唯一的限制是当它处理太多的数据时,没有足够的内存空间,使得内存不能容纳所有的数据。
BYTE : 如果用虚拟内存,应该不太可能达到内存上限。也许你最终会找到解决方案。
Stallman : 在最终找到解决方案之前的很长时间,内存总是不够的。
BYTE : 你能谈一谈 GNU EMACS 是为运行在哪一种机器和操作系统而设计的?现在可以运行在 VAX 上,它是否已经以某种形式被移植到个人计算机上了呢?
Stallman : 我不明白你指的个人电脑是什么。例如, Sun 是个人电脑吗? GNU EMACS 要求至少有一兆字节的内存,这对于有虚拟内存的机器是正常的。 除了几个 C 编译器的一些技术问题,几乎所有具有虚拟内存而且运行比较新版本的 UNIX 的计算机,都可以运行 GNU EMACS,而且实际上大多数计算机上都正在运行着 GNU EMACS。
BYTE : 是否有人已经把它移植到了 Atari 或 Macintosh 计算机上?
Stallman : Atari 1040ST 还没有足够的内存。我认为下一代 Atari 应该可以。 我也认为将来的 Ataris 会支持某种形式的内存映射。当然,我设计的软件不可能在所有现有的计算机中都能运行。工程开始时,我知道这要花数年时间。 因此,我不会去挑战那些有较多限制的环境,而写出一个糟糕的系统。我会以最自然和最好的方法来编写。我相信不用几年,大容量的机器将会普及。事实上,内存的增加如此之快,令我吃惊的是, 大多数人在虚拟内存方面的进展太慢;我认为这才是最重要的。
BYTE : 我想人们认为对单用户计算机来说,没有这个必要。
Stallman : 他们不明白一个用户不意味一个程序。对任何类似 UNIX 系统来说, 能同时运行多个不同的进程是非常重要的,即使只有你一个人在用。如果有足够内存, 你可以在一台没有虚拟内存的计算机上运行 GNU EMACS, 但是你可能不能够很好地运行 GNU 或 UNIX 系统的其他部分。
BYTE : 在 GNU EMACS 中 LISP 的内容有多少?在我看来,可以把它当作学习 LISP 的一个工具。
Stallman : 当然可以。GNU EMACS 包括一个完整的 LISP 系统,尽管这个系统的功能不是很强, 可是用于编辑命令是足够了。它当然不能和可以编写程序的通用 LISP 系统相比, 但是它拥有 LISP 全部的内容。
BYTE : 你预计什么时候能够推出一个这样的可以工作的环境:把它放我们的工作站上后, 我们就可以不用别人的而只用你的程序来实际完成一些工作?
Stallman : 这很难说。可能一年,也可能更长,也可能不需一年。 我想我能够在一两个月后完成编译器。我真正要做的大部分工作是内核。我最初预计编写 GNU 要花两年, 但是现在已经两年半过去了,还没有完成。部分原因是我花了太多的时间去做编译器, 后来发现钻进了死胡同。我不得不重新编写。另外一个原因是我在 GNU EMACS 上花的时间太多。 我原来预计的情况根本不该是这样的。
BYTE : 谈谈你的发布计划。
Stallman : 我没有把软件或者手册放在公域(public domain)里。 其原因是我得确信所有的用户有分享的自由。 我不希望任何人在我编写的版本上作了改进以后作为私有软件进行发布, 我希望这样的事情永远不会发生。我会鼓励人们对这些程序做自由改进,最好的途径是消除各种导致非自由改进的诱惑。一些人会因此不愿对程序进行改进, 但是其他更多的人会这样做的,而且他们会将其改进做成自由软件。
BYTE : 你怎么来确保此类事情呢?
Stallman : 我把这些程序版权化,并加一个标注,明确地允许人们对这些程序可以进行复制和改进, 前提是他们对这些的程序的发布条款必须依照我所用的条款。你可以不发布你对我的任何软件的改进,而仅供你自己使用,不把你的改进提供给别人或告诉别人。但只要你对别人发布你的软件, 你就必须依照与我的发布条款。
BYTE : 你是否拥有你的 C 编译器生成的可执行代码的版权?
Stallman : 版权法没有给我由编译器生成的代码的版权,所以,我不好对此说什么,事实上, 我也不打算要求有这样的版权。我不认同那些用各种各样的编译器开发私有软件产品的人,但是禁止他们使用我的编译器似乎用处不大。所以我不会要求这样的版权。
BYTE : 如果其他人用你的部分代码来制成其它东西,你是否会加以限制?
Stallman : 如果他们使用了大段修改的代码,我会限制的。如果只是两行代码,那没关系, 不会涉及到版权。重要的是,我的条件就是首先要有版权,就是所有软件商用来限制所有人使用软件的权力,然后我补充了一点,那就是放弃这些权利中的一部分。所以我放弃的权利仅仅是版权所涉及到的东西。 我认为你遵守我的条款的原因是不是法律,而是,作为一个正直的人,当你在发布软件时,应该去鼓励其他人来分享你的成果。
BYTE : 你似乎在诱导人们进入这样一个思维模式:向人们提供这些有趣的工具, 前提是要他们接受你的哲学。
Stallman : 是的。你可能也看到了这一点:用软件商建立起来的法律系统来对抗他们。 我正是用它来保护公众的利益。
BYTE : 假如制造商不愿为这个工程出资,那么在 GNU 系统完成以后,你认为什么人会用它?
Stallman : 我不知道,但这不是一个重要的问题。我的目的是使人们有可能拒绝私有软件体系。 我知道有一些人想这么做,也可能有一些人不关心这个问题。但这并不是我所关心的。我为他们以及受他们影响的人感到有点悲哀。现在,某人察觉到在版权条款中令人不愉快之处的时候, 会发现自己已经陷了进去,除了使用计算机已经没有其他办法。我将给他一个愉快的选择。也有人用 GNU 系统的原因是这个系统的技术优势。例如, 我的 C 编译器生成的的代码比我所见过的任何 C 编译器都好。 GNU EMACS 被普遍地认为远远好于其他商业产品。虽然 GNU EMACS 没有得到任何人的资助, 但是每个人都在用它。所以,我想许多人会因为它的技术优势而使用 GNU 系统的其他部分。 即使我不能在技术编写得更好,我还会继续编写下去,因为我会让它在社会效益方面更好。 GNU 是一个真正的社会工程,它是用技术的手段来改变社会。
BYTE : 那么对你来说,人们使用 GNU 是非常重要的。这不仅仅是一个将开发出的软件送予他人的学生实践,你是希望它将来能够改变软件工业的运转方式。
Stallman : 是的。有人说没人会使用它,因为它没有吸引人的公司标识, 而其他一些人说它非常重要而且每个人都将用到它。我真不知道以后会发生什么。我不知道有其他办法来改变我所在的这个领域中的丑陋的东西,所以,我只好这么做了。
BYTE : 你是否能说得明白些?显然你感到这是一个重要的对政治和社会的陈述。
Stallman : 这是一种改变。我试图改变人们通常获得知识和信息的方式。我认为, 试图占有知识,试图控制人们使用这些知识,或者试图阻碍其他人分享知识,是一种破坏。这是一种为了自己的利益,而以整个社会的贫穷为代价的行为。 一个人靠毁坏价值 2 美元的财富来获取 1 美元。我认为一个有良心的人不会做这种事的, 除非他不这么做就要死去。当然,这样做的人是很富有的人。我只能得出结论,他们是不讲道德的。我愿意看到人们为编写自由软件而得到报酬并鼓励他人使用它。我不想看到人们为编写私有软件而得到报酬,因为这不是对社会做的真正的贡献。资本主义的本质就是,人们通过生产东西而获得财富,因此,也就会自动地想去做有用的事。但是,获取知识的情况就不同了。他们被鼓励去做不是真正有用的事情, 而做真正有用的事情则不受鼓励。我认为有一点很重要,信息不同于汽车和面包一类的物品,因为人们可以复制信息,分享信息,如果没有人加以阻止,他们可以改进这些信息,使之更好。 对人们来说这是很有用的事。面包不是这样,如果你有一条面包,又想得到另一条,你不能把你的面包放进一台面包复制机去复制一个。你要得到第二个, 你就必须把得到第一个面包时所做的工作全部再做一遍。所以,没有必要去规定不准复制面包等等, 因为复制面包是不可能的事。直到最近,书籍只能在印刷厂被印刷。你可以手工抄写复制,但这是不实际, 因为手工抄写比印刷要费事得多,而且看上去不美观,所以你可以认为除了印刷厂大批印刷, 没有其他办法生产书籍。所以,版权并不会真正剥夺公众的阅读书籍自由。书商并不能通过版权来禁止手工抄写。但对计算机程序和录音磁带来说不同,书籍不完全相同, 复印书籍很昂贵,复印一本书比买还费事,而且效果也不如印刷的好。 现在,我们已经处在这样一个时期,从版权无害和可接受的状况,发展到了版权有破坏性和无法容忍的状况。那些被诽谤为盗版者的人实际上是想做一些有用的事,而这些事是被禁止去做的。 版权法完全是为帮助那些要想控制信息使用,从中捞到好处的人所设计的; 版权法不是为那些想要帮助公众得到信息并阻止他人剥夺这些信息的人所设计的。我认为,法律应该承认公众拥有一席之地,公众与公域有区别的,正如公园和垃圾桶的区别。 公众的东西不是任何人可以随意拿走的,它是供每个人使用,没人能够阻拦。 如果任何人发现自己被剥夺了属于公众的东西,他应该提出起诉。
BYTE : 但是盗版者复制这些程序的目的是要利用它们,而不是通过它们把事情办得更好, 难道不是这样么?
Stallman : 我认为这种区别并不重要。一个程序被更多的人使用意味着这个程序对社会有更大的贡献。 你有一块面包,它可能被吃掉一次,也可能被吃掉一百万次。
BYTE : 一些购买商业软件的用户可以获得技术支持。你的软件如何提供支持呢?
Stallman : 我怀疑那些用户被误导了,他们没有想清楚。有支持当然是好的,但是, 当考虑到技术支持和卖钱的软件或私有软件有什么关系的时候,他们就把自己搞糊涂了。私有软件将得到好的技术支持,这一点是没有保证的。只因为卖方说他们提供技术支持, 这并不意味着他们的技术支持是好的。而且他们也有可能倒闭。实际上,人们认为 GNU EMACS 比各种商业版本的 EMACS 有更好的技术支持。其原因之一可能是我这个黑客水平比编写其它 EMACS 的人更高,但另一个原因是人人都有源代码,许多人都有兴趣通过琢磨源代码来解决问题, 不一定非要从我这里得到技术支持。即使免费的支持,我也能够通过修改别人汇报的编程错误,然后向人们发布新的版本来提供很好的技术支持。而且,你总可以雇到人来为你解决问题。 有一个为自由软件提供技术支持的竞争市场,你可以雇 他们中的任何人。随着我发布的 EMACS, 有一个技术服务名单,名单上有人名,电话号码以及提供技术支持的收费情况等。
BYTE : 你收集他们的对编程错误的修正吗?
Stallman : 他们把这些修正发给我,我要那些要求列入名单的人做出承诺, 他们不能要求任何一个客户保守秘密,无论他们知道什么,或者作为技术支持的一部分曾经得到过什么改进。
BYTE : 所以你不会让他们的竞争建立在知道某些问题的解决方案而其他人不知道的基础上。
Stallman : 是的。他们可以靠自己的智慧竞争,更加有可能解决你的问题, 或者他们了解更多的公开的问题,或者他们能够更好地向你解释应该做什么。这些都是他们能够竞争的方式。他们可以通过努力做得更好,但是不得妨碍其他竞争者。
BYTE : 我想这就像买一辆汽车,没人强迫你去找原来的厂家来得到技术支持或维护。
Stallman : 或者像买一幢房子,如果能够解决房子所出现问题的人仅只有一个, 而这个人就是原来造房子的承包商,那会是一个什么状况?这就是在私有软件中采用的强加于人的做法。有人告诉我有关 UNIX 发生的一个问题,因为生产商想要销售改进过的 UNIX 版本,所以, 他们试图收集系统的问题解决方案,然后仅以二进制的形式发布。其结果就是问题不能真正得到解决。
BYTE : 如果都独立地去解决这些问题,他们都会事倍功半。
Stallman : 是的。还有一个例子有助于以社会观点来看待私有软件的弊端。想象一下责任保险, 为了从社会得到赔偿,一个受伤者不得不花钱请律师。这是帮助事故受害者的一种愚蠢、低效的办法。人们总是千方百计的把竞争对手挤跨。想象一下,用大包装箱把钢笔包装起来以防钢笔被盗, 而包装比钢笔还贵,还不如把笔放在各个街口免费供人使用,这不还更好些吗? 再想一想阻碍交通的那些道路收费站,这是一个很大的社会现象。人们想着法子赚钱,而不顾是否妨碍了社会。一旦他们妨碍了社会,钱也赚到手了,哪还顾得上他人。信息的浪费将越来越严重,最终将乌托邦与我们的世界区分开来,在乌托邦世界里,没有人在真正地工作,因为一切工作都由机器人来完成,而在我们的世界里,每个人都要花大量的时间重复前一个人正在做的工作。
BYTE : 就像在软件中敲入版权声明一样。
Stallman : 更像警察维持治安,要求人们不能拥有任何禁止复制的东西, 而是要把别人做过的事重复做一遍,因为那是私有的东西。
BYTE : 有人可能极想知道你以什么为生。
Stallma n: 通过提供咨询。提供咨询时,对于为咨询工作所写的东西,我总是保留可以送给别人的 权利。我也可以靠邮寄我自己写的或其他人写的自由软件来生活。许多人支付150美元购买 GNU EMACS, 但现在这些钱进入由我发起的自由软件基金会。基金会不支付我工资,因为那可能会造成利益冲突。基金会雇 另外的人为 GNU 工作。只要能靠提供咨询生活,我认为那就是最好的了。
BYTE : 目前,正式发布的 GNU 软件磁带中包括那些内容?
Stallman : 现在它包括 GNU EMACS(兼容所有计算机的版本); BISON ,这是一个替代 YACC 的程序; MIT Scheme, 这是 Sussman 教授的 LISP 超简化语;还有 HACK , 这是一个类似 ROGUE 的古城堡探索游戏。
BYTE : GNU 发布的磁带附有印刷的使用手册吗?
Stallman : 没有。一本手册 15 美元,或者你自己去复印。你也可以复制这个访谈录。
BYTE : 哪儿能得到拷贝?
Stallman : 可以写信到自由软体基金会 the Free Software Foundation, 675 Massachusetts Ave., Cambridge, MA 02139.
[1995 年 6 月,地址改为: Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307, USA Voice: +1-617-542-5942 Fax: +1-617-542-2652 -gnu@prep.ai.mit.edu ]
BYTE : 完成 GNU 系统以后,你打算作什么?
Stallman : 我不能确定。有时我想我应该在其他的软件领域里继续做同样的事。
BYTE : 所以,这只是向商业软件行业发起挑战的众多事情当中的第一件事?
Stallman : 我希望如此。但是也许我将过轻松的生活,花一点时间工作以维持生活。我的生活 并不奢华。业余时间,我找有趣的人聊,或者学点我不知道的东西。
—————————
翻译:张克勤
校审:贾星客
GNU 中译成员:白 若玉、刘 昭宏
Updated: $Date: 2002/01/26 23:32:51 $ $Author: bfteam $