10.1.3 可移植的UNIX

既然UNIX是用C编写的,将它移动或者移植(正式说法)到一台新机器上比早先的时候要容易多了。移植首先需要为新机器写一个C编译器,然后需要为新机器的I/O设备,如显示器、打印机、磁盘等编写设备驱动。虽然驱动的代码是用C写的,但由于没有两个磁盘按照同样的方式工作,它不能被移植到另一台机器,并在那台机器上编译运行。最终,一小部分依赖于机器的代码,如中断处理或内存管理程序,必须重写,通常使用汇编语言。

从PDP-11向外的第一次移植是到Interdata 8/32小型机上。这次实践显示出UNIX在设计时暗含了一大批关于系统运行机器的假定,例如假定整型的大小为16位,指针的大小也是16位(暗示程序最大容量为64KB),还有机器刚好有三个寄存器存放重要的变量。这些假定没有一个与Interdata机器的情况相符,因此整理修改UNIX需要大量的工作。

另一个问题来自Ritchie的编译器。尽管它速度快,能够产生高质量的目标代码,这些代码只是基于PDP-11机器。有别于针对Interdata机器写一个新编译器的通常做法,Bell实验室的Steve Johnson设计并实现了可移植的C编译器,只需要适量的修改工作就能够为任何设计合理的机器生成目标代码。多年以来,除了PDP-11以外几乎所有机器的C编译器都是基于Johnson的编译器,因此Johnson的工作极大地促进了UNIX在新计算机上的普及。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

由于所有的开发工作都必须在惟一可用的UNIX机器PDP-11上进行,这台机器正好在Bell实验室的第五层,而Interdata在第一层,因此最初向Interdata机器的移植进度缓慢。生成一个新版本意味着在五楼编译,然后把一个磁带搬到一楼去检查这个版本是否能用。在搬了几个月的磁带后,有人提出:“要知道我们是一家电话公司,为什么我们不把两台机器用电线连接起来?”这样UNIX网络诞生了。在移植到Interdata之后,UNIX又移植到VAX和其他计算机上。

在AT&T于1984年被美国政府拆分后,它获得了设立计算机子公司的法律许可,并很快就这样做了。不久,AT&T发布了第一个商业化的UNIX产品——System III。它并没有被很好地接受,因此在一年之后就被一个改进的版本System V取代。关于System IV发生了什么是计算机科学史上最大的未解之谜之一。最初的System V很快就被System V的第2版,第3版,接着是第4版取代,每一个新版本都更加庞大和复杂。在这个过程中,UNIX系统背后的初始思想,即一个简单、精致的系统,逐渐地消失了。虽然Ritchie与Thompson的小组之后开发了UNIX的第8、第9与第10版,由于AT&T把所有的商业力量都投入到推广System V中,它们并没有得到广泛的传播。然而,UNIX的第8、第9与第10版的部分思想被最终包含在System V中。AT&T最后决定,它毕竟是一家电话公司而不是一家计算机公司,因此把UNIX的生意在1993年卖给了Novell。Novell随后在1995年把它又卖给了Santa Cruz Operation。那时候谁拥有UNIX的生意已经无关紧要了,因为所有主要的计算机公司都已经拥有了其许可证。