出品|開源中國
文|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,這也成為了他的博士學位論文的主題。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIjBXPt9mcm9TMjZWOyIGN2Y2NxATNiNGOxUjM0MmMkBzMkJDZhNmM58CXwsWO0EHbyomdx1Sat42YtM3b09CXul2ZpJ3bvwVbvNmLn1WavFWa0V3b05iNyA3Lc9CX6MHc0RHaiojIsJye.jpg)
年輕時的“小鮮肉” 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 的上司下,蘋果的商業模式始終沒有脫離軟硬體一體化消費電子公司的範疇,依舊需要不斷推出遠遠超過市場預期的新品來維持地位。
通過開源,蘋果能超越自己一直以來的封閉模式嗎?