学习
实践
活动
专区
工具
TVP
写文章

驱动 iOS和Android的Unix:50 年历史,从失败到成功的故事

作者:Richard Jensen是一名撰稿人兼历史保护专家。

今天,Unix驱动iOS和Android——它的传奇始于一条鳄鱼和三名研究人员。

PDP-11前面的Ken Thompson(坐着)和Dennis Ritchie(站着)。Ritchie将贝尔实验室供给媒体的这张图片评注为“一张有趣的照片”;他开玩笑说,他的头发拍这张照片时比1999年3月那一期《科学美国人》等杂志上的样子“茂密浓黑多了”。(图片来源贝尔实验室)

也许Unix的普遍性长期以来掩盖了它的起源。但50年前Unix是从一个失败的项目中诞生的,当时贝尔实验室、通用电气(GE)和麻省理工学院(MIT)等巨头参与了该项目。这款操作系统衍生出了诸多版本,如今驱动全球各地销售的几乎所有智能手机。Unix基本上是贝尔实验室几名程序员的结晶,这个故事始于在新泽西州默里山贝尔实验室庞大综合楼一个不起眼的附属建筑物顶层召开的一次会议。

那是1969年3月份的最后一天:一个敞亮而寒冷的星期一,计算机科学部门在接待两位来头不小的客人:贝尔实验室副总裁Bill Baker和研究主任Ed David。Baker当时即将叫停Multics(多路信息和计算服务的简称),这是计算机科学部门搞了整整四年的软件项目。Multics已延期两年,严重超支,基本上不实用。

为了尽可能美化显然是重大失败的项目,Baker作了一场发言,声称贝尔实验室完成了它试图通过Multics想完成的一切,并表示他们不再需要搞这个项目。正如出席那次会议的职员Berk Tague后来告诉普林斯顿大学,“就像越战一样,他宣称取得了胜利,退出Multics。”

在该部门内部,这番宣布并不出人意料。程序员们敏锐地意识到项目范围和要求他们制造的计算机面临的各种问题。

不过,只要贝尔实验室在搞Multics,他们就还拥有一台价值700万美元的大型机,可以在业余时间捣鼓。开发Multics的程序员之一Dennis Ritchie后来表示,他们都觉得与项目的成功有切身的利害关系,尽管他们知道这种成功的可能性微乎其微。

取消Multics意味着计算机科学部门的程序员们要搞的唯一项目走到头了,这也意味着计算机科学部门失去了唯一的一台计算机。GE 645大型机被拆下运走后,计算机科学部门的资源也就剩下了办公用品和几台终端。

正如参与该项目的另一名程序员Ken Thompson这样戏说Unix Oral History项目:“我们的个人生活将变得简朴得多。”

对于计算机爱好者来说幸运的是,资源紧张有时反而会激发巨大的创造力。因此,有史以来编写的最具影响力的操作系统不是由风险资本家提供资金,编写它的人也没有因此成为亿万富翁。Unix之所以横空出世,是由于贝尔实验室雇用一群聪明的人,并给了他们自娱自乐的自由,相信他们的项目往往大有用处。早在Unix之前,贝尔实验室的研究人员已经发明了晶体管和激光器,以及计算机图形、语音合成和语音识别等领域的众多创新。

为 Multics 让路

Multics一开始被寄予厚望,尽管乍一看目标有点含糊不清、有点不着边际。

Multics由GE、MIT和贝尔实验室三方合作,这个项目号称可以将计算能力变成如电力或电话服务一样便捷的资源。贝尔实验室的研究人员在办公室里会有一个插孔,可以将终端连接到Multics大型机,那样他们就能够实时访问大型机的全部资源。他们还可以在大型机上存储文件并随意检索文件。

如果这一切听起来微不足道,这也表明了这些功能很快变得有多重要,哪怕对于简单的计算任务而言。但是当Multics在60年代早期渐成雏形时,文件存储还很新奇,“分时”(time sharing,即多个用户共享单个计算机的资源访问权的能力)只是在实验室环境下进行,而不是在拥有大量用户的生产环境下进行。

