Saturday, December 20, 2008

[zz]Unix门派与恩怨

原文转自:http://blog.chinaunix.net/u/270/showart_221110.html

Unix门派与恩怨

(陈云川 ybc2084@163.com UESTC,CD

 

如果把Unix世界与中国传统武侠小说中的江湖做一个对比的话,会发现两者其实有着很多相似的地方。本文将试图以管窥一豹的方式向读者解说江湖中久已失传的旧闻与传说。由于作者所知有限,因此欢迎补充。本文的后续文档可能会是《Unix兵器谱》之类的。那么,如果你有兴趣,不妨一起来谱写Unix江湖中的编年史或者断代史,或者诸如此类的东西。

 

本文对Unix世界中的各个门派没有任何的偏袒,完全是站在中立的立场上来看待Unix这个江湖中发生过的、正在发生的、即将发生的一切恩恩怨怨。这些门派都为广大程序员带来了福音,但它们之间却在历史上的某个时候发生过一些小摩擦。探究这些事情无疑很有意思。同时,从这些很有意思的历史事件中,我们也能看到Unix――这个如同武侠江湖一样的世界的发展历程,以及它的游戏规则。

1.   Minix vs. Linux

公元1992129日,在Minix派的掌门人ASTAndrew S. Tanenbaum)与Linux派的掌门人Linus之间爆发了一场著名的争论。实际上这场争论是在以Minix为代表的微内核系统与以Linux为首的宏内核系统之间展开的。

 

AST指出Linux采用了一种过时的单内核结构,而且因为与体系结构结合得过于紧密,导致内核移植困难。而Linus则以非常尖锐的口吻指责Minix在性能上的缺陷,同时也附带挖苦了AST通过Minix收取版权费的做法。围绕着应该选择微内核还是宏内核的问题,交火双方展开了长达两个星期的舌战,一些Unix界的著名人士也参与到了这场争论之中。然而,这场大辩论并没有得出一个最终的结果来。而Linus在激动的心情平复下来以后通过新闻组的形式写了一封电子邮件向德高望重的AST教授致歉,而AST也在后来的某个时候承认是因为希望将Minix一如既往地用于教学目的,所以才没有采纳Internet上的各种意见以使得MinixLinux那样发展。

 

总之,这场论战并没有给这两大门派的掌门人蒙上什么阴影。至于Linus的过激言论,谁都知道那时的Linus不过是一个年轻气盛的大学生,何况Linus后来还写了电子邮件向AST致歉。论战并没有扼杀某一个派,而是导致两者此后以一种不同的方式继续走不同的道路,这无疑是我们最希望看到的结果。所谓仁者见仁智者见智,MinixLinux各有各的优点,因此实际上是没有办法绝对地分出好坏来的。

 

这次大论战最终不了了之,自然,也是以一种皆大欢喜的方式结束了。

2.   Minix vs. GNU

公元1983927日,日后成为江湖中最大帮派――GNU帮帮主的RMSRichard M. Stallman)打响了反抗封闭式软件授权的第一枪。这一天,RMSnet.unix-wizardsnet.usoft两个新闻组中发表了一封邮件。在这封邮件中,RMS提出了实现一个与Unix完全兼容的软件系统的构想,RMS把这个软件系统称之为GNUGNUGNU's Not Unix的递归缩写(程序员们能看懂这个缩写的意思)。在这个伟大的构想中,RMS要实现的不仅仅是一个操作系统内核,还包括编辑器、shell、编译器、链接器、汇编器等一大把在Unix下工作必须用到的实用工具。在封闭软件横行的那个时代,RMS的这封邮件无疑发出了一个振聋发聩的信号:自由软件、开源软件的时代到来了。

 

此后,RMS就开始着手建立GNU这样一个史无前例的浩大工程。RMS首先需要的是一个C编译器,RMS看上了由ASTAndrew S. Tanenbaum)开发并在大学中免费使用的VUCKVrei(Free) University Compiler Kit)编译器,于是RMS写信给AST问是否能够免费使用这个编译器,结果AST很不厚道地以嘲笑的口吻回答RMS说:大学是免费的,但是编译器不是(the university was free but the compiler was not)。这下RMS怒了,于是决定GNU的第一个项目就是开发一个支持多语言、多平台的编译程序。此后RMS还从Lawrence实验室获得了PASCAL语言的编译器,但可惜的是不能满足他的要求。聪明绝顶同时又无比高傲的RMS于是从第一行代码开始写起,最后搞出了目前GNU帮最受欢迎的软件――GCC编译器。从此,GCC成了GNU最引以为傲的一项绝世武功,独步江湖。而自创出这套绝世武功的RMS大侠理所当然地成为了GNU帮的帮主,号令群雄。

 

在这场代表Unix江湖中自由精神与半自由精神的较量中,RMS取得了胜利。这不禁让我想起了在金庸的武侠小说中有这么一个故事:一个秀才,一次被武功高强的江湖中人羞辱了,于是从此埋头于钻研武学,20年后,练成了一身绝世神功,当他去找对方报仇的时候,才发现那些人都已经老了,而自己则早已经成了真正前无古人后无来者的武学大宗匠。而这时,原来埋藏在心底的恩怨却早已变得微不足道、一笔勾销了。我想,现在的RMS应该不会再记AST的仇了吧,毕竟大家都是堂堂的一帮之主了。

3.   GNU vs. Linux

前面说过,RMS的目标是实现一个完整的兼容Unix的软件系统,这其中也包括一个兼容Unix的操作系统内核。在GNU的计划中,这个内核就是Hurd。但是可惜的是,尽管GCC等一大批相继出炉的绝世好剑赢得了众多江湖高手的青睐,并且杀入了由江湖百晓生编撰的Unix兵器谱的TOP 10,但是Hurd的开发进展缓慢。逐渐成为了GNU的一个包袱,也成为了RMS的心头之痛。

 

