修完 1300 万行代码,我帮苹果省下 2 亿美元,但没拿到承诺的千万股票
來(lái)源:InfoQ,作者:Terry Lambert,譯者:Sambodhi、燕珊
“Mac OS X 內(nèi)核一共 1300 萬(wàn)行代碼,SVN 顯示我寫了其中 7%。”
近日,在國(guó)外問(wèn)答網(wǎng)站 Quora 上,有人主提出了一個(gè)問(wèn)題:“要使操作系統(tǒng)獲得 UNIX 認(rèn)證,需要做些什么?”?
答主 Terry Lambert 給出了非常精彩的回答,鑒于他的身份——前蘋果工程師,曾負(fù)責(zé) Mac OS X 內(nèi)核的大部分工作,該回答很快就獲得廣泛關(guān)注并獲得了上萬(wàn)贊。
這是一個(gè)引人入勝的故事。
早年蘋果公司推出 Mac OS X 操作系統(tǒng)的時(shí)候,經(jīng)常利用“兼容操作系統(tǒng)的 UNIX 內(nèi)核”作為宣傳手段。比如,在其網(wǎng)站上,就專門有一頁(yè)介紹 Mac OS X 的 UNIX 的文章。
The Open Group(國(guó)際開放標(biāo)準(zhǔn)組織)對(duì)此提出了訴訟,稱其未經(jīng)授權(quán)便擅自使用 Unix 名稱。一旦蘋果敗訴,就需要賠償 2 億美元。
不過(guò),蘋果公司堅(jiān)持自己可以自由使用 Unix 的名稱,認(rèn)為自己沒(méi)有進(jìn)行虛假宣傳。但為了應(yīng)付這場(chǎng)訴訟,據(jù) Lambert 回憶,當(dāng)時(shí)蘋果對(duì)于此事主要有兩個(gè)解決方案,要么以大約 10 億美元的代價(jià)收購(gòu)國(guó)際開放標(biāo)準(zhǔn)組織,要么趕緊獲得 Unix 兼容認(rèn)證,從而化解這場(chǎng)訴訟。
史蒂夫·喬布斯將這個(gè)認(rèn)證的“秘密”任務(wù)交到了前蘋果技術(shù)負(fù)責(zé)人 Lambert 手上,需要針對(duì)現(xiàn)有的 Mac OS 源代碼運(yùn)行合規(guī)性測(cè)試,邊測(cè)試邊修改,完成時(shí)間只給了一年。這也意味著 Lambert 需要在短時(shí)間內(nèi)對(duì) Mac OS X 內(nèi)核的 1300 萬(wàn)行代碼了如指掌,技術(shù)難度非常大。
Lambert 被承諾在任務(wù)完成之后,團(tuán)隊(duì)將會(huì)獲得 2000 萬(wàn)美元的股份,Lambert 個(gè)人將得到 1000 萬(wàn)美元。實(shí)際上,這種任務(wù)如果是針對(duì) Linux 的,需要一個(gè)二三十人的團(tuán)隊(duì)工作五年,但 Lambert 帶著一支五人團(tuán)隊(duì)在一年內(nèi)完成了,期間還為數(shù)百個(gè)開源項(xiàng)目貢獻(xiàn)了大約 200 萬(wàn)行的代碼。只不過(guò),Lambert 最終沒(méi)有得到這 1000 萬(wàn)美元報(bào)酬,他的股票被其領(lǐng)導(dǎo)獨(dú)吞了。
有些人說(shuō)不存在十倍效率程序員,但我認(rèn)為他們是沒(méi)有遇到像你這樣的百倍效率程序員。
雖然我們都知道最終 Mac OS X 已經(jīng)通過(guò) UNIX 認(rèn)證,不過(guò)這并不影響我們跟著 Lambert 的回憶去了解這段有趣過(guò)往的細(xì)節(jié)。
讓 Mac OS X 成為真正的 UNIX
按照 Lambert 的說(shuō)法,為了讓 Mac OS X 通過(guò) UNIX 認(rèn)證,這里面要做的工作可太多了。
讓 Mac OS X 成為真正的 UNIX?,從而化解這場(chǎng)訴訟,這對(duì)于國(guó)際開放標(biāo)準(zhǔn)組織其實(shí)是有好處的,因?yàn)楫?dāng)時(shí)他們正因?yàn)?Linux 越來(lái)越受歡迎而漸漸丟失市場(chǎng)。
以大約 10 億美元的代價(jià)收購(gòu)國(guó)際開放標(biāo)準(zhǔn)組織,這樣蘋果公司就可以自由地使用該商標(biāo);但是,這并不能使他們免除與 Sun Microsystems、IBM 和其他公司的現(xiàn)有合同義務(wù),因?yàn)檫@些公司都已經(jīng)獲得了 UNIX 商標(biāo)的使用許可。
當(dāng)時(shí)有人問(wèn) Lambert 是否可以帶領(lǐng)一支團(tuán)隊(duì)去做第一個(gè)選項(xiàng)的工作,他表示答應(yīng)的前提是可以基于這個(gè)項(xiàng)目,指示整個(gè)組織的其他部分都在自己的代碼庫(kù)上進(jìn)行相應(yīng)的修改,并且可以對(duì)提交規(guī)則進(jìn)行相當(dāng)寬松的處理。
隨之,Lambert 獲得批準(zhǔn)并開展認(rèn)證工作。他們首先針對(duì)現(xiàn)有的 Mac OS 源代碼運(yùn)行合規(guī)性測(cè)試套件,由于頭文件的緣故,測(cè)試套件立即顯示出錯(cuò)。
他和同事 Ed Moy 做了兩行更改,將類型定義從 <stdio.h> 移到它應(yīng)該在的位置。在 <stdio.h> 中有一行更改,而另一行的更改是在該類型實(shí)際上應(yīng)當(dāng)存在的文件中。
接著再次運(yùn)行測(cè)試,發(fā)現(xiàn)首次測(cè)試中的其中一個(gè)頭文件錯(cuò)誤消失了。因此,Lambert 等人做了一次“世界構(gòu)建”(world build),將 Mac OS X 中的一切,包括 iTunes 都進(jìn)行了重建。這一更改之下,有接近 150 個(gè)項(xiàng)目未能順利重建,iTunes 也在其中。
于是 Lambert 和 Ed 仔細(xì)研究,并修復(fù)了其中的每一個(gè)項(xiàng)目,以讓它們都能夠進(jìn)行構(gòu)建。他們接著又進(jìn)行了一次“世界構(gòu)建”,所有東西都建立起來(lái)了。
也正是在那個(gè)時(shí)候, Lambert 才有機(jī)會(huì)接觸到蘋果的所有源代碼。然后他們向項(xiàng)目提交了高優(yōu)先級(jí)的錯(cuò)誤修復(fù),但其中一些立即被降低了優(yōu)先級(jí),另一些只需要做簡(jiǎn)單修復(fù),因?yàn)樗麄儙吞峁┝搜a(bǔ)丁。接著工程副總裁 Bertrand Serlet 重新提升了那些被降級(jí)的項(xiàng)目的優(yōu)先級(jí)。然后,Lambert 他們提交了頭文件更改。
項(xiàng)目甚至“驚動(dòng)”喬布斯
事已至此,Lambert 他們這時(shí)候必須回頭再對(duì)整個(gè)項(xiàng)目進(jìn)行一次可行性評(píng)估。鑒于他為這個(gè)項(xiàng)目設(shè)定的先決條件,他和 Ed 都覺(jué)得這在時(shí)間范圍內(nèi)是可以繼續(xù)下去的。
該項(xiàng)目還升級(jí)到喬布斯那里。Lambert 繼續(xù)獲得執(zhí)行批準(zhǔn),畢竟,這樣做能讓蘋果公司節(jié)省許多錢,而且還改進(jìn)了所有 Mac OS X 服務(wù)器的營(yíng)銷宣傳資料。
他們被承諾在完成之后將會(huì)獲得 2000 萬(wàn)美元的股份。Lambert 將得到 1000 萬(wàn)美元,Ed 和 Karen Crippes 將分別得到 500 萬(wàn)美元。
Lambert 表示,當(dāng)時(shí)他戴了很多“帽子,不只是一個(gè)技術(shù)負(fù)責(zé)人,而是一個(gè)事實(shí)上的項(xiàng)目經(jīng)理。
這個(gè)過(guò)程也是肉眼可見的漫長(zhǎng)。Lambert 估算需要約一年的時(shí)間,這是一支由 5 個(gè)人組成的項(xiàng)目團(tuán)隊(duì):三個(gè) mousekateers(并非拼寫錯(cuò)誤),兩個(gè)承包人——一個(gè)是 Len Lattanzi,負(fù)責(zé)用戶空間的代碼;另一個(gè)是 Jaime Delgadillo,負(fù)責(zé)全職測(cè)試自動(dòng)化和錯(cuò)誤歸檔,還盡可能地提供了一些補(bǔ)丁。
項(xiàng)目組還有兩個(gè)臨時(shí)承包人,一個(gè)負(fù)責(zé)工具的合規(guī)性,另一個(gè)負(fù)責(zé)手冊(cè)頁(yè)面。另外,他們還可以根據(jù)情況從蘋果的其他部門拉來(lái)一些人做短期工作。
漫長(zhǎng)的一年
第一個(gè)大喜進(jìn)展是,所有的頭文件都通過(guò)了測(cè)試,這樣測(cè)試套件中的其他測(cè)試就可以開始運(yùn)行。在那個(gè)時(shí)候,Lambert 實(shí)際上已經(jīng)將所有的頭文件的修改提交給了 Mac OS X 的其他部分。當(dāng) Tiger(指 Mac OS X v10.4)版本發(fā)布時(shí),頭文件就已經(jīng)符合標(biāo)準(zhǔn)了。但是,這損害了 CodeWarrior(Mac 的 IDE)的正常運(yùn)行。Lambert 說(shuō)自己一直想要解決這個(gè)問(wèn)題,但一直沒(méi)有找到機(jī)會(huì),而 CodeWarrior 多多少少也會(huì)因此受損。
于蘋果公司的其他部門而言,Lambert 剛剛解決了“修復(fù)頭文件”的 Bug,它包含了許多其他針對(duì)單個(gè)頭文件的 Bug,這用了三個(gè)月左右的時(shí)間。
Lambert 曾承諾過(guò)一年的時(shí)間,那他該如何完成一年的預(yù)期呢?
Lambert 回憶道,“我知道,對(duì)頭文件進(jìn)行強(qiáng)制性的更改,以及與之相關(guān)的項(xiàng)目更改,將會(huì)成為項(xiàng)目中最大的單個(gè)部分。一旦我們能夠進(jìn)行其他的測(cè)試,那么在其他方面將會(huì)有大量的‘可輕松實(shí)現(xiàn)的目標(biāo)’需要解決。這個(gè)過(guò)程用了兩個(gè)多月的時(shí)間,我們?cè)谔峤灰?guī)則時(shí)總是猶豫不決,但很快就完成了。Ed 在我的協(xié)助下做了 libSystem 的大多數(shù)工作(libc + 其他的系統(tǒng)庫(kù)),并把它們合并到一起,把某些內(nèi)容從命名空間中刪除;這也是為什么在 /usr/include/sys 中,頭文件以"_"開頭。”
“在等待提交的過(guò)程中,你可以并行地做其他工作,我們就是這樣做的。在實(shí)現(xiàn)這些可輕松實(shí)現(xiàn)的目標(biāo)之后,還有許多工作要做,例如重寫內(nèi)核中的信號(hào)系統(tǒng),但這并不是那么容易實(shí)現(xiàn)?!?/p>
不過(guò) Lambert 等人已經(jīng)把 Umesh(我不會(huì)告訴大家他的姓)給說(shuō)服了,“因?yàn)樗幌M覀內(nèi)ビ|碰他的 pthreads 代碼,而且無(wú)論如何,他也希望在那兒做一些更改,有了這個(gè)項(xiàng)目作為反復(fù)推敲這些更改的手段,讓他感到非常高興?!焙髞?lái),他們還從 Mike Smith(Michael Smith,蘋果高級(jí)工程師)那里得到了“勉為其難”的支持,讓他重寫文件鎖定代碼。
項(xiàng)目組最終還通過(guò)詢問(wèn)有關(guān)陷阱路徑的問(wèn)題以及圍繞信號(hào)系統(tǒng)堆棧幀保存的問(wèn)題“收買”了 Joe Sokol。不過(guò) Lambert 強(qiáng)調(diào),在這些人當(dāng)中,Umesh 對(duì)他們的 deadline 有著最大的幫助。
扣動(dòng)扳機(jī)
一切都已就緒,Lambert 準(zhǔn)備“扣動(dòng)扳機(jī)”,意外隨之而來(lái)。
“他們引入了英特爾的代碼更改,讓我們?cè)俚葍蓚€(gè)星期,但一切都亂了套。所以我花了三天的時(shí)間,將一致性分支上所有的補(bǔ)丁都重新整合到英特爾的內(nèi)核代碼中。到了那時(shí)候,我已經(jīng)對(duì) Mac OS X 內(nèi)核的 1300 萬(wàn)行代碼了如指掌。”
然后大家又回到了通過(guò)測(cè)試的狀態(tài)。后來(lái)有人告訴 Lambert,不能為 Tiger 做整合。但這樣會(huì)錯(cuò)過(guò)已設(shè)定好的 deadline。Tiger 在發(fā)布之前又推遲了六個(gè)月,一次又一次地推遲。這是英特爾的問(wèn)題,而非內(nèi)核的問(wèn)題。
Lambert 說(shuō),“我們本來(lái)可以輕松地在 Tiger 上發(fā)布,和我們自己設(shè)定的 deadline 保持一致?!钡绻o Linux 做相同的工作,可能要花五年的時(shí)間,而且還得有二三十人。畢竟 Linux 發(fā)行版過(guò)多,產(chǎn)生了大量的陣營(yíng)。
Lambert 最后提到,團(tuán)隊(duì)為開源社區(qū)做了很多貢獻(xiàn),“我們從開源社區(qū)收獲了許多感謝,尤其是讓 bash 順利通過(guò)測(cè)試的修復(fù)。你絕對(duì)不會(huì)知道,作為這個(gè)項(xiàng)目的一部分,蘋果公司為開源社區(qū)做出了多大的貢獻(xiàn),至少對(duì)于非蘋果公司的人而言,這是一個(gè)秘密項(xiàng)目,因此我們并沒(méi)有宣傳這一事實(shí)。但是我估計(jì),當(dāng)年我們?yōu)閿?shù)百個(gè)開源項(xiàng)目貢獻(xiàn)了大約 200 萬(wàn)行的代碼。雖然感激之情很多,但這種感激并非歸于集體,因此,蘋果公司依然一直被指責(zé)‘使用開源代碼,但從不回饋’。但,我們修復(fù)了至少 15 個(gè) GCC 的 Bug。而你根本不知道。”
因此,整體來(lái)說(shuō)這是一項(xiàng)規(guī)模不小的工程,尤其是為了獲得合規(guī)性。“在 Karen 所做的一切工作之前,有關(guān)于自我認(rèn)證、合同、基于 OSF/1 Mach 的現(xiàn)有例外獲得測(cè)試?yán)?#xff0c;等等?!盠ambert 感慨,這的確是一個(gè)漫長(zhǎng)的過(guò)程。
盡管如此,Lambert 在評(píng)論區(qū)透露,自己由于一些原因最終并未獲得預(yù)期中的 1000 萬(wàn)美元股份。
參考鏈接:
https://www.quora.com/What-goes-into-making-an-OS-to-be-Unix-compliant-certified
END
各位伙伴們好,詹帥本帥搭建了一個(gè)個(gè)人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請(qǐng)移步小程序體驗(yàn)一下哦!(歡迎提建議)推薦閱讀
牛逼!Python常用數(shù)據(jù)類型的基本操作(長(zhǎng)文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長(zhǎng)文系列第②篇)
牛逼!Python函數(shù)和文件操作(長(zhǎng)文系列第③篇)
牛逼!Python錯(cuò)誤、異常和模塊(長(zhǎng)文系列第④篇)
總結(jié)
以上是生活随笔為你收集整理的修完 1300 万行代码,我帮苹果省下 2 亿美元,但没拿到承诺的千万股票的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 超全!Python获取某一日期是“星期几
- 下一篇: 好家伙,MacOS 新版本终于删掉自带