第贰拾壹章 太监们 (下)
去了趟图书馆,问题没解决,反而更郁闷了。 就在范含挨家生闷气的时候,奥尔森来了个电话。 “怎么样了?” “什么怎么样了?”范含装傻。 “当然是那个‘八荒六合唯我独尊’的新型cao作系统了。”奥尔森说,“进度如何,给个准信儿吧。” “你就别损我了。”范含苦笑,“正为这事儿烦着呢。” “可别,”奥尔森说,“一大帮人正等得望眼欲穿的时候,你跟我说烦?” “是不是出什么事儿了?”范含听这口气不对劲。 “嗯,”奥尔森说,“你说的那个‘VAX’,我们内部评估了一下,不划算。” “哦?”范含很惊讶,“不至于吧……” “那样的处理器,以及需要实现‘虚拟地址扩展’所需要的内存和外存,都不是个小数目。”奥尔森说,“再加上水涨船高的其他配件,成本算下来,一百多万打不住。” “确实……”范含相信,真正的VAX是作为小型机推向市场的,现在提前了这么多年,成本当然下不来。 “本来我们DEC就是主攻小型机市场,大型机有IBM在,胜算太低。”奥尔森说,“这款VAX机器如果卖这么贵,售价就已经算是大型机了,当然,其实功能也相当于大型机。” “其他人觉得把握不大是不是?”范含明白了。 “嗯,没必要和IBM硬碰硬。”奥尔森说,“更何况是以己之短,攻彼之长。除非……” “除非什么?”范含心里是很想让VAX提前出世的,毕竟自己的知识结构决定了只有在这样的32位机型上才能稍稍那么“有所作为”一点。否则的话,自己比起现如今的程序员,在“古董”计算机上面“抠门”的本事根本排不上号。 “除非这款机器上面能有一堆杀手级应用。”奥尔森说,“不是一个,是一堆。” “一堆……”范含无话可说,“要求还挺高。” “是啊,本来我们就落后,想后来居上就得加倍的努力才对。”奥尔森说,“和IBM打个平手已经算是输了。” “一般情况下,你的员工只要能搞出一个,估计就能拿着奖金度假去了。”范含说,“一下子弄一堆出来……好像有点难。” “所以啊,同事们都跟我说‘找那个阿拉丁去搓神灯吧’!”奥尔森笑了,“然后我就给你打电话了。” “我就能搓出一堆来?”范含说,“还真看得起我。” “如果连你也搓不出来,”奥尔森说,“那这个计划只能暂时搁置,估计五六年之内是重新启动不了了。” “弄个原型当技术储备不行么?”范含还不死心,“你看IBM就有许多技术是提前研发的,直到市面上快要出现竞争对手的时候才拿出来用。” “恐怕不行。”奥尔森说,“我们和IBM可不一样,手头没有那种闲钱。” “好吧,我先搓搓试试。”范含没辙,只好先答应下来。 ------- 杀手级应用?还“一堆”?哪儿那么容易就搓出来?! 可是不搓也不行,不甘心。 没办法,范含只好空想出一个32位机器,然后考虑这台机器上的Unix实现。 也许现在出32位小型机确实有点儿早,目前的问题是硬件条件跟不上软件,这和范含那个时代刚好相反。 硬件发展是呈指数飞跃的,只要摩尔定律还在起作用,步子就会越迈越大,功能增强的速度也会越来越快。 软件则不然,搞这个还是要靠人脑。既然人脑的智力发育没有呈现“指数型增长”,并且从业人数也没有呈现“指数型增长”,赶不上趟是必然的。 正如格斗,无数看客总是津津乐道于比较中国武术和其他功夫的优劣,却没想到归根到底格斗还是要靠活人去打。也许在“武道”的历史上确实比人家早了几千年,但是一个“武者”一辈子也只能练上几十年而已。耍关刀的“老英雄”打不过职业泰拳的小毛孩子,真是再正常不过。 范含知道,就算是2004年,也没到迫切需要64位应用的时候。虽然64位处理器早就有了,64位桌面处理器也已经有了,但是微软的64位WindowsXP还没正式推出,就算已经出来了,也得需要额外的一两年时间供各个软件厂商升级自己的产品。 可的确没谁迫不及待。 到底64位平台有什么优势? 字长翻番?是,一些计算密集型的应用需要64位。 地址空间极大扩展?是,一些数据密集型的应用需要64位。 除此之外,32位平台的潜力还远远没有被挖掘殆尽。 这和16位到32位的转变还不一样,那时候人人欢欣鼓舞,毕竟16位体系的局限性太大了,无论是开发人员还是最终用户都有一种缩手缩脚的感觉。 只能说,32位是道坎,标志着软件开发力不从心时代的到来。 范含知道,摩尔定律应该在二十一世纪之初就会失效,因为电路元件再小也小不过几个原子,这是物理法则的壁垒,令人无可奈何。这个时候也就是传统“电子计算机”的历史走到了尽头的时候。 所以有一点可以肯定,传统电子计算机主流平台将会锁定在64位,也许这个主流地位将一直保持到二十二世纪,直到电子计算机被淘汰的时候为止。 按照二十一世纪中国男性的平均年龄估算,范含应该可以活着看到那一天。 从另一个角度想想,如果一切顺利的话,自己的“电子生涯”实际上就是摩尔定律那光辉灿烂的一辈子:自己在摩尔定律刚开始发威的时候创业;在摩尔定律的鞭策之下发展壮大;最后,在老得不象话的时候,坐在摇椅之中,腿上盖着毯子,手里攥着猫,哆哆嗦嗦的替摩尔定律站好最后一班岗。 白发苍颜吾老矣,只此地,是生涯。 咳…… ?! 扯远了,扯太远了,怎么开始替摩尔定律准备后事了? ------- 郁闷了一上午,伤感了一下午,一天就这么过去了。 本来,既然当前技术条件不成熟,搁几年就搁几年,没必要非得这么执著。蓝蓝就总是弄不明白为什么范含会这么固执,坚持一定要用最快的速度把32位机器定型不可。 这个不好说。 微软是从1995年,Windows95推出之后才在业界占据了明显的上风,等到Windows98出品,其软件霸主地位就已经不可动摇了。 但是Intel的垄断地位……可能还要早一点。 个人电脑的出现,只是给了Intel和Microsoft一个机会,IBM领进门,修行在个人。 像DOS那样简单的字符界面系统,并不能给微软带来多少优势意识,毕竟同一时期类似的cao作系统有许多。就是微软自己,也曾经推出过一款类Unixcao作系统:Xenix。至少这说明,当年的微软对于自己垄断Intel平台并没有多少必胜的信念。 关键就在于“Intel平台”。 我们不喜欢Windows,还有Linux、FreeBSD,甚至曾经的BeOS可以选择。但是不喜欢“Intel平台”,有什么办法么? 软件发展已经跟在硬件身后气喘吁吁了,就没有什么挑肥拣瘦的权利。瞄准主流平台,是每个软件厂商的必然策略。即便如此,还经常忙不过来呢。 所谓“跨平台”里面的“平台”,指的是软件平台,更确切地说,应该是“cao作系统平台”。说句不好听的,那些“跨平台”的东西,不过是每种“平台”都重新实现一遍而已。 就是传说中能“平台独立”的Java,靠的是“虚拟机”。说白了,就是捏造了一堆东西冒充硬件而已。C 他爸BjarneStroustrup有句话说得好:“Java不是平台独立,而是一种平台。”……这句话如此有名,以至于许多C 高手都用它作签名档。 勉强算得上是“不依赖平台”的东西,应该就是各种网络标准了。但是,联网通信的前提是必须遵守一大堆“协议”,实际上这就是平台。用机器代码编点不存在的指令,当然运行不起来;同样,写几个不规矩的TCP包发出去,不丢才怪。 严格的说,真正能够跨越硬件平台的应用,一个也没有。 这才是Intel牛逼烘烘的本钱。 从1985年386的推出,直到预计到2005年还会卖的奔腾四,这个平台延续了二十年。 信息产业的二十年,应该相当于传统行业的几个世纪了。 正是由于业界很快看到了32位体系超长的寿命,才会放心大胆的投资,不用担心短期内被64位体系取代。正是由于业界了解32位体系巨大的潜力,才会放心大胆的开发新应用,移植旧应用,毕竟干不了的事不算太多。 就架构而言,Intel的386并不是最优秀的。MIPS、SPARC、PowerPC的设计都要强一些,但是这些架构并没有动摇Intel的主流地位。原因就在于Intel占了先机。 正是由于业界看到了Intel最先推出了成功的普及型32位体系,并且今后一直都会保持供货,随买随有,才会放心大胆的瞄准该体系,而很少愿意去冒险转换硬件架构。 是吧? ------- 像Intel那样一旦领先就一直领先,才是范含强烈要求尽快搞定VAX的根本原因。对于在这种“大号386”上面实现一个地道的Unix,有BROM在,自己还是比较有信心的。不过,目前还没有硬件,那就只能在其他机器上面先尽可能的实现,以后再移植过去。 可供自己实现cao作系统的机器并不多。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上面实现还像回事的cao作系统。于是问题变成,只要弄出来的东西比DOS强就算胜利。 从一个最终用户的角度来看,Unix的特点就是一大堆彼此独立而又能组合起来使用的小工具,这些小工具处于整个系统的最外围,都是真正用来完成具体任务的代码。负责调用这些小工具的是“外壳”,顾名思义,就是包在内核外边的一层壳,将用户输入传进内核,把内核的输出反馈给用户……不负责任的说,一个解释器罢了。至于最内层的部分,当然就是内核了,这个才是靠范含目前的水平所应付不了的东西。 一个Unix系统又不是只有内核,既然这个干不了,那就先干点别的。和Ken的顺序相反,范含决定从外到内,逐步开发。为了掩盖自己不学无术的丑恶嘴脸和在那些内行员工面前保持高大形象,还煞有其事的美其名曰“面向应用的系统设计”。 ------- 接下来的事就简单了,范含要求“OS组”的所有相关人员都去写那些“小工具”,不管在什么机器上面都成,只要是文本界面就可以。 需要第一批实现的工具目录,是范含从“GnuWin32”项目里面抄下来的,主要就是“FileUtils”和“TextUtils”两个软件包。 FileUtils是一些文件目录cao作的命令,比如ls、cp、rm什么的,DOS下面也有一些相应的命令,不过功能要弱许多。TextUtils包含的工具很多都是DOS下面没有的东西,用来处理文本文件,比如sort、uniq、tr等等。 在BROM里面,有全部的GnuWin32的程序和源代码,以前每隔一段时间,范含都会去主页下载最新的版本。这些都是很有用的东西,只要自己需要在一段时间内用一台Windows计算机干点什么,首先安装的就是这堆工具,其次就是ActivePerl。 目前的所有计算机都是采用文本界面和用户交互,只不过还没有标准输入和标准输出的概念,一些命令行参数的形式也和Unix不太一样。所以首先实现的是一个加载器,用法有点像使用“-e”选项的Perl。这个加载器的作用就是对这些工具的Unix式命令行作一些处理,然后再传给具体的机器执行。命令行的形式采用GNU标准,单连字符“-”带单字母,双连字符“--”带多字母,等等。 开发过程中还出现一个问题:目前的C语言并没有标准库,这给开发工作带来一些不小的困难。 本来C语言就是为了Unix才出世的,其标准有着浓厚的Unix色彩。去年范含和奥尔森讨论的时候就特意提到了这一点,率先实现的都是一些平台无关的库函数,比如字符串cao作和数学运算什么的。所以如今范含才有本钱要求所有开发人员尽量使用这些“伪标准”库函数。实在没办法的情况下可以通融,不过必须要时时刻刻提醒自己,这些通融都是权宜之计,在不久的将来肯定会被重写。范含可不希望像某些程序那样,不得不把临时代码一直保留到整个软件被淘汰。 范含留给自己的任务就是写“Shell”。 既然到如今已经有了比较成熟的C语言环境,像lex和yacc这样的工具就没有必要非得在脑子里面运行了。磨刀不误砍柴工,第一件事,就是把这两个程序的代码敲出来……或者说“移植”……从BROM里面移植到外面。 随着移植的进行,范含越来越能体会到设计一个系统的工作之庞大和复杂。就说这两个工具,仅仅涉及到字符串cao作,不过却是使用正则表达式。所以,还要首先写一个正则表达式库。当然,毫不犹豫的抄袭“PCRE”,地道的Perl标准。 作为副产品的正则表达式库,以及lex和yacc,范含也没糟践,特意写了一篇论文向《美国计算机协会通信》杂志投稿。编辑部在两天以后就立刻回信,保证发表在九月号上,甚至不惜撤掉其他文章重新安排版面。 范含的这篇论文从形式上讲,是六月号KenThompson那篇文章的回应,调门相当的低。整篇文章中,自己的名字一共出现了十几次,可是“mpson”却出现了几十次。通篇到处都在说“受到了Thompson先生天才构思的启发”,字里行间透出一种执弟子礼的架势。措辞之rou麻,让负责润色文笔的蓝蓝都为之脸红。 “你这不是在拍马屁么?”蓝蓝问,“虽然说是他率先提出了理论,不过你可是率先实现了啊!并且许多地方已经很大的扩展了他原来的设想啊!” “你说得很对,我就是在拍马屁。”范含回答,“不谦虚地说,我的这个实现相当完美,今后几十年都不会有太大的变化。并且我还率先开发出一个完美的应用,就是这个应用本身在编译技术发展历史上也是浓重的一笔。” “所以我才纳闷,你这个马屁拍得也太明显了吧?”蓝蓝说,“这个‘mpson’好像还当不起。” “现在肯定是当不起,这样才好。”范含说,“我就是要捧他,一定要捧得他有一种如坐针毡的感觉。” “然后呢?” “然后在惶恐、惭愧之中,肯定会主动要求和我会面。”范含jian笑,“呵呵呵……嘿嘿嘿……” ------- 有些事情是水到渠成的。 等到范含写好了Shell的草稿,其他人也完成了那些工具,OS组的所有成员,甚至包括一些硬件工程师,都对于这个系统最终的模样有了一个八九不离十的概念。 “看来你说的‘面向应用的系统设计’还真有点道理。”奥尔森说。 “是啊,内核虽然最重要,但是最终用户又看不到。”范含说,“外围的应用一旦确定,内核的任务也就基本上确定了。” “嗯,能够支撑起来外围的东西就够了。”奥尔森说,“如果开始就凭空写内核,恐怕确实无从下手。” “既然已经有了目标,”范含说,“我想你的人随随便便也能把这个内核写出来吧?” “应该可以,我们以前为了自己的机器也写过好几个cao作系统呢。”奥尔森说,“再说,你们的整个开发过程不就是在用其他机器cao作系统的内核支持这些外围应用么?” “那就拜托了。”范含轻轻巧巧的把任务推给DEC,“写完了咱们再合起来调试。” “行。”奥尔森说,“还有件事。” “什么?” “这个cao作系统的名字想好了没有?”奥尔森问,“眼看胜利在望,应该准备正式的对外文件和广告了。” “想好了,”范含说,“就叫做‘Unix’吧。” “啊?”奥尔森很惊讶。 “Unix,怎么了?”范含也很惊讶。 “没什么……”奥尔森说,“你的性格确实有如传说中那样古怪。” “是么……” …… 等到范含看到文件的时候,才明白奥尔森为何惊讶。 cao作系统的名字并不是“Unix”,而是一个同音词“Eunuchs”,意思是“太监们”。 -------