26岁你在做什么?他创造了UNIX和B语言

肯尼斯·蓝·汤普逊(Kenneth Lane Thompson)是美国的计算机科学学者和工程师,设计和实现了UNIX操作系统,还创造了B语言——C语言的前身。同时,他也是Plan 9操作系统的创造者和开发者之一。

肯·汤普逊,图源:维基百科

酷爱编程,也热爱游戏

1943年,肯·汤普逊在美国的新奥尔良出生。因为个人对于逻辑的痴迷,肯·汤普逊很轻松地就学会了编程。他17岁就读加州大学伯克利分校,主修电气工程。他的导师是美国知名的数学家、计算机科学家埃尔温·伯利坎普。

1966年,毕业后的肯·汤普逊加入贝尔实验室,参与了Multics系统项目。好景不长,由于开发周期过长、成本高、进度缓慢等种种原因,1969年贝尔实验室退出了开发计划,所以就导致肯·汤普逊获得了一段清闲得时光。

这段时间里,他还编写了一个名为“Space Travel”的游戏,用来打发生活里的空闲时间。在“Space Travel”游戏中,玩家可以模拟操作太空船在代表太阳系的二维画面内进行飞行,或者在不同的行星或卫星表面着陆。太空船会受到万有引力影响。

然而, Space Travel后来没有走出贝尔实验室,没有对未来的电子游戏产业造成影响,但却成就历史上的一段传奇。

为玩游戏创造UNIX系统

在贝尔实验室退出开发计划之后,肯·汤普逊的妻子带着孩子一同回到了娘家度假,因此他获得了一段意外的独处假期。凑巧的是,肯·汤普逊在实验室里发现了一台闲置的 PDP-7 机器,于是他决定在缺少大型机的情况下,把自己已经编写的“Space Travel”游戏移植到这台“老爷机”上,然后开始着手开发一套全新的操作系统。

游戏对肯·汤普逊的驱动力很强,接下来的一周,他从内核、文件系统、编辑器再到编译程序,一步步编写,竟然在一个月内完成了一套操作系统的内核。这套系统可以在PDP-7机器之上运行,肯·汤普森将其命名为 UNiplexed Information and Computing System,缩写为 UNICS 。这就是我们熟悉的UNIX操作系统的最早版本。

在使用新系统的过程中,肯·汤普逊发现即使自己把系统内核写出来了,游戏还是无法玩起来。因为“老爷机”的内存有限,游戏的文件系统操作非常地卡顿。而这种卡顿就像我们现在遇到网络状况不好的情况下会出现延迟,非常影响体验。

一番研究后,肯·汤普逊发现问题主要是在操作游戏的文件时会消耗许多内存,于是高效率的他在一周内完成了文件系统,并且在一个月内陆续实现了编辑器、编译程序等等。

游戏制作完成后,肯·汤普逊兴冲冲地带着它来到了贝尔实验室,然而同事们对游戏本身一点也不感冒,反而对游戏的操作系统非常感兴趣。再后来,大家都发现肯·汤普逊这个系统十分好用,自此这个操作系统逐渐在实验室里流行起来。

UNIX 首次运行在 DEC PDP-7 上,图源:维基百科

随后,肯·汤普逊和丹尼斯·里奇带领一些贝尔实验室的成员在PDP-7上面进行开发工作,实现了文件系统、进程、设备文件、命令行解释器和一些小的工具程序等。

肯·汤普森与丹尼斯·里奇(右),图源:维基百科

1970年,在布莱恩·柯林汉的建议下,这个系统命名为“UNIX”,与“Multics”名字相对应。UNIX系统正式的诞生了!

三年后,UNIX出现了两大创新。第一个创新是一种基于B语言的“全新”程序设计语言:C语言。C语言本身就是 Martin Richards的基本组合程序设计语言的“简化”版。另一个创新是管道的概念。

管道的概念并不复杂:它是一种标准方法,可以把一个程序的输出连接到另一个程序的输入。

Dartmouth分时系统拥有通信文件( communication file),这种文件提前用到了管道的概念,但其用法太过于具体。最终,经过一番疯狂的重写工作,肯·汤普逊实现了管道的概念,并一夜之间更新了所有的UNIX程序。在第二天早上就有了若干单行命令。

这是UNIX真正开始发挥威力的时刻,这种威力不是来自于单个程序,而是源于程序之间的关系。UNIX现在有了属于自己的语言和一套自己的哲学思想:

· 程序只做一件事并把这件事做好;

· 写出的程序要能放在一起工作;

· 程序要以处理文本流作为统一的接口。

一路开挂的编程之路

