代码传奇丨比尔盖茨亲手挖了个非科班程序员 如今是硅谷公认的操作系统天神
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/
随时掌握互联网精彩
- 1 习近平开始对巴西进行国事访问 7967790
- 2 杀人凶手出狱后在受害者家门口摆席 7981821
- 3 俄传奇飞行员在广州扫货 7880638
- 4 “互联网之光”闪耀乌镇 7727019
- 5 女子分手20年 前男友突然出现在房本 7674858
- 6 周鸿祎卖掉迈巴赫买了12辆国产车 7549407
- 7 29岁抗癌博主“一只羊吖”去世 7455818
- 8 五月天演唱会引发超10幢居民楼摇晃 7354787
- 9 3.69万吨大桥空中成功“转身” 7223302
- 10 一图看中国30年“上网”史略 7191910