20世纪60年代早期的计算机每次运行一个程序,一个接一个运行。贝尔实验室的研究人员要编写一个程序,将其转换成计算机接受的一种输入形式(穿孔卡、纸带或用于高端机器的磁介质),然后将其放在计算机中心。计算机操作员将程序排入队列,运行程序,然后将打印结果连同原始程序交给研究人员。

要是代码中有错误,就得费一番周折:打印出穿孔卡,将它们带到计算机中心,然后等待结果,搞不好碰到“语法错误”的输出。也许你可能还会得到代码行编号或其他一些可能有帮助的信息。

随着程序变得越来越复杂,这种调试代码的方法变得愈加令人沮丧。但没有一家公司或大学、甚至贝尔实验室有条件为每一个研究人员购置大型机——1965年,贝尔实验室用来开发Multics的GE 645几乎与一架波音737飞机一样昂贵。

因此,人们普遍对分时感兴趣,分时让多名研究人员可以同时在一台大型机上运行程序,立即在远程终端上获得结果。有了分时,程序不在穿孔卡上打印出来,而是被写入并存储在大型机上。从理论上来讲,研究人员可以在不离开办公室的情况下即时编写、编辑和运行其程序。Multics在构思之初就心系这个目标。它于1964年启动,最初定于1967年完工。

MIT将提供规范,GE将提供硬件,GE和贝尔实验室将划分编程任务,当时MIT已经开发出了一个名为CTSS的原始的分时系统,且已在使用它。

Unix历史:

Unix团队:集合!

Rudd Canaday是Multics项目的首批程序员之一。1964年,Rudd被贝尔实验室聘用,他在1966年被调到Multics项目之前已为耐克导弹防御计划编写了一个简单的分时系统。

次年,贝尔实验室聘用了哈佛大学毕业生Ritchie(他父亲是贝尔实验室的前成员)和自称是军人子弟的Ken Thompson,后者亲口承认:当时贝尔实验室的招聘专员在加州大学伯克利分校四处找他,他躲了整整一个月。Canaday、Ritchie和Thompson的起点大不一样,但最终来到了同一个地方:贝尔实验室综合楼的顶层,在狭窄的地方埋头工作。他们没有空调,但至少可以使用一台价值数百万美元的大型机,监管相当宽松。

这三位研究人员都是贝尔实验室的MTS(研究员)。这个头衔表明他们有权找到自己的项目,在听天由命的情况下可以从事对贝尔实验室的母公司AT&T有所帮助的研究。幸好,这份工作也有很大的自由。

这个程序员团队的最后一名成员是Malcolm Douglas McIlroy,名义上负责监管。Doug是MIT的毕业生,自1958年以来一直在贝尔实验室工作。

Thompson、Ritchie、Canaday和McIlroy都很清楚来自MIT的规范存在的缺陷(到这时规范已长达数千页),而且知道他们面临的至少一些挑战归咎于GE645的棘手架构。他们中的四个人、尤其是Thompson渐渐相信,如果他们能从头搞起,可以开发出比Multics更好的操作系统。

合适的环境

对于贝尔实验室的任何一名程序员来说,搞Multics不是全职工作,他们所使用的GE大型机可用于编外项目。Thompson的操作系统就是其中一个编外项目。那年冬天他一直在从事该项目,想出了如何让连接到大型机的每个终端同时打印“HELLO”。但他还没有迈出下一步,Multics项目就被取消了,大型机被人打包搬出了计算机科学部门。

Baker和Davis起初撤掉了Multics项目,没有给McIlroy的团队分派新的任务,这让McIllroy团队的程序员忧心忡忡,他们担心在贝尔实验室的岗位在Multics完蛋后待不长。

然而,这个蓬勃发展的开发团队恰好处于Unix蓬勃发展的合适环境。贝尔实验室不像其他工作场所,其资金源于来自美国几乎所有电话线的收入中的一部分。让一小群程序员留在默里山办公楼顶层不会让公司破产。Thompson及其团队还有一名理想的经理来满足他们的好奇心。管理计算机科学研究部门(成员包括McIlroy手下的程序员和一群数学家)的Sam Morgan不会依赖McIlroy的团队,因为他们突然没有任何特别的工作要做。

