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

微信扫一扫,分享到朋友圈

驱动 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 团队:集合!

  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编程语言》,该书立即成为了编程手册的典范。

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

  虽然贝尔实验室没有盯着研究人员何时上下班,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://arstechnica.com/gadgets/2019/08/unix-at-50-it-starts-with-a-mainframe-a-gator-and-three-dedicated-researchers/

微信扫一扫,分享到朋友圈

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

反垄断法三部配套规章落地 互联网等新业态纳入范围

上一篇

PHP 7.1.32、7.2.22 和 7.3.9 版本更新

下一篇

你也可能喜欢

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

长按储存图像,分享给朋友