豪门夜未央-百度阅读:微软操作系统最核心开发故事第4章:死胡同

来源:百度文库 编辑:九乡新闻网 时间:2024/05/04 14:02:26
微软操作系统最核心开发故事第4章:死胡同《观止》第4章:死胡同

卡特勒努力露出一丝微笑,手里拿着个纸杯。盖茨正使足力气想打开一瓶香槟酒的瓶盖,他的眼镜都滑到鼻子尖了。这是1989年的7月末,NT团队都聚集在硬件实验室里,他们都目不转睛地看着盖茨,大多数人都已经有几个月没见到盖茨了。木塞终于弹出来,香槟也喷了出来。盖茨举手向小组成员致敬。大家都欢呼起来。卡特勒举起一块巧克力蛋糕,蛋糕酥皮上写着:给可移植系统团队上电(Power On Portasys)(Portasys代表可移植的系统,这是给这个团队的正式名字)。卡特勒骄傲地扬起下巴,嘴角向后拉,露出紧咬的牙齿。大家又发出了一阵阵的欢呼。

不久以前,盖茨抓住了向一种过渡性个人电脑切换的机会,这种个人电脑是由英特尔的i860芯片来驱动的。他的头发一团糟,穿着一件苍蓝色男礼服衬衫,领口敞开着,黄褐色的长裤,系着一条黑皮带。他把这项实验保密,不让IBM或其他电脑消费者知道,以免他们误以为微软会做硬件生意。盖茨从没打算要卖这种计算机,但是确保NT是在预定的轨道运行是至关重要的。它或许还可以帮助微软来打动NT的潜在购买者——看看NT把什么变成可能! ——也鼓励个人电脑制造商们采用为NT量身定做的硬件设计。

但是这一切还很遥远,眼前放的只是一块裸漏的主板,上面布满电子元件,躺在一个工作台上面,盖茨站在旁边。红的、蓝的、黑的和灰的电线从电路板里伸出来,就像医院里插在病人身上的各种管子。主板上面的架子上夹了个风扇。盖茨按了下开关。这台个人电脑上电了。

卡特勒兴高采烈。他觉得他在创造历史。微软以前从来没建造过电脑,盖茨总是把硬件问题让他的客户去管。但是NT实在太先进了,用来支持和测试这个新操作系统的机器尚未诞生。如果微软等它的客户生产出哪怕仅仅是样机,NT也要被耽搁几年。卡特勒觉得,今天发生的是个“大事件”,九个月的匿名状态现在结束了。对于这个小组里没有安全感的成员来说,盖茨在实验室的出现“验证了我们的存在”,其中一位曾这样说。

当然,有很多障碍摆在面前。甚至这样的一小步也是痛苦的。正如卡特勒所怀疑的,i860芯片果真有瑕疵。部分原因是英特尔似乎在故意限制i860——担心会影响它的X86芯片,那是它的旗舰系列。虽然罗伯·索特(Rob Short)找英特尔协商过,英特尔已经对i860做了改进,但是改进不是很大。

芯片的不确定在NT上方笼罩一片乌云。芯片的选择十分关键:这二者间的关系就好比赛马和骑手间的关系那样密切。不管骑手的技艺多么精湛,他也不能把一匹耕马变成优等纯种良马。芯片和软件间的关系同样如此。确实,操作系统依赖于可靠的芯片。如果芯片是废物,那么程序可能因为硬件原因而无法工作。利用NT的可移植性,将来某一天可以比较容易地切换到另一种芯片上。但那是在建造好NT以后的事。在那之前,必须找个优胜者来与这个操作系统匹配。

盖茨切完蛋糕后,随便走了走,与索特和他的工程师们攀谈起来,询问这个原型使用哪些特殊的电路,还需要多少工作能将其开发成一台完全工作的个人电脑。这时,卡特勒也加入了谈话。其他人纷纷散去了,就留下他们俩。卡特勒穿着黄褐色长裤,一件黑色T恤,胸口处印着著名运动品牌Head的标志。他双手叉腰地立在那里,仿佛一位老练的健身俱乐部教练,他的T恤紧贴着身体,上面的图案看起来好像是画在肌肉上面。他语气坚定地同盖茨商讨着以后的工作,手指在空中指指点点,他的手呈手枪的形状。

最紧急的事情是要在i860上运行一段NT的代码。一星期以后,他们这样做了。虽然还缺少途径对程序进行控制,但它还是努力在屏幕上显示出了“你好世界”(Hello World)这几个字。这就是NT最多能做到的,但是卡特勒已经很开心了。

i860芯片的问题显得越来越严重。在与盖茨的聚会仅仅过去六周后,卡特勒就开始寻找替代方案了。他更喜欢MIPS公司的一种芯片,MIPS是英特尔的竞争对手。MIPS芯片看起来要比i860高级,但是切换到新的芯片会让团队走很多回头路。