Morgan是科班出身的应用数学家,于1967年晋升为部门负责人。在Ken Thompson办公室正对面办公的Brian Kernighan说:“我认为管理不是他偏爱的事情。但他努力做好管理工作。他为人和善,尽量善待每个人。”

Morgan回忆起Unix Oral History项目时说:“这里的管理原则是聘请聪明人,将他们介绍给整个实验室。你为他们给出总方向,表明想要实现哪种目标,然后赋予很大的自由。”因此,Morgan不是给出具体的指导,而是更喜欢运用所谓的“选择性热情”,鼓励某个特定的研究项目,他特别指出:“如果你错误地阻挠或者没有回应后来证明是正确的想法,如果它真是出色的想法,又会回来的。”

Kernighan回忆道:“他让人们做自己的事情,从不试图告诉任何人他们应该搞什么。”当时,贝尔实验室还强调跨学科领域的合作。Kernighan还记得:“每个人都一直开着门,所以如果你遇到问题,旁边又有专家的话,可以过去寻求帮助。”

不过,Thompson及一群喜欢捣鼓的同事当时面临一个小问题:没人有计算机。虽然实验室管理层在这方面没有问题,但McIlroy的程序员没法说服上司给自己配一台。因Multics遭遇滑铁卢而损失惨重,尽管团队一个劲要求购置新计算机,以便可以继续搞操作系统的研发,但Davis不为所动。从实验室管理层的角度来看,Thompson及团队的其余成员似乎只想继续搞Multics项目。

分享计算财富

计算机科学部门与声学和行为研究部门同在顶层,这个庞大得多的部门由电子音乐、语音合成和语音识别领域的先驱Max Mathews领导。该部门的成果明显运用于AT&T的核心业务,它得到的资金明显比紧邻的计算机科学部门充裕得多。

声学部门根本不缺计算机,这种情形似乎激怒了Ritchie和Thompson,他们俩之前就已蔑视公司的官僚机制。实际上,声学部门拥有过多的计算机,其实不需要那么多。该部门的程序变得过于复杂、无法在现有的计算机上高效运行时,他们就向实验室管理层要求新计算机,结果都能如愿以偿。

Max Mathews演奏他在贝尔实验室模拟电子实验室建造的其中一把电子小提琴。(图片来源:维基媒体/美国电声音乐学会)

尽管资金方面存在一定程度的嫉妒,但在六七十年代,声学部门和计算机科学部门进行了相当多的合作,贝尔实验室在计算机技术方面的许多创新实际上来自声学部门。比如在60年代早期,声学研究员Bill Ninke用DEC PDP-7小型机展示了一个基本的图形用户界面。声学部门仍有那台计算机,但他们没有使用它,而是束之高阁。

因此,Davis和Baker取消Multics后不久,在实验室到处不知疲倦地寻找那台PDP-7的Thompson终于找到了它。

在团队其他人的帮助下,Thompson把PDP-7的各个部件装配起来——这台机器如冰箱大小(不算终端), 将它移到了分配给声学部门的机柜,然后将它安装并运行起来。无论如何,他们说服声学部门为这台计算机提供场地,并用该部门的预算支付不常修理的费用。

McIlroy的程序员可以说突然有了一台计算机。因此在1969年夏天,Thompson、Ritchie和Canaday充分讨论了将在PDP-7上运行的文件管理器的基础方面。这绝非易事。批处理计算(一个接一个地运行程序)很少要求计算机能够永久存储信息,许多大型机并没有任何永久存储设备(无论是磁带还是硬盘)与之相连。但是这些程序员喜欢的分时环境需要相连的存储设备。由于多个用户同时连接到同一台计算机,文件管理器必须写得足够好,以防止一个用户的文件被写入、覆盖另一个用户的文件。读取文件时,来自该文件的输出必须发送给打开它的用户。

这是McIlroy的团队愿意接受的挑战。他们已看到了计算的未来,想探索一下。他们知道Multics进入了死胡同,但他们发现了共享开发、共享访问和实时计算带来的前景。20年后,Ritchie说:“我们想要保护的不仅仅是一个良好的编程环境,还有便于同仁合作的体系。”

