代码传奇丨比尔盖茨亲手挖了个非科班程序员 如今是硅谷公认的操作系统天神

百家 作者:程序人生 2017-11-01 05:11:12

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 内核有多少代码贡献呢,小编统计了一下:


ntosexalpharaisests.c David N. Cutler (davec) 18-Oct-1990 

ntosexia64raisests.c based on David N. Cutler (davec) 18-Oct-1990 

ntosexmipsraisests.c David N. Cutler (davec) 18-Oct-1990 

ntosexppcraisests.c David N. Cutler (davec) 18-Oct-1990 

ntosexcallperf.c David N. Cutler (davec) 22-May-1994 

ntosexdelay.c David N. Cutler (davec) 13-May-1989 

ntosexevent.c David N. Cutler (davec) 8-May-1989 

ntosexexp.h David N. Cutler (davec) 23-May-1989 

ntosexhandle.c David N. Cutler (davec) 17-May-1995 (rewrite) 

ntosexlookasid.c David N. Cutler (davec) 19-Feb-1995 

ntosexmutant.c David N. Cutler (davec) 17-Oct-1989 

ntosexpool.c David N. Cutler (davec) 27-May-1994 

ntosexprobe.c David N. Cutler (davec) 19-Jan-1990 

ntosexraise.c David N. Cutler (davec) 29-Apr-1995 

ntosexregion.c David N. Cutler (davec) 25-Novy-1995 

ntosexresource.c David N. Cutler (davec) 20-Mar-1994 

ntosexsemphore.c David N. Cutler (davec) 8-May-1989 

ntosexspintrac.c David N. Cutler (davec) 16-May-1989 

ntosexsysenv.c David N. Cutler (davec) 10-Nov-1991 

ntosextimer.c David N. Cutler (davec) 12-May-1989 

ntosincalpha.h Joe Notarangelo 31-Mar-1992 (based on mips.h by Dave Cutler) 

ntosincarc.h David N. Cutler (davec) 18-May-1991 

ntosincarccodes.h David N. Cutler (davec) 20-Sep-1991 

ntosincduodma.h David N. Cutler (davec) 13-Nov-1990 

ntosincdzport.h David N. Cutler (davec) 15-Aug-1990 

ntosinchal.h David N. Cutler (davec) 25-Apr-1991 

ntosinci386.h David N. Cutler (davec) 2-Aug-1989 

ntosincia64.h David N. Cutler (davec) 31-Mar-1990 

ntosincjazzdef.h David N. Cutler (davec) 26-Nov-1990 

ntosincjazzdma.h David N. Cutler (davec) 13-Nov-1990 

ntosincjazzint.h David N. Cutler (davec) 6-May-1991 

ntosincjazzprom.h David N. Cutler (davec) 27-Apr-1991 

ntosincjazzrtc.h David N. Cutler (davec) 3-May-1991 

ntosincjazzserp.h David N. Cutler (davec) 28-Apr-1991 

ntosincjnsndef.h David N. Cutler (davec) 26-Nov-1990 

ntosincjnsnint.h David N. Cutler (davec) 6-May-1991 

ntosincjnsnrtc.h David N. Cutler (davec) 3-May-1991 

ntosincjnsnserp.h David N. Cutler (davec) 28-Apr-1991 

ntosincke.h David N. Cutler (davec) 27-Feb-1989 

ntosincmips.h David N. Cutler (davec) 31-Mar-1990 

ntosincppc.h Based on mips.h, by David N. Cutler (davec) 31-Mar-1990 

ntosincppcdef.h David N. Cutler (davec) 26-Nov-1990 

ntosincppcserp.h David N. Cutler (davec) 28-Apr-1991 

ntosiocomplete.c David N. Cutler (davec) 25-Feb-1994 

ntoskdalphakdtrap.c David N. Cutler 27-July-1990 

ntoskdmipskdtrap.c David N. Cutler 27-July-1990 

ntoskdppckdtrap.c Based on David N. Cutler MIPS version 27-July-1990 

ntoskdkdbreak.c David N. Cutler 2-Aug-1990 

