歷史在重演:從KHTML到WebKit,再到Blink
上周四,Google宣布從WebKit 分支出自己的瀏覽器渲染引擎 Blink。很多人覺(jué)得這像是晴天霹靂,或者甚至是遲到的愚人節(jié)笑話,但是其實(shí)這件事情是難以避免的,而且是歷史的重演。
什么是WebKit?它到底是誰(shuí)的?
WebKit 是一個(gè)開(kāi)源的瀏覽器引擎。它的前身是 KDE 在 1998 年開(kāi)發(fā)的排版引擎 KHTML,最初用于 Linux 和 Unix 等開(kāi)源操作系統(tǒng)。當(dāng)時(shí)蘋(píng)果覺(jué)得需要開(kāi)發(fā)自己的瀏覽器,所以在比較了 Netscape(現(xiàn)在的 Firefox)的 Gecko 引擎 和 KHTML 引擎后,選擇了后者,因?yàn)?KHTML 擁有更清晰的架構(gòu),而且比 Gecko 更小巧。蘋(píng)果工程師 Don Melton 在 2001 年六月 25 號(hào)正式從 KHTML 分支出來(lái),在蘋(píng)果內(nèi)部開(kāi)始了 WebKit 的研發(fā)。
開(kāi)始的時(shí)候,蘋(píng)果和 KHTML 的關(guān)系還是不錯(cuò)的。蘋(píng)果將 KHTML 發(fā)揚(yáng)光大,在 2003 年推出了裝備 WebKit 引擎的瀏覽器 Safari。但是隨著時(shí)間的推進(jìn),WebKit 和 KHTML 之間交換代碼變得越來(lái)越困難。蘋(píng)果會(huì)間隔很長(zhǎng)時(shí)間之后,提交一大批更改,而且沒(méi)有文案,很多功能可能只開(kāi)發(fā)了一半。對(duì)于 KDE 而言,將這些更改整合回 KHTML 是相當(dāng)困難的。此外,蘋(píng)果要求 KDE 開(kāi)發(fā)者閱覽蘋(píng)果代碼之前必須簽署保密條款,KDE 也很難接受這一點(diǎn)。在 2005 年,KDE 開(kāi)發(fā)者開(kāi)始公開(kāi)攻擊蘋(píng)果的做法,并稱(chēng)兩方的合作關(guān)系已經(jīng)徹底瓦解了。
事情被媒體報(bào)道之后,蘋(píng)果做出了一系列的讓步。在 2005 年,蘋(píng)果宣布將 WebKit 完全開(kāi)源(之前僅有從 KHTML 直接搬來(lái)的 WebCore 及 JavaScriptCore 是開(kāi)源的)。KDE 和蘋(píng)果的關(guān)系也得到了一些改善,有一些 KDE 的開(kāi)發(fā)者們開(kāi)始為 WebKit 提交更改,蘋(píng)果的團(tuán)隊(duì)也復(fù)原了很多為蘋(píng)果特定的修正,并且實(shí)現(xiàn)了平臺(tái)層的抽象化,使引擎的核心代碼可以在其他平臺(tái)上運(yùn)作。但是 KDE 沒(méi)有忘記蘋(píng)果的背叛,他們沒(méi)有完全加入 WebKit 的開(kāi)發(fā),而是在 2010 年底推出了 KDE 開(kāi)發(fā)平臺(tái) 4.5,并列支持 KHTML 和 WebKit。
Google的介入
Google 加入 WebKit 的開(kāi)發(fā)是在 2008 年 Chrome 瀏覽器推出前后的事情。Chrome 瀏覽器使用 WebKit 引擎是 Android 團(tuán)隊(duì)的建議,而 Chrome 主要用的其實(shí)還是從 KHTML 那里來(lái)的 WebCore,它不太用 WebCore 之外蘋(píng)果開(kāi)發(fā)的東西,而是使用自己開(kāi)發(fā)的多進(jìn)程瀏覽器架構(gòu)等。
但是 Google 畢竟資源和人力雄厚,在上周從 WebKit 分支之前,大約 50% 的 WebKit 更改來(lái)自于 Google 的開(kāi)發(fā)者,剩下的一半大多數(shù)來(lái)自于蘋(píng)果,其余來(lái)自于第三方開(kāi)發(fā)者,比如 KDE 的開(kāi)發(fā)者。雖然 Google 的開(kāi)發(fā)者開(kāi)始提交大部分的 WebKit 更改,但是 WebKit 的最終決策權(quán)還是蘋(píng)果的。據(jù)一些第三方的 WebKit 開(kāi)發(fā)者透露,蘋(píng)果和 Google 的開(kāi)發(fā)者在交流時(shí)沒(méi)有一般開(kāi)源開(kāi)發(fā)者的那種相互支持,反而更像兩頭相互打量的獅子,氣氛比較緊張。
Blink 引擎的新聞爆出之后, Hacker News 上立刻開(kāi)始有雙方的開(kāi)發(fā)者發(fā)表評(píng)論。多數(shù)評(píng)論認(rèn)為蘋(píng)果目前的 WebKit 更改提交政策對(duì)非蘋(píng)果的開(kāi)發(fā)者是有敵意的,尤其在 WebKit 2 這塊。更有很多人認(rèn)為 WebKit 2 完全是蘋(píng)果單方推出的一個(gè)產(chǎn)品,而且根本就沒(méi)有和 Google 以及其它參與 WebKit 開(kāi)發(fā)的人進(jìn)行協(xié)商。
蘋(píng)果的開(kāi)發(fā)者也對(duì)此給予了答復(fù),蘋(píng)果 WebKit 團(tuán)隊(duì)領(lǐng)頭人 Maciej Stachowiak 說(shuō):
如果我們要討論歷史的話,我們開(kāi)發(fā) WebKit 2 的最主要原因是因?yàn)?Chromium(Chrome 的開(kāi)源版)從來(lái)沒(méi)有將它的多進(jìn)程架構(gòu)整合到 WebKit 里。這些代碼一直在 Chromium 自己的目錄中。
我們?cè)趯?xiě)任何 WebKit2 代碼前就問(wèn)了 Google 的人,他們?cè)覆辉敢鈱⒍噙M(jìn)程架構(gòu)的支持整合到 WebKit 中,他們的答案是否定的。在這種情況下,我們面臨的選擇是做一個(gè)懷有敵意的 Chromium 分支,或者寫(xiě)我們自己的多進(jìn)程架構(gòu),或者繼續(xù)使用單進(jìn)程架構(gòu)。我們選擇了寫(xiě)自己的多進(jìn)程架構(gòu)。
如果當(dāng)時(shí) Google 同意整合他們的多進(jìn)程架構(gòu),那么我們肯定是會(huì)接受的,事情的發(fā)展可能也會(huì)和現(xiàn)在不太一樣。
無(wú)論誰(shuí)是誰(shuí)非,蘋(píng)果和 Google 這兩家在 WebKit 中明顯已經(jīng)各走各的路有一段時(shí)間了。KDE 是一家完全開(kāi)源,對(duì)蘋(píng)果沒(méi)有任何實(shí)質(zhì)性威脅的開(kāi)發(fā)團(tuán)體。如果當(dāng)年蘋(píng)果和 KDE 都不能夠維持良好的合作關(guān)系,它是不可能和 Google,一家在多個(gè)領(lǐng)域與蘋(píng)果有你死我活級(jí)別競(jìng)爭(zhēng)關(guān)系的公司,有什么良好合作的。雖然之前有很多人認(rèn)為 WebKit 項(xiàng)目有點(diǎn)像柏林墻上的一個(gè)缺口,但這明顯有點(diǎn)天真了。
誰(shuí)將擁有未來(lái)
未來(lái)的事情我們誰(shuí)也不知道,但是我們能夠看到的有這幾點(diǎn):
- WebKit會(huì)比以前少50%的新代碼提交。
- 絕大多數(shù)第三方WebKit開(kāi)發(fā)者會(huì)加入Blink項(xiàng)目。
- Google的平臺(tái)是互聯(lián)網(wǎng)本身,它會(huì)將所有資源傾注到Blink的開(kāi)發(fā)之中,而蘋(píng)果目前最重要的平臺(tái)是iOS。
- 當(dāng)沒(méi)有蘋(píng)果這個(gè)“合作者”之后,Google可以用它自己的速度來(lái)推進(jìn)瀏覽器科技。想在瀏覽器引擎中放一個(gè)Dart 虛擬器?沒(méi)問(wèn)題。Google Native Client?可以。所以Blink支持的網(wǎng)絡(luò)科技很有可能很快超越WebKit。
如果我非要下賭注的話,我會(huì)賭 Blink 逐漸取代 WebKit,因?yàn)?Blink 對(duì)于 Google 是有戰(zhàn)略性意義的,而 WebKit 對(duì)于蘋(píng)果來(lái)說(shuō)只是它封閉性花園中一只開(kāi)源的黑羊。
從 WebKit 的這段歷史,我們還看到了什么?第一,大公司永遠(yuǎn)以自己的利益為導(dǎo)向。第二就是,最牛掰的工程師是開(kāi)源項(xiàng)目的工程師,尤其是 Unix 這個(gè)生態(tài)系統(tǒng)里的開(kāi)源項(xiàng)目;Chrome 用的 WebKit 根本還是 KDE 寫(xiě)的 WebCore,和蘋(píng)果基本沒(méi)有什么關(guān)系。