天天看點

蘋果有開源,但又怎樣呢?(下)

作者:開源中國OSC

出品|開源中國

文|lola

一開始,因為 MacOS X ,蘋果與 FreeBSD 過往從密,不僅挖來 FreeBSD 創始人 Jordan Hubbard,更是在此基礎上開源了 Darwin。但是,蘋果并沒有給予 Darwin 太多關注,作為蘋果的首個開源項目,它算不上成功。(詳情檢視:《蘋果有開源,但又怎樣呢?(上)》)

再後來,蘋果攻堅浏覽器,WebKit 成為幕後英雄。在這個時期,蘋果開始涉入開源的深水區,不僅要與 WebKit 上遊的開源社群 KDE 磨合,還要面臨與競争對手谷歌的開源合作。面對外界的壓力和指責,蘋果從 WebKit 的開源上,應該學到了不少。(詳情檢視:《蘋果有開源,但又怎樣呢?(中)》)

随着開源軟體對行業的滲透越來越深,即使是蘋果,似乎也不得不作出成長和改變。這種在開源上的成長,蘋果在 Swift 上表現得十分明顯。有人說,開源改變世界,那麼,開源會改變蘋果嗎?

下篇: Swift “統治世界”是從開源開始的嗎?

除了 Jordan Hubbard,Chris Lattner 是蘋果招入麾下的另一個開源大佬。

在業内,Chris Lattner 被冠以“編譯器大神”的稱号,因為他是 LLVM(Low Level Virtual Machine)的主要發起人與作者之一,同時還是 Clang 編譯器的作者。

2000 年,蘋果 Darwin 開源,初涉自主開源。同年的 Chris Lattner 剛從波特蘭大學大學畢業,正準備去 UIUC(伊利諾伊大學厄巴納香槟分校)攻讀計算機碩士和博士。正是在 UIUC,Chris Lattner 開始使用一種用于優化編譯器的創新基礎架構,去設計和建構 LLVM,這也成為了他的博士學位論文的主題。

蘋果有開源,但又怎樣呢?(下)

年輕時的“小鮮肉” Chris Lattner

不同于 Jordan Hubbard,Chris Lattner 幾乎是被蘋果一手發掘和培養的。

2005 年,Chris Lattner 正值畢業,LLVM 仍然是一個進階研究項目。另一頭,蘋果也為了編譯器焦頭爛額。在 LLVM 之前,蘋果的軟體産品都依賴于整條 GCC 編譯鍊(GNU Compiler Collection,就是自由軟體運動發起人 RMS 搗鼓的那個)。

那時,蘋果在 GCC 上投入大量資金,想要新增很多特性,但 GCC開發者不怎麼願意專門為了蘋果公司的要求優化和改進 GCC 代碼;而且,到後期 GCC 的代碼品質也變得難以保障了。

為了擺脫 GCC 的束縛,蘋果開始尋找“替代品”。而 Chris Lattner 的 LLVM 顯然是個不錯的選擇。由此,蘋果開始成為 LLVM 計劃的主要資助者。2005 年,Chris Lattner 剛畢業,蘋果就直接雇用了他及他的團隊。

我在讀博的時候就開始寫 LLVM 了。當時 LLVM 是我的博士研究項目,我想把它做成工業界中颠覆性的産品。當時我異想天開,嘗試了各種架構設計,想解決以往編譯器所有的弊端 —— 結果當然沒有如願。我畢業後,就希望能接着搞 LLVM ,當時隻有蘋果允許我入職之後繼續設計并實作 LLVM 。我想都沒想就加入了蘋果。

—— Chris Lattner

在蘋果,Chris Lattner 又發起了 Clang 項目,并在多項名額上超過 GCC。如虎添翼的 LLVM 開始走向成熟。至此,Chris 在蘋果可謂是如魚得水,在編輯器上立下大功,後來直接坐上了蘋果開發者工具部門主管的位子,上司 Xcode、Instruments 和編譯器團隊。

除了 LLVM 和 Clang,Swift 是 Chris Lattner 所締造的第三個偉大的項目。2015 年,Swift 官宣開源,迅速成為當下最炙手可熱的程式設計語言之一。