ntoskdkdcomio.c David N. Cutler 27-July-1990 

ntoskdkdinit.c David N. Cutler 27-July-1990 

ntoskd64alphakdtrap.c David N. Cutler 27-July-1990 

ntoskd64ia64kdtrap.c David N. Cutler 27-July-1990 

ntoskd64kdbreak.c David N. Cutler 2-Aug-1990 

ntoskd64kdcomio.c David N. Cutler 27-July-1990 

ntoskd64kdinit.c David N. Cutler 27-July-1990 

ntoskealphaalignem.c David N. Cutler (davec) 17-Jun-1991 

ntoskealphaallproc.c David N. Cutler 29-Apr-1993 

ntoskealphaapcuser.c David N. Cutler (davec) 23-Apr-1990 

ntoskealphacallback.c David N. Cutler (davec) 29-Oct-1994 

ntoskealphaexceptn.c David N. Cutler (davec) 3-Apr-1990 

ntoskealphafloatem.c David N. Cutler (davec) 16-Jun-1991 

ntoskealphaflush.c David N. Cutler (davec) 26-Apr-1990 

ntoskealphaflushtb.c David N. Cutler (davec) 13-May-1989 

ntoskealphagetsetrg.c David N. Cutler (davec) 17-Jun-1991 

ntoskealphainitkr.c David N. Cutler (davec) 11-Apr-1990 

ntoskealphaintobj.c David N. Cutler (davec) 3-Apr-1990 

ntoskealphaipi.c David N. Cutler 24-Apr-1993 

ntoskealphathredini.c David N. Cutler (davec) 1-Apr-1990 

ntoskei386apcuser.c David N. Cutler (davec) 23-Apr-1990 

ntoskei386callback.c David N. Cutler (davec) 29-Oct-1994 

ntoskei386exceptn.c David N. Cutler (davec) 30-Apr-1989 

ntoskei386flush.c David N. Cutler (davec) 26-Apr-1990 

ntoskei386flushtb.c David N. Cutler (davec) 13-May-1989 

ntoskei386intobj.c David N. Cutler (davec) 30-Jul-1989 

ntoskei386kernlini.c David N. Cutler (davec) 21-Apr-1989 

ntoskei386thredini.c David N. Cutler (davec) 31-Mar-1990 

ntoskeia64alignem.c David N. Cutler (davec) 17-Jun-1991 

ntoskeia64allproc.c Based on MIPS original (David N. Cutler 29-Apr-1993) 

ntoskeia64apcuser.c based on MIPS version by David N. Cutler (davec) 23-Apr-1990 

ntoskeia64callback.c based on David N. Cutler (davec) 29-Oct-1994 

ntoskeia64getsetrg.c David N. Cutler (davec) 17-Jun-1991 

ntoskeia64initkr.c Based on MIPS version (David N. Cutler (davec) 11-Apr-1990) 

ntoskeia64intobj.c David N. Cutler (davec) 3-Apr-1990 

ntoskeia64mpipi.c Based on version of David N. Cutler 24-Apr-1993 

ntoskeia64thredini.c David N. Cutler (davec) 1-Apr-1990 

ntoskemipsalignem.c David N. Cutler (davec) 17-Jun-1991 

ntoskemipsallproc.c David N. Cutler 29-Apr-1993 

ntoskemipsapcuser.c David N. Cutler (davec) 23-Apr-1990 

ntoskemipsbranchem.c David N. Cutler (davec) 17-Jun-1991 

ntoskemipsbuserror.c David N. Cutler (davec) 31-Oct-1991 

ntoskemipscallback.c David N. Cutler (davec) 29-Oct-1994 

ntoskemipsdmpstate.c David N. Cutler (davec) 17-Jan-1992 

ntoskemipsexceptn.c David N. Cutler (davec) 3-Apr-1990 

ntoskemipsfloatem.c David N. Cutler (davec) 16-Jun-1991 

ntoskemipsflush.c David N. Cutler (davec) 26-Apr-1990 

ntoskemipsgenmips.c David N. Cutler (davec) 27-Mar-1990 