Brian Kernighan告诉Ars:“我在20世纪60年代后期仍在使用批处理计算,当时普林斯顿大学有一台IBM 7094,贝尔实验室有一台GE 635。但是1966年夏天我在MIT用过CTSS,这预示着交互式计算会有多棒。”一旦Unix启动并运行起来,Kernighan的工作从研究抽象主题转为了编写程序,最终与Ritchie合作编写了《C编程语言》,该书立即成为了编程手册的典范。

VCF East 2019——Brian Kernighan专访Ken Thompson:

从贝尔实验室的自助餐厅到我们的现代手机

虽然贝尔实验室没有盯着研究人员何时上下班,Canaday在那个夏天尽力保持正常工作时间。然而,Thompson和Ritchie要放松一点。

他们俩的时间都很不规律。Thomspon告诉Unix Oral History项目那时他每天工作约27小时,这与别人的24小时工作日不合拍。Ritchie是传统的夜猫子。因此,大多数时候这三位开发人员最早聚在一起就是在午饭时间,有时Canaday打电话给人在家里的Thompson和Ritchie,提醒贝尔实验室自助餐厅何时关门。

在自助餐厅,三位开发人员充分讨论了用于这款新操作系统的文件管理器的基础知识,几乎没注意到工作人员在身边打扫餐厅。他们还在计算机科学部门的办公室开发该系统。 坐在Canaday办公室对面的McIlroy还记得那个夏天他们围在黑板旁边的画面。

最终,他们在概念上多少完善了文件管理系统后,开始实际编写代码。三个人(笔迹都很难看)决定使用实验室的口述服务。其中一人打电话到实验室分机,将整个代码库口述到录音机中。因此,文职人员很快面临这份苦差事:设法将内容转换成用打字机打出的文件。

当然,这项工作完成得不好。出现了各种错误,“inode”成了“eye node”,但输出仍被视为绝对是对他们糟糕笔迹的改进。

1969年8月,Thompson的妻儿来伯克利休三个星期的假,Thompson决定趁这段时间编写汇编程序、文件编辑器和内核来管理PDP-7处理器。这样一来,该小组的文件管理器将变成一个成熟的操作系统。他针对每项任务为自己慷慨地分配了一周的时间。

Thompson多少按计划完成了其任务。到9月份,贝尔实验室的计算机科学部门有了在PDP-7上运行的一款操作系统,但不是Multics。

PDP-7当时没有磁带驱动器或硬盘驱动器——系统通过馈送穿孔纸带来“启动”。由于没有相连的驱动器,他们辛辛苦苦搞出来的文件系统只好等。至少他们有了一个实用的多用户分时环境可以捣鼓。

不过,该团队认为这是一项成就,将该操作系统命名为“UNICS”,全称是UNIplexed信息和计算系统,至少这是官方的解释。

第七版Unix是1979年发布的Unix操作系统的一个重要早期版本。它是贝尔实验室在AT&T将Unix商业化之前发布的最后一个版本。一个有趣的事实是,Dennis Ritchie的用户(“dmr”)和主目录(“/usr/dmr”)依然存在。(图片来源:维基媒体/ Huihermit)

那年11月,Thompson的自我评估(在计算机科学部门内部被戏称为“我很棒的报告”)描述了他开发的这个新操作系统。

到1970年夏天,团队将磁带驱动器连接到PDP-7,这款日益壮大的操作系统还有越来越多的工具可供程序员选择(有几款工具一直延续至今)。但尽管取得了成功,Thompson、 Canaday和Ritchie购买一台新计算机的要求仍遭到实验室管理层的断然拒绝。

直到1971年末,计算机科学部门才有了一台真正现代意义上的计算机。Unix团队在过去一年开发了几个工具,用于自动转换文本文件的格式以便打印。他们这么做是为了为心爱的项目简化说明文档的制作,但他们的工具后来扩散开来,被顶层其他部门的几名研究人员使用。与此同时,法务部准备在“AstroText”这款大型机程序上投放一大笔钱。Unix团队听到风声后意识到稍加努力,就可以将当初供自己使用而编写的工具升级成法务部可以用来准备专利申请的工具。

