Windows NT之父&微软王牌程序员——David Cutler

2012年4月8日 发表评论 阅读评论

David Cutler,VMS和Windows NT的首席设计师,1988年去微软前硅谷最牛的内核开发人员,在操作系统领域摸爬滚打几十年,其间的经历就像一部标准的硅谷程序员奋斗日记。

大卫·卡特勒(David Cutler),又叫做戴夫·卡特勒(Dave Cutler),戴夫是他的昵称。他是一位传奇程序员,是VMS和Windows NT的首席设计师,被人们成为“操作系统天神”。他曾供职于杜邦、DEC等公司,1988年,由比尔 ·盖茨招募到微软,他用了5年时间花费了15亿美金,负责组织NT的开发。

与许多计算机界的前辈牛人们一样,David Cutler并不是计算机科班出生,他在大学拿的是数学学士,主攻物理,满怀热情地想成为一位建造事物的工程师。所以,毕业后他进入杜邦公司从事材料测试。一次偶然的机会,David被指派负责在DEC的计算机上运行模拟程序,还为多台单机实时系统编写中央控制程序,调度各种任务、监控系统运作。这个经历不仅丰富了David的软件知识,还让他做出了一个重大的决定:去一家真正从事计算机业务的公司,开发操作系统。

1971年,David Cutler离开杜邦公司来到DEC。他的第一项任务就是为DEC的PDP-11微处理器开发操作系统——RSX-11M。PDP-11是为工业控制和制造控制而设计的16位微处理器。David结合总体概念和设计原则,利用汇编语言在非常有限的内存空间内实现了多项系统功能,如:树型文件系统、交换应用程序、实时调度和一整套开发工具等。据David回忆,当时连他的橡皮图章上都刻着开发这个操作系统的目标——“容量就是一切!”后来,这些概念和原则也体现在了NT上。

70年代后期,DEC公司在PDP-11的基础上开发出32位的VAX处理器。与之相应,也要开发基于VAX的操作系统VMS,要能兼容 RSX-11M,可以在不同大小的机器上运行。David Cutler成为这个项目主要负责人,设计VMS的架构。1977年,VMS 1.0问世。David唯一的遗憾是,因为迎合商业进度,因此VMS也是用汇编语言写的,尽管当时完全可以用高级语言。所以,技术上正确的事并不见得是商业上的最佳选择。随后,David继续研制VMS的后续版本,不过他有些不耐烦了。1981年,David威胁要离开DEC。为了挽留它的明星开发者,DEC给了David大约200位软硬件工程师。David把他的小组搬到西雅图,并建立了一个开发中心。这个精英小组的目标是设计一个新的CPU 体系结构和操作系统,可以把DEC带到九十年代。DEC把这个小组的硬件项目称为Prism,操作系统为Mica。

很不幸,Prism项目于1988年被DEC撤销,很多项目成员也被解雇。因此David Cutler萌生了去意。此时,为了未来能够与Unix抗争、开发新的操作系统,Bill Gates见缝插针,竭力劝说David加入微软。David去了,还带去了许多与他一同开发VMS和Mica的程序员。进入微软,David领导一个工程小组,负责设计一种能提供文件服务、打印服务和应用服务的对称多处理。操作系统,起名为Windows New Technology(NT)。这就是Bill Gates想用来对抗Unix的新型武器。

经过近4年的开发工作,在1993年6月发布的第一版Windows NT 3.1,已经具备了现代操作系统的雏形——抢先式多任务、虚拟内存、对称多处理器、图形界面、C2安全级、坚固而稳定的内核、内置网络支持、完全的32位代码等。而1994年推出的Windows NT 3.51和1996年推出的Windows NT 4.0,在性能上有了更进一步提高;NT4.0甚至提供了当时最先进的Windows 95风格界面。David Cutler在自己的天梯上继续攀升,Bill Gates也在销售数字面前笑得合不拢嘴。

毫无疑问,NT操作系统有一个优秀的内核,David Cutler成功地引入了硬件抽象层、内核对象这些天才的思想。虽然我们没能得见它的源代码,但在钻研NT DDK的过程中、在埋头可能就是由David亲笔撰写的文档中时,总能有那些闪光点,让我们可以在不同的时空与大师对话。

如今,Built On NT Technology的Windows 2000和XP的成绩有目共睹,而针对64位处理器的XP也即将推出。回顾开发操作系统的历程,David情不自禁地感叹道:“我也不知道,自己竟是那么的幸运,能够在有生之年开发好几个操作系统,而对于任何一个人来说,哪怕只开发一个都是非常难得的机会。”