芯片不是这个团队唯一头痛的地方。缺乏编程工具也阻碍着进展。“工具程序相当重要,因为只用两只手你根本不能在电脑上做任何事情,”一位程序员解释说,“在20世纪60年代,你还可以打开箱子,摆弄各种编码开关。但今天你需要工具程序。”而适用于i860的工具程序却没几种。因为i860的稳定性还不足以满足普通的应用,所以程序员们不得不编写代码来模仿这块芯片,也就是模拟。英特尔的386芯片可以运行i860的模拟程序,但是速度如蜗牛一般。在真实芯片上几秒钟就能完成的事情,在模拟器上要花上好几分钟。用来等待模拟器慢慢运行的时间最好用来编写代码。程序员没有耐心了。“这真的很痛苦,”伍德说,他跟其他人一样,讨厌等待机器追赶他的步伐。

其他工具很差或根本没用。这个团队尤其离不开调试器,调试器是一种工具程序,可以让程序员更容易地找到和分析他们的代码里的缺陷。一般情况下,一个程序员只有在程序运行失败的时候才注意到程序有错误,为了确定什么地方出错了,他需要调试器来帮助,调试器提供了代码片段的快照。如果调试器本身就包含错误的话——这也经常发生——出来的结果就乱套了,这会让程序员感觉更加沮丧。

卡特勒让他自己的一些人去开发工具,这本来是微软的工具部门要承担的工作。打造工具的工作分散了开发NT本身这一主要任务的力量,但是因为卡特勒认为他没有别的选择。编程工具是程序员的血脉;工具的质量和规约文档的质量一样重要。NT所用的东西都是那么新——包括支持它运行的芯片,这导致NT需要的很多工具都不存在。这中情况就好像是一位小说家要写一本新作品时,除了要构思怎样写故事,还得先发明一套语法和标点方式。

NT团队也感觉到他们在往死胡同里钻,这可能要突破已知世界边缘的所有努力都要经历的一种磨难。甚至连最优秀的程序员都觉得他们自己的代码的复杂程度不合常理,他们的编码与构成一台计算机的其他部分之间的相互依赖性也很离奇。比如说,i860是那么地脆弱,很多时候,程序员们无法判断出是他们的编码还是硬件导致了崩溃。他们花了几个小时来钻研一个故障,得出的结论却是他们的程序没有问题。

当然,芯片也不是唯一的“犯罪嫌疑人”。其他硬件也可能使代码停止工作。随着NT一点点变大,它需要的存储空间也越来越多。i860的原型系统把程序存储在衬衣口袋大小的软盘上。有人写编码指挥计算机如何把NT储存在软盘上。有一天,软盘装不下NT了,这时,需要写代码告诉i860把NT储存在空间大一些的硬盘上。卡特勒主动承担了这个差事。所有人都认为可能要花上两到三天。可是三天过去了,卡特勒还没拿出能做这件事的代码来。一个星期过去了,他还没完成。

卡特勒曾经说自己是“一个就不多犯错误的人”,但是这次他似乎犯了个很愚蠢的错误。他咒骂了很多,主要是针对自己。卡特勒曾经无数次的讽刺他的团队成员,说他们无能,因此,这次大家没有对他表示出任何怜悯。有一个人还坚持不懈地戏弄卡特勒:“你愿意让我写这个代码吗?或者我们是不是应该请微软其他小组的来为你做这件事?”

卡特勒没有被逗笑。他坚持认为问题出在硬盘驱动器里,于是他买了个新的。工作了;但后来又不工作了。他试验了一下另一条电缆。还是不工作。卡特勒开始认为他可能买了一批坏电缆。

直到有一天,当卡特勒觉得自己看起来永远也不能搞清楚这个时好时坏的问题时,他对索特说:“这边有个地方就是出毛病。”这话让索特想起了什么,他急忙站起身,快速翻阅一本手册。他的脸色霎时变了。这本手册里藏着一个让人不注意的线索。索特忘记安装电路的一个次要零件。卡特勒的代码一直是正确的。

在发生这件事情的同时,盖茨在焦急地等待卡特勒第一次预报NT的完成时间。在还有两个星期就到了卡特勒来微软一周年时,盖茨会见了卡特勒和皮亚佐利(Perazzoli),地点是微软的董事会会议室,会议室很朴素。“这是第一次,我们向比尔承诺具体的发布计划。”皮亚佐利说。日程安排得简洁和紧凑,这个允诺是有限制的。报告是由皮亚佐利做的,他想留出卡特勒去回答问题。皮亚佐利声明,老版本的OS/2应用程序不能在NT上运行,除非做大量的修改。而且DOS应用程序也根本不能运行。同时,现存的OS/2“驱动程序”和控制特定外部设备的程序也不能运行,比如控制打印机的程序(每个牌子的打印机通常都需要它自己的驱动程序代码)。这最后一点确实很让盖茨苦恼,他认为保持驱动程序不变,用他的话来说,就好像“保持母爱,你总是需要的”。他做了一些劝说,但盖茨最终还是接受了写新的驱动程序(或者要生产外围设备的公司去做这件事),这胜于为了复用现存的驱动程序而采取一系列笨拙的步骤。