计算机科学部门鼓动实验室管理层购买一台DEC PDP-11用于制件文件,Max Mathews主动表示愿意用声学部门的预算购置这台计算机。最后管理层做出让步,购置了一台计算机供Unix团队使用。最终关于这个操作系统的消息传播开来,拥有PDP-11的公司和机构开始联系贝尔实验室,打听新操作系统。贝尔实验室免费提供,只要求任何想要一份的人支付邮寄和介质费用。

接下来可以说造就了科技史。到20世纪70年代末,该操作系统的一份副本传到了加州大学伯克利分校;20世纪80年代初,该校的程序员将其改装成可以在PC上运行。他们搞的Unix版本:伯克利软件发行版(BSD)被NeXT的开发人员搞到手,NeXT是Steve Jobs在1985年离开苹果后创办的公司。苹果在1996年收购NeXT时,BSD成了OS X和iOS的前身。

Unix的免费发行在1984年戛然而止,当时美国政府拆分了AT&T,此前一份禁止该公司从贝尔实验室的许多发明中获利的和解协议也到期了。然而,Unix社区已习惯于自由软件,于是一获悉AT&T很快将对Unix的所有副本收费、禁止改变源代码,Richard Stallman及其他人士着手使用免费分发给任何人的软件重新构建Unix——对修改没有任何限制。他们称其项目为“GNU”,全称“GNU不是Unix”。1991年,芬兰赫尔辛基的大学生Linus Torvalds使用几款GNU工具编写了一个可以在PC上运行的操作系统内核。他的软件最终命名为Linux,后在2004年成为Android操作系统的基础。

链接1. 关于UNIX的更多信息

2019年,Unix的几位创始人(比如Dennis Ritchie)已离我们远去。因此对于这篇纪念文章,IT外媒Ars Technical主要依赖普林斯顿大学宏大的Oral History of Unix项目。科学历史学家Michael S. Mahoney早在1989年花了几年查找许多第一手资料,今天那些采访的文字记录依然在网上能找到。虽然我们无法直接联系Ken Thompson,但我们确实从联系像Brian Kernighan这样的贝尔实验室传奇人物中得到了莫大的乐趣。除了为Unix的开发做出贡献外,Kernighan还与Ritchie共同编写了关于C编程语言的第一本书。

链接2. Thompson在贝尔实验室的宠儿

2011年,Ken Thompson因在Unix方面的工作获得了颇负盛名的科学奖项:日本奖(Japan Prize)。在上台领奖发言期间,他分享了互联网之父Vint Cerf会称之为关于贝尔实验室早期阶段“我听说过的最有趣的故事之一”:派驻伯克利分校的贝尔实验室招聘专员表示可以提供从加州到新泽西往来的一大笔差旅费,总算吸引了Thompson参加面试。这可是拿别人的钱享受长假的好机会,Thompson于是着手为自己想出一种“旅行推销员”问题,看看自己在一路上可以拜访多少位朋友,尽管几乎无意接受这份工作。他拜访过的一位朋友住在佛罗里达州的彭萨科拉,生性幽默。

最终,Thompson来到了默里山。令他大吃一惊的是,他发觉贝尔实验室颇合心意,于是接受了这份工作。没过多久,他收到了彭萨科拉的那位朋友寄来的一个盒子,里面居然装有一条小鳄鱼。Thompson没有马上处理掉鳄鱼,而是养了起来,把它放在办公室暖气装置上的玻璃烤盆里,不时给它喂大红肠和热狗,直到有一天逃走。几天后这条鳄鱼又现身了,出现在较低楼层的打字室,气势汹汹。Thompson回忆当时鳄鱼对一位秘书发出嘶嘶声,秘书吓得大声尖叫。最终,Thompson被允许继续留在贝尔实验室,但鳄鱼得走……至少据Thompson声称,这条鳄鱼咬过好几位诺贝尔奖获得者。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190901A0HH8600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券