是的,David Cutler做到了,在操作系统领域中纵横了几十年,缔造了许多传奇和神话。然而,又有谁会去看他几十年的专注、寂寞、付出与艰辛呢?可能每个人在开始自己的职业生涯时都会设定一个目标。然而只有那么一些人会抓住目标紧紧不放、全心投入,最后这些人成了我们眼中的成功者、技术天才。也许,这就是成就天才与普通人的不同之处。

David Cutler趣事一则

David Cutler,VMS和Windows NT的首席设计师,去微软前号称硅谷最牛的kernel开发员。当初他和他的手下在微软一周内把一个具备基本功能的bootable kernel写出来,然后说:“who can’t write an OS in a week?",也是牛气冲天的说。顺便说一句,D爷爷到NT3.5时,管理1500名开发员,自己还兼做设计和编程,不改coder本色啊。D爷爷天生脾气火爆,和人争论时喜欢双手猛击桌子以壮声势。:-) 日常交谈F-word不离口。他面试秘书时必问:"what do you think of the word ‘fuck’?" ,让无数美女刹羽而归。终于有一天,一个同样火爆的女面对这个问题脱口而出:"That’s my favorite word"。于是她被录取乐,为D爷爷工作到NT3.5发布。

David Cutler是全世界公认的Windows NT之父,我们现在最常用的从XP开始直到Win7全部都是NT的内核,只是版本号不一样。这位NT之父对Windows内核有多少代码贡献呢,闪电博客统计了一下:

