首頁>資訊 >
【全球獨(dú)家】離開 Chrome 十年,我都有著怎樣的思考 2022-12-13 18:00:34  來源:36氪

【編者按】離開 Chrome 快 10 年了,這是作者的一篇回憶錄,從加入 Chrome 團(tuán)隊(duì)從事 Linux 版本的 Chrome 開發(fā),再到上線離開,期間都發(fā)生了哪些故事?為更貼近原文,本文譯者以第一人稱進(jìn)行了編譯。


(資料圖片)

距離我在 Chrome 項(xiàng)目工作已過去約 10 年了。這期間發(fā)生的一些故事,因?yàn)槟甏眠h(yuǎn)而變得模糊,我想趁著自己還沒有完全忘記之前將它們記錄下來。

我做了什么?

2007 年~2012 年,我一直在從事 Chrome 開發(fā),當(dāng)時(shí)的我還未滿 30 歲。當(dāng)然,我的生活中還有其他事情發(fā)生,例如結(jié)婚,但就我一生所做的事情而言,受到更廣泛關(guān)注的是 Chrome。如今,Chrome 擁有超過 25 億用戶。每當(dāng)去咖啡館,看到鄰桌的人在使用“我開發(fā)的”軟件,就會(huì)感覺很奇妙。

我加入這個(gè)項(xiàng)目的目標(biāo)是開發(fā) Linux 版的 Chrome,也就是說,我首先要在 Windows 版的 Chrome 上工作幾年,之后再去領(lǐng)導(dǎo) Linux 版 Chrome 團(tuán)隊(duì)。加入一個(gè)全新的項(xiàng)目意味著每段代碼都要親力親為,至今我仍然記得,我編寫的那段代碼可以在用戶點(diǎn)擊“星星”按鈕時(shí)讓它亮起。其實(shí),背后不過是一個(gè)新的狀態(tài)布爾值以及一個(gè)額外的圖像資源。

那些年里,我一直在更新一個(gè)關(guān)于 Chrome 的博客(https://neugierig.org/software/chromium/notes/archive.html),里面有很多技術(shù)細(xì)節(jié),包括我的第一篇帖子,以及我離開時(shí)跟大家告別的帖子。

我為什么加入 Chrome 項(xiàng)目?

我加入 Google,后來又加入 Chrome,因?yàn)槲艺J(rèn)為自己是自由軟件社區(qū)的一員。大學(xué)期間,我們?yōu)榱藫碛幸粋€(gè)能正常使用的瀏覽器而絞盡腦汁,甚至在 Linux 電腦旁邊再擺一臺(tái) Windows 電腦,只因?yàn)楫?dāng)時(shí)的 Web 只能用 Windows 上才有的 IE 來瀏覽。正如 Brad 寫道:“我等了一年之久,Mozilla(改名 Firefox 之前的開源版本)才變得不那么難用了。”我記得,我曾在宿舍里嘗試在 Linux 上構(gòu)建 Mozilla,結(jié)果失敗了,當(dāng)時(shí)我心里默默地說,終有一天我一定會(huì)解決這個(gè)問題。而 Chrome 給了我這個(gè)機(jī)會(huì)。

然而,很諷刺的是,最終事態(tài)卻滑向了相反的方向。我從痛苦的經(jīng)歷中得到了教訓(xùn),明白了為什么 Linux 上面向用戶的軟件(包括 Mozilla 和我的軟件)通常都不太理想的深層原因。同樣,我明白了免費(fèi)軟件來自無私的付出和感恩的心,但最終都變成了企業(yè)的另一種武器?;叵肫饋?,這是一個(gè)古老的比喻,我試圖“從內(nèi)部改變系統(tǒng)”,但最終被它吞噬了。

為什么 Google 決定開發(fā) Chrome?

如今回想起來,感覺 Chrome 的成功是很自然的事情,但在當(dāng)時(shí)看來,Google 開發(fā)瀏覽器似乎是一件瘋狂的決定。(當(dāng)時(shí),即便是公司內(nèi)部也反復(fù)開玩笑說,這永遠(yuǎn)不可能。)