這次,蘋果的開源,似乎沒有以前強勢了。Chris Lattner 注重社群的力量,同時蘋果也想要通過開源讓更多的人來使用這門語言,傲慢和強勢的态度沒有益處。

PS:2017 年 1 月,Chris Lattner 離開了自己工作了 12 年的蘋果,去過特斯拉、谷歌和 SiFive 等公司。2022 年 2 月,Chris Lattner 被曝因為遭到多人侮辱大吼,已于去年離開 Swift 核心團隊。

01 Swift 一誕生,就是沖着開源去的

時間調回到 2010 年。那年的 WWDC(蘋果全球開發者大會)上,蘋果剛剛在 Clang 中推出了 C++ 支援。

為了讓 Clang 支援 C++,Chris Lattner 和他的團隊付出了巨大的努力,有點筋疲力盡。這不禁讓他們開始思考一個問題:為什麼不得不實作 C++ 呢?難道不應該有更好的語言嗎?

你也知道 C++ 寫起來有多醜,但是做個編輯器支援 C++,完善 C++ 這門語言就是另一回事了,我們當時搞了好久,終于完成的時候特别有成就感。無論是 C 語言,C++,還是 Objective-C,都有一些我不是很滿意的地方。是以,我就想要不我們搞個新的語言來吧。新的語言要越簡單越好。

就是這樣,Chris Lattner 沒有聲張,在和蘋果軟體團隊負責人 Bertrand Serlet 聊了幾次後,他們明确了建立一種新語言的想法。當時它的代号是“Shiny”,“就好像你正在建造一個閃亮的新東西。” 2019 年 Chris Lattner 回憶道。

一旦确立想法,Chris Lattner 立馬就開工了。從 2010 年夏天開始一直到第二年年末,他利用晚上和周末的時間,就那麼吭哧吭哧地幹着,沒有告訴任何其他人,當他在伊利諾伊大學厄巴納香槟分校的導師 Vikram Adve 知道後,都驚歎蘋果的口風有多緊。

我秘密實作了大部分基本語言結構:其他一些人在 2011 年底開始認真貢獻。 2013 年 7 月,它成為蘋果公司開發者工具組的主要關注點。

我們在做 Swift 的時候,很多 iOS 開發者,包括蘋果内部的工程師,都在吐槽我們這幾年在 Objective - C 上毫無建樹,都在說你們為什麼不做這個那個。我們當然不能告訴他們我們在全力開發 Swift,而他們所要的文法功能我們都會給。

2011 年,Chris Lattner 将這門程式設計語言的骨架搭建完畢了,但顯然僅靠他一個人是不夠的。那年 4 月,他向公司管理層透露了自己的秘密,這個項目立馬得到了重視,數名資深工程師加入了進來,團隊不斷擴大,甚至成為了蘋果的主要關注對象。

很難說,蘋果這種嚴密的保密文化是好是壞,蘋果的确是受夠了創意被偷走了(微軟和谷歌都幹過);但從開發者的角度來說,有點殘酷,要知道當 Swift 已經成為蘋果内部的主推項目時,開發者們還在苦學 Objetive-C。當 Swift 出世的那一刻,他們得多心碎。

2015 年 12 月,蘋果兌現了 6 月在 WWDC 中的承諾,将新程式設計語言 Swift 開源,同時蘋果還開源了兩個項目:Swift 核心庫項目和全新的 Swift 包管理器項目。這次,蘋果采用的是 Apache 2.0,軟體開發者将可以對這款新程式設計語言根據自己的需要進行修改。

蘋果有開源,但又怎樣呢?(下)

在 Swift 之前,蘋果不是沒有語言。1988 年,喬布斯的 NeXT 公司獲得了 Objective-C 的授權,并開發出了其語言庫和 NEXTSTEP 的開發環境。此後,Objective-C 是蘋果的當家語言,且随着 2007 年iOS 移動裝置的爆發,讓這門 iOS 應用開發的主要語言獲得了火箭一般的蹿升速度。

而 Swift 正是作為 Objective-C 的繼任者的姿态出現的。2012~2013 年,蘋果試圖對 Objective-C 進行大規模的優化和更新改進,增加了各種現代語言的特性,讓編寫 App 更加容易,以吸引更多的程式員投入到了 App Store 的生态圈裡。