针对这些目标,NT团队发誓要在1991年3月30日之前交出NT的最终版本,也就是“黄金主盘”(Golden Master)。在从当时到最后期限之间的18个月中,他们要到达一系列目标。这些,同样也吸引着盖茨的注意力:

1990年1月30日 最小型的NT完成并可以运行。

1990年7月30日 编码完成。

1990年10月30日 完成给程序员的版本。

1991年3月30日 黄金主盘。

这个日程是很激进的,要保持这个进度还要靠不直接归卡特勒控制的三个小组能及时帮忙。

首先,让NT可以在英特尔的386系列芯片上运行很重要,带这种芯片的电脑是个人电脑的标准。盖茨把这项任务看作是“最高优先级”的,将其称为“关口”。他从来没有想到过会在NT可以在标准电脑上运行前发布它。然而,卡特勒对越过这个关口根本没有热情。他把RISC芯片当作是NT的根据地。卡特勒的偏见有他的逻辑,他担心如果为装有386芯片的标准个人电脑去做一个NT版本的话,会削弱他的可移植性目标。标准个人电脑当时非常流行,这会引诱他的团队去写不可移植的汇编编码来让NT跑得更快,或者用一些只能在386上工作的特殊技巧。

皮亚佐利很直白地表明了他们的担心:“对我们来说,转移到386是灾难。”另一方面,“使用386是有好处的,因为市场上有足够多的386个人电脑”,而他的程序员迫不及待地想有机会为目标机器写代码。实际上,即使皮亚佐利愿意做这个转变,他也找不到空闲的人来做这件事。NT团队已经是刚成立时的两倍大。又有好几个人从卡特勒以前的DEC实验室跳槽过来,但这个团队的总人数还是不到二十人。

为了启动这个移植工作,盖茨暗中让OS/2小组释放一个人过来,并且承诺还会派两个程序员过来。NT的日程安排需要他们快速的工作。

网络代表了第二个外部依赖。卡特勒努力为自己的网络小组催促对方。当时,他依赖着达里尔·鲁宾(Darryl Rubin)的人,他和鲁宾的关系争斗得很僵。达里尔·海温斯(Darryl Havens)为卡特勒监管网络方面的工作,他和鲁宾的一个伙伴达成了一项敏感的约定,这个约定要求两支队伍要分享工作成果,而且至少要努力在工作目标和技术方面取得一致。鲁宾的副手叫布莱恩·瓦伦丁(Brian Valentine),他表扬海温斯采取断然行动结束了两个团队之间的纷争。“海温斯非常聪明,他不发出威胁,从不对你发起挑战。”瓦伦丁说,“他不会指责你的愚钝,那样会让人们立刻进入到防备的状态。”

然而,卡特勒并没因为与鲁宾的和善而感到怎么高兴。尽管他很感谢海温斯的努力,但他把这次休战只当作是一次暂停,他会继续努力得到他自己的网络小组。

图形,包括用户界面,是NT团队的第三个也是最大的外部依赖。卡特勒团队中没有人在图形方面工作,尽管操作系统的这部分代码很重要,所有在电脑屏幕上可见的东西都是它产生的。“我们总是要有做图形的人,”卡特勒说。但是他对图形方面的代码知之甚少。他之前做的操作系统,虽然很强大,但都不提供图形。用计算机领域的话说,它们只支持基于字符或者文本的程序。这对卡特勒来说挺好了,他知道控制文本程序的“神秘握手信号”,就像很多盲人可以理解盲文那样。但是卡特勒还没有意识到,他的方式已经过时。现在已经是可视化的时代,所有抽象的概念,以及基本的需求和想法都越来越多地用视觉符号来表达。电脑不再是从前的数字咀嚼机,它已经走进了好莱坞;它现在是具有无比威力的图象制造者。因此,从很多方面来看,图形决定着计算机的外观和感觉。

卡特勒对可视化方式感到不自在。就像他欣然允许别人去解决NT与旧的DOS和OS/2应用程序兼容问题那样,他假定图形也是别人的问题。它果然是。

如果查克·维特莫(Chuck Whitmer)演电影,那他肯定是某位好莱坞导演青睐的对象。他是手操键盘的印地安那·琼斯(Indiana Jones)。维特莫出生于1957年,十几岁时就是数学和国际象棋天才,他仅花了四年时间就获得了芝加哥大学的物理学学士和硕士两个学位。然后,他前往普林斯顿攻读博士学位,从那时起,他开始赌博,并成为纸牌游戏的高手。凭借他能把六组扑克牌一下子记在脑袋里的能力,他很快就能用在亚特兰大赌博城玩21点赢来的钱支付所有学费。为了避免有人注意到他的这个技能,他一直

[1] [2] [3] 微软Windows7操作系统