[书评] UNIX传奇

原发表于豆瓣:https://book.douban.com/review/14273634/

主要介绍了UNIX的发展历程(八卦史)以及孕育它的贝尔实验室的相关回忆。作者Brian W. Kernighan是UNIX的贡献者之一并创建了一些工具(ditroff),但并不是最核心的开发者(Ken Thompson和 Dennis Ritchie),不过作为亲历者之一,能获取到的信息已经是相当全面的了。

UNIX的系统设计在SOSP 73的这篇论文中已经解释的比较清楚。其中层次化的文件系统,I/O作为文件,管道,进程这些设计在当今已经深入人心,以至于看起来无甚新意。同作为分时操作系统,UNIX有不少的设计来自于Multics(作者本身之前就是Multics的开发者),Multics作为从MIT起源的学术项目,试图探索的想法太多,以至于系统设计过为臃肿,作者称之为第二系统效应:

The second-system effect or second-system syndrome is the tendency of small, elegant, and successful systems to be succeeded by over-engineered, bloated systems, due to inflated expectations and overconfidence.1

当然Multics并不觉得他们失败了,也写了篇文章来解释两者之间的瓜葛 https://multicians.org/unix.html

UNIX的取胜在于简洁,用一套(可能是)最小化的抽象实现所需要的功能,这离不开两位创始人优秀的品味和设计理念。另一个书中提到但是论文里没有提及的点是:基于UNIX开发的一系列小工具(awk,sed,sort等等),配合管道的特性能够组合成一系列功能强大同时不失性能的小型软件。这些小工具集的接口设计都颇具考究,符合UNIX的设计哲学,也可以看作UNIX本身的一部分。yacc这类compiler of compiler的工具的出现,也催生了一系列领域特定语言(比如ditroff等等),以实现更加复杂的功能。

书中一个令我印象深刻的点是,管理层并没有批准UNIX团队购买PDP-10来开发操作系统,他们最好找到的方法是跟专利申请团队合作,专利部门使用PDP-11写专利,他们提供相关的软件支持;在合作初见成效以后,专利部门为UNIX团队又买了一台机器供他们开发操作系统。可见即使是在当年财大气粗的贝尔实验室,经费也不是那么好申请的。作者并没有对此感到沮丧:从另一个角度来看,资源紧张有利于促进深思熟虑的提案。另一个启发是,能够很快地交付一个可以用的东西的话,获取对方的信任就更容易。

UNIX出自AT&T旗下贝尔实验室的1127部门。鼎盛时期的贝尔实验室几乎是每个CS从业者心目中的圣地,作者字里行间都流露出对当年工作环境的留恋:绝对的天赋,合理的管理和合作的氛围。贝尔实验室的人才遍及各个领域(从数理到通信电子材料到计算机),由于虹吸效应,也可以从高校得到最好的学生。作者的博士论文课题是图划分(很有意思的是这个问题在五十年之后还有不少人在做),在贝尔实验室实习时与林申合作提出了一些近似算法并顺利毕业,在作者全职加入贝尔实验室之后,逐渐发现自己相比组合优化更喜欢实践类的工作,并开始从事开发工作,在这里是没有人会干预的。vi的作者Bill Joy也曾经在贝尔实验室实习,他在Brian的面前秀了他的文本编辑器之后,Brian表示年轻人天天玩编辑器还想博士毕业?然而在那以后不久Bill就退学创业了(Sun Microsystems)。

受反垄断法影响,AT&T被禁止出售UNIX,因此只能变向向客户授权使用UNIX(价格2万美元,高校免费),并且不提供任何技术支持。这导致各地的UNIX用户联合起来形成了UNIX USER GROUP并定期组织会议和社交活动(现在国内很多高校也有Linux User Group),由于AT&T对UNIX商标的保护,UNIX用户组改名为Usenix,如今操作系统领域的众多知名会议SOSP/OSDI/ATC均属于Usenix旗下。

伯克利基于早期的UNIX授权开发了BSD(最早的TCP/IP支持),而AT&T在意识到了UNIX的商业价值之后申请了专利并与BSD进行了旷日持久的官司。在此期间欧洲的Tanenbaum教授(Modern Operating System一书的作者)开发了教学操作系统Minix,来自芬兰的一个小伙子基于此开发了一个“玩具”操作系统,并发了一封语气友好的邮件到社区:

2022-03-15_14-55-47_screenshot.png

这就也是日后霸占服务器市场的Linux。

AT&T和BSD在这场官司中两败俱伤,BSD失去了抢占市场的先机,其后的FreeBSD始终不温不火;而AT&T的商业化始终不算成功,UNIX本身在开源时代缺乏活力,更多的作为一个概念存在(各种类Unix系统,例如mac,甚至Linux)。贝尔实验室的最后的努力Plan 9被定位为一个研究型项目,由于其与unix的兼容性等等问题,并未走向市场,其中设计的utf-8作为重要遗产流传至今。

AT&T经过多次拆分之后荣光不再,贝尔实验室的1127中心也在2005年宣布解散,这里有一份院友名单。

作者最后总结了UNIX和贝尔实验室当初成功的原因:

Unix:

  1. 分层文件系统(包括把外设作为抽象的文件)
  2. 相应的高级程序语言(面向用户和操作系统本身,比如C)
  3. 程序作为基本构建单元进行编程(shell)
  4. 管道(简易的进程间交互)
  5. 各种小工具及其组合(例如之前提到的awk, sed, cat, sort …)
  6. 用普通文本而非格式化的数据结构作为文件的基本组成(可能损失效率,但足够简洁)
  7. compiler-of-compiler,以及相应的dsl的发展

贝尔实验室:

  1. 稳定的环境(组织不会有大变动,不会频繁reorg)
  2. 经费保障(金主要财大气粗,肯花钱,就像现在的Deepmind)
  3. 富含难题的环境(做每个时代最有挑战性的问题,当然这取决于公司的业务)
  4. 人才(1127每年只招一两个人,不求通才,但是需要专精于自己的方向;鼓励高校与企业的双向流动,学术休假制度)
  5. 技术管理(manager需要懂你做的东西,以便与其他组沟通)
  6. 协作环境(这一点的前提是人才)
  7. 乐趣(宽松的氛围,扁平化组织,不官僚气)

贝尔实验室的衰落也许是历史的必然,随着成本的降低,通信不再是最赚钱的业务,同时受到反垄断法的打压AT&T也不能合法地从事软件销售。在此期间Microsoft扛下了桌面机操作系统半壁江山,而其后Google & Amazon等公司则赢下了互联网时代,这几家也都成立了各自的“类贝尔实验室”的研究机构,不过没有任何一个能接近当年贝尔实验室的高度:再难有计算机科学刚刚兴起的那段“创新黄金期”,且公司各自面临着未来的生存危机,研究院必须或多或少为公司的业务服务(当然名面上还是要说我们允许你们做任何事情,至于给不给资源就是另一回事了)。前有贝尔实验室和微软硅谷研究院的先例,谁都不会再认为公司研究院是鉄饭碗——不过是母公司到达垄断地位获得巨额利润之后之后给予的一点小恩小惠罢了)。当然这种“招最好的人,巨额投资不计回报的模式”近年在Deepmind身上取得了成功,其得以延续下去的前提是资本对AI依然抱有信心。

其余几个值得思考的问题:

作者由AT&T与BSD的官司联想到甲骨文和Google针对API的专利——专利的界限是什么?我个人一直比较好奇对于算法/指令集/系统的专利侵权是如何判定,如果完全由一套类似于查重的规则定义,那么有无数的办法可以绕开;如果从语义上的等价性判定,则彻底封死了创新的可能;如果由相关专业人士讨论,那么则陷入了话语权之争。

其二,UNIX团队这样的先驱者已经做好了大量的基础架构,以至于后人只需要在更高的层级进行开发,如果真的有一天某个群体遭遇技术封锁,能多大程度上自底向上地重新构建起软硬件生态(类似的问题:如果世界上的编译器全都消失了,如何尽快恢复)?

Footnotes:

Author: expye(Zihao YE)

Email: expye@outlook.com

Date: 2022-03-13 Sun 00:00

Last modified: 2022-04-26 Tue 23:33

Licensed under CC BY-NC 4.0