\ntos\ex\alpha\raisests.c David N. Cutler (davec) 18-Oct-1990
\ntos\ex\ia64\raisests.c based on David N. Cutler (davec) 18-Oct-1990
\ntos\ex\mips\raisests.c David N. Cutler (davec) 18-Oct-1990
\ntos\ex\ppc\raisests.c David N. Cutler (davec) 18-Oct-1990
\ntos\ex\callperf.c David N. Cutler (davec) 22-May-1994
\ntos\ex\delay.c David N. Cutler (davec) 13-May-1989
\ntos\ex\event.c David N. Cutler (davec) 8-May-1989
\ntos\ex\exp.h David N. Cutler (davec) 23-May-1989
\ntos\ex\handle.c David N. Cutler (davec) 17-May-1995 (rewrite)
\ntos\ex\lookasid.c David N. Cutler (davec) 19-Feb-1995
\ntos\ex\mutant.c David N. Cutler (davec) 17-Oct-1989
\ntos\ex\pool.c David N. Cutler (davec) 27-May-1994
\ntos\ex\probe.c David N. Cutler (davec) 19-Jan-1990
\ntos\ex\raise.c David N. Cutler (davec) 29-Apr-1995
\ntos\ex\region.c David N. Cutler (davec) 25-Novy-1995
\ntos\ex\resource.c David N. Cutler (davec) 20-Mar-1994
\ntos\ex\semphore.c David N. Cutler (davec) 8-May-1989
\ntos\ex\spintrac.c David N. Cutler (davec) 16-May-1989
\ntos\ex\sysenv.c David N. Cutler (davec) 10-Nov-1991
\ntos\ex\timer.c David N. Cutler (davec) 12-May-1989
\ntos\inc\alpha.h Joe Notarangelo  31-Mar-1992   (based on mips.h by Dave Cutler)
\ntos\inc\arc.h David N. Cutler (davec) 18-May-1991
\ntos\inc\arccodes.h David N. Cutler (davec) 20-Sep-1991
\ntos\inc\duodma.h David N. Cutler (davec) 13-Nov-1990
\ntos\inc\dzport.h David N. Cutler (davec) 15-Aug-1990
\ntos\inc\hal.h David N. Cutler (davec) 25-Apr-1991
\ntos\inc\i386.h David N. Cutler (davec) 2-Aug-1989
\ntos\inc\ia64.h David N. Cutler (davec) 31-Mar-1990
\ntos\inc\jazzdef.h David N. Cutler (davec) 26-Nov-1990
\ntos\inc\jazzdma.h David N. Cutler (davec) 13-Nov-1990
\ntos\inc\jazzint.h David N. Cutler (davec) 6-May-1991
\ntos\inc\jazzprom.h David N. Cutler (davec) 27-Apr-1991
\ntos\inc\jazzrtc.h David N. Cutler (davec) 3-May-1991
\ntos\inc\jazzserp.h David N. Cutler (davec) 28-Apr-1991
\ntos\inc\jnsndef.h David N. Cutler (davec) 26-Nov-1990
\ntos\inc\jnsnint.h David N. Cutler (davec) 6-May-1991
\ntos\inc\jnsnrtc.h David N. Cutler (davec) 3-May-1991
\ntos\inc\jnsnserp.h David N. Cutler (davec) 28-Apr-1991
\ntos\inc\ke.h David N. Cutler (davec) 27-Feb-1989
\ntos\inc\mips.h David N. Cutler (davec) 31-Mar-1990
\ntos\inc\ppc.h Based on mips.h, by David N. Cutler (davec) 31-Mar-1990
\ntos\inc\ppcdef.h David N. Cutler (davec) 26-Nov-1990
\ntos\inc\ppcserp.h David N. Cutler (davec) 28-Apr-1991
\ntos\io\complete.c David N. Cutler (davec) 25-Feb-1994
\ntos\kd\alpha\kdtrap.c David N. Cutler 27-July-1990
\ntos\kd\mips\kdtrap.c David N. Cutler 27-July-1990
\ntos\kd\ppc\kdtrap.c Based on David N. Cutler MIPS version 27-July-1990
\ntos\kd\kdbreak.c David N. Cutler 2-Aug-1990
\ntos\kd\kdcomio.c David N. Cutler 27-July-1990
\ntos\kd\kdinit.c David N. Cutler 27-July-1990
\ntos\kd64\alpha\kdtrap.c David N. Cutler 27-July-1990
\ntos\kd64\ia64\kdtrap.c David N. Cutler 27-July-1990
\ntos\kd64\kdbreak.c David N. Cutler 2-Aug-1990
\ntos\kd64\kdcomio.c David N. Cutler 27-July-1990
\ntos\kd64\kdinit.c David N. Cutler 27-July-1990
\ntos\ke\alpha\alignem.c David N. Cutler (davec) 17-Jun-1991
\ntos\ke\alpha\allproc.c David N. Cutler 29-Apr-1993
\ntos\ke\alpha\apcuser.c David N. Cutler (davec) 23-Apr-1990
\ntos\ke\alpha\callback.c David N. Cutler (davec) 29-Oct-1994
\ntos\ke\alpha\exceptn.c David N. Cutler (davec) 3-Apr-1990
\ntos\ke\alpha\floatem.c David N. Cutler (davec) 16-Jun-1991
\ntos\ke\alpha\flush.c David N. Cutler (davec) 26-Apr-1990
\ntos\ke\alpha\flushtb.c David N. Cutler (davec) 13-May-1989
\ntos\ke\alpha\getsetrg.c David N. Cutler (davec) 17-Jun-1991
\ntos\ke\alpha\initkr.c David N. Cutler (davec) 11-Apr-1990
\ntos\ke\alpha\intobj.c David N. Cutler (davec) 3-Apr-1990
\ntos\ke\alpha\ipi.c David N. Cutler 24-Apr-1993
\ntos\ke\alpha\thredini.c David N. Cutler (davec) 1-Apr-1990
\ntos\ke\i386\apcuser.c David N. Cutler (davec) 23-Apr-1990
\ntos\ke\i386\callback.c David N. Cutler (davec) 29-Oct-1994
\ntos\ke\i386\exceptn.c David N. Cutler (davec) 30-Apr-1989
\ntos\ke\i386\flush.c David N. Cutler (davec) 26-Apr-1990
\ntos\ke\i386\flushtb.c David N. Cutler (davec) 13-May-1989
\ntos\ke\i386\intobj.c David N. Cutler (davec) 30-Jul-1989
\ntos\ke\i386\kernlini.c David N. Cutler (davec) 21-Apr-1989
\ntos\ke\i386\thredini.c David N. Cutler (davec) 31-Mar-1990
\ntos\ke\ia64\alignem.c David N. Cutler (davec) 17-Jun-1991
\ntos\ke\ia64\allproc.c Based on MIPS original (David N. Cutler 29-Apr-1993)
\ntos\ke\ia64\apcuser.c based on MIPS version by David N. Cutler (davec) 23-Apr-1990
\ntos\ke\ia64\callback.c based on David N. Cutler (davec) 29-Oct-1994
\ntos\ke\ia64\getsetrg.c David N. Cutler (davec) 17-Jun-1991
\ntos\ke\ia64\initkr.c Based on MIPS version (David N. Cutler (davec) 11-Apr-1990)
\ntos\ke\ia64\intobj.c David N. Cutler (davec) 3-Apr-1990
\ntos\ke\ia64\mpipi.c Based on version of David N. Cutler 24-Apr-1993
\ntos\ke\ia64\thredini.c David N. Cutler (davec) 1-Apr-1990
\ntos\ke\mips\alignem.c David N. Cutler (davec) 17-Jun-1991
\ntos\ke\mips\allproc.c David N. Cutler 29-Apr-1993
\ntos\ke\mips\apcuser.c David N. Cutler (davec) 23-Apr-1990
\ntos\ke\mips\branchem.c David N. Cutler (davec) 17-Jun-1991
\ntos\ke\mips\buserror.c David N. Cutler (davec) 31-Oct-1991
\ntos\ke\mips\callback.c David N. Cutler (davec) 29-Oct-1994
\ntos\ke\mips\dmpstate.c David N. Cutler (davec) 17-Jan-1992
\ntos\ke\mips\exceptn.c David N. Cutler (davec) 3-Apr-1990
\ntos\ke\mips\floatem.c David N. Cutler (davec) 16-Jun-1991
\ntos\ke\mips\flush.c David N. Cutler (davec) 26-Apr-1990
\ntos\ke\mips\genmips.c David N. Cutler (davec) 27-Mar-1990
\ntos\ke\mips\getsetrg.c David N. Cutler (davec) 17-Jun-1991
\ntos\ke\mips\initkr.c David N. Cutler (davec) 11-Apr-1990
\ntos\ke\mips\intobj.c David N. Cutler (davec) 3-Apr-1990
\ntos\ke\mips\thredini.c David N. Cutler (davec) 1-Apr-1990
\ntos\ke\mips\xxflshtb.c David N. Cutler (davec) 13-May-1989
\ntos\ke\mips\xxmpipi.c David N. Cutler 24-Apr-1993
\ntos\ke\ppc\alignem.c Based on MIPS version by David N. Cutler (davec) 17-Jun-1991
\ntos\ke\ppc\allproc.c David N. Cutler 29-Apr-1993
\ntos\ke\ppc\apcuser.c based on MIPS version by David N. Cutler (davec) 23-Apr-1990
\ntos\ke\ppc\callback.c David N. Cutler (davec) 29-Oct-1994
\ntos\ke\ppc\dmpstate.c Based on Dave Cutler’s MIPS implemenation
\ntos\ke\ppc\exceptn.c Adapted from MIPS version by David N. Cutler (davec) 3-Apr-1990
\ntos\ke\ppc\flush.c David N. Cutler (davec) 26-Apr-1990
\ntos\ke\ppc\flushtb.c David N. Cutler (davec) 13-May-1989
\ntos\ke\ppc\genppc.c David N. Cutler (davec) 27-Mar-1990
\ntos\ke\ppc\getsetrg.c Based on MIPS version by David N. Cutler (davec) 17-Jun-1991
\ntos\ke\ppc\initkr.c David N. Cutler (davec) 11-Apr-1990
\ntos\ke\ppc\intobj.c Based on original code by David N. Cutler (davec) 3-Apr-1990
\ntos\ke\ppc\ipi.c David N. Cutler 24-Apr-1993
\ntos\ke\ppc\thredini.c David N. Cutler (davec) 1-Apr-1990
\ntos\ke\tests\mipsflt\flpt.c David N. Cutler (davec) 20-Jun-1991
\ntos\ke\tests\mipsflt\flpt.h David N. Cutler (davec) 1-Jul-1991
\ntos\ke\tests\mipsflt\flpt2.c David N. Cutler (davec) 1-Jul-1991
\ntos\ke\tests\xcphnd\xcpt4.c David N. Cutler (davec) 18-Sep-1990
\ntos\ke\apcobj.c David N. Cutler (davec) 5-Mar-1989
\ntos\ke\apcsup.c David N. Cutler (davec) 14-Mar-1989
\ntos\ke\balmgr.c David N. Cutler (davec) 13-Jul-1991
\ntos\ke\channel.c David N. Cutler (davec) 26-Mar-1995
\ntos\ke\config.c David N. Cutler (davec) 9-Sep-1991
\ntos\ke\devquobj.c David N. Cutler (davec) 1-Apr-1989
\ntos\ke\dpcobj.c David N. Cutler (davec) 6-Mar-1989
\ntos\ke\dpcsup.c David N. Cutler (davec) 22-Apr-1989
\ntos\ke\eventobj.c David N. Cutler (davec) 27-Feb-1989
\ntos\ke\kernldat.c David N. Cutler (davec) 12-Mar-1989
\ntos\ke\ki.h David N. Cutler (davec) 28-Feb-1989
\ntos\ke\kiinit.c David N. Cutler 11-May-1993
\ntos\ke\miscc.c David N. Cutler (davec) 13-May-1989
\ntos\ke\mutntobj.c David N. Cutler (davec) 16-Oct-1989
\ntos\ke\procobj.c David N. Cutler (davec) 7-Mar-1989
\ntos\ke\queueobj.c David N. Cutler (davec) 31-Dec-1993
\ntos\ke\raisexcp.c David N. Cutler (davec) 8-Aug-1990
\ntos\ke\semphobj.c David N. Cutler (davec) 28-Feb-1989
\ntos\ke\thredobj.c David N. Cutler (davec) 4-Mar-1989
\ntos\ke\thredsup.c David N. Cutler (davec) 5-Mar-1989
\ntos\ke\timerobj.c David N. Cutler (davec) 2-Mar-1989
\ntos\ke\timersup.c David N. Cutler (davec) 13-Mar-1989
\ntos\ke\wait.c David N. Cutler (davec) 23-Mar-89
\ntos\ke\waitsup.c David N. Cutler (davec) 24-Mar-1989
\ntos\ke\xipi.c David N. Cutler (davec) 24-Apr-1993
\ntos\ke\yield.c David N. Cutler (davec) 15-Mar-1996
\ntos\mm\axp64\debugsup.c David N. Cutler (davec) 24-Feb-1998
\ntos\mm\flushbuf.c David N. Cutler 24-Apr-1991
\ntos\ps\alpha\psctxalp.c David N. Cutler (davec) 1-Oct-1990
\ntos\ps\ia64\psctxi64.c David N. Cutler (davec) 1-Oct-1990
\ntos\ps\mips\psctxmip.c David N. Cutler (davec) 1-Oct-1990
\ntos\ps\ppc\psctxppc.c David N. Cutler (davec) 1-Oct-1990
\ntos\ps\kulookup.c David N. Cutler (davec) 8-Oct-90
\ntos\rtl\alpha\chandler.c David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\alpha\context.c David N. Cutler (davec) 18-Apr-1990
\ntos\rtl\alpha\exdsptch.c David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\alpha\ntrtlalp.h David N. Cutler (davec) 19-Apr-90
\ntos\rtl\i386\divlarge.c David N. Cutler 10-Aug-1992
\ntos\rtl\i386\exdsptch.c David N. Cutler (davec) 13-Aug-1989
\ntos\rtl\i386\raisests.c David N. Cutler (davec) 8-Aug-1990
\ntos\rtl\ia64\chandler.c Based on the version by David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\ia64\exdsptch.c based on the version by David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\mips\chandler.c David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\mips\context.c David N. Cutler (davec) 18-Apr-1990
\ntos\rtl\mips\exdsptch.c David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\mips\ntrtlmip.h David N. Cutler (davec) 19-Apr-90
\ntos\rtl\ppc\chandler.c David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\ppc\context.c David N. Cutler (davec) 18-Apr-1990
\ntos\rtl\ppc\exdsptch.c based on MIPS version by David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\ppc\jumps.c David N. Cutler (davec) 15-Sep-1990
\ntos\rtl\ppc\ntrtlppc.h based on MIPS version by David N. Cutler (davec) 19-Apr-90
\ntos\rtl\ppc\vunwind.c based on MIPS version by David N. Cutler (davec) 11-Sep-1990
\ntos\rtl\generr.c David N. Cutler (davec) 2-Dec-1992
\ntos\rtl\lookasid.c David N. Cutler (davec) 19-Feb-1995
\ntos\rtl\ntrtlp.h David N. Cutler (davec) 15-Aug-1989
\ntos\rtl\recip.c David N. Cutler (davec) 13-May-1989
\sdktools\imagehlp\checksum.c David N. Cutler (davec) 21-Mar-1993

共总有177个文件是出自这位NT之父。比Mark Lucovsky还要多一倍。当之无愧的NT之父。

更让人钦佩的是,这位老兄依然奋战在代码的第一线。与国内目前普遍认为30岁以后就不适合做Coding的态度截然不同。现在业内的心态大多太浮躁了。


转载请注明来自:[闪电博客]http://shandian.biz/2150.html

分类: 励志文章 标签:
  1. 博客控
    2012年4月8日15:32 | #1

    这文章太专业了,路过一下吧。

  2. 免备案空间
    2012年4月9日17:53 | #2

    了解一下,

  3. 易品游博
    2012年4月10日22:00 | #3

    拜神来了

  4. hong
    2016年10月23日10:01 | #4

    大神