透過歷史,我們可以清楚地看到這是一場(chǎng)篡奪網(wǎng)絡(luò)控制權(quán)的陰謀,但當(dāng)時(shí)這個(gè)事情非常簡(jiǎn)單,至少像我這樣天真的小卒看來是這樣。Google 希望 Web 能取得成功,甚至派出了一個(gè)團(tuán)隊(duì)協(xié)助 Firefox 開發(fā)。Google 希望能夠?qū)?Firefox 發(fā)揮更大的影響力,Mozilla 對(duì)此很不滿,所以我們決定另辟蹊徑。這中間肯定有巨大的沖突,只不過我看不出來。據(jù)我所知,WebKit 分支也經(jīng)歷了一段相似的歷史:他們希望 WebKit 提供蘋果沒有的功能,但最終發(fā)現(xiàn)過猶不及。

還有一個(gè)小插曲,有人說微軟對(duì) Google 展開了惡意報(bào)復(fù),而且還有人擔(dān)心微軟會(huì)借助 IE 來建立反 Google 陣營(yíng)。那時(shí),每次 Windows 自動(dòng)更新都會(huì)重置搜索引擎設(shè)置,不過這是微軟一貫的作風(fēng)。你甚至可以把當(dāng)時(shí) Valve 開發(fā)基于 Linux 的操作系統(tǒng)的嘗試解讀為對(duì) Windows 應(yīng)用商店的防范。我知道如今的微軟會(huì)重振雄風(fēng),但我仍然記得在 90 年代,經(jīng)常有報(bào)道說這些大公司有多么不堪。

第三,即便 Chrome 失敗,人們也希望它能夠?yàn)槠渌麨g覽器點(diǎn)一把火,我認(rèn)為 Chrome 做到了,在版本 8 發(fā)布之前,根本沒有人在意 JavaScript 基準(zhǔn)測(cè)試。人們很容易忘記當(dāng)時(shí)的網(wǎng)絡(luò)有多糟糕,但 Chrome 的問世介于 IE7 和 IE8 之間的三年停頓期間。

為什么 Chrome 成功了?

Google 投入了大量資源(工程以及廣告)是一個(gè)重要因素。但 Google 投入大量資源,最終卻未能成功的例子也不罕見。

每當(dāng)我對(duì)技術(shù)感到沮喪時(shí),能讓我感到些許安慰的事情之一便是,X 公司那么有錢,仍然無法做出讓客戶喜愛的產(chǎn)品 Y。有趣的是,在我寫這段的時(shí)候,正傳出了 Google 放棄克隆 Facebook 的消息,似乎完美地證實(shí)了這一點(diǎn)。你也可以想想微軟和亞馬遜在手機(jī)領(lǐng)域的嘗試。

我認(rèn)為我們最初推出的產(chǎn)品才是真正的好軟件。我們所做的一些事情,比如頁面之間的操作系統(tǒng)級(jí)沙盒隔離,其他瀏覽器需要花費(fèi)數(shù)年時(shí)間才能實(shí)現(xiàn)。

其中很大一部分是因?yàn)楫?dāng)初我們之中有一些很偉大的工程師。想一想,有多少超級(jí)聰明的人才是你從未聽說過的,這些人就好像一種“暗物質(zhì)”,永遠(yuǎn)不會(huì)步入大眾視野。舉個(gè)例子,Antoine 是一位非常有才華的工程師,也是 ChromeOS 的功臣之一,但互聯(lián)網(wǎng)上幾乎聽不到他的任何消息。

然而,我也見過很多優(yōu)秀的工程師開發(fā)出并不怎么成功的軟件。如果非要找出合作過的其他項(xiàng)目都缺乏的 Chrome 特有的優(yōu)勢(shì),我想大概是一致性:這款產(chǎn)品有一個(gè)明確的目的,每個(gè)人都知道并且都在朝著這個(gè)方向前進(jìn)。我依稀記得一些設(shè)計(jì)細(xì)節(jié),我們的設(shè)計(jì)師 Glen 為制定某個(gè)設(shè)計(jì)決策而權(quán)衡的所有因素。從那以后,我就堅(jiān)信他非常清楚自己在做什么。