在完成UNIX系统开发的基本工作之后,肯·汤普逊觉得用汇编语言编写Unix显得很笨拙,在编制数据结构时浪费了大量的时间,而且系统难以调试,理解起来也很困难。

贝尔实验室的其他研究员曾说:“PDP-7只带了一个汇编器和一个加载器。一次只能有一个用户使用这台计算机……环境很原始,很快就有了单用户UNIX系统的一些影子……汇编器和基本的操作系统内核都是在GECOS上为PDP-7编写和交叉汇编的。”最初的UNIX是个单用户系统,明显是“简化版的Multics”。

肯·汤普逊想利用高级语言的一些优点,但又不想像PL/I那样效率低下,也不想碰见在Multics中曾遇到过的复杂问题。在用Fortran进行了一番简短而又不成功的尝试之后,肯创建了B语言。他把用于研究的语言BCPL作了简化,使B的解释器能常驻于PDP-7只有8KB大小的内存中。

1973年10月,在IBM举办的操作系统原理专题研讨会上,还不太为外界所熟知的UNIX被肯·汤普逊和丹尼斯·里奇在世人面前首次提及。当他俩在会上宣读了演讲稿并且展示UNIX之后,轰动了整个大会的会场。

在这之后,随着UNIX的需求量日益增加,肯·汤普逊决定将UNIX近一步改写,以便可以轻松地移植到各异的硬件系统里。由于UNIX的源代码中不少是用汇编完成的,不具备良好的移植条件,恰好里奇在1973年在B语言的基础上开发出来了C语言。C语言灵活多变,更为高效简洁,正是UNIX移植的时候需要的救命利器,于是旧版的UNIX与C语言完美结合,产生了新的可移植UNIX系统。

1980 年代, 肯·汤普逊投身于Plan 9 (分布式多用户和图形化的操作系统)的开发。并设计实现了UTF-8的编码方案,极大地便利了这之后的互联网字符编码,肯·汤普逊为计划的设计和实施发挥了重要作用。来自Research UNIX的较新版本的一些程序,例如mk和rc也加入到Plan 9系统中。

因为设计了UNIX操作系统,它的效率、广度、力量和风格指导了一代在小型计算机进行开发,所以1980年,汤普逊当选了美国国家工程院院士。

1983年,汤普逊和里奇共同获得了图灵奖。而获奖的理由是“发展了通用操作系统的理论,特别是实现了UNIX操作系统”。他的演讲以《Reflections on Trusting Trust》为题,着重提到的向编译器植入的后门后来被人们称为“Thompson hack”,对计算机安全领域产生了重要影响。

因为在UNIX系统和C语言方面做出的贡献,汤普逊和里奇二人在1990年共同获得了IEEE汉明奖,在1997年获得了计算机历史博物馆研究员奖,又在1999年4月27日获得了由美国总统比尔·克林顿颁发的美国国家技术与创新奖章。同年,电气电子工程师学会向汤普逊颁发了第一个金井务奖。

2000年下半年,汤普逊离开贝尔实验室,进入美国的Entrisphere公司工作。

2006年,肯·汤普逊加入Google公司。之后他与罗勃·派克和罗伯特·格瑞史莫(Robert Griesemer)二人共同设计了Go语言。

2019年10月,开发员 Leah Neukirchen 宣称肯·汤普逊基于 BSD 的密码终于被破解。BSD 是 UNIX 的早期版本之一,当时很多计算机科学家先锋都在使用。而距离BSD密码的诞生已经过去了39年。这足以可见肯·汤普逊所设计的UNIX操作系统是多么地坚不可摧。

Leah Neukirchen 宣称基于 BSD 的密码被破解

▼▼▼

UNIX/Linux 系统管理技术手册(第5版)

作者: [美]埃薇•内梅特(Evi Nemeth) ,加思•斯奈德(Garth Snyder) ,特伦特•R.海恩(Trent R.Hein) ,本•惠利( Ben Whaley),丹•麦金(Dan Mackin)等

译者: 门佳

本书延续了《UNIX系统管理技术手册》前几版的讲解风格,以当前主流的Linux发行版本为例,把Linux系统管理技术分为4个部分分别进行介绍。

第一部分(基础管理)对UNIX和Linux系统进行了简介,涵盖了运行单机系统所需的大部分知识和技术。第二部分(连网)讲解了UNIX系统上使用的协议和服务器的相关技术。第三部分(存储)讲解了如何解决数据存储和管理的问题。第四部分(运维)介绍了系统管理员在工作中经常碰到的问题。本书适用范围广泛,无论是Linux的初学者还是具有丰富经验的Linux专业技术人员都能从本书中获益。