ntoskemipsgetsetrg.c David N. Cutler (davec) 17-Jun-1991 

ntoskemipsinitkr.c David N. Cutler (davec) 11-Apr-1990 

ntoskemipsintobj.c David N. Cutler (davec) 3-Apr-1990 

ntoskemipsthredini.c David N. Cutler (davec) 1-Apr-1990 

ntoskemipsxxflshtb.c David N. Cutler (davec) 13-May-1989 

ntoskemipsxxmpipi.c David N. Cutler 24-Apr-1993 

ntoskeppcalignem.c Based on MIPS version by David N. Cutler (davec) 17-Jun-1991 

ntoskeppcallproc.c David N. Cutler 29-Apr-1993 

ntoskeppcapcuser.c based on MIPS version by David N. Cutler (davec) 23-Apr-1990 

ntoskeppccallback.c David N. Cutler (davec) 29-Oct-1994 

ntoskeppcdmpstate.c Based on Dave Cutler』s MIPS implemenation 

ntoskeppcexceptn.c Adapted from MIPS version by David N. Cutler (davec) 3-Apr-1990 

ntoskeppcflush.c David N. Cutler (davec) 26-Apr-1990 

ntoskeppcflushtb.c David N. Cutler (davec) 13-May-1989 

ntoskeppcgenppc.c David N. Cutler (davec) 27-Mar-1990 

ntoskeppcgetsetrg.c Based on MIPS version by David N. Cutler (davec) 17-Jun-1991 

ntoskeppcinitkr.c David N. Cutler (davec) 11-Apr-1990 

ntoskeppcintobj.c Based on original code by David N. Cutler (davec) 3-Apr-1990 

ntoskeppcipi.c David N. Cutler 24-Apr-1993 

ntoskeppcthredini.c David N. Cutler (davec) 1-Apr-1990 

ntosketestsmipsfltflpt.c David N. Cutler (davec) 20-Jun-1991 

ntosketestsmipsfltflpt.h David N. Cutler (davec) 1-Jul-1991 

ntosketestsmipsfltflpt2.c David N. Cutler (davec) 1-Jul-1991 

ntosketestsxcphndxcpt4.c David N. Cutler (davec) 18-Sep-1990 

ntoskeapcobj.c David N. Cutler (davec) 5-Mar-1989 

ntoskeapcsup.c David N. Cutler (davec) 14-Mar-1989 

ntoskebalmgr.c David N. Cutler (davec) 13-Jul-1991 

ntoskechannel.c David N. Cutler (davec) 26-Mar-1995 

ntoskeconfig.c David N. Cutler (davec) 9-Sep-1991 

ntoskedevquobj.c David N. Cutler (davec) 1-Apr-1989 

ntoskedpcobj.c David N. Cutler (davec) 6-Mar-1989 

ntoskedpcsup.c David N. Cutler (davec) 22-Apr-1989 

ntoskeeventobj.c David N. Cutler (davec) 27-Feb-1989 

ntoskekernldat.c David N. Cutler (davec) 12-Mar-1989 

ntoskeki.h David N. Cutler (davec) 28-Feb-1989 

ntoskekiinit.c David N. Cutler 11-May-1993 

ntoskemiscc.c David N. Cutler (davec) 13-May-1989 

ntoskemutntobj.c David N. Cutler (davec) 16-Oct-1989 

ntoskeprocobj.c David N. Cutler (davec) 7-Mar-1989 

ntoskequeueobj.c David N. Cutler (davec) 31-Dec-1993 

ntoskeraisexcp.c David N. Cutler (davec) 8-Aug-1990 

ntoskesemphobj.c David N. Cutler (davec) 28-Feb-1989 

ntoskethredobj.c David N. Cutler (davec) 4-Mar-1989 

ntoskethredsup.c David N. Cutler (davec) 5-Mar-1989 

ntosketimerobj.c David N. Cutler (davec) 2-Mar-1989 

ntosketimersup.c David N. Cutler (davec) 13-Mar-1989 