也許這只能說明我們有很好的領(lǐng)導(dǎo)班子。很抱歉,無法在此給出更具體的成功秘訣。當(dāng)然運(yùn)氣也占很大一部分。

一些回憶、插曲

最初,Chrome 只能在 Windows 上運(yùn)行,而且自定義標(biāo)題欄中的按鈕一看就是 Windows 風(fēng)格。我一直催促 Glen 給我設(shè)計(jì)一些 Linux 風(fēng)格的按鈕,我甚至搞了一出惡作劇,用他的頭像代替了關(guān)閉按鈕。

回想起來,真是有趣。

打磨

在即將發(fā)布第一版 Chrome 時(shí),我們選擇了一個(gè)發(fā)布日期,并計(jì)劃抓緊最后的一段時(shí)間消滅所有 bug,來不及完成的功能只能統(tǒng)統(tǒng)放棄。例如,我曾付出了很大努力開發(fā)一項(xiàng)與 RSS 相關(guān)的功能,但發(fā)布前暫時(shí)放棄了,之后再也沒有機(jī)會(huì)繼續(xù)。后來,項(xiàng)目出現(xiàn)了一些危機(jī),我不記得具體情況了,但一些新聞報(bào)道給我們帶來了很大的負(fù)面影響,最終導(dǎo)致發(fā)布推遲了一個(gè)月。

雖然我們多出了一個(gè)月的時(shí)間,卻無法添加真正的功能,我們只能利用這些時(shí)間來打磨產(chǎn)品,修復(fù)所有通常在發(fā)布最后一刻沒有時(shí)間處理的細(xì)節(jié)問題?;叵肫饋?,這對(duì)產(chǎn)品來說是也許是一件好事。打磨產(chǎn)品其實(shí)非常重要,只不過一般我們更愿意將精力投入到功能開發(fā)上。

漫畫

這則漫畫中竟然提到了我(https://www.google.com/googlebooks/chrome/small_02.html),作者是 Scott McCloud,他的漫畫真的很棒。

原本我們打算在發(fā)布瀏覽器的時(shí)候同步發(fā)布漫畫,作為發(fā)布時(shí)的支持文檔之一。但由于(發(fā)行?)出了問題,有人在我們發(fā)布實(shí)際產(chǎn)品之前拿到了漫畫,因此有關(guān)漫畫和瀏覽器的評(píng)論分別出現(xiàn)在新聞中。現(xiàn)在回想起來,這也不錯(cuò),因?yàn)橐恍└信d趣的用戶會(huì)被產(chǎn)品的創(chuàng)意所吸引,不會(huì)太過在意產(chǎn)品的視覺細(xì)節(jié)。

版本控制

最初,Chrome 使用的是 Google 管理代碼的版本控制系統(tǒng) Perforce,后來我們換成了內(nèi)部托管的 SVN,為的是發(fā)布時(shí)通過 Google 的公共 SVN 托管服務(wù)開源代碼。然而,真正到了發(fā)布的時(shí)候,我們卻發(fā)現(xiàn)這個(gè)服務(wù)無法擴(kuò)展到為 Chrome 這樣大的項(xiàng)目提供服務(wù),導(dǎo)致我們不得不自行研究怎樣發(fā)布代碼。

最終,我們租用了 Google 網(wǎng)絡(luò)之外的服務(wù)器,系統(tǒng)管理也只能靠自己。對(duì)于在創(chuàng)業(yè)公司工作的人來說,這些工作都很熟悉,但在 Google 就很不正常,因?yàn)?Google 的服務(wù)器管理是高度自定義的、集中管理的,而且我們清楚這些服務(wù)器的每一個(gè)細(xì)節(jié)。我記得我甚至無法使用 Google 的硬件,因?yàn)樵谖覀兊臄?shù)據(jù)中心或類似的地方運(yùn)行非 Google 的軟件是一個(gè)很陌生的想法。

