1月8日,世界上最大的消费类电子产品展会CES2019 在拉斯维加斯国际会展中心开幕。当天一个不起眼的消息是,美国发明家名人堂(National Inventors Hall of Fame)在展会上发布了2019年的入选名单。
贝尔实验室的两位计算机科学家Dennis Ritchie 和 Ken Thompson入选了名人堂。
众所周知,他们发明了计算机历史上非常重要的UNIX操作系统和C语言,没用过这两者都不好意思说自己学过计算机。而今年正好是UNIX发明50周年。
时间回到1969年,两位大牛还都是刚加入贝尔实验室计算机部门不久的小字辈,如果没有UNIX的横空出世,那一年本来是非常郁闷的一年。
60年代还是大型计算机盛行的年代,主机非常昂贵和稀有,而且很不好用。1964年美国国防部委托MIT(麻省理工学院)、贝尔实验室以及GE(通用电气)一起开发一种叫做MULTICS(MULTiplexed Information and Computing System,多路信息与计算系统)的分时操作系统,能同时支持1000台终端,支持300名用户同时使用。
MULTICS研发团队
那时候还没有软件工程的概念,大家奋战了4年,还是达不到预期的性能。
1969年,贝尔实验室决定退出。MULTICS虽然还是装在GE645计算机上使用,但事实上遭到了彻底的失败,还被嘲笑为:Many Unnecessarily Large Table In
Core
Sinultaneously。GE在一年之后也完全淡出大型机市场。
贝尔实验室从失败的MULTICS操作系统项目中撤出后,计算机部门也经历了重组,计算中心和计算机研究部门分开。Dennis和Ken是最后一批留在MULTICS项目的成员。GE即将撤回他们的645/635型计算机,计算中心提了好几个买新机器和继续开发操作系统的预算提案,都被领导拒了。其实领导们是不打算继续维持一个庞大的计算中心。
Dennis和Ken那段时间挺郁闷的,也没多少事情,就花时间捣鼓Ken的太空旅行(Space Travel)的小游戏.在计算机还很原始的年代,程序员们就开始琢磨怎么玩游戏了,此时外界还以为这东西只能计算呢。
Ken原来在开发MULTICS的时候编写了这个小游戏,当然不完全是为了玩,也是展示操作系统的应用。后来他把游戏移植到了运行GECOS操作系统的GE635型计算机。不过这个大型机器费用很贵,分时运行一次要花75美元,而且显示器和输入系统也很不好用。Ken向领导申请买一台PDP-10,要花12万美元,被拒了。后来他跟同事聊天,得知隔壁部门有台破PDP-7小型机没人用,他就要了过来,找了几个小伙伴,包括Dennis,开始移植他的游戏。
PDP-7
这个工作今天听着很简单,可是他们是从裸机开始,用汇编语言写程序,然后写在穿孔的纸带上在PDP7上运行。
游戏移植后在PDP7上性能不行,他们决定自己重写个文件系统。后来又加入了进程管理,shell和一些实用工具,一个只能支持2个用户使用的操作系统诞生了。
吸取了Multics设计复杂而导致失败的教训,Dennis将Unix的设计原则定为"保持简单和直接"(Keep it simple stupid),也就是后来著名的KISS原则。
为了做到这一点,Unix由许多小程序组成,每个小程序只能完成一个功能,任何复杂的操作都必须分解成一些基本步骤,由这些小程序逐一完成,再组合起来得到最终结果。今天流行的微服务(Micro service)的思想其实是一脉相承的。
因为和Multics的复杂思想是反着来的,组员Brian Kernighan开玩笑地给系统取名为“UNICS”(UNiplexed Information and Computing System),后来取谐音便是“UNIX”。
到1969年圣诞节UNIX的第一版已经可以运行了。这时候领导看到了成果,决定支持他们购买一台新的PDP11,于是他们把UNIX移植到了PDP11上,并能够真正为客户提供服务。
Ken and Dennis (站着) 在PDP-11前工作,1972年
UNIX一开始在公司内部流传,后来传播到整个计算机界,到80年代居然成为了最主流的操作系统,运行在数以万计的各种计算机上。直到今天各种流行的操作系统,从计算机到智能手机,都有UNIX的基因。
为了提高UNIX的可移植性,Dennis在1973年开发了著名的C语言,因为KISS的原则,也成为最流行的计算机语言,直到今天还有旺盛的生命力,在此不详述了。
两人后来成为了传奇,拿奖拿到手软:
1974年 ACM 杰出论文奖;
1982年 IEEE 的 Emmanuel Piore 奖;
1983年 ACM 图灵奖;
1983年 ACM 软件系统奖;
1989年 NEC 的 C&C 基金奖;
1990年 IEEE 的汉明奖。
1999年 美国国家技术奖。
......
直到今天进了名人堂。
Dennis是个很简单的人,子承父业,1967年进了贝尔实验室,一直工作到退休,从AT&T时代到朗讯到ALU干了整整40年。他一生独身,2011年一个人在家中去世。
Ken Thompson在贝尔实验室工作到2000年退休,2006年加入了Google,继续编程。
Ken有个深藏了十几年的秘密。他那台PDP11一直放在贝尔实验室给大家用,但大家发现他总能获得最高权限。专家们仔细排查了UNIX代码也没发现后门,直到1983年,Ken在拿图灵奖发表获奖感言时才吐露了真相,原来他在C语言编译器里留了后门。
在图灵奖演讲上,他提出了一个深刻的问题:看到了软件的源码,就意味着没有后门吗?编译器,连接器,甚至硬件,是不是可信的?还是我们只能信任写软件的人?