蘋果有開源,但又怎樣呢?(中)
上篇(詳情請戳:《蘋果有開源,但又怎樣呢?(上)》)裡說到,蘋果首個開源專案 Darwin 的誕生,與喬布斯的復仇歸來有著千絲萬縷的關係。
作為一個開源的作業系統,Darwin 擁有非常純正的開源血統,又有 FreeBSD 創始人 Jordan Hubbard 這樣大佬級的人物加盟。在役期間,它為蘋果作出了卓越的貢獻,無論是 macOS、iOS 還是 iPadOS,甚至是 HomePod 和 Apple TV(TvOS)都是建立在 Darwin 的基礎上。
可惜,Darwin 已經成為過去式,消逝於無聲無息之中。但是,Darwin 開源後沒幾年,蘋果另一個重量級開源專案 WebKit 被擺上檯面,拿下了蘋果開源的接力棒。
這次,蘋果的開源又幾斤幾兩、誠意如何呢?
中篇:瀏覽器二戰功臣 WebKit 開源的愛與恨
上個世紀末,微軟與網景的瀏覽器大戰,至今都為人津津樂道。簡單來說,當時微軟已經依靠 Windows 成為商業巨頭,而網路瀏覽器伴隨著 NC、JAVA 等技術標準的提出,讓微軟開始感到自己的大廈岌岌可危。
當時,風頭最勁的瀏覽器是網景(Netscape,Firefox 的前身)。針對網景, 比爾·蓋茨用了“殺手鐗”:微軟投入 20 億迅速推出瀏覽器 IE2.0,並決定免費開放這一產品,同時宣佈將 Windows95 與 IE 捆綁銷售。
一套組合拳下來,微軟成功利用壟斷優勢洗牌瀏覽器市場,IE 瀏覽器的市場佔有率在 2002 年一度高達 96%。這場瀏覽器大戰,微軟並不是通過開發出一款效能更高、技術更好的產品獲勝的,而是用了“劣幣逐良幣”的商業手段。
其後果就是,IE 這款雖然經典但毛病多多的瀏覽器大大降低了開發者的生活質量,它所遺留的各種問題至今仍然困擾著不少 Web 開發人員。有激進的觀點認為,IE 瀏覽器逼著 Web 開發者在冰天雪地中爬坡前行,幾乎毀掉了整個網際網路。
瀏覽器的戰爭沒有就此停息。2004 年,Firefox 從網景的灰燼裡涅槃重生,再加上蘋果 Safari 、挪威的 Opera 和谷歌 Chrome,第二次瀏覽器大戰一觸即發。在圍攻下,微軟 IE 份額被不斷蠶食。
其中,Safari 通過捆綁和強大功能,迅速成為世界主流瀏覽器之一,甚至一度統治美國移動瀏覽器市場,一時風光無兩。當中,開源的 WebKit(Safari 瀏覽器的引擎)是當之無愧的背後英雄。當然,Safari 最後不敵谷歌 Chrome,且在最近幾年顯出了疲態。Statcounter 統計顯示,Safari 在 2022 年 2 月以 19.3% 的份額,居於第二。
但目前, Safari 面臨的最嚴重的問題並非市場份額的下滑,而是 Safari 瀏覽器在支援 Web 功能方面遠遠落後於其他競爭對手,已經有不少人將其視為 “IE 精神”留下的現實對映。
Jen Simmons 的身份是蘋果 Safari & WebKit 開發者團隊的佈道師,2022 年 2 月 8 日,她在 Twitter 上發起了一場有關 Safari 問題的調查和討論:
我遇到的每個人都在說 Safari 是最差勁的,是新時代的 IE...... 那就指出那些使你們失望、阻止你們構建網站/APP 的具體 Bug 和支援缺乏的地方,請在 Tickets 提交。
在這裡,我們無意去追究 Safari 到底是如何走到這一步的。從 WebKit 的開源故事入手,或許也能窺見幾絲端倪。
01 火星撞地球,蘋果的“渣男”開源
在 Safari 之前,蘋果經歷了一段被微軟和 Adobe “控制”的時光。彼時,微軟把持辦公軟體(Word、Excel 和 Powerpoint 等),Adobe 則控制著創意、設計人員使用的關鍵工具(Photoshop 和 Illustrator 等),他們幾乎是第三方 Mac 軟體生態系統的核心。
這種第三方比自身平臺更強大的“屈辱”,蘋果是一口也咽不下去的。為了加強對自己平臺的控制權,蘋果不可能讓“網路瀏覽技術”也陷入同樣窘境,研發 Safari 勢在必行。
2001 年,微軟 IE 已經贏下與網景的大戰,如日中天。這一年,蘋果內部採取行動:組建一個新團隊,啟動一個新的、祕密的網路瀏覽器專案,以開發一個新的、可以替代微軟 IE 的瀏覽器。當時,所有出售的 Mac 電腦都將 IE 瀏覽器作為預設配置,Mac 沒有原生瀏覽器。
要想做成這件事情,一個瀏覽器核心是關鍵。瀏覽器核心也就是引擎,由兩個部分組成:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎。它負責取得網頁的內容(HTML、XML、影象等等)、整理訊息(例如加入 CSS 等),以及計算網頁的顯示方式,然後會輸出至顯示器或印表機。
不同核心,渲染效果也不同。蘋果想在瀏覽器上拿出有競爭力的“王牌專案”,就必須從核心入手。這次,被蘋果相中的開源專案是 KHTML 和 KJS。
這兩個開源專案包含 WebCore 和 JSCore 引擎,是 KDE( K Desktop Environment )在 1998 年開發的排版引擎,最初用於 Linux 和 Unix 等開源作業系統。在比較了 Gecko 引擎(Firefox 所用的)之後,蘋果還是選擇了 KHTML,它擁有更清晰的架構,而且更小巧。
KDE 社群圖示
2001 年 5 月 25 日,蘋果工程師 Don Melton(也是當時 Safari 專案的首席設計師)正式從 KHTML fork 出了一條分支,這也就是 WebKit 的前身。
值得注意的是, KHTML 及 KJS 引擎都是自由軟體,遵循的是 GPL 許可證,同時支援 BSD 系統的開發。這也就意味著,從它們衍生出來的產品,都必須繼續遵循 GPL 進行開源。
因此,當 2003 年 1 月,在舊金山的 Macworld Expo 主題演講中,喬布斯親自發布 Safari 的同時,也宣佈了蘋果 KHTML引擎的移植 —— WebCore 開放原始碼。(其實就是將從 KHTML 直接搬來的 WebCore 及 JavaScriptCore 這些不得不開源的開源出來)
在描述中,Safari 的主要特點是網路瀏覽速度快、原生平臺整合多以及比大多數現有網站的相容性強。重要的是,它為蘋果取得了 Mac 產品系列中的一項關鍵技術的控制權。在一些看法中,蘋果致力於開源的 WebKit 的首要原因就是要將微軟拉下馬,撼動其瀏覽器市場的王座。
這一商業目的,自然與開源世界所提倡的自由理想大相徑庭,這裡開源專案是工具、是武器、是用來突破蘋果商業短板的利器。
當然,既然蘋果已經打開了開源這一“潘多拉魔盒”,開弓沒有回頭箭,蘋果想要繼續通過 WebKit 鞏固自己的瀏覽器地位,就不得不深度參與到開源社群中去。但基於蘋果自身的文化,這下可算是,火星撞地球了......
2003 年,舊金山 Macworld 大會的同一天,Don Melton 正式成立蘋果 Safari 團隊,並給 KHTML 和 KJS 的首席開發員傳送了一封郵件,要與 KHTML 就 WebCore 嘗試合作。
很顯然,無論是蘋果還是 KDE 對於這樣的合作都是高興和自豪的,Melton 信件中對這個開原始碼充滿溢美之詞,而蘋果推出 Safari 也無疑將 KHTML 發揚光大了,兩者都是樂見其成的。
可惜,兩者之間的蜜月期很短。不出兩年,開源的 KDE 和蘋果之間的齟齬就顯露無疑了。據說,隨著時間推移,WebKit 和 KHTML 之間交換程式碼變得越來越困難,蘋果會間隔很長時間之後,提交一大批更改,而且沒有文件,很多功能可能只開發了一半。(像不像渣男?)
對於 KDE 而言,將這些更改整合回 KHTML 是相當困難的。此外,蘋果還要求 KDE 開發者閱覽蘋果程式碼之前必須簽署保密條款,KDE 也很難接受這一點。
WebKit 中 WebCore 是被共享的
一場撕逼在所難免。2005 年,KDE 開發者開始公開攻擊蘋果的做法,並稱兩方的合作關係已經徹底瓦解了。那年春天,KHTML 的兩個開發者 Zack Rusin 和 Carewolf 都在部落格文章表達了他們的挫折感。
這幾乎例證了蘋果不太可能以開源社群為所用所享的方式去“回饋”開源社群。
事情被媒體報道之後,蘋果做出了讓步。2005年,WWDC(蘋果全球開發者大會)上,WebKit 從幕後走到了臺前,蘋果元老 Bertrand Serlet 正式宣佈 WebKit 完全開源(之前只是 WebCore)。
至此,KDE 和蘋果的關係也得到了一些改善。一些 KDE 的開發者們開始為 WebKit 提交更改,蘋果的團隊也復原了很多為蘋果特定的修正,並且實現了平臺層的抽象化,使引擎的核心程式碼可以在其他平臺上運作。
但是,KDE 沒有忘記蘋果的“渣男行為”,他們沒有完全加入 WebKit 的開發,而是在 2010 年底推出了 KDE 開發平臺 4.5,並列支援 KHTML 和 WebKit。
不管怎樣,蘋果主導的 WebKit 的確超越了 KHTML 和 KJS 本身,它在瀏覽器領域赫赫有名,且創新諸多,HTML5、CSS3 等潮流都和 Webkit 脫不開關係。
但在 WebKit 開源的過程中,蘋果的“控制慾”和與開源社群的“水土不服”也是真實存在的。WebKit 的開源為蘋果贏得了真真實實的口碑和市場,但事實上, WebKit 的完全開源卻又顯得那麼地不爽不快。
02 半路殺出個谷歌,開源的 WebKit 竟站在壟斷風波中央
2005 年完全開源之後,WebKit 開始出現在 Safari 以外的地方。比如,2005 年 11 月,諾基亞就為其 S60 平臺釋出了一個基於 WebKit 的網頁瀏覽器。
WebKit 越來越炙手可熱。2007 年 1 月 iPhone 釋出,WebKit 作為 Mobile Safari 的基礎在 iOS 平臺發揮威力,開始席捲移動領域。
然而,對於一片商業沃土而言,從來都不缺競爭對手。iPhone 亮相的 10 個月,谷歌殺了出來,釋出了收購的一項成果:Android 作業系統。得知訊息後,喬布斯極為震怒:
我們沒有進軍搜尋業務,他們卻進軍了手機業務,別搞錯了,他們想幹掉 iPhone。
一時間硝煙四起,谷歌和蘋果進入了全面競爭狀態,其中就包括瀏覽器業務。2008 年 9 月,Chrome 瀏覽器正式上線。有趣的地方在於,Chrome 也是由 WebKit 支援的,它使用了Webkit 中的 WebCore 部分,而在 JS 引擎上則使用了谷歌自己的 V8 引擎,改良之後谷歌大大提高了指令碼執行速度,Chrome 脫穎而出。
2009 年 7 月 7 日,谷歌又宣佈了一項新的專案,啟動“Chrome作業系統”。很顯然,它的誕生就是為了爭奪微軟和蘋果的市場。而且,它也是 WebKit 支援的。
蘋果辛辛苦苦,從開源社群磨合出來的開源專案,又被另一家商業公司利用了?還成為了 Safari 最強大的競爭對手?甚至,到了今天兩者還暗戳戳地你爭我鬥。比如,《Chrome 更快更強,在 Mac 上擊敗 Safari》,這個新聞標題你品品。
那些在明面上的商業爭奪,已經夠看了。要命的是,因為谷歌瀏覽器是通過 WebKit 進行 fork 和改進而來的,蘋果和谷歌不得不在開源層面上進行合作。
KDE 一家完全開源、和蘋果沒有任何實質性威脅的開發團體,和蘋果的開源合作尚且不合,谷歌這家競爭對手就更不用說了。
有說法表示,谷歌不太用 WebCore 之外蘋果開發的東西,而是使用自己開發的多程序瀏覽器架構等。而且,在一段時間內,WebKit 中約 50% 的 WebKit 更改來自於谷歌的開發者。但是,WebKit 的最終決策權是蘋果的,據一些第三方的 WebKit 開發者透露,兩者在開源合作上,沒有一般開源開發者的那種相互支援的感覺,反而更像兩頭相互打量的獅子,氣氛緊張。
這種微妙的關係於 2013 年被畫上句點。 4 月,谷歌宣佈 Chrome 將棄用 WebKit 而改用 Blink 排版引擎,原因是蘋果在沒有協商的情況下,單方面推出了 WebKit 2。
谷歌認為 WebKit 2 裡有太多蘋果專用的程式碼,不但對谷歌沒有作用,而且還要花時間去處理相容性的問題。而谷歌提交的很多修改,又最終很難獲得蘋果的同意,雙方就 WebKit 的發展方向產生了極大分歧。
同時,蘋果推出的 WebKit2 與 Chromium 的沙箱設計存在衝突,所以 Chromium 一直停留在 WebKit,並使用移植的方式來實現和主線 WebKit2 的對接。這增加了 Chromium 的複雜性,且在一定程度上影響了 Chromium 的架構移植工作。
Blink 引擎是谷歌從 WebKit 分支出的衍生瀏覽器引擎,旨在逐步脫離 WebKit 的影響,另立山頭。至此,四大瀏覽器核心的格局(Trident 也稱 IE 核心、WebKit、Blink 和 Gecko)就此形成。這些年,四方一直各佔山頭,直到最近才因為 Web 相容性問題開始合力定製規範。(詳情請戳:《史上首次!蘋果/谷歌/微軟/火狐合力解決 Web 相容性問題》)
http://www.chromium.org/blink/
Blink 引擎的新聞爆出之後, Hacker News 上立刻開始有雙方的開發者發表評論。多數評論認為,蘋果 WebKit 的更改提交政策對非蘋果的開發者是有敵意的,尤其在 WebKit 2 這塊。更有人認為, WebKit 2 完全是蘋果單方推出的一個產品,而且根本就沒有和谷歌以及其它參與 WebKit 開發的人進行協商。
很難斷定商業公司之間到底孰是孰非,畢竟很多時候是需要“在商言商”的。
但從 WebKit 開源這一系列的事情可以看出,大公司都是以利益為導向的,千萬不要認為蘋果開源了 WebKit 就為“柏林牆砸開了一個缺口”了。有人說的沒錯:“WebKit 對於蘋果來說,只是它封閉性花園中一隻開源的黑羊。”
作為蘋果的開源專案,且功績斐然,WebKit 有一種彆扭的“錯位感”。這種“錯位感”在最近的“英國反壟斷調查”中,展現得淋漓盡致。
2022 年 2 月,英國競爭與市場管理局 (CMA) 執行長安德里亞·科斯切利 (Andrea Coscelli) 在新聞稿中宣佈:
蘋果和谷歌對我們使用手機的方式已經形成了一種惡習,我們擔心這會導致英國數百萬人迷失方向。
在這些反競爭行為的指控中,蘋果因要求瀏覽網路的應用程式在 iOS 和 iPadOS 上使用 WebKit 框架和 WebKit Javascript 而受到批評。Apple 的 App Store 審查指南指出:2.5.6 瀏覽網頁的應用程式必須使用適當的 WebKit 框架和 WebKit Javascript。
很顯然,監管機構認為這個行為會扼殺創新。而蘋果為自己辯護的論點是:有必要保護使用者的安全和隱私,以及防止 Chromium 的主導地位。
“我們真的想要生活在一個 Chromium 瀏覽器佔據 95% 市場的世界上嗎?對 Web 來說,這會是一個糟糕的未來”。上圖中的 Jen Simmons 就是上文所提到的 蘋果 Safari 佈道師。
當然,其他人就不這麼看了。比如曾因 App Store 高額分成政策與蘋果鬧得不可開交的 Epic Games 執行長 Tim Sweeney 就表示,WebKit 限制是反競爭且不包容的。
蘋果 WebKit 是成功的嗎?沒有疑問,它是成功的。但是,從開源角度上看,WebKit 一直處於蘋果的強力掌控之下,不僅在開源之初就充斥開源方面的爭議,現在更是陷入了“壟斷”和“商戰”之中,呈現出一種彆扭的姿態。
脫出 WebKit,蘋果在最近的開源動作中最受矚目的當屬 SWIFT。敬請期待下期:《蘋果有開源,但又怎樣呢?(下)》之 SWIFT 篇