與此同時(shí),我對(duì)版本控制充滿了熱情,而且我非??隙ㄓ幸惶?Git 會(huì)廣泛普及。因此,我編寫了一個(gè)與 Git 有關(guān)的工具用于管理 Chrome,以便將 Git 集成到我們基于 SVN 的代碼審查流程中?;叵肫饋?,我認(rèn)為這是我作為領(lǐng)導(dǎo)失策的地方。許多年后,Chrome 項(xiàng)目不得不全權(quán)依賴 Git,我們花費(fèi)了幾年的時(shí)間才將 SVN 去掉。如果我多花點(diǎn)時(shí)間來推進(jìn),相信能為很多人節(jié)省很多時(shí)間。

與蘋果公司合作

Chrome 大約一半的代碼來自 WebKit 的分支,在 Chrome 發(fā)布后,我們將其重新整合到了蘋果的上游。這意味著,在我們發(fā)布 Chrome 后不久,我們修改的代碼都需要得到蘋果工程師的批準(zhǔn)。

回想起來,我挺喜歡那段時(shí)間的工作,原因有兩個(gè)。第一,讓經(jīng)驗(yàn)豐富的工程師審查自己的代碼是程序員迅速成長(zhǎng)的最佳方式之一,而蘋果有著完全不同的工程師文化,他們沒有單元測(cè)試,沒有注釋,但他們也能構(gòu)建出高質(zhì)量的產(chǎn)品。第二,蘋果的批準(zhǔn)流程相當(dāng)于一道門檻,為了向 Chrome 添加功能,我們必須向蘋果證明添加這項(xiàng)功能非常有意義。

然而,我并沒有從事太多這方面的工作,我知道這項(xiàng)工作的壓力很大,部分原因是雙方的目標(biāo)有很大不同。雖然個(gè)別工程師可能不同意這種看法,但我可以毫不夸張地說,從結(jié)構(gòu)上講,蘋果關(guān)心的是制作一款能夠充分渲染網(wǎng)頁的瀏覽器,而真正的應(yīng)用程序不屬于瀏覽器。此外,雙方也有很多技術(shù)方面的分歧。也許是我很幸運(yùn),也許是我忘記了,我只記得當(dāng)時(shí)的代碼審查是一段溫暖的回憶。

我的“采訪”

有一次,我度假回來收到了一封電子郵件,上面寫著:“一家 Linux 雜志想采訪你,但你不在,所以我們幫你寫了回復(fù),你可以根據(jù)需要編輯?!被叵肫饋?,他們的這種行為很不恰當(dāng),我也不知道為什么當(dāng)時(shí)自己沒在意。如今,你仍然可以看到“我的”那篇回復(fù)(https://www.linuxjournal.com/magazine/google-chrome-making-cross-platform-browser),文中包含很多讓人很無語的言論,比如“之所以構(gòu)建了 Google Chrome 瀏覽器,是因?yàn)槲覀兛梢詾橛脩魩碚嬲膬r(jià)值?!?/p>

獎(jiǎng)賞

Google 有一個(gè)規(guī)定,在正常的薪酬之外,偶爾還會(huì)選出某些方面非常出色的項(xiàng)目獎(jiǎng)勵(lì)大筆股票。Chrome 得過一次獎(jiǎng),也許那是最后一次,但我也不是很清楚,因?yàn)樗麄冾C布此獎(jiǎng)項(xiàng)總是秘而不宣。

我提到這件事,是因?yàn)楫?dāng)時(shí)我們得知自己的項(xiàng)目獲獎(jiǎng)了,而且每個(gè)人都知道自己能拿到多少獎(jiǎng)金,但很快團(tuán)隊(duì)中的一位資深人士就宣布他即將離開公司。我記得當(dāng)時(shí)自己特別驚訝,并問了他關(guān)于這件事,他的答案令我終生難忘,他說:“現(xiàn)在我知道自己留在這家公司能獲得的最高報(bào)酬,那么就能與其他選擇做比較了?!?/p>