這些努力都不如直接來上一款開源新語言有效。事後,Chris Lattner 表示,動手做 Swift 的原因有三:

第一,如果我們大幅優化 Objective - C,把很多 Swift 的特性加進去,這對開發者來說是災難性的,因為他們要對原來的 APP 要進行大幅修改;

第二,Objective - C 很多特性積重難返,比如它安全性上的問題;

第三,Objective - C 是基于 C 開發的語言,是以你無論怎麼優化,它必然有 C 語言自身的缺陷。

蘋果有開源,但又怎樣呢?(下)

更重要的一點是,Swift 是開源的,而且這次蘋果的開源的确更開放了。

在 Chris Lattner 在職期間,蘋果已經徹底開放了 Swift,不僅僅是開源而已,還建構了一整套社群開放合作的規範,Swift 語言的協定也是很寬松,社群十分活躍。這些動作,為 Swift 及生态圈打下了一個很好的可持續的基礎。

首先,這得益于 Chris Lattner 對開源的态度:

我持有的預設觀點之一是,開放比封閉好。如果你能讓更多的人參與進來,你會得到更好的東西。

我個人感到最驕傲的一點是,我們并不打算僅通過内部去把它做到完美 —— 我們開源、我們依靠社群,這樣一門語言才能在無數開發者的實戰中得到檢驗和改進。我想,這才是 Swift 最棒的地方。

當 Swift 開源,它的發展進化就變成一件非常了不起的事情。從效率方面看,開源或許并不理想,但開源是使 Swift 真正與衆不同的重要部分。我認為,這完全歸功于那些社群裡花時間去塑造和推動 Swift 的人們。

其次,早期的社群回報确實在塑造 Swift 1 和 2 上,功不可沒。

Swift 1 的頭一兩年,很多事情都是由社群直接推動的。甚至多年後,Chris Lattner 仍将 Swift 的成長歸功于社群的力量:“ Swift 現在很好的主要原因之一是有一大群人在寫部落格和回報,當人們有抱怨時,就是推動進步的時候。”

再次,正是在開源的推動下,Swift 項目乃至蘋果都對開源實踐有了許多心得。

社群的建設,意味着 Swift 能從很多核心團隊以外的地方收獲。比如,Codable 協定的設計就來自于蘋果的一個架構團隊(他們甚至不在 Swift 團隊中);Result 類型進入 Swift 5,也是因為社群力量推動的。這些巧妙的設計被證明是很有意義的。

除此之外,為了更好地和社群産生互動合作,蘋果采取了強制一定數量的文檔和流程的方法。多年來,Swift 一直在平衡社群力量上作出努力,比如,是否将設計權限配置設定給社群?還是配置設定給社群優先級能力?這些問題都很有挑戰性。

我從 Swift 的進化過程中學到的第一件事是:如何适當地催化社群力量。Swift 真正召集了一個語言極客社群,我一直在尋找有什麼催化劑可以讓 Swift 包生态或者 Swift-on-the-server 社群起飛,讓社群團結起來做一些很酷的事情。
蘋果有開源,但又怎樣呢?(下)

在開源的推動下,Swift 有了出人意料的成長。

一開始,Chris Lattner 僅僅設想這門語言會在幾年後在蘋果内部圈子裡産生影響,而蘋果則認為這是一個更快速、更有效開發 iPhone、iPad 以及 Mac 電腦軟體應用的工具。

2015 年 WWDC 大會上,蘋果公司進階副總裁 Craig Federighi 表示,“我們認為未來 20 年 Swift 将成為程式設計的标準語言。我們認為它将成為未來主要的程式設計語言之一。”同時,他也表示,如果想要給更多企業開發者開發自己的移動應用提供支援的話,最好的辦法就是開源。

開源之後,Swift 發展之好讓我咋舌。當年我們開源了 LLVM 和 Clang,它們也發展喜人。但是,跟 Swift 比起來,它們的發展也太慢了,LLVM 和 Clang 開源後完全沒有 Swift 這麼火。

