为什么是Unix
让我们在这里先暂停一下,通过一个6年的实验,去考虑为什么Unix如此顺利就能获得全世界学术界的关注。究竟是什么使得它受到这么多人的喜爱。
在最初的CACM论文上,Ritchie和Thompson列出了系统提供的6个特点:
- 一个可卸载分卷分层级的文件系统
- 文件,设备和进程间的协同兼容
- 初始化异步进程的能力
- 每个用户都可以配置系统命令语言的能力
- 超过100种的子系统包括十多种语言
- 高度的可移植性
让我们列一下我喜欢Unix的原因:
- 在很多平台上都可以使用
- 多用户
- 提供目录层级
- 合理的分享计算机资源
- 支持对文件,进程和程序的操作
- 允许进程间和机器间的通信
- 允许访问系统自身的特性
Rudd Canaday将它们简单的总结为:“Unix之所以能走出贝尔实验室是因为大家都喜爱它”。最近,Armando Settner说:“它不区分自己的还是我的方式”。
在1976年和1977年,Tom Lyon使Unix的一些部分可以在普林斯顿大学的IBM 360机器上的VM/360系统上运行。在1977到1978年,Ritchie和Steve Johnson将Unix移植到Interdata 8/32,就在同一时间Richard Miller和他的同事将Unix移植到澳大利亚伍伦贡大学的一台Interdata 7/32上。Ritchie曾经说将Unix移植到Interdata是他最自豪的意见编程工作之一。这说明Unix真正的移植到非DEC制造的机器。我一会还会说到这些。
很容易说Unix有这个或那个的有点,或者它可以运行在一台部门(而不是计算机中心)没有提供的机器上。请允许我,让现在是UUNET科技的副主席的Mike O'Dell,回忆一下1974年的夏天。那时候,O'Dell还是俄克拉荷马州立大学的一名学生。
当知名的1974年CACM期刊出版时,我正在为OU计算机中心工作。我们的这台机器叫做ITE,一台断断续续的终端设备,有着世界上最糟糕的BASIC实现,一个伙计写了一些例程让你可以在终端上做I/O操作,这是一个不太重要的功能。所以我们的一个组坐下来试图计算出我们是否能用IBM 2741s作为打孔机做一些像编辑这样有趣的事情。这样你就能编辑任务然后提交它们,或者类似的事情。因此在我最繁忙的时候——我记得我的黑板上画满了数据结构,因为我们将所有事情都放在文件里,因为我们不知道怎样能更好的完成它。
这时Unix期刊出现了。我记得我走到商场尽头,从邮箱取出它,对自己说:“哦,ACM在操作系统上做了一些事情,或许值得读一读(期刊是‘第4届ACM操作系统规范讨论会论文集’)”。然后我就开始慢慢读它。在期刊里还有其他几个很好的论文。我记得我坐下来然后读到Unix分时系统的论文,这有点像用石头在脑袋上敲了一下。我又重新读了一遍,站起来走出办公是,走到和我做同一工作的George Maybry的位置,把期刊砸在他的桌子上说:“怎么这么多人会错了这么长时间?”。
然后他说:“你在说什么?”。
我说:“读这个吧,然后试着告诉我我们做得这些事情不是在犯傻。我么疯了,这才是我们想要的”。就在那时我决定我们无论如何都要得到一份Unix。
实际上O'Dell被Unix如此吸引的原因是俄克拉荷马州电力工程实验室的一个角落里放着一台和PDP-7很相近的PDP-9。O'Dell看到Ritchie和Thompson最初是在PDP-7上完成了Unix的开发,他想在PDP-9上Unix应该也可以跑起来。O'Dell告诉我:
我给贝尔实验室打电话,正巧是Dennis Ritchie接的。我说我们没有PDP-11,但是我们有一台PDP-9,我们能不能得到一份Unix的PDP-9版本?Dennis说那并不是一个好主意(他可能在想电话那头的孩子一定是疯掉了)。但他们的态度非常好让我受到了鼓舞。我确信我们我们一定要做这个。
那时的我是一个无知者无畏的年轻小伙。我打电话给塔尔萨DEC的销售办公室(他们在俄克拉荷马州没有销售办公室)要求找人聊一下PDP-11。最终我和一个叫Stan Bartel的家伙聊上了。
Stan是一个有意思的家伙,他意识到自己永远不能将小型计算机卖到俄克拉荷马州立大学,因为到处都是蓝色的死机屏幕,去计算机中心找一份工作至少会比现在会好一点。所以他并不介意DEC支付的是薪水而不是佣金。他将要我们这附近带上几个星期。不管怎么说,他远道而来,吃了一顿午饭,带来了他所有的手册。处理器手册和外围设备手册。我从没有看过这些文档。那时我是一个不错的程序员,我看着这些手册学习指令集,我说“这些家伙知道这是怎么回事,这太酷了”。故事就这样开始,我被吸引住了。
就如我之前提到的,C语言编程直到1978年才出版。之前在俄克拉荷马发生了什么?O'Dell在1974年到1978年之间的故事和其他很多人都很像,就让他继续说吧:
我第实际上是在伊利诺斯州立大学第一次接触到C语言。我和Steve Bunch从俄克拉荷马州立大学去伊利诺斯州立大学访问Mecca,在那里我们见到了Unix。Steve Bunch,Steve Holmgren,还有Mike Mullen这些家伙组成成的小组将Unix发布到了ARPANET。总之,Steve Bunch发给我一份智能终端的内核列表,里面包含了上下文切换,信号量控制,进程间通信,还有一两段代码。因此我们有了五六页论文,他还写了一些无关紧要的笔记,因为我从来没有看到那个编程语言,他解释像++这些有趣的操作符是怎么回事。他还说“看看你能不能研究出这是怎么工作的”。我记得上下文切换是用6行汇编实现的,他将相关代码发给我,看看我能不能搞懂。然后我就搞明白了。
后来我想知道更多相关的资料。于是他给了我tp(在tar出现很久之前),老式tp格式的帮助信息存储在nroff输出的纸带上。他将纸带寄给我,说:“这上面的东西很有些意思,如果你能解决怎么打印它”。然后他发给我真正的tp帮助页。
我在一个长长的周末坐下来写程序破解这个格式,一点点推敲,最后打印出Unix帮助页。那时我的第一个帮助页。它们现在应该还在我的某个盒子里,因为我当初得到它们是如此困难。
然后我就不停翻看这些帮助页。虽然我们不能得到系统代码,但我们可以看看它究竟可以做些什么。
靠自己努力解决问题。你认为它会如何工作?Mike并不孤单。RAND编辑器的作者Dave Yost告诉我他是如何在1970年看到代码的:
我坐下来仔细看着,看到这些卷曲的括号,[{和}],“哇噻”!
在C语言里,{和}将函数的声明围起来。C没有像PL/I的DO-END或者Pascal和Algol的begin-dend。C在很多方面看都是一个简单的语言,和自然语言非常相似(比如英语)。它不是一个“高等级语言”。就像Thompson和Ritchie说的:“C语言是一个通用语言,有着简单表达式,现代的流程控制和数据结构,还有一套丰富的操作符...我们认为C语言被证明是一个令人舒适舒适,富有表达力,多功能的编程语言”。根据我的经验,是C语言让编程成为一种优雅的艺术。
1987年,Ritchie在USENIX技术会议上分享了他关于Unix成功的思考。他提到了“简单,一致,高效的计算”,还有“工具箱的概念”,以及“可移植性”。
第一个和最后一个是非常重要的:他能在不同的平台上运行。Unix和C语言的优雅对流行也至关重要。当然还有风格和工具。
译者注