一般,公司的獎(jiǎng)賞都是為了鼓勵(lì)員工努力為公司工作,然而這個(gè)故事顯然是一個(gè)反面教訓(xùn)。與之類似,雖然我能理解為什么一家公司為他們想獎(jiǎng)勵(lì)的行為給予超額獎(jiǎng)金,但為了留住人才,用獎(jiǎng)賞來吊人胃口,這種行為讓我深感不齒。

Web 應(yīng)用與原生應(yīng)用

如今,我們想當(dāng)然地認(rèn)為所有軟件都應(yīng)該構(gòu)建在 Web 之上。但我的經(jīng)歷描繪了一段不同的時(shí)代:在推出 Chrome 時(shí),我們有一個(gè)搜索功能,瀏覽器會(huì)顯示一個(gè)選項(xiàng)卡,上面顯示了一些鏈接和文本片段,就像一個(gè)網(wǎng)絡(luò)搜索結(jié)果頁面。

我記得當(dāng)時(shí)編寫了一段原生 UI 代碼來自定義文本布局以及鏈接,盡管頁面的外觀和行為看起來就像基于 Web 的搜索結(jié)果頁面。這就是說,在當(dāng)時(shí)使用 HTML 來實(shí)現(xiàn)應(yīng)用程序是一個(gè)很糟糕的想法,即使對(duì)于我們?yōu)g覽器開發(fā)人員來說,即使對(duì)于應(yīng)該表現(xiàn)得像網(wǎng)頁的 UI 也是如此。

后來,我下了一番功夫公開了基于 HTML 的瀏覽器 UI,我記得自己當(dāng)時(shí)還在團(tuán)隊(duì)內(nèi)大力倡導(dǎo) Web 開發(fā)。從那以來,很多瀏覽器的 UI 都開始使用 HTML 來實(shí)現(xiàn)。當(dāng)然,現(xiàn)如今在 Electron 的世界中,桌面應(yīng)用程序不使用 HTML 實(shí)現(xiàn)的情況越來越罕見......

Chrome 與 Web

當(dāng) Chrome 還不成氣候的時(shí)候,各個(gè)網(wǎng)站都不會(huì)主動(dòng)解決 Chrome 錯(cuò)誤。我們必須去適應(yīng)他們。當(dāng)時(shí)我們?yōu)榱私鉀Q MediaWiki(維基百科)中的這個(gè)錯(cuò)誤(https://bugs.webkit.org/show_bug.cgi?id=28350)花費(fèi)了不少心思。這個(gè) bug 從 2009 年開始就有了,一直存在了十年。

有一次,我們遇到了一個(gè)問題:瀏覽器應(yīng)該支持多少次重定向?假設(shè)你嘗試加載 A,但A重定向到了B,B又重定向到了C,依此類推,直到某個(gè)時(shí)刻,你必須放棄,然后報(bào)告錯(cuò)誤。有人選擇了一個(gè)看似合理的閾值,比如 10 次左右,超過這個(gè)數(shù)量 Chrome 就會(huì)放棄。然而,Darin 曾經(jīng)從事過 Firefox 開發(fā),他說:“不,至少應(yīng)該支持30次,否則紐約時(shí)報(bào)就會(huì)出問題——經(jīng)驗(yàn)之談。”

后來,Chrome 越來越強(qiáng)大,很多網(wǎng)站開始測(cè)試,確保他們能夠處理 Chrome 的錯(cuò)誤。再到后來,Chrome 足夠強(qiáng)大,成為了制定規(guī)則的人。但我感到很焦慮,因?yàn)槲覀儫o從判斷這些決定沒問題。

網(wǎng)絡(luò)的發(fā)展速度很快,但大多數(shù)時(shí)候我們都依賴于少數(shù)幾個(gè)決策制定者的“善意”。標(biāo)準(zhǔn)流程的失敗導(dǎo)致了 HTML 5 的割裂,這正說明了隨意讓一個(gè)機(jī)構(gòu)定義標(biāo)準(zhǔn)也行不通。我認(rèn)為這是一個(gè)需要平衡的問題,沒有簡(jiǎn)單的答案。

ChromeOS