Swift 就不同了,開源一年之後,我們就有了上百萬的開發者在使用這門語言 —— 我和很多有豐富開源經驗的老工程師都吓了一跳,這簡直了!然後我們每天收到無數的郵件和 pull requests,要求更新這個、要求優化那個,我們的節奏完全被打亂了。

我現在覺得開源這個決定至關重要。一來大家會幫着優化;二來我們有個巨大的論壇,在那裡大家可以暢所欲言,全世界的人都在幫着 Swift 進步,這真的很棒。我們雖然沒有一開始就具體計劃要開源,但是蘋果内部當時都覺得 Swift 肯定有一天要開源。

曾經有一句話很火 ——“Swift 統治世界”。這是 Chris Lattner 開玩笑說的,但漸漸地,無論是主創團隊還是蘋果其他人,都開始将 Swift 當成是未來世界的主流語言來看,在他們眼裡,它将會超越 Python,甚至有一天取代 C。

蘋果有開源,但又怎樣呢?(下)

在 Chris Lattner 的規劃中,開源是重要的一環;然後,Swift 必須要有一個殺手級的産品;再然後,就要把 Swift 應用到伺服器端;再接下來,Swift 要取代 Java。

02 開源多年,蘋果也有委屈,大家過度揣測了嗎?

盡管 Swift 緻力開放,且雄心勃勃;但始終難以擺脫蘋果封閉的刻闆印象。

大家始終覺得, Swift 隻是蘋果自己搞出來的東西,是蘋果自己的玩具,隻能用在蘋果自己的 iOS 系統和 macOS 系統上。對此,Swift 不斷加大開源和建構社群的力度,希望 Swift 能更好地被接受,并在系統開發領域追上來。

我們的目标是建立一個包容的社群。但是,如果您不是 Apple 開發人員,每次搜尋 Swift 的東西時都會陷入有關 iOS 的讨論,這會讓人感到疏遠。

這會讓你覺得自己像個局外人,這是個錯誤的信号。我想,沒有人打算讓這種情況發生,但這個效果是真實的。這是我們作為一個社群面臨的挑戰。而且,我不知道這些問題有沒有好的、簡單的答案。

情況究竟是怎樣的呢?在 Swift 社群網站寫着這樣一段話:

Swift.org 社群的唯一目标是打造世界上最好的通用程式設計語言。我們将共同開發該語言,并由任何希望參與的人提供貢獻。

Swift 語言是公開開發的,所有關于語言或社群流程的技術或管理主題都應送出給 Swift 公共論壇。鼓勵公開對話,積極的 Swift 語言開發人員應關注相關論壇類别。

在結構上,Swift 項目由一個核心工程師團隊(7人)管理,該團隊通過與社群合作來推動戰略方向。技術上司者來自貢獻者社群,任何人都可以獲得上司 Swift 領域的權利。

但是,Apple Inc. 是項目負責人并擔任該項目的仲裁者。Ted Kremenek(Chris Lattner 離開社群後,欽點的繼任者)是蘋果的指定代表,并擔任項目負責人的代言人。

這意味着,蘋果并沒有打算将 Swift 完全交給外部人員,蘋果始終保持着上司權,外部開發者能參與進來,引導 Swift 的發展,為它的運作和功能作出貢獻,并且他們的工作将會公開。

蘋果有開源,但又怎樣呢?(下)

https://www.swift.org/community/

蘋果的确在把握着主導權,但外界對此的揣測隻會層層加碼。這種刻闆印象和懷疑論調,在 Chris Lattner 的離職風波中,得到了很好的展現。

2017 年,Chris Lattner 離開了蘋果,下一個東家是特斯拉。媒體從蘋果之前多次發動的專利戰争、被專利出庭困擾而辭職的前員工、特斯拉在專利上的開放态度等“蛛絲馬迹”揣測 Chris Lattner 離開的真正原因。更有多位自稱 Chris Lattner 的“朋友”出來表示,Chris Lattner 确實是因專利态度加入特斯拉。

蘋果有開源,但又怎樣呢?(下)

沒過多久,2017 年 1 月 13 日,Chris Lattner 不得不站出來在 Twitter 上辟謠:

我的決定與(專利)“開放”無關,所謂的“朋友”要麼是捏造的,要麼是投機的。大衆隻是想讓蘋果難堪而已。