ntoskewait.c David N. Cutler (davec) 23-Mar-89 

ntoskewaitsup.c David N. Cutler (davec) 24-Mar-1989 

ntoskexipi.c David N. Cutler (davec) 24-Apr-1993 

ntoskeyield.c David N. Cutler (davec) 15-Mar-1996 

ntosmmaxp64debugsup.c David N. Cutler (davec) 24-Feb-1998 

ntosmmflushbuf.c David N. Cutler 24-Apr-1991 

ntospsalphapsctxalp.c David N. Cutler (davec) 1-Oct-1990 

ntospsia64psctxi64.c David N. Cutler (davec) 1-Oct-1990 

ntospsmipspsctxmip.c David N. Cutler (davec) 1-Oct-1990 

ntospsppcpsctxppc.c David N. Cutler (davec) 1-Oct-1990 

ntospskulookup.c David N. Cutler (davec) 8-Oct-90 

ntosrtlalphachandler.c David N. Cutler (davec) 11-Sep-1990 

ntosrtlalphacontext.c David N. Cutler (davec) 18-Apr-1990 

ntosrtlalphaexdsptch.c David N. Cutler (davec) 11-Sep-1990 

ntosrtlalphantrtlalp.h David N. Cutler (davec) 19-Apr-90 

ntosrtli386divlarge.c David N. Cutler 10-Aug-1992 

ntosrtli386exdsptch.c David N. Cutler (davec) 13-Aug-1989 

ntosrtli386raisests.c David N. Cutler (davec) 8-Aug-1990 

ntosrtlia64chandler.c Based on the version by David N. Cutler (davec) 11-Sep-1990 

ntosrtlia64exdsptch.c based on the version by David N. Cutler (davec) 11-Sep-1990 

ntosrtlmipschandler.c David N. Cutler (davec) 11-Sep-1990 

ntosrtlmipscontext.c David N. Cutler (davec) 18-Apr-1990 

ntosrtlmipsexdsptch.c David N. Cutler (davec) 11-Sep-1990 

ntosrtlmipsntrtlmip.h David N. Cutler (davec) 19-Apr-90 

ntosrtlppcchandler.c David N. Cutler (davec) 11-Sep-1990 

ntosrtlppccontext.c David N. Cutler (davec) 18-Apr-1990 

ntosrtlppcexdsptch.c based on MIPS version by David N. Cutler (davec) 11-Sep-1990 

ntosrtlppcjumps.c David N. Cutler (davec) 15-Sep-1990 

ntosrtlppcntrtlppc.h based on MIPS version by David N. Cutler (davec) 19-Apr-90 

ntosrtlppcvunwind.c based on MIPS version by David N. Cutler (davec) 11-Sep-1990 

ntosrtlgenerr.c David N. Cutler (davec) 2-Dec-1992 

ntosrtllookasid.c David N. Cutler (davec) 19-Feb-1995 

ntosrtlntrtlp.h David N. Cutler (davec) 15-Aug-1989 

ntosrtlrecip.c David N. Cutler (davec) 13-May-1989 

sdktoolsimagehlpchecksum.c David N. Cutler (davec) 21-Mar-1993



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


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


就本文讨论的话题,你有什么想法,欢迎在留言区跟大家分享讨论哦~另外

程序人生公开征集程序猿(媛)故事

你是一位心思细腻、文采了得、被代码耽误了的文艺程序猿(媛)么?

你是否在工作或生活中发现过许多编程乐趣想要与大家分享呢?

如果有,欢迎搜索小编微信ID:druidlost 或 duoshangshuang 投稿。

加微信时请备注:#我有个故事想说给你听#

你的文章一经采用,我们会有精美礼品作为奖励。


更多精彩

老公月入五万的程序员夫人70后程序员的启示程序员提升外观王小波程序员我会编程七夕表白程序员最高殊荣程序猿(媛)CP祭天Python歌词特斯拉程序媛直播鄙视链敲代码404结婚Facebook怎么进BAT女友日记高逼格指南计算机专业技能干货编程习惯陆奇演讲自救指南周鸿祎谈创业




关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接