Hurd之所以不能成功也许要归因于先天发育不良。因为Hurd是采用类似Minix的微内核思想构建的,因此性能上始终不够好,同时因为开发缓慢,始终不能和GCC等工具组成"天罡地煞超级无敌"剑阵。这不能不说是RMS最无奈的事情。

 

这个时候,时间大约到了上个世纪90年代,一个21岁的芬兰大学生Linus Torvalds开始着手开发Linux操作系统,这个操作系统是在Minix的影响下开放起来的。但与Minix用于教学目的不同,Linus希望这个操作系统能成为一个真正实用的操作系统。显然,一把用于教学的木剑和一把真正的倚天神剑是不可同日而语的。Linus希望实现的,就是这样一把倚天神剑。

 

当时,GNUGCC以及一大批工具软件已经登上了历史舞台,但是始终缺乏一个真正的操作系统作为支撑环境。于是Linus就用GNU的全套工具进行这个操作系统的开发,Linus最初并没有准备将这个操作系统命名为Linux,而是准备命令为一个诸如Freax之类的奇怪名字。但是,当Linus把这个襁褓中的操作系统的源代码公布到Internet上的时候,大家都很赞同将其命名为Linux,于是,Linux操作系统由此诞生。

 

随着Linux内核在Internet上的广泛传播和众多黑客的参与,Linux取得了巨大的成功。成为了自由Unix世界中一匹狂放不羁、极具灵性的黑马。这个时候,GNU再也沉不住气了。因为这匹马的诞生离不开GNU众多优秀工具的支持呀!就好比当张无忌表明身份的时候,一干人等才发现原来这小子居然完全是由本帮的众多前辈调教出来的。这个时候理所当然地应该把张无忌列入武当派的门强。Linux就是这样一个出尽风头,最后还是回归到了自己门派下的武学奇才。

 

看着自己心爱的Hurd内核不争气,而一个外来的Linux却抢走了所有的风头,RMS还能说什么呢?自己的门派后继无人,那么就把这个武功邪里邪气的Linux吸收进来吧。于是,GNULinux说:我看你小子骨骼清奇,是个百年一遇万中选一的武学奇才,这样吧,你以后跟着我混,我教你武功,你以后就算是我门派之下了,你觉得怎么样?Linux当然说好啊。于是,Linux就把自己的名字改成了GNU/Linux。以表示自己虽然博采众长,练就了一身绝世武功,但是最终还是投身到了GNU帮的门下。自此,GNU帮人才济济,位居Unix江湖中众多帮派之首,大有"GNU帮,千秋万载,一统江湖"的架势。此时的GNU派掌门人RMS望着自己的部众,总算能感觉到一点欣慰了。虽然自己的爱子Hurd内核在武功上难以有所进阶了,但毕竟收了一个有能力独步江湖、号令群雄的爱徒Linux,如何能不高兴呢?

4.   AT&T vs. BSD

如果要数出Unix发展史上的冤案受害者的话,BSD可以算是其中一个。由于UnixX/Open组织注册的商标,因此只有属于X/Open组织的操作系统才可以被称为Unix。而FreeBSD等派生于BSD内核的操作系统都不是X/Open组织的成员,因此从法律上来讲,FreeBSD等操作系统都是不能被称作Unix的。但是谁都知道,BSD系列的操作系统的的确确是属于正宗的Unix派系的。连TCP/IP这样重要的协议最初也是在BSD上实现的。悲哀呀,一代武学宗师最后却被排除在江湖的坐次之外,真像是来无影去无踪的风清扬老爷子,以传给令狐冲的三大绝招名动江湖而自己却完全不入江湖。不过,也许在BSD看来,做风清扬的感觉也不错:自由自在、无拘无束。江湖中的事,就让FreeBSDOpenBSDDragonFly BSD这些小子去闯荡吧。

 

在上个世纪90年代的时候,BSD派系已经发展得有了相当的实力。这个时候Unix最初的拥有者AT&T觉得自己的商业Unix受到了威胁,于是AT&T干了一件相当损人不利己的事:提起法律诉讼指责BSD存在侵犯AT&T专有源代码的行为。这官司一打就是几年,BSD元气大伤。虽然最终的判决结果裁决BSD不必赔偿AT&T的损失,但是必须删去代码中大约10%AT&T专有代码。这件事情也影响到了FreeBSDBSD的嫡系操作系统,FreeBSD开发小组用了大约一年的时间来重写这些被迫删除的代码,从而错过了发展壮大的大好时机。而这件事情的始作俑者,AT&T并没有从这个诉讼案中得到多少好处。真是典型的损人不利己。更何况,本是同根生,相煎何太急!

 

我不禁想起了《笑傲江湖》中的华山派,华山剑派分为剑宗、气宗之后,开始了无穷的争斗。争斗的结果,导致的是门派内部的元气大伤,正是亲者痛,仇者快呀!AT&TBSD的纠纷,就好像华山剑派的气宗与剑宗之争一样,气宗觉得剑宗的存在对自己构成了威胁,于是发布英雄贴,号召天下群雄讨伐剑宗。讨伐的结果,剑宗去掉了一些武功招数。可是身属华山派的本质并没有任何的改变,这真是何苦来着。如果AT&T当初能够知道BSD并没有因为那场诉讼而被Unix江湖抛弃,不知当作何感想,或者是否会改变那个损人不利己的决定。

5.   参考文献

[1] 赵炯。Linux Devel History.pdfwww.oldlinux.org2002.12

[2] www.freebsdchina.org

[3] www.yuanma.org


No comments: