购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2 历史
——双流记
History: A Tale of Two Cultures

Those who cannot remember the past are condemned to repeat it.

忘记过去的人,注定要重蹈覆辙。

The Life of Reason (1905)
《理性生活》(1905 年)
—George Santayana

前事不忘,后事之师。Unix的历史悠久且丰富多彩,许多内容仍然以坊间传说、猜想,以及(更常见的是)Unix程序员集体记忆中的战争创伤等形式鲜活地留存着。本章我们将通过回顾Unix的历史来阐明如今的Unix文化为什么会呈现当前这种状态。

2.1 Unix的起源及历史,1969—1995

小型实验原型系统的后继产品往往备受令人讨厌的“第二版效应”折磨。由于迫切希望把所有首次开发时遗漏的功能都添加进去,往往导致设计十分庞大、过于复杂。其实,还有一个因不常遇到而鲜为人知的“第三版效应”:有时候,在第二系统不堪自身重负而崩溃之后,有可能返璞归真,走上正道。

最初的Unix就是一个第三系统。Unix的祖辈是小而简单的 兼容分时系统 (CTSS,Compatible Time-Sharing System),也算曾经实施过的分时系统的第一代或者第二代了(取决于不同的定义,具体我们在此不作讨论)。Unix的父辈是颇具开拓性的Multics项目,该项目试图建立一个具备众多功能的“信息功用体/应用工具(information utility)”,能够很漂亮地支持大群用户对大型计算机的交互式分时使用。唉,Multics最后因不堪自身重负而崩溃了。但Unix却正是从它的废墟中破壳而出的。

2.1.1 创世纪:1969—1971

Unix于 1969 年诞生于贝尔实验室的计算机科学家Ken Thompson的头脑中。Thompson曾经是Multics项目的研究人员,饱受当时几乎作为铁律而到处应用的原始批量计算的困扰。然而在六十年代晚期,分时系统还是个新鲜玩意儿。计算机科学家John McCarthy(Lisp语言的发明者 [1] )几乎是在十年前才首次发表了分时系统的构想,而直到Unix诞生前七年的 1962 年才第一次真正部署使用,因此当时的分时系统尚处实验阶段,像喜怒无常的野兽,性能极不稳定。

那个时代计算机硬件的原始程度,恐怕亲历者现在也很难以记清。那时最强大的机器所拥有的计算能力和内存还不如现在一个普通的手机。 视频显示终端才刚刚起步,六年以后才得到广泛应用。最早分时系统的标准交互设备就是ASR-33 电传打字机——一个又慢又响的设备,只能在大卷的黄色纸张上打印大写字母。Unix命令简洁、少说多作的传统正是从ASR-33 开始的。

当贝尔实验室(Bell Labs)从Multics研究联盟中退出时,Ken Thompson带着从Multics激发的灵感——如何创建一个文件系统——留了下来。他甚至没能留下一台机器来玩自己编写的“星际旅行”,这是个科幻游戏——模拟驾驶一艘火箭在太阳系中遨游。Unix就在一台废弃的PDP-7 小型机 (图 2.1)上问世了。这台PDP-7 成为了“星际旅行”的游戏平台和Thompson关于操作系统设计思路的试验场。

Unix的完整起源故事可参见[Ritchie79],这是从Thompson第一个合作者Dennis Ritchie的角度讲述的。Dennis Ritchie后来以Unix的合作发明者和C语言的发明者而闻名于世。Dennis Ritchie、Doug McIlroy和其他一些同事,已经习惯了Multics环境下的交互计算方式,不愿意放弃这一能力。Thompson的PDP-7 操作系统给了他们一条救生绳。

图 2.1 PDP-7

Ritchie评述道:“我们希望保留的不仅仅是一个良好的编程环境,还包括一种能够形成伙伴关系的系统。经验告诉我们,远程访问(remote-access)和分时系统支持的公用计算,其本质不是用终端机代替打孔机来输入程序,而是鼓励频繁的交流。”计算机不应仅被视为一种逻辑设备而更应视为社群的立足点,这种观念深入人心。ARPANET(现今Internet的直系祖先)也发明于 1969 年。“伙伴关系”这一旋律将一直鸣奏在Unix的后继历史中。

Thompson 和Ritchie“星际旅行”的实现引起了关注。起先,PDP-7 的软件不得不在通用电气公司(GE)的大型机上交叉编译。Thompson和Ritchie为支持游戏开发而在PDP-7 上编制的实用程序成了Unix的核心——虽然直到 1970 年才产生Unix这个名字。最初的缩写是“UNICS”(单路信息与计算服务,Uniplexed Information and Computing Service),Ritchie后来称之为“一个有点反叛Multics味道的双关语”,因为Multics是多路信息与计算服务(MULTiplexed Information and Computing Service)的英文缩写。

即使在最早期,PDP-7 Unix已经拥有现今Unix的诸多共性,提供的编程环境也比当时读卡式批处理大型机的环境要舒服得多。Unix几乎可以称得上第一个能让程序员直接坐在机器旁,飞快捕获稍纵即逝的灵感,并能一边编写一边测试的系统。Unix的整个发展进程中都能吸引那些不堪忍受其它操作系统局限性的程序员自愿为它进行开发,这也一直是Unix不断拓展其能力的模式。这种模式早在贝尔实验室时就已确立了。

Unix的轻装开发和方法上不拘一格的传统与生俱来。Multics是项庞大的工程,硬件开发出来前必须编写几千页的技术说明书,而第一份跑起来的Unix代码只是在三个人头脑风暴了一把,然后由Ken Thompson花了两天时间来实现罢了——还是在一台破烂机器上完成的,而那个机器本来只作为一台“真正”计算机的图形终端!

Unix的第一功,是 1971 年为贝尔实验室的专利部门进行“文字处理”的支持工作。首个Unix应用程序是nroff(1)文本格式化程序的前身。这个项目也让他们名正言顺地购买了一台功能强大得多的PDP-11 小型机。万幸的是,当时管理层还未意识到Thompson和其同事所编写的字处理系统就快孵化出一个操作系统。贝尔实验室并没有开发操作系统的计划——AT&T加入Multics联盟正是为了避免自行开发一个操作系统。不管怎样,整个系统还是取得了令人振奋的成功。Unix在贝尔实验室计算群落中的重要而永久地位由此确立,并且开创了Unix历史的下一个主旋律——与文档格式化、排版和通讯工具的紧密结合。1972 年版的手册宣称装机量达 10 台。

Doug McIlroy[McIlroy91]后来这样描述这个时代:“外界的压力和纯粹出于对技艺的荣誉感,促使人们在有了更好更多的初步思路后,去重写或抛开已有的大量代码。从来没听说什么职业竞争和势力范围保护:好东西太多了,没有人需要把这些创新占为己有。”但是直到四分之一世纪后,人们才真正体会到他的话的含义。

2.1.2 出埃及记:1971—1980

最初的Unix用汇编语言写成,应用程序用汇编语言和解释型语言B混和编写。B语言的优点在于小巧,能在PDP-7 上运行,但是作为系统编程语言还不够强大,所以Dennis Ritchie给它增加了数据类型和结构。C语言从 1971 年起自B语言进化而来;1973 年,Thompson和Ritchie成功地用新语言重写了整个Unix系统。这是一个大胆的举动——那时为了最大程度地利用硬件性能,系统编程都通过汇编器来完成。与此同时,可移植操作系统的概念几乎鲜为人知。1979 年,Ritchie终于可以这么写了:“很肯定,Unix的成功很大程度上源自其以高级语言作为表述方式所带来的可读性、可改性和可移植性”,虽然理想与现实此时尚有一线距离。

1974 年在《美国计算机通信》( Communications of the ACM )上发表的一篇论文中[Ritchie-Thompson]第一次公开展示了Unix。文中作者描述了Unix前所未有的简洁设计,并报告了 600 多例Unix应用——这些都是安装在即便按照那个年代的标准,性能都算很低的机器上,但是(正如Ritchie和Thompson所写)“性能的局限不仅成就了经济性,而且鼓励了设计的简约”。

CACM论文发表后,全球各个研究实验室和大学都嚷着要亲身体验Unix。根据 1958年为解决反托拉斯案例达成的和解协议,AT&T(贝尔实验室的母公司)被禁止进入计算机相关的商业领域。所以,Unix不能够成为一种商品。实际上,根据和解协议的规定,贝尔实验室必须将非电话业务的技术许可给任何提出要求的人。Ken Thompson开始默默回应那些请求,将磁带和磁盘一包包地寄送出去——据传说,每包里都有一张字条,写着“love,ken”(爱你的,ken)。

这离个人机出现还有些年。那时候,不仅运行Unix所必须的硬件设备价格超出个人的承受范围,而且也没人敢奢望这种情况会在可预见的未来改变。因此,只有预算充足的大机构才用得起Unix机器:公司、高校、政府机构等。但是,对这些小型机的使用管制要比那些大型机少得多,因此,Unix的发展迅速笼罩了一层反传统文化的氛围。在上世纪 70 年代早期,最早搞Unix编程的通常都是头发蓬乱的嬉皮士和准嬉皮士们。摆弄操作系统的乐趣对他们来说不仅意味着可以在计算机科学的前沿上纵情挥洒,而且在于可以去推翻伴随“大计算”的所有技术假定和商业实践:卡式打孔机、COBOL、商务套装、IBM批处理大型机都成了看不上眼的过时事物;Unix黑客们沉浸在同时编织未来和编写系统的狂欢中。

那些日子的兴奋从Douglas Comer的话语中可见一斑:“许多大学都对Unix作出过贡献。多伦多大学计算机系发明了 200dpi的打印机/绘图仪,并且开发了用打印机模拟照相排版机的软件;耶鲁大学的计算机专家和学生们改进了Unix的shell;普渡大学的电子工程系对Unix的性能作了重要改进,推出了支持大量用户的Unix版本;普渡大学还开发出了最早的Unix计算机网络之一;加州大学伯克利分校的学生开发了新shell和许多小型实用工具。1970 年代后期贝尔实验室发布Unix V7 版本时,很显然,该系统解决了许多部门的运算问题,也综合了许多高校的创意。最终诞生了一个更强大的系统。思想潮流开始了新一轮循环,从学术界流向工业实验室,然后又回到学术界,最后流向了不断增加的商业用户。”[Comer]

1972 年在PDP-11 旁的Ken(坐)和Dennis(站)

现代Unix程序员公认的第一个完全意义上的Unix是 1979 年发布的V7 版本 。第一代Unix用户群一年前就已形成。此时,Unix用于支撑贝尔系统(Bell System)的所有操作[Hauben],并且传播到高校中,甚至远至澳大利亚——在那里,John Lions对V6 版源码的注释[Lions]成了Unix内核的第一个正式文档。许多资深的Unix黑客仍然珍藏着一份拷贝。

Lions的书是地下出版界轰动一时的大事。由于侵犯版权等诸如此类的问题,该书不能在美国出版,所以大家就你拷给我、我拷给你。我也有一份拷贝,至少是第六手了。在那个时代,若没有Lions的书,你就当不成内核黑客。

—Ken Arnold

Unix产业也初露端倪。1978 年,第一个Unix公司(the Santa Cruz Operation,SCO)成立,同年售出第一个商用C编译器(Whitesmiths)。1980 年,西雅图一家还不起眼的软件公司——微软也加入到Unix游戏中,他们把AT&T版本移植到微机上,取名为XENIX来销售。但是微软把Unix作为一个产品的热情并没有持续多久(尽管直到 1990年左右,微软的大部分内部开发工作都用的是Unix)。

2.1.3 TCP/IP 和Unix内战:1980—1990

在Unix的发展过程中,加州大学伯克利分校很早就成为唯一最重要的学术热点。伯克利分校早在 1974 年就开始了对Unix的研究,而Ken Thompson利用 1975—1976 的年休在此教学,更对Unix的研究注入了强劲活力。1977 年,当时还默默无闻的伯克利毕业生Bill Joy管理的实验室发布了第一版BSD。到 1980 年,伯克利分校成了为这个Unix变种积极作贡献的高校子网的核心。有关伯克利 Unix(包括 vi (1)编辑器)的创意和代码不断从伯克利反馈到贝尔实验室。

1980 年,国防部高级研究计划局(DARPA,Defense Advanced Research Projects Agency)需要请人在Unix环境下的VAX机上实现全新的TCP/IP协议栈。那时,运行ARPANET的PDP-10 已处耆耆之年,而数据设备公司(DEC)可能被迫放弃PDP-10以支持VAX的种种迹象也空穴来风。DARPA曾考虑和DEC公司签订实现TCP/IP的合同,但是因为担心DEC可能不太乐意改动他们的专有VAX/VMS操作系统[Libes-Ressler]而打消了这个念头。最后,DARPA选择了伯克利Unix作为平台——显然因为可以毫无阻碍地拿到它的源码[Leonard]。

伯克利计算机科学研究组当时拥有天时地利,还有最强大的开发工具;而DARPA的合同无疑成为Unix历史上自诞生以来最关键的转折点。

在 1983 年TCP/IP实现随Berkeley4.2 版发布之前,Unix对网络的支持一直是最薄弱的。早期的以太网实验不尽人意。贝尔实验室开发了一个难看但还能用的工具UUCP(Unix to Unix Copy Program),可在普通电话线上通过调制解调器来传送软件。 UUCP可以在分布很广的机器之间转发邮件,并且(在 1981 年Usenet发明后)支持Usenet——一个分布式的电子公告牌系统,允许用户把文本信息传播到任何拥有电话线和Unix系统的机器上。

尽管如此,已经意识到ARPANET光明前景的少数Unix用户感觉自己似乎陷在一潭死水中。没有FTP,没有telnet,只有限制重重的远程作业执行和慢得要死的连接。在TCP/IP诞生之前,Unix和Internet文化尚未融合。Dennis Ritchie将计算机视为“鼓励密切交流”的工具这一设想还只是围绕单机分时系统或同一计算中心的学术社群,并没有扩展到自 1970 年代中期开始ARPA用户群逐渐形成的一个分布全美的“网络国家”。早期ARPANET的用户对着自己蹩脚的硬件时,也只能想:凑合着用Unix吧。

有了TCP/IP,一切都变了。ARPANET和Unix文化自边缘开始融合,这种发展最终使两者都免遭灭亡。不过,首先还得经过炼狱,起因是两个毫不相干的灾难:微软的兴起和AT&T的拆分。

1981 年,微软同IBM就新型IBM PC达成了历史性交易。比尔·盖茨从西雅图计算机产品公司(SCP,Seattle Computer Products)买下了QDOS(Quick and Dirty Operating System)。QDOS是SCP公司的Tim Paterson花六个星期凑出来的CP/M翻版。盖茨对Paterson和SCP公司隐瞒了同IBM的交易,以五万美元的价格买下了所有版权。后来,盖茨又说服了IBM公司允许微软将MS-DOS从硬件中剥离出来单独出售。接下来的十年中,盖茨利用这个非他所写的程序变成了超级亿万富翁,而比首笔交易更加精明的商业策略更是让微软垄断了桌面计算机市场。作为产品的XENIX很快就弃而不用了,最终卖给了SCO公司。

那时,没什么人能看出微软会多么成功(或有多大破坏性)。因为IBM PC-1 硬件条件不足以来运行Unix,所以Unix人群几乎没注意这个产品(尽管,具有讽刺意味的是,DOS 2.0 光芒能盖过CP/M,主要因为微软的合创者Paul Allen在DOS 2.0 中融入了一些Unix的特征,包括子目录和管道等)。还有更有趣的事呢——比如说 1982 年SUN微系统公司的出世。

SUN微系统公司的创立者Bill Joy、Andreas Bechtolsheim和Vinod Khosla打算制造出一种内置网络功能的Unix梦幻机器。他们综合了斯坦福大学设计的硬件和伯克利分校开发的Unix,取得了辉煌的成功,开创了工作站产业。随着Sun公司越来越像传统商家而不再像一个无拘无束的新公司时,Unix大树上的这根分支源码来源的树枝逐渐枯萎,然而当时并没有人在意这一点。伯克利分校仍然随同源码一起销售BSD。一份System III源码许可证的官方价格为 4 万美元;贝尔实验室对非法流传贝尔Unix源码磁带的行为睁只眼闭只眼,各个高校也依然同贝尔实验室交换代码,看起来Sun公司对Unix的商业化似乎对它再好不过了。

C语言也在 1982 年有望被选为Unix世界外的系统编程语言。仅仅只用了五年左右的时间,C语言就几乎让机器码汇编语言完全失去了作用。到了九十年代早期,C和C++不仅统治了系统编程领域,而且成为应用编程的主流。到九十年代晚期,其他所有传统编译语言实际上都已经过时了。

1983 年,在DEC公司取消PDP-10 的后继机型的“木星”(Jupiter)开发计划后,运行Unix的VAX机器开始代之成为主流的互联网机器,直到被Sun工作站取代。到 1985年,尽管DEC极力抵抗,还是有 25%左右的VAX用上了Unix。但是取消木星计划的长期效应并明显。更主要的是,MIT人工智能实验室以PDP-10 为中心的黑客文化的消亡激发了Richard StallMan开始编制GNU——一个完全自由的Unix克隆版本。

到 1983 年,IBM PC可使用不下六种的Unix通用操作系统:uNETix、Venix、Coherent、QNX、Idris和运行在Sritek PC子板上的移植版本。但是System V和BSD版本仍然没有Unix移植——两个群体都悲观地认为 8086 微处理器不够强大,根本就没打算这么做。IBM PC上的这些Unix通用操作系统无一取得显著的商业成功,但表明了市场迫切需求运行Unix的低价硬件,而主要厂商并不供应。个人用户谁也买不起,更何况源码许可证上还挂着 4 万美元的价签呢。

1983 年,美国司法部在针对AT&T的第二起反托拉斯诉讼中获胜,并拆分了贝尔系统。这时Sun公司(及其效仿者!)已经取得了成功。这次判决将AT&T从 1958 年的禁止将Unix产品化的和解协议中解脱了出来。AT&T马上忙不迭地将Unix System V商业化——这一举措差点扼杀了Unix。

确实如此。但他们的营销策略却将Unix推向了全球。

—Ken Thompson

大多数Unix支持者都认为AT&T的拆分是个好消息。我们原以为,在拆分后的AT&T、Sun公司及效仿Sun的小公司中,我们看到了一个健康的Unix产业核心——利用基于低廉的 68000 芯片的工作站——能够挑战并最终打破压迫在计算机行业上的垄断者——IBM。

那时,没有人意识到,Unix的产业化会破坏Unix源码的自由交流,而恰是后者滋养了Unix系统早期的活力。AT&T只知道用保密从软件中获利,只会用集中控制模式开发商业产品,对源码散发严加防护。因为唯恐官司上身,非法交易的Unix源码也越来越乏人问津。来自高校的贡献随之开始枯竭。

更糟的是:刚刚进入Unix市场的几家大公司立马犯下了重大的战略性错误,其中之一就是试图通过产品差异化来寻求有利地位——这个策略导致了各种Unix接口的分歧,它抛弃了Unix的跨平台兼容性,造成了Unix市场分割。

另一个更微妙的错误就是以为个人计算机和微软不关Unix前景的事。Sun微系统公司未能意识到,日用品化的个人机最终会无可避免地动摇其工作站市场的根基。AT&T公司为了成为计算机行业执牛耳者,针对小型机和大型机采取了不同的策略,结果两个摊子都砸了。几家小公司试图在PC机上支持Unix,但都资金不足,仅专注于将产品出售给开发者和工程师,从未关注微软所瞄准的商用和家庭市场。

事实上,AT&T拆分后的数年内,Unix社区却在忙着Unix大战的第一阶段——System V Unix和BSD Unix之间的内部争吵。争吵分成不同的层面,有些属于技术层面(socket对stream,BSD tty对System V termio),有些则属于文化层面。分歧可以大致划分为长发派和短发派。程序员和技术人员往往与伯克利和BSD站在一边,而以商业为目标的人则倾向AT&T和System V。长发派,重唱着十年前Unix早期的主题,喜欢自我标榜为企业帝国的叛逆者,比如一家小公司贴的海报那样,上面画着一个标着“BSD”的X翼星际战机快速飞离巨大的AT&T死星,后者在熊熊烈火中粉身碎骨。就这样,罗马在燃烧,而我们还在拉小提琴。

但是,AT&T拆分当年发生的另一件事对Unix产生了更深远的影响。程序员兼语言学家Larry Wall发明了 patch (1)实用程序。Patch程序是一个将 diff (1)生成的修改记录(changebar)写入基础文件的简单工具,这意味着Unix开发人员之间可通过传送补丁——代码的渐增变化——进行协作,而不必传送整个代码文件。这一点非常重要,不仅因为补丁要比整个文件小,更因为即使基础文件和补丁制作者拿到的版本之间变化很大,仍然可以很干净地应用补丁。运用这个工具,基于共有源码库的开发流可以分开、并行、最后合拢。 patch 程序比其它任何单一工具都更能促进Internet上的协作开发——这种方式在 1990 年后让Unix获得新生。

1985 年,Intel的第一枚 386 芯片下线。它具有用平面地址空间寻址 4G内存的能力。笨拙的 8086 和 286 的段寻址旋即废弃。这是条大新闻,因为这意味着占据主导地位的Intel家族终于有了一款无需作出痛苦妥协就能运行Unix的微处理器。对Sun公司和其它工作站厂商来说,这真是不祥之兆,可惜它们并未觉察到。

同样在 1985 年,Richard Stallman发表了GNU宣言(the GNU manifesto) [Stallman],并发起了自由软件基金会(Free Software Foundation)。没有谁把他和他的GNU当回事,结果证明这是个大错误。同年,在一项与此不相干的开发行动中,X window系统的创始人发布了X window的源码,而无需版税、约束和授权。这项决策的直接结果就是X window成为不同Unix厂商之间合作的安全中立区,并挫败了专属的竞争对手,成为了Unix的图形引擎。

以调解System V和Berkeley API为目标的严肃的标准化工作始于 1983 年,产生了/usr/group标准。随之为 1985 年IEEE支持的POSIX标准。这些标准描述了BSD和SVR3(System V Release 3)调用的交集,综合了伯克利出色的信号处理和作业控制,以及SVR3的终端控制。所有后续的Unix标准其核心都加入了POSIX,后续开发的各种Unix版本也严格遵循这个标准。后来的现代Unix核心API唯一主要的补充就是BSD套接字。

1986 年,前面提到的发明 patch (1)的Larry Wall开始开发Perl语言,后者是最先也最广泛使用的开源脚本语言。1987 年年初,GNU C编译器的第一版问世,到 1987 年年底,GNU工具包的核心部分——编辑器、编译器、调试器以及其它基本的开发工具——都已就位。同时,X window系统也开始在相对低廉的工作站上露面了。这些因素都为20 世纪 90 年代的Unix开源发展提供了利器。

同样是在 1986 年,PC技术挣脱了IBM的掌控。IBM仍然试图在产品系列上维持高 价格性能 比,更青睐高利润的大型机市场,所以在新的PS/2 系列产品上拒用 386 而选择了较弱的 286。PS/2 系列为了杜绝仿冒而围绕一个专有总线结构进行设计,结果成了代价高昂的大败笔 。最积极进取的效仿者康柏(Compaq),发布了第一款 386 机器,靠这张牌打败了IBM。虽然主频只有 16MHz,但是 386 也算能跑起来Unix了。这是第一款可以叫Unix机器的PC。

这会儿已经能够想象Stallman的GNU项目可以和 386 机器配合而制造出Unix工作站,它比当时任何方案都要便宜一个数量级。奇怪的是,没人想到这步棋。来自小型机和工作站世界的大多数Unix程序员,依然鄙视廉价的 80x86 芯片,而钟情基于 68000 的高雅设计。尽管许多程序员都为GNU工程做出了贡献,但在Unix人群中,这个GNU项目仍然被视为一个唐吉诃德式的狂想,短期内还无法实用。

Unix社区从未丢弃叛逆气质。但是回头看来,我们几乎和IBM或者AT&T一样,对迫近我们的未来毫无所知。即使是数年前就开始对专有软件开展精神讨伐的Richard Stallman也未能真正理解Unix的产品化会对其所在社区有多大破坏力;他关心的是更抽象的长期论题。其余的人还一直企盼企业规则能有些精明的变化,从此市场分割、营销不利和战略漂忽不定等问题将不复存在,从而救赎回Unix拆分之前的世界。但是祸不单行。

很多人都知道Ken Olsen(DEC的CEO)在 1988 年将Unix描绘成“蛇油”(骗人的万灵油)。从 1982 年起,DEC就一直在销售其开发的用于PDP-11 的Unix变种,但真正希望的却是将业务回到自己专有的VMS操作系统上来。DEC和其它小型机厂商碰到了大麻烦,陷入Sun微系统公司和其它工作站厂商功能强劲、价格低廉的机器重重包围中。这些工作站大多运行的是Unix。

但是Unix产业自身的问题却更为严峻。1988 年,AT&T持有了Sun公司 20%的股份。作为Unix市场领军的这两家公司,终于开始清醒地认识到PC、IBM和微软构成的威胁,也终于认识到过去五年的争斗令他们几无所获。AT&T和Sun的联盟以及以POSIX为核心的技术标准的发展,最终弥合了System V和BSD Unix之间的裂痕。但是,当二线商家(IBM、DEC、HP等)创建开放软件基金会(Open Software Foundation)并结成盟友和以“Unix 国际”为代表的“AT&T/Sun轴心”对抗时,Unix内战的第二阶段开始了。更多回合的Unix与Unix三家的战斗随而爆发。

这段时间中,微软从家庭和小型商用市场赚了数十亿美元的钱,而争战不休的Unix各方却从未决意涉足这些市场。1990 年,Windows 3.0——来自微软总部Redmond发布的第一个成功的图形操作系统——巩固了微软的统治地位,为微软在九十年代荡平并最终垄断桌面应用市场创造了条件。

1989 年到 1993 年是Unix的中世纪。当时,似乎Unix社群所有的梦想都破灭了。相互争斗的战事已使专有Unix产业衰落得像个吵闹的肉店,无力振起挑战微软的雄心。大多数Unix编程者青睐的优雅的Motorola芯片也已经输给了Intel丑陋但廉价的处理器。GNU项目没能开发出自由的Unix内核,尽管从 1985 年GNU就不断作出此承诺,其信用令人质疑。PC技术被无情地商业化了。1970 年代的Unix 黑客先锋们人近中年,步履开始蹒跚。硬件便宜了,但Unix还是太贵。我们幡然醒悟:过去的IBM垄断让位于现在的微软垄断,而微软设计糟糕的软件像浊流一样,围着我们越涨越高。

2.1.4 反击帝国:1991—1995

1990 年,William Jolitz把BSD移植到了 386 机器上,这是黑暗中的第一缕曙光。1991年起一系列杂志文章对此进行了报道。向 386 移植BSD的移植之所以可能,是由于伯克利黑客Keith Bostic一定程度上受Stallman影响,早在 1988 年他就开始努力从BSD码中清除AT&T专有代码。但是,Jolitz在 1991 年年底退出 386-BSD项目,并毁掉了自己的成果,使该项目受到严重打击。对于此事的起因众说纷纭,不过公认的一点是Jolitz希望将其代码以源码形式无限制地发布,因此当项目的企业赞助商选择了更专有的授权模式时,他火了。

1991 年 8 月,当时默默无闻的芬兰大学生Linus Torvalds宣布了Linux项目。据称Torvalds最主要的激励是学校里用的Sun Unix太贵了。Torvalds还说,要是早知道有BSD项目,他就会加入BSD组而不是自己做一个。但是 386BSD直到 1992 年早些时候才下线,而此时Linux第一版已经发布好几个月了。

不回头看,人们无法发现这两个项目的重要性。那时,即使在Internet黑客文化内部也没有多少人关注它们,遑论更广大的Unix社区。当时Unix社区还在盯着比PC机性能更强大的机器,仍试图把Unix的特有品质与软件业的常规专有模式扯到一起。

又过了两年,经历了 1993-1994 年的互联网大爆炸,Linux和开源BSD的真正重要性才为整个Unix世界所了解。但不幸的是对BSD支持者来说,AT&T对BSDI(赞助Jolitz移植的创业公司)的诉讼消耗了大量时间,使一些关键的Berkeley开发者转向了Linux。

代码抄袭和窃取商业秘密的行为从未被证实。他们花了两年的时间也没找到确凿的侵权代码。要不是Novell从AT&T买下了USL、并达成协议,这场官司还会拖得更久。结果是从发布包中 18000 个组成文件中删掉了三个,对其它文件作了一些小修改。另外,伯克利大学也同意为约 70 个文件增加USL版权,但同时约定这些文件仍然可以自由重新分发。

—Marshall Kirk McKusick

这项和解为开创了从专有控制下获取一个自由而完整可用的Unix的先河,但对BSD自身的影响却是灾难性的。当伯克利的计算机科学研究组于 1992-1994 年间被关闭时,情况更糟了;随后,BSD社区内的派系斗争又将BSD开发分割成三个方向间的竞争。结果,BSD这一脉在关键时刻落后于Linux,Unix社区的领先地位拱手让人。

与此前各种版本的Unix开发相比,Linux和BSD的开发相当不同。它们植根于互联网,依赖分布式开发和Larry Wall的 patch (1)工具,通过email和Usenet新闻组招募开发者。因此,当互联网服务提供商(ISP)的业务于 1993 年因通信技术的变革和Internet骨干网的私有化(超出Unix历史范围,不述)而扩展时,Linux和BSD也得到了巨大的推动力。但对廉价互联网的需求却是由另一件事创造的:1991 年万维网(WWW)的发明。万维网是互联网中的“杀手级应用”,图形用户界面技术对大量的非技术型最终用户有着不可抗拒的魅力。

互联网的大规模市场推广,既增加了潜在开发者的数量,又降低了分布式开发的处理成本,这些影响可从XFree86 之类的项目上看出。XFree86 利用Internet为中心的模式建立了一个比官方X联盟更有效的开发组织。1992 年诞生的第一版XFree86 赋予了Linux和BSD一直缺乏的图形用户界面引擎。下个十年里,XFree86 将领导X的开发,X联盟越来越多的行为都是把源自XFree86 社区的创新汇聚回X联盟产业赞助者中。

到 1993 年年末,Linux已经具备了Internet能力和X系统。整套GNU工具包从一开始就内置其中,以提供高质量的开发工具。除了GNU工具,Linux好像一个魅力聚宝盆,囊括了二十年来分散在十几种专有Unix平台上的开源软件之精华。尽管正式说来Linux内核还是测试版(0.99 的水平),但稳定性已经让人刮目相看。Linux上软件之多、质量之高,已经达到一个产品级操作系统的水准。

在旧学派的Unix开发者中,一部分脑筋活络的人开始注意到,做了多年的平价Unix之梦从一个意想不到的方向悄然成真。它既不是来自AT&T,也不是来自Sun,或者任何一个传统厂商,也不是出于学术界有组织的工作成果。它就这样从Internet的石头缝中跳了出来,浑然天成,以令人惊奇的方式重新规划拼装了Unix的传统元素。

另一方面,商业运作继续进行。1992 年AT&T抛售了其手中Sun公司的股份,然后在 1993 年把Unix系统实验室(Unix Systems Laboratories)卖给了Novell;Novell又于1994 年将Unix商标转手给X/Open标准组(X/open standards group);同年AT&T和Novell加入了OSF(开放软件基金会),Unix之战尘埃落定。1995 年,SCO从Novell手中买下了UnixWare(以及最初Unix源码的权利)。1996 年,X/Open和OSF合并,创立了一个大型Unix标准组。

但是,传统Unix厂商和他们战后的烂摊子看来确是越来越无关紧要了。Unix社区的动作和精力都在转向Linux、BSD及开源开发者。1998 年,IBM、Intel和SCO宣布启动蒙特里项目(the Moterey project),最后一次努力试图将所有现存的专有Unix整合成一个大系统,开发者和业内媒体坐看笑话。原地兜了三年的圈之后,此项目在 2001 年戛然而止。

2000 年SCO把UnixWare和原创的Unix源码包出售给了Caldera——一家Linux发行商,整个产业变迁终告结束。但 1995 年后,Unix的故事就成了开源运动的故事。故事还有一半没讲呢,我们要回到 1961 年,从互联网黑客文化的起源开始讲起。

2.2 黑客的起源和历史:1961—1995

Unix传统是一种隐性的文化,不只是一书袋的技术窍门。这种传统传达着一个有关美和优秀设计的价值体系;里面有它的江湖和侠客。与Unix传统的历史交织在一起的则是另一种隐性文化,一种更难归别的文化。它也有自己的价值体系、江湖和侠客,部分与Unix文化交迭,部分源于它处。人们老是把这种文化称为“黑客文化”,从 1998 年起,这种文化已经很大程度上和计算机行业出版界所称的“开源运动”重合了。

Unix传统、黑客文化以及开源运动间的关系微妙而复杂。三种隐性文化背后往往是同一群人,然而其间的关系并未因此而简化。但是,从 1990 年以来,Unix的故事很大程度上成了开源世界的黑客们改变规则、从保守的专有Unix厂商手中夺取主动权的故事。因此,今天Unix身后的历史,有一半就是黑客的历史。

2.2.1 游戏在校园的林间:1961—1980

黑客文化的根源可以追溯到 1961 年,这一年MIT购买了第一台PDP-1 小型机。PDP-1是最早的一种交互式计算机,并且(不象其它机器)在那时并非天价,所以没有对它的使用做太多限时规定。因此PDP-1 吸引了一帮好奇的学生。他们来自技术模型铁路俱乐部(TMRC,Tech Model Railroad Club),带着一种好玩的心态摆弄这台设备。《 黑客:计 算机革命中的英雄 》(Hackers: Heroes of the Computer Revolution )[Levy]一书对这个俱乐部的早期情况作了有趣的描写。他们最著名的成就是“太空大战(SPACEWAR)”——一款宇宙飞船决斗游戏,灵感大概来自 Lensman 的星际故事《E.E.‘Doc’Smith》。

TMRC来实验的几个人后来是成了MIT人工智能实验室的核心成员,而这个实验室在六七十年代成为前沿计算机科学的世界级中心之一。这些人也把TMRC的行话和内部笑话带了进来,包括一种精巧(但无害)的恶作剧传统“hacks”。人工智能实验室的程序员应该是第一群自称“hacker”的人。

1969 年后,MIT AI 实验室和斯坦福、Bolt Beranek & Newman公司(BBN)、卡内基-梅隆大学(CMU:Carnegie-Mellon University)以及其它顶级计算机科学研究实验室通过早期的ARPANET联上了网。研究人员和学生第一次尝到了快速网络联接消除了地域限制的甜头,通过网络,远方的人通常比与身边少有来往的同事更容易合作和建立友谊。

实验性的ARPANET网上到处都是软件、点子、行话和大量幽默。一种类似共享文化的东西开始成形,其中最早、最持久的典型产物之一就是“术语文件(Jargon File)”,列举了 1973 年发源于斯坦福、1976 年后在MIT经过多次修订的共享行内名词,并一路收集了CMU、耶鲁和其它ARPANET站点的行话。

从技术性而言,早期的黑客文化大都基于PDP-10 小型机。下列已经成为历史的操作系统他们都用过:TOPS-10、TOPS-20、Multics、ITS和SAIL。他们利用汇编器和各种Lisp方言编程。PDP-10 的黑客们后来接手运行ARPANET,因为别人不愿意干这件事。后来,他们成了互联网工程工作组(IETF,Internet Engineering Task Force)的创建骨干,并作为创始人,开创了通过RFC(Requests For Comment)进行标准化的传统。

从社会性而言,他们年轻,天资过人,几乎全是男性,献身编程达到痴迷的地步,决不墨守成规——后来被人们唤做“极客(geek)”。他们往往也是头发蓬松的嬉皮士和准嬉皮士。他们有远见,把计算机看作构建社区的工具。他们读Robert Heinlein和J.R.R.Tolkien的书,参加复古协会(Society for Creative Anachronism),双关语说起来没完。抛开这些怪癖(也许正由于这些原因),他们中的许多人都跻身世界上最聪明的程序员之列。

他们 并不是 Unix程序员。早期的Unix社群成员大部分来自院校、政府和商业研究实验室的同一帮“极客”,但是两种文化有明显的分野。其中之一就是我们前面已经谈到的早期Unix孱弱的网络能力。直到 1980 年后,才真正出现了基于Unix的ARPANET网络连接,之前一个人同时涉足两个阵营的情况并不多见。

协作式开发和源码共享是Unix程序员的法宝。然而,对于早期的ARRPNET黑客,这还不只是一种策略,它更像一种公众信仰,部分起源于“要么发表要么烂掉”的学术规则,并且(更极端地)几乎发展成为关于网络思想社区的夏尔丹式理想主义(Chardinist idealism)。这些黑客中最著名的Richard M.Stallman后来成了严守教义的苦行僧。

2.2.2 互联网大融合与自由软件运动:1981—1991

1983 年后,随着BSD植入了TCP/IP,Unix文化和ARPANET文化开始融合。既然两种文化都由同一类人(实际上,就有少数几位很有影响的人同属两种文化阵营)构成,一旦沟通环节到位,两种文化的融合就水到渠成。ARPANET黑客学到了C语言,用起了管道、过滤器和shell之类的行话。Unix程序员学到了TCP/IP,也开始互称“黑客”。1983 年,木星项目的取消虽然葬送了PDP-10 的前途,却加速了两种文化融合的进程。到 1987 年,这两种文化已经完全融合在一起,绝大多数黑客都用C编程,自如地使用源于 25 年前技术模型铁路俱乐部(TMRC)创造的行话。

(在 1979 年,我和Unix文化、ARPANET文化都有密切联系,当时这种情况还很少见。到 1985 年,这就已经不稀奇了。1991 年我将以前的ARPANET“术语文件”(Jargon File)扩展成《新黑客词典》( New Hacker’s Dictionary )[Raymond96],此时两种文化实际上已经融为一体。把生于ARPANET、长于Usenet的“术语文件”作为这次融合的标志真是再恰当不过了。)

但是TCP/IP联网和行话并不是后 1980 黑客文化从其ARPANET根源继承的全部东西,还有Richard M.StallMan和他的精神革命。

Richard M.Stallman(他的登陆名RMS更为人熟知)早在 1970 年代晚期就已经证明他是当时最有能力的程序员之一。Emacs编辑器就是他众多发明中的一项。对RMS来说,1983 年木星(Jupiter)项目的取消仅仅只是宣告了麻省理工学院人工智能实验室(MIT AI Lab)文化的最终解体。其实早在几年前随着实验室众多最优秀的成员纷纷离去,帮忙管理与之竞争的Lisp机器时,这种解体就已经开始了。RMS觉得自己被逐出了黑客的伊甸园,他把这一切都归咎于专有软件。

1983 年,Stallman创建了GNU项目,致力于编一个完全自由的操作系统。尽管Stallman既不是、也从来没有成为一个Unix程序员,但在后 1980 的大环境下,实现一个仿Unix操作系统成了他追求的明确战略目标。RMS早期的捐助者大都是新踏入Unix土地的老牌ARPANET黑客,他们对代码共享的使命感甚至比那些有更多Unix背景的人强烈。

1985 年,RMS发表了GNU宣言(the GNU Manifesto)。在宣言中,他有意从 1980 年之前的ARPANET黑客文化价值中创造出一种意识形态——包括前所未见的政治伦理主张、自成体系而极具特色的论述以及激进的改革计划。RMS的目标是将后 1980 的松散黑客社群变成一台有组织的社会化机器以达到一个单纯的革命目标。也许他未意识到,他的言行与当年卡尔·马克思号召产业无产阶级反抗工作的努力如出一辙。

RMS宣言引发的争论至今仍存于黑客文化中。他的纲要远不止于维护一个代码库,已经暗含了废除软件知识产权主张的精髓。为了追求这个目标,RMS将“自由软件(free software)”这一术语大众化,这是将整个黑客文化的产品进行标识的首次尝试。他撰写了“通用公共许可证(General Public License , GPL)”,后者成了一个既充满号召力又颇具争议的焦点,具体原因我们将在 16 章研讨。读者可以去GNU站点<http://www.gnu.org>了解RMS立场及自由软件基金会(Free Software Foundation)的更多情况。

“自由软件(free software)”这个术语既是一种描述,也是为黑客进行文化标识的一个尝试。从某个层次上说,这是相当成功的。在RMS之前,黑客文化中的人们彼此当作“同路人”,说着同样的行话,但没人费神去争辩“黑客”是什么或者应该是什么。在他之后,黑客文化更加有自我意识。价值冲突(即使反对RMS的人也经常以他的方式说话)成为辩论中的常见特点。RMS,这个魅力超凡又颇具争议的人物本身已经成为了一个文化英雄,因此到 2000 年时,人们已经很难将他本人和他的传奇区分开来。《自由中的自由》 Free as in Freedom )[Williams]对他的刻画非常精彩。

RMS的论点甚至影响了那些对其理论持怀疑态度的黑客的行为。1987 年,他说服了BSD Unix的管理者,让他们相信,将AT&T的专有代码清除出去、发布一个无限制的版本是个好主意。然而,尽管他花了不下十五年的苦功夫,后 1980 黑客文化却从未统一在他的理想之下。

其他黑客,更多出于实用角度而非思想观念的原因,重新认识到了开放式协作开发的价值。在八十年代后期离Richard Stallman位于MIT九楼办公室不远的几座楼里,X开发组搞得红红火火。这个项目由一些Unix厂商资助,这些厂商此前一直为X window系统的控制权和知识产权争论不休,结果发现还不如向所有人自由开放。1987 至 1988年间,X的开发预示了一个极为庞大的分布式社群,后者将在五年后重新定义Unix的前沿方向。

X是首批由服务于全球各地不同组织的许多个人以团队形式开发的大规模开源项目之一。电子邮件使创意得以在这个群体中快速传播,问题由此得以快速解决,而开发者可以人尽其才。软件更新可以在数小时之内发送到位,使得每个节点在整个开发过程中步调一致。网络改变了软件的开发模式。

—Keith Packard

X开发者们不替GNU总计划帮腔,但也不唱反调。1995 年以前,GNU计划最强烈的反对者是BSD开发者。BSD开发者觉得自己编写自由发布和修改软件的年头比RMS宣言长得多,坚决抵制GNU自称的在历史性和思想性上的首创。他们尤其反对GPL的传染性或“病毒般”的特性,坚持BSD许可证比GPL“更自由”,因为BSD对代码重用的限制要比GPL少。

尽管RMS的自由软件基金会已开发了整套软件工具包的绝大部分,但是未能开发出核心部件,因此形势对RMS仍然不利。GNU项目创立十年了,GNU内核仍是空中楼阁。尽管Emacs和GCC之类的单个工具被证明非常有用,但是没有内核的GNU既不能对专有Unix的霸权构成威胁,又不能有效抵抗日渐严重的微软垄断。

1995 年后,关于RMS思想体系的争论稍稍发生了变化。反对者的观点跟Linus Torvalds和本书作者越来越近。

2.2.3 Linux 和实用主义者的应对:1991—1998

即使在HURD(GNU内核)计划停转之时,新的希望还是出现了。1990 年代早期,价廉性优的PC机加上方便快捷的互联网,对寻找机会挑战自我的新生代年轻程序员是极大的诱惑。自由软件基金会编写的用户软件工具包铺平了一条摆脱高成本专有软件开发工具的前进道路。意识服从经济,而不是领导:一些新手加入了RMS的革命运动,高举GPL大旗,另一些人则更认同整体意义上的Unix传统,加入了反对GPL的阵营,但其他大部分人置身事外,一心编码。

Linus Torvalds巧妙地跨越了GPL和反GPL的派别之争。他利用GNU工具包搭起了自创的Linux内核,用GPL的传染性质保护它,但拒绝认同RMS许可协议反映的思想体系计划。Torvalds明确表示他认为自由软件通常更好,但他偶尔也用专有软件。即使在他自己的事业中,他也拒绝成为狂热分子。这一点极大地吸引了大多数黑客,他们虽然早就反感RMS的言辞,但他们的怀疑论一直缺个有影响力或者令人信服的代言人。

Torvalds令人愉快的实用主义及灵活而低调的行事风格,促使黑客文化在 1993 至1997 年间取得了一连串令人惊奇的胜利,不仅仅在技术上的成功,还让围绕Linux操作系统的发行、服务和支持产业有了坚实的开端。结果,他的名望和影响也一飞冲天。Torvalds成为了互联网时代的英雄;到 1995 年为止,他只用了四年时间就在整个黑客文化界声名显赫,而RMS为此花了十五年,而且他还远远超过了Stallman向外界贩卖“自由软件”的记录。与Torvalds相比,RMS的言辞渐渐显得既刺耳又无力。

1991 至 1995 年间,Linux从概念型的 0.1 版本内核原型,发展成为能够在性能和特性上均堪媲美专有Unix的操作系统,并且在连续正常工作时间等重要统计数据上打败了这些Unix中的绝大部分。1995 年,Linux找到了自己的杀手级应用——开源的web服务器Apache。就像Linux,Apache出众地稳定和高效。很快,运行Apache的Linux机器成了全球ISP平台的首选。约 60%的网站选用Apache, 轻松击败了另两个主要的专有型竞争对手。

Torvalds未作的一件事就是提供新的思想体系——一套关于黑客行为的新理论基础或繁衍神话,以及一套吸引黑客文化圈内圈外人士的正面论述,以消弭RMS对知识产权的不友善。1997 年,当我试图探寻为什么Linux开发没有在几年前崩溃时,我偶然地填补了这个空白。我所发表论文[Raymond01]的技术结论归纳在本书第 19 章。对于这段历史梗概,只要看看第一条结论核心规则的冲击就够了:“如果有足够多眼睛的关注,所有的bug都无处藏身”。

这段观察暗含了过去四分之一世纪在黑客文化中从未有人敢相信的东西:用这种方法做出的软件,不仅比我们专有竞争者的东西更优雅,而且更可靠、更好用。这个结果出乎意料地向“自由软件”的论述发起了直接挑战,而Torvalds本人从未有意于此。对于大多数黑客和几乎所有的非黑客而言,“用自由软件是因为它运行得更好”轻而易举地盖过了“用自由软件是因为所有软件都该是自由的”。

在我的论文中关于“大教堂”(集权、封闭、受控、保密)和“集市”(分权、公开、精细的同僚复审)两种开发模式的对比成为了新思潮的中心思想。从某种重要意义上来说,这仅仅是对Unix在拆分前根源的回归——McIlroy在 1991 年阐述了同侪压力如何对 1970 年代早期Unix的发展产生了积极影响、Dennis Rithchie在 1979 年对伙伴关系的反思,这是此两者的延续,并与早期ARPANET同侪评审的学术传统及其分布式精神社区的理想主义相得益彰。

1998 年初,这种新思潮促使网景公司(Netscape Communications)公布了其Mozilla浏览器的源码。媒体对此事件的关注促成了Linux在华尔街的上市,推动了 1999-2001年间科技股的繁荣。事实证明,此事无论对黑客文化的历史还是对Unix的历史都是一个转折点。

2.3 开源运动:1998 年及之后

到 1998 年Mozilla源码公布的时候,黑客社区其实算是一个众多派系或部落的松散集合,包括了Richard Stallman的自由软件运动(Free Software Movement)、Linux社区、Perl社区、Apache社区、BSD社区、X开发者、互联网工程工作组(IETF),还有至少一打以上的其它组织。这些派系相互交叠,一个开发者很可能同时隶属两个或更多组织。

一个部落的凝聚力可能来自他们维护的代码库,或是一个或多个有着超凡影响力的领导者,或是一门语言、一个开发工具,或是一个特定的软件许可,或是一种技术标准,或是基础结构某个部分的管理组织。各派系既论资排辈,也追逐当前的市场份额及认知度。因此,资格最老的大概要算IETF,其历史可以连续追根溯源到 1969 年ARPANET的发源期;BSD社区尽管市场安装数量要比Linux少得多,但是因为其传统可连续追溯到 1970 年代末,所以还是拥有相当高的声望;可追溯到 1980 年代初的Stallman的自由软件运动,无论从历史贡献,还是从作为几个最常用的软件工具维护者的角度,都足以令其跻身高级部落行列。

1995 年后,Linux扮演了一个特殊的角色:既是社区内多数软件的统一平台,又是黑客中最被认可的品牌。Linux社区随之显现了兼并其它亚部落的倾向——甚至包括争取并吸纳一些专有Unix相关的黑客派系。整个黑客文化开始凝聚在一个共同目标周围:尽力推动Linux和集市开发模式向前发展。

因为后 1980 黑客文化已经深深植根于Unix,新目标成了Unix传统争取胜利的不成文纲要。黑客社区的许多高级领导人也都是Unix的老前辈,八十年代分拆后内战的伤痕犹在,他们将Linux作为实现Unix早期叛逆梦想的最后和最大的希望,而汇聚在Linux旗下。

Mozilla源码的公布使各方意见更为集中。1998 年 3 月,为了深入研究共同目标和策略,召开了一次空前的社团重要领导人峰会,与会者几乎代表了所有的主要部落。这次会议为所有派系的共同开发方式确立了一个新标记——开源。

六个月之内,黑客社区中几乎所有部落都接受了用“开源”的新旗帜。IETF和BSD开发组这种老团体更是把他们从过去到现在所作的东西都追加上了这一标记。实际上,到2000 年,黑客文化不仅让“开源”这个辞令统一了当前实践和未来计划,而且也对自己的历史重新有了鲜活的认识。

Netscape开放源码的宣告和Linux的新近崛起产生的激励效应远远超越了Unix社区和黑客文化。从 1995 年开始,所有阻拦在微软Windows滚滚巨轮前的各种平台(MacOS;Amiga; OS/2; DOS; CP/M;较弱小的专有Unix;各类大型机小型机和过时的微型机操作系统)的开发者团结到了Sun微系统公司的Java语言周围。许多不满微软的Windows开发者也加入了Java阵营,希望至少能够和微软保持名义上的独立。但是Sun公司运作Java的几个层面都(我们将在第 14 章予以讨论)既拙劣又排斥他人。许多Java开发者喜欢上了开源运动中的新生事物,于是就像此前跟随Netscape加入Java一样,又跟随它加入了Linux和开源运动。

开源行动的积极分子热烈欢迎来自各个领域的移民潮。老一辈Unix人也开始认同新移民的梦想:不能只是被动忍受微软的垄断,而是要从微软手中夺回关键市场。开源社区成员们合力争取主流世界的认同,开始乐于同大公司结盟——这些公司,随着微软的绳索勒得越来越紧,也越来越害怕对自己的业务失去控制。

唯一的例外是Richard Stallman和自由软件运动。“开源”明显要用一个意识形态中性的公众标签来取代Stallman钟爱的“自由软件”。新标签无论对于历史上一贯反对“自由软件”的BSD黑客之类的团体,还是对于不愿在GPL是非之争中表态的人均能接受。Stallman尝试着接受这个术语,但随后又以其未能代表其思想的核心为由而排斥它。从此,自由软件运动坚持同“开源”划清界限,这也许成了 2003 年黑客文化中最重大的政治分歧。

“开源”背后另一个(也是更重要的)意图是希望将黑客社区的方法以一种更亲和`市场、更少对抗性的方式介绍给外部世界(尤其是主流商用市场)。幸运的是,在这方面,它取得了绝对成功——这也重新激起了人们对其根源——Unix传统——的兴趣。

2.4 Unix的历史教训

在Unix历史中,最大的规律就是:距开源越近就越繁荣。任何将Unix专有化的企图,只能陷入停滞和衰败。

回顾过去,我们早该认识到这一点。1984 年至今,我们浪费了十年时间才学到这个教训。如果我们日后不思悔改,可能还得大吃苦头。

虽然我们在软件设计这个重要但狭窄的领域比其他人聪明,但这不能使我们摆脱对技术与经济相互作用影响的茫然,而这些就发生在我们的眼皮底下。即使Unix社区中最具洞察力、最具远见卓识的思想家,他们的眼光终究有限。对今后的教训就是:过度依赖任何一种技术或者商业模式都是错误的——相反,保持软件及其设计传统的的灵活性才是长存之道。

另一个教训是:别和低价而灵活的方案较劲。或者,换句话说,低档的硬件只要数量足够,就能爬上性能曲线而最终获胜。经济学家Clayton Christensen称之为“破坏性技术”,他在《创新者窘境》(The Innovator's Dilemma)[Christensen]一书中以磁盘驱动器、蒸汽挖土机和摩托车为例阐明了这种现象的发生。当小型机取代大型机、工作站和服务器取代小型机以及日用Intel机器又取代工作站和服务器时,我们也看到了这种现象。开源运动获得成功正是由于软件的大众化。Unix要繁荣,就必须继续采用吸纳低价而灵活的方案的诀窍,而不是去反对它们。

最后,旧学派的Unix社区因采用了传统的公司组织、财务和市场等命令机制而最终未能实现“职业化”。只有痴迷的“极客”和具有创造力的怪人结成的反叛联盟才能把我们从愚蠢中拯救出来——他们接着教导我们,真正的专业和奉献精神,正是我们在屈服于世俗观念的“合理商业做法”之前的所作所为。

如何在Unix之外的软件技术领域借鉴这些经验教训,就作为一个简单的练习留给读者吧。

[1] McCarthy:1971 年图灵奖获得者,主要贡献在人工智能方面;The concept was first described publicly in early 1957 by Bob Bemer as part of an article in Automatic Control Magazine .The first project to implement a timesharing system was initiated by John McCarthy. 2jBvg5no5o9Dpeb5kxKyQQkHK05fCfJBX1M/ZWftq6BMeaPs+oZh5RjS0CLHJbv5

点击中间区域
呼出菜单
上一章
目录
下一章
×