伯克利Unix 第二部分
1978年早期,Richard Fateman教授开始寻找一个有更大内存寻址空间的机器,这样就能在PDP-10上继续做他的Macsyma。Fateman解释说:
MIT有一个MAC项目,它的程序叫做MACSYMA。为了和VAX只最初只能PDP-10上运行的那个同名项目区分开,我就叫它VAX/Macsyma,有时也会说成vaxima。MIT后来将Macsyma卖了出去,从它的名字也可以看出来,它被卖给了Symbolics公司。接下来所有的后续版本都不被Symbolics所控制,也不被再接下来的所有者马萨诸塞州阿灵顿的Macsyma公司控制,这些版本被称为和Macsyma不一样的名字:
DOE-Macsyma —— (能源部的版本) Paramax —— (Paradigm Associates) Maxims —— (德克萨斯州立大学Bill Schelter移植的通用Lisp版本) Aljabr —— (Jim O’Dell开发的Macintosh版本)
所有这些分支版本在本质上都和vaxima差不多,虽然它们的支持者都声称自己选择了最好的。
不管怎么说,新的DEC VAX 11/780机器看起来符合Fateman的需求,而且Fateman关于NSF的提议和其他13位教员的建议一起得到了部门基金。最初VAX运行的是DEC的VMS操作系统。
但是部门开始变得习惯使用Unix,并且Fabry得到了一份Unix 32V移植到VAX的拷贝,这是霍姆德尔贝尔实验室的John Reiser和Tom London开发的。移植项目的主管是Charlie Roberts,这些是他回忆的那段故事:
77年到78年DEC提前宣布了VAX。Dennis和Ken还有Steve和DEC公司变得相当疏远。他们觉得自己的工作已经安装在很多的机器上,DEC仍然拒绝支持Unix并且继续开发VMS。所以当DEC提供给他们一台VAX的时候,他们拒绝了(Doug McIlroy告诉我他们拒绝的另一个原因是“VAX使用让人非常厌烦的复杂指令集,这于Ken和Dennis的价值观非常不一致”)。之后Dennis和Steve为移植到Interdata上工作,Steve称它为“Intersnial”。
因此DEC去霍姆德尔找到了我们。显然我们是后备人选。Tom London和John Reiser对此很有兴趣,Ken Swanson也是,我们在78年早期拿到了VAX机器。我不做任何技术工作。实际上,我花费了大量的时间和精力让管理层同意我们做这个。你看,这不是研究。最后管理层给了我们一点时间。大概用了3个月的时间我的小组将第7版Unix一直到了VAX。我们在1月得到机器,然后在4月让它运行起来,8月的时候它就可以真正的工作了。接下来的事情大家都知道了,大约有6个大学给我打了电话——布朗大学,加州大学,伯克利大学,滑铁卢大学,其他的我已经记不起来了。所以我为了专利和授权去见Roy Lipton和Al Arms,经过不断地反复,他们决定我们可以将给大学作为研究途径使用,Al将会和大学签订一份“特别研究协议”。
我在一些会议上见了Fabry,我那时去伯克利和Ferrari,Emmannuel Blum和Bill Joy做论文和演讲。所以在贝尔实验室11区管理部门的祝福下,我将32V给了伯克利,时间是1978年11月。
批准了Roberts合作的管理层是C.C. Cutler,R.W. Lucky,和W.S. Boyle。1127管理层——Doug McIlroy,Sam Morgan,以及Bob Prim也批准了。
1979年32V成为了3BSD。Kirk McKusick向Peter Collinson描述了故事情节:
当Ken离开这里回贝尔实验室去的时候,他留下了一份Unix系统。Bill和Chuck Hale接管了这个系统的开发。那时候他们做的是像升级到第6版和集成实验室的“50 fixes”纸带之类的事情。后来他们又将它升级到第7版。
Bill又在实用工具方面做了很多工作。他厌倦了shll,将John Mashey在PWD中关于shell的一些点子添加到csh中。Bill也对ed很有些意见,所以决定开发一个扩展的面向行的编辑器ex。然后我们将我们的几个终端从没有鼠标定位的ADM-3s升级到具备此功能的ADM-3a。只有Bill和那个房间里的两个人真的喜欢用他们。他开始了vi的开发,因此他总是有理由将正在使用新终端的人赶走。最初的termcp也被发明出来,这样就可以在不同的ADM终端上运行一样的编辑器。
关于vi为什么没有多窗口模式还有一个寓言故事。Bill编写调试代码终于使它勉强可以工作,但这时候突然有一个磁盘坏掉了。这个有窗口版本的磁盘没有被即时备份,备份好的只是没有窗口的代码,他也不想再去从写开发一遍。
最初的伯克利软件发行版,叫做BSD而不是1BSD,它包含了Pascal系统和ex。Bill除了是一个天才的程序员,还是一个天才的市场销售。他做了很多通俗易懂的演讲告诉人们这个东西是多么的棒,Pascal解释器是如和做到只花费C语言编译器十分之一的时间,并且它还有错误纠正功能,所以它更时候学生因为可以给他们更多的额支持。他卖出了大概35份BSD纸带,每份定价是“只是成本价”的35美元(原价50美金)。BSD发行版的关键是Bill,他是黑客,是电话客服,是纸带绕带员,他将地址写在标签上,将它们寄出去,他做了所有的事情。
接下来就是2BSD,它在大约一年以后出现,包含了Pascal系统,ex,vi,和csh。他单枪匹马做了这些并且在那年卖出了100份...
2BSD将是基于V7的,因为我们是在1978年拿到了预发布的UNIX/32V。V7由此一直到了VAX。它没有分页和其他什么特点,它只是一个在VAX上运行的基于交换的传统UNIX。我们有一个编号非常小的VAX-11/780,一个个位数的编号。
Bill要做的第一件事就是让32V在VAX上跑起来,这需要你的机器使用和发行版纸带有完全相同的硬件,那时还没有auto-configuration的概念。你不得不做到硬件和他们完全一致,不能是丝毫的差异。正好我们有两盘磁盘,正好它们都是RP06s。
下一件要做的事情是移植使用工具。我曾经为Pascal解释器做过一些事情,添加一些新的功能和修改一些不太对的地方。Bill对我说“你为什么不把解释器移植过来?”。
Pascal解释器是用汇编写的,“移植它非常简单,它只有很少的操作步骤并且汇编语言看起来几乎都一样”。他做了一点小例子向我证明这事做起来很简单。我花了一个月的时间做移植工作,最后我放弃了汇编,用C语言重写了解释器。
还有一个问题,VAX只有2MB的内存...这台机器的硬件有个巨大的进步,你可以在它上面使用虚拟内存。Babaoglu和Domenico Ferrari一起为VAX设计了一个分页系统。Bill在听说了一些他们的工作后就帮他将这个功能运行起来。经过78年12月到79年七月的假期,他们让VAX-11/780实现了独立,这样它就可以启动不同的系统了。你登陆进去后,有一个提示语告诉你“虚拟VAX Unix”,然后系统要卡顿一会,你可以先做些别的工作。经过5分钟的等待,系统会提示它现在是32V。
它起初并不是很稳定,但是最后他们让它变得很健壮,它成了一个基础系统。
Bill决定停止做只有使用工具的发行版,转而去做包完善的系统。他创建了3BSD发行版,这是一个完善的系统,带有基于虚拟内存的内核和移植过来的使用工具。这也是一个完善的可启动系统,在纸带的起始部分是一个启动块,你可以把纸带放在原始的硬件上就可以启动。他还为这个发行版做了其他所有的系统。
那时我开始将越来越多的系统花费在内核问题上。我记得有一件事情让我参与进来。Bill试着调试虚拟内存系统,他将这个巨大的程序打印出来,足足有一英尺半那么厚。他把代码搬过来放在桌上,以他特有的热情开始翻看代码。他一遍又一遍的翻看,“在这页有一个bug导致了竞争状态,我给找出问题的人20美元”。
我从来没有呀看过内核的源代码,但是我上过操作系统课程,所以我知道竞争状态的出现是因为你在某些地方使用了上下文切换。我看着这些写的很标准的代码,在在这页上一共有两个子例程的调用。我指着这两个调用问是不是其中的一个做了上下文切换。“是的!就是它”,他跑出房间,留下一片片飞在空中的纸张。和Bill在一个办公室工作是一件困难的事情,你很难不被他的热情所感染。
3BSD系统发布出去后受到了很多关注,因为不少大学都购买了VAX机器。你如果想要一个分页系统,那么只有3BSD和VMS两个选择。很多人既想用Unix又想要分页的功能,所以3BSD在VAX早期的购买者中非常流行。
关于这个还有个小故事,McKusick告诉我:
债务被拖欠了一年又一年。Bill去了Sun公司,他成了一个百万富翁。四五年前,当UNIX国际组织成立的时候,他们试着做一些宣传,于是去了一个很有影响力的新闻发布会UniForum宣布了他们的存在(1989年1月在旧金山)。他们决定向Unix商业中的杰出人物们颁发一个产业奖项,记者们就可以看到这些产业明星。他们提名了几个人——毫无悬念的包含Dennis和Bill,我也被包含进名单。在他们向我们讨论这件事之前,我们赚的很少。我告诉他们我是如何参与到Unix的故事,他们都大笑起来。但是在有像Dennis Ritchie这样重要人员在场的会议上,他们做了什么?他们直接讲了那个故事。那时Bill正在台上拿着他的奖牌。他们说:“Kirk说他从来没有付钱”。就在我走到Bill Joy后面的时候,他从口袋里掏出50美分,摇晃着他们说‘这就是你想要的二十美元!’。后来我问他“Bill,他们之前告诉过你会发生这些事情吗”,他说“当然没有,如果他们警告过我,那我就会准备20美元”。
Keith Bostic通过NET2的发布将伯克利Unix开发的历史描绘在一起,这是他的大纲:
a) 早期在伯克利运行的系统是Unix第5版,第6版和第7版,这些都是来自贝尔实验室。这些系统在伯克利被计算机中心和EECS部门不停的修改。这些修改包括:
b) 伯克利Pascal——大约1977年伯克利为在PDP-11上运行的第6版Unix写的软件
c) 2BSD——1978年开始伯克利为第6版和第7版发行版写的软件。新的软件和修改一次又一次的添加进来,包含mail,more,csh,ex,以及vi,Pascal。2BSD使用了第6版和第7版不同的授权。
d) 3BSD,1979年晚期——这是第一个针对VAX的伯克利发行版。它基于32V,带有伯克利使用工具和来自2BSD的修改,加上Bill Joy和几个毕业上完成的一个虚拟内存系统。
从1969年开始到第6版Unix这段时间只有一个解释器,就是Shell。73年4月18日出版的入门手册一共只有三页。随着Bournes的Shell集成到第7版Unix和Joy的C Shell集成到2BSD,程序员们有了一个选择。1980年中期AT&T贝尔实验室的David Korn发明了Korn shell,给了程序员所期望的更多选择。1986年它被包含在“实验工具箱”中,1989年正式成为SVR4发行版的一部分(1988年911月16日发布)。通常Bournes shell向上兼容Korn shell。还有很多其他的shell,但是sh,csh和ksh是最常用的。
Unix可以运行在不止一台机器上的特点引起了美国国防高级项目局(DARPA)的主意。DARPA的几个合作单位使用了不同硬件和各种操作系统,而且软件都是互相不兼容的,做不到软件互换。DARPA想要一个统一的环境,所以会有很多的交换。McKusick告诉我“很显然他们会选择VAX,接下来的问题是他们的操作系统会选择VMS还是Unix”。他告诉Collinson:
Bill设法说服DARPA Unix才是更好的选择,因为它可以移植到其他系统上去,这样他们就不会被绑定在VAX上面。Bob Fabry在Bill从技术上说服的同时也在政治方面说服他们。
他们设法和DARPA签订一个大订单,将Unix进行性能增强并添加一些DARPA所需要的基础功能。他们保证这些新功能会马上做好。于是4BSD在DARPA的订单到达伯克利之后的两个月就发布了...这时的时间是1980年晚期。
据Collinson所说,“4BSD之所以能这么流行,是因为VAX-11/750推出后,4BSD是唯一能在它上面运行的Unix系统”。McKusick继续说:
DEC的Armando Stettner设法安排Bill飞到美纳德去看一下刚刚建造好还没有对外公布的750s,它们被命名为Comet。Bill和Armando一起写代码确保4BSD可以在这些Comet上运行,所以虽然我们没有一台机器,但是4BSD在发布的时候就以可以在750s上运行而声名远播。实际上后来750成了部门工作的主力机型。因为你用大概15万美元的价格就能买到一台。
4.1BSD是性能巅峰之作,在某种意义上4.0BSD也很好但是4.1针对750做了针对性的优化。4.1BSD系统被贝尔实验室拿回来成为第8版Unix,然后是第9版和第10版。也是它让我们被大家所抱怨,因为Rob Pike加上了cat -v。1983年6月在多伦多举办的USENIX会议上,Pike谈论了“像癌症一样扩散”和“cat -v是因为考虑到伤害”,这让他收到大家的抱怨。在过去的10年,内核的膨胀越来越严重:第7版内核的大小是40KB,Ritchie告诉我第10版内核的大小差不多是150KB。Armando Stettner向我指出如果要在4.1BSD和第7版Unix间做选择,没人想回到第7版。
DARPA给的资金到位了,这意味着Fabry开始像给员工一样开始为Bill提供薪水。还有其他一些职位,接听电话,制作纸带,签订协议。Bill终于可以专心做他想做的事情了。项目扩张是的Bill可以雇佣技术人员,于是他找来了Michael Toy和后来的Sam Leffler。
4.1和4.2BSD之间的工作是DARPA加入进来的真正原因,他们想要一些重要的增强,像可以使用超过磁盘5%带宽的文件系统。他们想要一个基于TCP/IP的网络。
最初原型是BBN做出来的,他们将它交给了伯克利。它只能在750上运行,速度上限56KB/s,但CPU却被占用了100%。Bill一拿到它马上就开始修改它的代码。56KB的速度对BBN来说够用了,因为他们主干网的速度就是56KB/s,但是在互联网上这就太慢了。Bill删掉代码重新编写使它的速度达到700KB/s。
这引起了BBN的注意,因为他们给出的是“完成”版本,但是Bill却不接受它。之后几年关于谁的版本应该加入的系统中区有不少的冲突,伯克利版最终胜出。Ritchie告诉我当他在DARPA委员会时,这是一个很重要的问题。“每隔半年我们都会说,使用BBN的版本。这时候Bill就会说不”。
4.2BSD开始支持第三方组件,这是一个新的虚拟内存系统,允许共享读写段数据和其他一些事情。
系统中还有一些东西不是因为Bill觉得他们应该在里面,而是因为掌握权力的委员会要求这样。通过messages传送文件描述符就是其中一个例子。
随着VAX的出现伯克利还发生了一些事情:成为sendmail的计算机邮件。这是那时的一个毕业生Eric Allman写的,这是他的故事。
Eric Schmidt当时正在工作于BerkNet,BerkNet通过一条9600波特率的tty线连接,它是一个批处理系统,就像uucp。那段时间贝尔实验室和大学的关系看起来有些问题,所以我们没有uucp。当然很快这问题就解决了。当时产业界决定“喔,我们不想让大学拥有那个因为这样我们就会失去它”。然后大学就自己开发了一个,所以产业界觉得“天哪,我们想让自己的产品成为标准,最好还是给它们吧”。BerkNet在那时是很好的网络,但它有一些考虑不周的问题,比如它的主机名是单个字符。我们觉得ARPANET现在只有26台主机,将来是不可能超过256台的!C是cory,E是ernie kovacs,I和J则是Ingres 11/70和VAX。计算机中心得到了A到F,代表着Unix A到Unix F,他们认为自己的取名策略非常有创造性。
很多办公室里有终端的人们开始使用email和更多的服务。我们让这个网络支持电子邮件和简单的文件传送,甚至还支持了简单的远程命令执行。我对简单的定义是开发时间大概一小时。接下来的压力来自EECS部门的教授们,他们想连接ARPANET。我认为ARPANET之所以仍然在使用11/40是因为他们的链接接口不能连接11/70。最后的结果是我们不想给每个人账号,但最终还是被强迫着做了。我们修复了一些问题,这样ARPANET的邮件不用绕其他路线就可以发送到BerkNet以外。你要了解,那时除了在ARPANET上,人们不在电子邮件的前面放头部信息。虽然RFC822上明确有规定,但是执行的并不好。
那个时候ernie kovacs的uucp,学校的BerkNet,还有ARPANET,每一个都使用不同的邮件标准。如果你想发一封电子邮件到ARAPNET和uucs,你只能将它发送两次。很明显这不是一件好事情。
我困惑了很长时间,不能找到修复这个问题的好方案。一天我坐在格伦街的家里对自己说“这太愚蠢了,我要自己写代码解决它”。然后我就写了那个程序,那个下午我选定了它配置表的样子,然后它的形式就很清楚了。那个用于delivermail的配置表使用字符写的。它说“这里有一个‘@’,它一定是ARPANET的,要用uucp。这个是BerkNet”。它的创意是每个网络都有它特有的标志字符...不管怎么说,delivermail包含到了4.0和4.1的纸带。但是显然睡着时间发展它的配置显得不够完善,当我们有了更多的机器的时候它就显得不够通用了。
因此我开始修订delivermail。Bill Joy嘲笑了我,他说“它没有去发送邮件,它只不过是将邮件交给另一个代理”。所以我把它改成sendmail。所以sendmail应该算是delivermail的第2版或者第3版。
还有一点要指出的是这期间ARPANET正在从NCP过度到TCP。那时一段相当痛苦的时期,短短几年经历了从mit-xx到xx.ARPA再到[email protected]。修改sendmail并没有花费我太多的时间,它对我来说还是比较容易的。更幸运的是我可以一直跟进最新的修改...我正在做一个大的修订,因为RFC1123的“Host Requirement”...
ARPANET在1968年作为一个小的研究性实验开始并在1969年并入ARPA。它论证了跨网络长途通信的能力并最终成为美国的骨干网络,国际互联网,抱恨NSFNET和其他网络。它同时也证明了一个通用协议的重要性。每个ARPANET的节点都使用了一个叫做信息接口处理的通信子网(IMP)。这些最初是Honeywell硬件,后来是BBN硬件。主机间的通信是以BBN1822协议为基础。最初的主机到主机通讯协议是NCP(Network Control Protocol)。
到了1976年已经很明显可以看出将会有大量的局域网络需要互相连接。这导致了TCP/IP协议的开发。顺便说一下,第一个公开的数据传送网络是加拿大在1976年建成的Datapac网络。感谢1974年Vint Cerf和Robert Kahn智慧和远见,以及BBN基金会实现了协议,还有伯克利将协议放入Unix软件发行版,DARPA才能连接了大约90%放入科研大学社区。
这是真正的协同:TCP/IP允许更好的连接,它融入了伯克利Unix。Unix越来越流行,越来越互相连接。我认为完全可以说如果没有Unix,TCP/IP在1994年就不会拥有全世界的3000万。事实上这些用户中的很大一部分使用的是MS-DOS,Apple-OS,或者VMS。
现在,世界互联网提供了非常多的服务,但是气功只有少量是“必不可少的”:电子邮件,文件传输,还有远程登录是最重要的。这些都是来自Unix。
在返回到McKusick的故事前,先让我继续列完Bostic的年表,这将会让读者了解到详细的伯克利版本。
e) 4BSD,1980你那10月——这个发新版包含的性能提升包括使用了虚拟的存的更快的文件系统,任务控制,可靠的信号,自动重启,delivermail程序,还要Franz的Lisp系统。
f) 4.1BSD,1981年6月——4BSD在性能方面有很多提升,支持一个新的VAX模型和自动配置
g) 4.1a——4.1a是一个包含TCP/IP和套接字的测试版本。它卖给了ARPANET的很多需要网络的工作站。
h) 4.1b——这是一个测试版本,据我所知只有伯克利内部在使用它。它包含了新的更快的文件系统,使用了聚类获得更高的性能。包含了新的网络代码。
i) 4.1c,1982年到1983年——这是4.1BSD和4.2BSD之间的一个测试版,一共发给了大约100个工作站。它包含很多4.2BSD中除了新的信号机制意外的绝大多数特性。
j) 4.2BSD,1983年9月——一个主要的系统修订版本,包含网络(TCP/IP和一个通用框架),一个新特性的更快的文件系统,一个重新设计的更加稳定的系统该接口,还有新的信号机制。
k) 4.3BSD,1986年6月——4.3BSD优化和固定了很多4.2的新特性,并且提供了更好的性能。新的特性包括XNS网络,目录名缓存,以及一个互联网名字服务器。
l) 4.3-Tahoe,1988年6月——这个中间发布的版本添加了对CCI Power 6的支持,4BSD提供的第一个非VAX的支持。它包含了几个内部内核工具,包括内存分配,内核调试,和磁盘标签的支持。TCP算法被LBL的Van Jacobson大幅提升。
m) BSD Networking Release 1,1988年11月1日——第一个网络发布版是那时伯克利系统的一个子集,和4.3-Tahoe而非常相似。它包内核网络部分移植的源码和文档,C库和实用程序。还包含一个使用了新版本rlogin(网络登陆)的登陆程序。它可以不经任何授权直接使用,并且可以通过匿名FTP重新发布。源码中包含了一份伯克利版权和一个允许重新发布的说明。
n) 4.3-Reno,1990年6月——这是一个包含了很多4.4BSD新特性的测试版本。最主要的改动是添加了支持多文件系统的vnode框架,一个网络文件系统(NFS)实现,一些网络框架方面的修改,还有对OSI网络的支持。许多的内核代码,库代码,新添加以及重写的代码都包含了一个伯克利版权声明,它和Networking Release 1类似的允许重新发布。对于VAX和Tahoe,4.3-Reno支持基于摩托罗拉680x0处理器的HewlettPackard 9000/300系列机器。
o) BSD Networking Release 2,1991年6月——第二个网络发布版包含了更多的额网络代码,但是像第一个网路发布版一样不需要授权。它包含了比4.3-Reno高级很多的当时伯克利系统的一个子集。新的特性包括一个从卡内基梅隆大学的Mach系统得到的新的虚拟内存系统,这个系统是犹他州立大学移植的,并且Bill Jolitz将它移植到了Intel 386/486系统。
另外我还要把4.4加入这个列表:它是在1993年6月发布的。
Kirk向Collinson指出有些东西是最近才做出来的。
现在在4.4BSD中内建了Portals,是Jan-Simon Pendry将它放了进去(见28章)。原始的架构文档中也描述了mmap系统调用,许多其他厂商抢在伯克利之前实现了它。在Sun要实现它时我们扮演了这样一个角色,我们和他们争论每个标志应该代表什么,每个接口应该是什么样子的。我们可以说我们扮演了一个角色,即便我们在实现方面晚于其他厂家。
Bill做的第一件事情是socket接口和TCP/IP的代码。它日程上的下一件事是文件系统。在春天的时候,他设计了一个初稿,其中从Mike Powell在Cray上开发的DEMOS上借鉴了很多东西。我仍然以研究生的身份在工作,我的导师是Sue Graham。作为一个研究生你在学校的时候只有一半的自由时间,到了暑假你可以全职工作三个月,这样就可以为秋天积攒足够的学费。6月的时候你可以拿到四分之三薪水的支票——两周的半职和两周的全职。不管怎么说,当我在6月月末拿到薪水的时候,只有四分之一的数额。有些家伙搞错了工资单,他们不知道我暑假会在那里,可能因为我去年没在那里。我到处走想看看到底发生了什么。工资单需要我的导师需要给他们一个资助码,我去告诉Sue我需要一个新的资助码,然后我发现她忘了更新资助码。
很显然应该更新资助码,但是这会花去几个月的时间。同时,我将面对一个没有薪水的暑假。我知道Bill已经拿到了新的资助码,于是我走到楼下问他我在暑假是否依然可以享有DARPA的授权,他能否给我一些事情做让我可以写在纸上。我们都明白我应该为我的论文做些事情,他同意并且建议我可以去实现已经设计好的文件系统的原型。虽然我什么都不知道,但是他完全知道将会发生什么。
我用整个暑假做出了Bill设计的文件系统原型,让它可以在用户空间访问一个原始的磁盘分区。到了秋天,我有了它运行的一些演示例子。就像你猜到的,Bill建议说把它放进内核应该不会太困难,然后我就做了。Bill说“这非常棒,人们会很喜欢它的,但是它还缺少dump,restore,fsck...”。一件事情引起一连串的事情。18个月后,我们有了更快的文件系统。它很复杂,代码量是原来的三倍...
Sam Leffler在一个网络公司工作过,有不少网络经验。他能在socket接口上做一些重要的修改让它适应高速线缆网络,比如使用Bill做的一系列链接队列。这对于让重度使用下的代码更加强健非常重要。
我们最后的测试是ucbvax,那时邮件中心和ARPANETuucp连接的机器。它太慢了以至于挤压了很多要处理的事情。很难看到在这台机器上可以看到50到60个连接。在今天看来这不算是一个大交易但是在那时却是很困难的事情,对文件系统各网络的代码都是很大的考验。
然后4.2BSD就发行了。
实际上Bill在4.2BSD发行前不久离开了伯克利。他将当时的系统带到了Sun。Sun的系统在4.2BSD官方发布后可以毫无障碍的升级到这个版本。
目前为止这写还不是伯克利的全部故事。让我们倒回去一点,听听Sam Leffler讲述他的故事。
我75年去了克利夫兰的凯斯西储大学。我在那里的主要工作是合并BS/MS程序,按计划应该会在3年后毕业。按计划我会和Bill Shannon一起做这个项目。我们将会建立一个Unix系统,拿到硬件然后移植软件系统。基于Z8000或者其他的什么硬件。但是做出所有这些计划的起者退出了。一切都搞砸了,因此我暂停了一段时间教学工作,直到我可以发现下一个可以做的论题。所以我直到到1980年才毕业,虽然我在79年就做完了所有事情。我在1980年去了伯克利,但是那时Bill去了哥伦比亚的USENIX狐疑,下一年我们一起去了多伦多。那时我们的工作是叠加层。在PDP-11上的Unix第7版做透明叠加层,我们在多伦多遇到了Bill Joy,他当时也在做这方面的工作。我仍然记得我们和Bill关于这些工作的谈话。我们解决了一些他们还没有解决的问题,他带走了这些解决方案。
Shannon和我毕业了,我们以做了很多项目结束了学校生活。凯斯西储大学试图建立一个学校范围的网络,他们尽量提前建成时间,这完全是一场政治活动。委员会和所有的部门一致同意他们需要DEC的设备,并且一些满是官僚主义的人过来说“你可以买Harris”。所以我们以很多的额Harris设备结尾,这是你所能见到的最奇怪的机器。它不能运行Unix以及其他任何系统,这些设备从来没有工作过。Shannon和我不顾一切的寻找一个有经费的项目,“我们想要脱身,所以我们同意去做一个移植系统到这个机器的项目。这是一台奇怪的机器,因此他做了操作系统的工作,而我做了编译器和所有编程语言的工作。我们之间就有了这样诡异的关系,呃,一种共生关系,如果想毕业补习互相依靠对方。我需要操作系统演示我的编译器,而他需要我的编译器让系统运行起来”。
结果就是,如你所知,Harris是一台非常快速的机器。但是它不能按字节寻址,并且它的字长是24位。我们简单的使用了PDP-11/70的机器,然后将它改成11/43所需的分页。我们联系了Bill Joy,并在他完成之前先做完了工作。
Bill和我终于毕业了,接下来我们开始寻找一份工作。我们有非常相似的资格证书。我只在两个地方看工作机会,我想住在波士顿或者加利福尼亚附近。所以我去了硅谷的一些公司和梅里马克的DEC面试。DEC雇佣了Bill,因此我去了加利福尼亚。
Armando Stettner那时正好在DEC工作,从他的描述角度看看这件事事情:
Bill Munson和我只有一个招聘名额。我记得我们在特拉华州立大学的USENIX面试,这些家伙正在玩排球。虽然我们只有一个空缺,但是Sam和Bill我们都想要。我们真的很难选择所以我们用排球的比赛结果来做出选择。我们看他们打球,一个是擅长单打独斗光芒四射的健将,一个是普通的团队球员。随意我们决定录用Shannon,那个团队球员。Sam去了Sytek。
Shannon在DEC只待了一年多一点的时间,他后来去硅谷加入了Bill Joy在Sun的团队。Leffler在硅谷的一个公司找了工作,在那里他待了一年时间。但是因为他们都运行VAX并且Leffler可以随时见到Joy,那时他正在为4.0版本做测试。所以当Joy失去了一些员工并且有足够的钱时,Leffler“去了伯克利。先是做4.0,然后是4.1.这就是我去伯克利的过程”。
1980年夏天一个伯克利的研究生John Forderero写了一程序,这个程序可以检测到邮件的到达状态。它会告诉用户你有了一封新的邮件。在那时,Heidi Stettner在开始研究生学业之前在凯文斯教学楼工作。Heidi会带着她的狗去教师和办公室,这是一只非常友好的狗,有很多学生喜欢在走廊上把球扔出去让它去捡回来。甚至在公告板上也有它和毕业生们的照片:题目是正在工作的狗博士。John决定用这只狗的名字命名他的程序:Biff。根据Heidi所说,John和Bill Joy后来花了很多时间试着去试着解释biff这个名字的含义:Be notified if mail arrives。Bill在1993年8月去世,当时年龄是15岁,它在编译课上获得了一个B的成绩。Heidi说Biff咬了邮递员是一个下流的谣言。
Kirk McKusick在1981年夏天加入了这个项目。Leffler从1981年秋天开始在伯克利,大概有6个月的时间Joy很少在东海岸,但是直到1983年4.2发售时,名义上他仍是这个小组的一员。在这段时间里,DARPA的伯克利合约监督人Duane Adams设立了一个“指导委员会”,成员有伯克利的Bob Fabry,Bill Joy,Sam Leffler,Bolt和Beranek以及Newman的Alan Nemeth,Bob Gurwitz,斯坦福的Keith Lantz,麻省理工的Bert Halsted,卡内基梅隆的Rick Rashid,信息科学协会的Dan Lynch,DARPA的Adams,Bob Baker,UCLA的Jerry Popek。从1984年开始,每半年召开一次的委员会会议被一系列的年度研讨会代替。
Gurwitz早期实现的一套TCP/IP协议让BBN非常不满意,于是找Joy来继续修改。1981Joy同时也在做一个进程间通信的项目。Leffler和他一起做一个多网路同时使用的协议。rcp,rsh,rlogin,rwho都是作为临时的工具简单的写出来的。他们包含在1982年4月发布的4.1a中。了1982年6月McKusick做出了新的高速文件系统并将它集成到4.1a中。这个系统成为了4.1b,在夏天和秋天用在了操作系统课程上。Mike Karels告诉我:
Roberts Henry和Bob Kridle离开这里去了mt Xinu,而Kirk和其他所有写出这部分代码的家伙们在上操作系统课程。我不确定那个系统是不是运行过,但是我们谈论了很多关于它的东西。
当Joy离开时,Leffler接手了他的工作。但是他没有被指定为Joy的职位,所有感到有些怠慢。Leffler离开去了卢卡斯影业,最初是以兼职身份在做。4.2之所以可以完成时因为曾经参与了2.9BSD发布的Mike Karels做完了接下来的工作。
4.2BSD是一个巨大的成功,就像McKusick指出的:“4.2卖出的拷贝(前18个月)比之前卖出的伯克利所有软件加起来还要多”。有几个操作系统公司是以4.2为基础开发的:DEC的Ultrix和Sun的post-UniSoft OS是其中最为有名的。虽然如此,还是有很多关于4.2BSD的抱怨,Mike Karels花费了第一年大部分的时间来优化系统。
让他来告诉我们那时的故事:
我只去了两个生物研究生学校:伯克利和威斯康星州立大学。作为一个没有毕业的学生,我只是很少量的接触过计算机。我的一个编程课程是使用PL/I。当我到了伯克利,他们有这方面的课程,你不得不在一个实验室花上第一个学期,然后在另一个实验室又花上一个学期,然后你才可以选择一个导师...在我第二个学期我加入一个做细菌遗传的小组。在实验结尾的时候这个小组在一台运行第6版Unix的PDP-11/40上面做数据收集的工作。这看起来很有些意思,我想我在做我的细菌学实验的时候,或许可以写一些程序。好吧,主管计算机的博士后离开了,这个伙计表现出兴趣并且真的写了一个程序,接手了他的工作。我们在计算机中心有一个叫Bill Jolitz的学生,他写了一些软件并且维护这些东西。每当我们得到一个新的终端或者磁盘,我们都要去学习怎么使用这些东西。
有一次一个磁盘崩溃让我们丢失很很多为第6版Unix定制的东西。那时第7版已经出来了,Bill试着把它从地质调查局带过来,那时他在那里也有一份工作。所以相比起重新构建第6版,我们选择了第7版。如果Bill没在那里,又或者设备驱动没能工作,再假如已经是截止时间,我会代替Bill做这些事情。这样我通过实践学到了很多东西。但当我开始工作于后来的2.8BSD时,是和Bob Kridle以及其他很多我不认识的人一起做的。
就这样我在自己学业上花费的时间越来越少,越来越多的时间被用在了计算机上。然后在CSRG有了一个工作机会。我在8月1日开始去那里工作。在月末的时候Sam也去了那里做兼职,后来又里来了。我猜我是在1983年4.2发布的前两个月开始工作的。然后Bill离开了——不管怎么说,在最后一年他已经很少出现在那里了。但是,你知道,大概一年前我去了CSRG,我发表了自己的第一篇论文,Sam过来说“为什么你不来为我工作,这样你就可以在一台真正的机器上干活了”,那时VAX正在替换11/40。当我在VAX上工作时这既有趣又让很让人兴奋。在一个新的机器上debug还是有点困难。
VAX是一台真正的机器,但随着时间流逝,出现了一个又一个真正的机器。