在開源上,Chris Lattner 力挺老東家。他表示,蘋果其實有開源的傳統, LLVM 雖然不是始于蘋果,但是最終是蘋果完成并将其開源。Clang 則完完全全是生于斯開源于斯。還有其他工具,比如 LLDB、libc+ 以及 compiler-rt 都是如此。

但是,媒體和外界的看法是冷峻的。更多人認為,開源從來都是不是蘋果的初衷,而是一場不得不順勢而為的改變。

第一,在過去的 15 年間,開發者已經顯示了對開源工具和平台的偏愛。如果蘋果繼續讓開發者适應自己的技術,遠離第三方技術,是很有風險的。這會讓蘋果與開發者的關系變得疏遠,蘋果對外開放是遲早的事。

第二,最近幾年,新程式設計語言層出不窮,谷歌的 Go 語言、Mozilla 的 Rust、Meta 的 Hack 和 D 語言等,都是開源的!他們之中甚至會有可能出現下一個軟體開發的标準。

而且,2014 年,微軟開源了 .NET 架構,這個架構被正式許可在包括 iOS 和 macOS 等的非 Windows 環境使用。(有意思的是,直到 2020 年 9 月,蘋果才正式官宣将 Swift 引入 Windows,也不知道為啥動作那麼慢。)面對這樣的挑戰,蘋果沒有選擇,Swift 必須開源。

蘋果有開源,但又怎樣呢?(下)

第三,多年來,蘋果一直緻力于完善自己的的閉環生态圈,Swift 的開源也與此脫不開幹系。尤其是在移動互聯不斷深入以後,要想搶占先機,就必須要有強有力的技術支援和出色的使用者體驗。

如今,蘋果自己的硬體裝置市場占有率正在穩步提升,iOS、macOS、iPadOS 等系統則在不斷完善。不少人認為,推出開源的 Swift 對于豐富應用體系、挖掘人才等方面有很好的促進作用,蘋果下的這盤棋很大。

蘋果有開源,但又怎樣呢?(下)

目前蘋果主要的幾個軟體平台

03 結語:通過開源,蘋果能實作自我超越嗎?

有句名言:開源吞噬世界。

我們能夠看到,這個世界的确在被開源軟體改變着,包括微軟這樣的專有軟體大學營。2015年,當微軟拿出印有 “Microsoft Loves Linux” 字樣的T恤和徽章時,也不知道有多少人被咖啡嗆到了。

開源聲勢很大,蘋果在開源界也難免一鼻子灰,比如,與 GCC 的合作。現在,蘋果又不得不向開源靠攏。除了 Darwin、WebKit 和 Swift,蘋果還有一些其他開源項目。但是,蘋果每次開源,都會有異樣的聲音。

比如,2018 年蘋果宣布開源一款增強型 NoSQL —— FoundationDB(是蘋果在 2015 年的時候收購的開源公司開發的項目),就有人表示,商業巨頭總是這樣,自己不想維護了,就丢出來給社群維護,等社群維護好了,又閉源拿來賣錢。

除此之外,蘋果還積極參加各種開放計劃、開源基金會等,比如 Facebook (當時還叫這名)領軍的開放計算項目(Open Compute Project, OCP)以及 Blender 基金會、開放媒體聯盟等。

一路上,蘋果不停招兵買馬。這兩年,蘋果不斷釋出有關 RISC-V 開發者和開源項目工程師的招聘,想要從開源界吸收力量。

2011 年,喬布斯去世,蘋果始終沒能走出他的影響。在喬布斯的建構下,蘋果對軟硬體有強烈的控制欲,并發展出一種獨特的閉源方式:封閉系統代碼的同時,通過和第三方分享利益的方式來建構生态。

蘋果有開源,但又怎樣呢?(下)

電影《史蒂夫·喬布斯》中,法鲨飾演的喬布斯剛剛複仇歸來,面對昔日夥伴 Wozniak 的質問,他将所有的一切歸罪于“開放”

在 Tim Cook 的上司下,蘋果的商業模式始終沒有脫離軟硬體一體化消費電子公司的範疇,依舊需要不斷推出遠遠超過市場預期的新品來維持地位。

通過開源,蘋果能超越自己一直以來的封閉模式嗎?