第三个系统Linux:一个人加上一百万人的智慧

    作者 /Mike Gancarz
    Mike Gancarz 是美国佐治亚州亚特兰大市的一名应用开发顾问。他的团队使用 Linux、Unix 和 Java 工具,为金融服务行业开发出多个获奖的成像解决方案。作为 Unix 应用程序设计专家,他不遗余力地推广 Unix 已达二十多年。作为开发出 X Window System 的团队成员,Mike Gancarz 还始创了一些至今仍应用在 Linux 上的最新窗口管理器中的可用性观念。Mike 曾经在 DEC 公司位于新罕布什尔州纳舒厄城的 Unix 工程开发项目组工作,主持了将 Unix 命令和程序移植到 64 位 Alpha 处理器的工作。他的首部著作 The Unix Philosophy(Digital Press, 1995)令数以万计的技术人员受益,他也是《Linux/Unix 设计思想》的作者。

    第三个系统Linux:一个人加上一百万人的智慧 - 图1

    人类只具备创建三个系统的能力。不管如何努力,无论为之奋斗的时间有多久,人类最终都会意识到想要打破这个规律只是徒劳。人类根本无法建立第四个系统。只有自欺欺人的家伙才不相信这个铁律。

    为什么只有三个?这是个难以回答的问题。人们或许能从科学、哲学和宗教的观点出发,得到一些猜测性的理论。每个理论都会对这种情况给出一个貌似合理的解释。但是,最简单的解释可能就是,人类的系统设计过程就像人类自身一样,都必须要经历三个生命阶段:未成年、成年和老年。

    在未成年阶段,人们普遍充满活力。他们就像是街区里新来的孩子:浑身活力四射,渴望受到关注,而且显示出无穷潜力。在一个人从未成年阶段发展到成熟阶段的同时,他会成长为对这个世界更加有用的人。他们的职业生涯逐渐成形,与他人的长期合作关系得到发展,在世俗事务中的影响力越来越大。这个人开始给人留下深刻印象——好的坏的或是其他。待到年老的时候,这个人会丧失掉年少时的许多机理能力。而且,随着体格机能的逐渐衰退,其对世俗的影响也会消退,职业生涯都将成为往昔记忆。人们开始抗拒这种改变。然后,沉淀下来的就是那些基于人生经历的宝贵智慧。

    人类设计的系统也经历着同样的发展阶段。每个系统都具备与人类生命发展阶段所对应的那些特性。所有的系统都遵循着这条发展路径:从未成年开始,过渡到成熟阶段,直到以老年作为终结。

    正如一些人无法活到天年一样,总有一些系统到达不了成熟期。通常,这是由外部环境所决定的。开发计划也许会改变;项目经费可能会被撤销;潜在客户或改变主意,决定购买别家供应商的产品。任何这些因素都有可能导致系统中途夭折。然而,在正常情况下,人们还是可以引领这些系统经历所有的三个发展阶段。为了阐明这个道理,我们将这些阶段称为人类的三个系统。

    在背水一战的情况下,人类创建了“第一个系统”

    通常情况下开发人员担负着巨大压力,他们必须要赶在截止日期前交付项目,或是满足其他一些时间紧迫的需求。种种压力会激发出他内心灵感创意的火花。最终,在他深思熟虑良久,并在脑海中反复琢磨他的构想之后,这一点火花变成了一小团火焰。工作仍在继续。他的创意本能开始占据上风。灵感的火焰变得越发明亮。

    某一刻,他会意识到一部分构想并不只局限在“达成目标”这一范围内。他感觉自己好像在反复思量一些更重要的事物。此时,如果他认为这些构想可以提供更合理的解决方案,那么他就会逐渐淡忘最早制定的目标。

    “专家”使用“第一个系统”验证过的想法来创建“第二个系统”

    “第一个系统”早期的成功深深地吸引了一些人,他们积极参与进来并希望将自己的名字与这个系统紧密相连,从而获得这样那样的回报。每个人都想和成功产品搭上关系。

    这个自封的“专家”群体通常包括许多对“第一个系统”颇有微词的批评家。这些人为自己没能参与“第一个系统”的设计工作而深感懊丧,他们发泄着对“第一个系统”创始人的不满,并声称自己完全可以做得更好。有时候他们是对的。他们确实可能在系统设计某些特定方面做得更好。在重新设计“第一个系统”中几个基本算法的时候,他们的专业知识派上了用场。但请记住:“第一个系统”的设计者(们)并没有足够时间去把事情做好,而这些专家中的许多人一来知道什么是正确的做法,二来也有充足时间和资源来做好它。

    “第三个系统”由那些为“第二个系统”所累的人们创建

    经年累月之后,有些人开始发现,这“第二个系统”并不像它吹嘘的那样神乎其神。他们意识到它会吞噬系统的资源,运行起来也非常缓慢。它的确是由专家设计的,只不过其中一些人是自封的“砖家”。虽然“第二个系统”努力去满足每个人的需要,可实质上它并达不到任何人的要求。

    不久,“第二个系统”便使许多人精疲力尽。他们认识到所谓的“令你别无他求的系统”只不过是众多系统的一个。它催生了太多的用户组,连处于技术领域外围的人士都开始讲授研讨会。这些人并不像早期激发这股热潮的人们那么才华横溢,因此教学质量一路下滑。夸夸其谈充斥着这些用户会议,外围人士看到之前的专家早已声名鹊起,所以才希望能效仿这些人的派头。只是,他们来得太晚了。

    人们都在窃窃私语地交换意见,也许这“第二个系统”并非那么完美,最后,这些小声的传言变成了广大用户发出的集体呐喊。每个人开始怀疑是否会有一个更好的解决办法。直到此时,全世界都做好了迎接“第三个系统”的准备。在与“第二个系统”的对抗中,“第三个系统”诞生了。

    另一方面,他们这些“吃不到葡萄”的专家会对别人来之不易的成就大倒酸水。这里面大有一些NIH的意味,也就是曾经流行的“非我发明”综合征。虽然其中许多人其实也有能力去建立“第一个系统”,他们只是没能抢得先机而已。他们参与“第二个系统”的开发工作不是为了找乐子,而是希望借此机会用自己的设计机制来取代“第一个系统”的机制,从而“改善原有设计师明显的业余尝试”,为自己获得专业口碑。

    这种态度往往会引起“第一个系统”设计者的愤怒。偶尔,他们也会奋力反击。流行X Window Sytem系统的先驱Bob Scheifler就曾不客气地回应过认为他的早期设计风格过于随意的批评:“如果不喜欢,你完全可以随意编写你自认为具备行业标准的窗口系统。”

    Linux既是“第三个系统”,又是“第二个系统”

    Linux的出现正逢20世纪80年代末的动荡期,当时Unix处于嘈杂喧嚣的“第二个系统”阶段。“第二个系统综合征”的迹象比比皆是,而Unix社区里,AT&T和伯克利这些主要派别正为哪一方实施的系统可以主宰Unix世界而争论不休。此外,人们还成立了诸如开放软件基金会(Open Software Foundation)的一些委员会,他们试图说服用户真正重要的是“开放接口”,而不是操作系统的哲学。这两种主流Unix社区推出的实施版本大多成了超级臃肿和缓慢的系统。

    作为Unix哲学的下一个重要实现,而且是在一个几乎没有什么系统实施该哲学理念的领域,Linux展现出了许多“第三个系统”的特点。有些人厌倦了Unix世界中的自鸣得意和争吵不休,他们在Linux上面找到了很多乐趣。Unix中最好的原创概念在Linux下得以继续发展。许多Linux开发人员都抽出时间,帮助这个系统实现恰当的内核结构、接口和图形用户界面(GUI)。请大家不要忽略一个显而易见的事实:Linux其实就是Unix,只是换了个名字而已。

    Linux自身也体现出一些“第二个系统”的特性。比如说,广为人知的“开源软件”系统其实是从Linux世界开始起步的。这个系统要经过一个漫长过程,在人们辩论、举办研讨会、并阐述其优缺点之后,才会进入“第三个系统”阶段。自此,永久自由分发该系统软件的源代码将成为普遍的做法。

    如果说Ken Thompson是Unix的创造者,那么Linus Torvalds就是Linux操作系统的发明人,当时他还是芬兰赫尔辛基大学的一名学生。1991年8月25日他发出了那篇现在广为人知的新闻组主题文章,这篇以“嗨,大家好……我正在编写一个(免费)的操作系统”开头的文章对他的命运产生了深远影响。

    Thompson 和Torvalds两人至少有一点相似之处,那就是对事物的好奇之心。我们可以找到证据,Thompson编写Space Travel程序只是为了好玩而已。而Torvalds在痴迷于类Unix操作系统——Minix的同时,也完全是因为非常感兴趣才会将流行的Unix命令解释器bash进行改编并运行在他的“玩具”操作系统上。同时,这些在一开始只是“为了好玩”的举动,却最终对软件产业产生了深远影响。

    一开始,Linux也不是一款具备可移植性的操作系统。Torvalds无意将它移植到英特尔386之外的其他架构之上。从某种意义上说,他也只是背水一战,因为他的手头只有少量计算机硬件可供选择。因此,最初他并没有采取任何进一步的举措而只是将自己拥有的资源发挥到极致。但是他发现良好的设计原则和扎实的开发模式还是引领着他去把Linux变成一个可移植的系统。从那一刻开始,别的人接过了这个接力棒,很快便将Linux移植到了其他架构。

    在Torvalds的Linux出现之前,借鉴他人编写的软件已成为相当普遍的做法。事实上也就是因为这样,Richard M. Stallman才会在具有里程碑意义的GNU公共授权协议(GPL)下正式确立了这一思想。GPL是一个适用于软件的法律协议,基本保证了软件的源代码可以自由提供给任何想要得到它的人。Torvalds最终为Linux采用了 GPL协议,这个举动免除了所有人对于相关法律与版权纠纷的后顾之忧,让他们可以自由借用Linux的源代码 。由于Torvalds将Linux免费开放出来,因此其他人自然也会将他们的软件免费提供出来以共同发展Linux。

    从一开始,Linux已经表现出它确实是一个与Unix非常相似的操作系统。它的开发人员全盘接受了Unix的哲学原理,然后再从头编写了这个新的操作系统。问题是在Linux的世界里,几乎再没有其他程序是重新编写的。一切应用都是建立在其他人写好的代码和概念之上。因此很自然地,Linux成为了Unix系统演变的下一步,或许更准确地说,它是Unix的一个大飞跃。

    类似于Unix,在Linux技术发展的早期,有许多开发者参与其中并提供了帮助。不同的是,Unix开发者数量最多的时候也就几千人,而今天Linux的开发者数量却早已达到了几百万之多。这才是登峰造极的Unix!正是这种大规模的开发格局,保证了Unix的后代Linux将在很长时间内都是一款具备强大竞争力的系统。

    Linux为Unix世界重新激起波澜,所谓的“开源”要比“专有”软件或是那些没有现成源代码的软件优越。多年以来,Unix开发人员一直坚信这一点。但计算机行业的其他人却被一些专有软件公司的大量宣传所蒙蔽,他们误认为任何借来的或是免费的软件在性能上都无法比拟那些要付费(有时甚至是耗费巨资)的软件。

    在市场营销方面,Linux社区也更为精明,他们知道只要市场工作做得好,就算是劣质软件也可以成功销售出数百万份。当然,这并不是说Linux是伪劣产品。只是,有别于它的前身Unix社区,Linux社区认识到,即使是世界上最好的软件,也只有当人们对它产生了解并认识到它的真正价值时,才会为人所用。

    第三个系统Linux:一个人加上一百万人的智慧 - 图2

    开源除了可以让你清楚地了解到这些编程大师们创建系统的方式,还可以激励你去创建更快、更强大的系统。到目前为止,没有一本书同时介绍 Unix 和 Linux 的设计理念,《Linux/Unix设计思想》将这两者有效地结合起来,保留了 The Unix Philosophy 中 Unix 方面的内容的同时,探讨了 Linux 和开源领域的新思想。本文选自《Linux/Unix设计思想》