曾有人問我是否愿意加入 ChromeOS 項(xiàng)目,我心愛的Linux Chrome 也是其中的一個(gè)重要部分——我對(duì)此非常懷疑。

但 ChromeOS 的結(jié)果讓我感到驚訝,尤其是在安全和更新方面。他們通過某種方式讓合適的人在合適的地方做出了卓越的產(chǎn)品。

如今的 Chrome

Linux Chrome 基本可以正常工作了,但我并沒有意識(shí)到自己的工作已經(jīng)完成了。當(dāng)時(shí)我還開玩笑說:“Chrome 12 [一個(gè)舊版本] 才是最佳版本”。但當(dāng)我意識(shí)到真正需要的是一個(gè)速度非常快的瀏覽器之后,就發(fā)現(xiàn)大多數(shù)后續(xù)工作都是在添亂。當(dāng)然,我們還需要修復(fù)渲染崩潰或提高滾動(dòng)性能等,但大多數(shù)添加功能的工作都會(huì)讓它變得更大、更慢。

從長(zhǎng)遠(yuǎn)來看,我很榮幸自己投入了很多精力在這款產(chǎn)品上,我為自己當(dāng)時(shí)所做的工作感到自豪,但這款產(chǎn)品本身是一種我無法控制的生物,從很久以前開始它前進(jìn)的方向就與我的意見相左。Google 對(duì)隱私的處理讓我感到特別失望,舊版的 Google 更值得令人尊敬。

反思我們花了多少時(shí)間來制作最簡(jiǎn)單的雛形也很有趣,最初 Chrome 沒有“主頁”按鈕,我記得有一段時(shí)間里,我們一直在爭(zhēng)論是否將它作為一個(gè)選項(xiàng)添加進(jìn)來,然而如今的瀏覽器裝滿了按鈕和設(shè)置。

Web 的命運(yùn)

我對(duì) Web 的發(fā)展有點(diǎn)悲觀。在 Chrome 之后,我在一個(gè)產(chǎn)品上工作了三年,其創(chuàng)建目標(biāo)是試圖找出某種“拯救報(bào)紙”的方法。

每個(gè)人都討厭廣告,但沒有人針對(duì)新聞業(yè)如何獲得資金提出合理的計(jì)劃,我認(rèn)為那個(gè)項(xiàng)目的嘗試不會(huì)成功。在這類的討論中,難免有人會(huì)說一些沒有任何幫助的話,比如“如果報(bào)紙有合理的支付系統(tǒng),我會(huì)花錢購買”,但紙上談兵和實(shí)際爭(zhēng)取到資金完全是兩碼事。

如今的 Web 感覺就像一個(gè)底部圍繞著廣告的螺旋。雖然我們可以利用 Web 技術(shù)制作一些非常漂亮的東西,例如 Figma,但是制作對(duì)用戶有敵意的垃圾也更容易,而我們獲得的大多數(shù)產(chǎn)品也跟垃圾差不多。

人們似乎認(rèn)為屏蔽廣告是瀏覽器的工作,但我的觀點(diǎn)是,如果企業(yè)的業(yè)務(wù)開始讓人感到反感,那么用戶唯一能做的就是停止使用其業(yè)務(wù)。不知何故,一旦涉及到技術(shù),人們就會(huì)開始談?wù)撍麄冇袡?quán)單方面要求重新談判交易。做一個(gè)不太恰當(dāng)?shù)念惐龋骸拔矣憛掃@家商店一根香蕉賣 10 美元,所以我就付2美元,然后拿走香蕉?!?/p>

與此同時(shí),唯一真正的非 Web 平臺(tái)都是由科技巨頭(蘋果/Google/微軟)運(yùn)營(yíng)的,他們會(huì)毫不手軟地打擊競(jìng)爭(zhēng)對(duì)手。也許,我不過是對(duì)技術(shù)整體的發(fā)展方向感到悲觀。

原文鏈接:https://neugierig.org/software/blog/2022/12/chrome.html

關(guān)鍵詞: 的工程師 版本控制 記得當(dāng)時(shí)

相關(guān)閱讀:
熱點(diǎn)
圖片 圖片