第贰拾壹章 太监们 (下) (第2/2页)
是吧?
-------
像Intel那样一旦领先就一直领先,才是范含强烈要求尽快搞定VAX的根本原因。对于在这种“大号386”上面实现一个地道的Unix,有BROM在,自己还是比较有信心的。不过,目前还没有硬件,那就只能在其他机器上面先尽可能的实现,以后再移植过去。
可供自己实现操作系统的机器并不多。IBMSystem360算一个,但是这个根本不用考虑,不干。
剩下的就是那台刚送到的“PDP-11”了,既然不用考虑“应该”实现些什么,那现在就要考虑这台机器“能够”实现些什么。
稍微一想,范含就恍然大悟。
自己手边这台机器,不过是“更了名改了姓唤作”PDP-11,其实就是一个8086。真正的PDP-11是在1970年出现,不说架构,仅仅是这两年的功夫也足够让性能提高几倍。地址空间扩展了的8086也还是8086,就像华人染了眼珠漂白脸皮也还是华人一样。
想当年的PC/AT,也就能玩玩DOS,还是1.0版。要实现“多用户多任务”那是瞎掰。
由于潜意识里面总是忘不掉真正的历史,往往会和现在自己参与的这个历史进程混淆起来,加上一直以来满足于“硬件外行”的角色,经常把细节问题留给底下的开发人员考虑,所以类似提出这样的不切实际的“高瞻远瞩”的情况也不是第一回了。
外行领导内行是业界大忌。
补救措施不是没有,第二天范含就备齐茶叶,请了一帮技术人员聊天,谈谈PDP-11的特性。
情况还不算太坏,毕竟这个架构是经过了DEC工程师“四大金刚”的头脑风暴之后才定型的,比起原始的8086还是要强上那么一点,在一定程度上实现单用户的“协作式多任务”还是可以办到的。
按照范含的理解,这个“OS组”的最高目标是在VAX上面实现完全的Unix系统,当前目标是在PDP-11上面实现还像回事的操作系统。于是问题变成,只要弄出来的东西比DOS强就算胜利。
从一个最终用户的角度来看,Unix的特点就是一大堆彼此独立而又能组合起来使用的小工具,这些小工具处于整个系统的最外围,都是真正用来完成具体任务的代码。负责调用这些小工具的是“外壳”,顾名思义,就是包在内核外边的一层壳,将用户输入传进内核,把内核的输出反馈给用户……不负责任的说,一个解释器罢了。至于最内层的部分,当然就是内核了,这个才是靠范含目前的水平所应付不了的东西。
一个Unix系统又不是只有内核,既然这个干不了,那就先干点别的。和Ken的顺序相反,范含决定从外到内,逐步开发。为了掩盖自己不学无术的丑恶嘴脸和在那些内行员工面前保持高大形象,还煞有其事的美其名曰“面向应用的系统设计”。
-------
接下来的事就简单了,范含要求“OS组”的所有相关人员都去写那些“小工具”,不管在什么机器上面都成,只要是文本界面就可以。
需要第一批实现的工具目录,是范含从“GnuWin32”项目里面抄下来的,主要就是“FileUtils”和“TextUtils”两个软件包。
FileUtils是一些文件目录操作的命令,比如ls、cp、rm什么的,DOS下面也有一些相应的命令,不过功能要弱许多。TextUtils包含的工具很多都是DOS下面没有的东西,用来处理文本文件,比如sort、uniq、tr等等。
在BROM里面,有全部的GnuWin32的程序和源代码,以前每隔一段时间,范含都会去主页下载最新的版本。这些都是很有用的东西,只要自己需要在一段时间内用一台Windows计算机干点什么,首先安装的就是这堆工具,其次就是ActivePerl。
目前的所有计算机都是采用文本界面和用户交互,只不过还没有标准输入和标准输出的概念,一些命令行参数的形式也和Unix不太一样。所以首先实现的是一个加载器,用法有点像使用“-e”选项的Perl。这个加载器的作用就是对这些工具的Unix式命令行作一些处理,然后再传给具体的机器执行。命令行的形式采用GNU标准,单连字符“-”带单字母,双连字符“--”带多字母,等等。
开发过程中还出现一个问题:目前的C语言并没有标准库,这给开发工作带来一些不小的困难。
本来C语言就是为了Unix才出世的,其标准有着浓厚的Unix色彩。去年范含和奥尔森讨论的时候就特意提到了这一点,率先实现的都是一些平台无关的库函数,比如字符串操作和数学运算什么的。所以如今范含才有本钱要求所有开发人员尽量使用这些“伪标准”库函数。实在没办法的情况下可以通融,不过必须要时时刻刻提醒自己,这些通融都是权宜之计,在不久的将来肯定会被重写。范含可不希望像某些程序那样,不得不把临时代码一直保留到整个软件被淘汰。
范含留给自己的任务就是写“Shell”。
既然到如今已经有了比较成熟的C语言环境,像lex和yacc这样的工具就没有必要非得在脑子里面运行了。磨刀不误砍柴工,第一件事,就是把这两个程序的代码敲出来……或者说“移植”……从BROM里面移植到外面。
随着移植的进行,范含越来越能体会到设计一个系统的工作之庞大和复杂。就说这两个工具,仅仅涉及到字符串操作,不过却是使用正则表达式。所以,还要首先写一个正则表达式库。当然,毫不犹豫的抄袭“PCRE”,地道的Perl标准。
作为副产品的正则表达式库,以及lex和yacc,范含也没糟践,特意写了一篇论文向《美国计算机协会通信》杂志投稿。编辑部在两天以后就立刻回信,保证发表在九月号上,甚至不惜撤掉其他文章重新安排版面。
范含的这篇论文从形式上讲,是六月号KenThompson那篇文章的回应,调门相当的低。整篇文章中,自己的名字一共出现了十几次,可是“mpson”却出现了几十次。通篇到处都在说“受到了Thompson先生天才构思的启发”,字里行间透出一种执弟子礼的架势。措辞之肉麻,让负责润色文笔的蓝蓝都为之脸红。
“你这不是在拍马屁么?”蓝蓝问,“虽然说是他率先提出了理论,不过你可是率先实现了啊!并且许多地方已经很大的扩展了他原来的设想啊!”
“你说得很对,我就是在拍马屁。”范含回答,“不谦虚地说,我的这个实现相当完美,今后几十年都不会有太大的变化。并且我还率先开发出一个完美的应用,就是这个应用本身在编译技术发展历史上也是浓重的一笔。”
“所以我才纳闷,你这个马屁拍得也太明显了吧?”蓝蓝说,“这个‘mpson’好像还当不起。”
“现在肯定是当不起,这样才好。”范含说,“我就是要捧他,一定要捧得他有一种如坐针毡的感觉。”
“然后呢?”
“然后在惶恐、惭愧之中,肯定会主动要求和我会面。”范含奸笑,“呵呵呵……嘿嘿嘿……”
-------
有些事情是水到渠成的。
等到范含写好了Shell的草稿,其他人也完成了那些工具,OS组的所有成员,甚至包括一些硬件工程师,都对于这个系统最终的模样有了一个八九不离十的概念。
“看来你说的‘面向应用的系统设计’还真有点道理。”奥尔森说。
“是啊,内核虽然最重要,但是最终用户又看不到。”范含说,“外围的应用一旦确定,内核的任务也就基本上确定了。”
“嗯,能够支撑起来外围的东西就够了。”奥尔森说,“如果开始就凭空写内核,恐怕确实无从下手。”
“既然已经有了目标,”范含说,“我想你的人随随便便也能把这个内核写出来吧?”
“应该可以,我们以前为了自己的机器也写过好几个操作系统呢。”奥尔森说,“再说,你们的整个开发过程不就是在用其他机器操作系统的内核支持这些外围应用么?”
“那就拜托了。”范含轻轻巧巧的把任务推给DEC,“写完了咱们再合起来调试。”
“行。”奥尔森说,“还有件事。”
“什么?”
“这个操作系统的名字想好了没有?”奥尔森问,“眼看胜利在望,应该准备正式的对外文件和广告了。”
“想好了,”范含说,“就叫做‘Unix’吧。”
“啊?”奥尔森很惊讶。
“Unix,怎么了?”范含也很惊讶。
“没什么……”奥尔森说,“你的性格确实有如传说中那样古怪。”
“是么……”
……
等到范含看到文件的时候,才明白奥尔森为何惊讶。
操作系统的名字并不是“Unix”,而是一个同音词“Eunuchs”,意思是“太监们”。
-------