一开始,因为 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
就是这样,Chris Lattner 没有声张,在和苹果软件团队负责人 Bertrand Serlet 聊了几次后,他们明确了建立一种新语言的想法。当时它的代号是“Shiny”,“就好像你正在建造一个闪亮的新东西。” 2019 年 Chris Lattner 回忆道。
一旦确立想法,Chris Lattner 立马就开工了。从 2010 年夏天开始一直到第二年年末,他利用晚上和周末的时间,就那么吭哧吭哧地干着,没有告诉任何其他人,当他在伊利诺伊大学厄巴纳香槟分校的导师 Vikram Adve 知道后,都惊叹苹果的口风有多紧。
我秘密实现了大部分基本语言结构:其他一些人在 2011 年底开始认真贡献。 2013 年 7 月,它成为苹果公司开发者工具组的主要关注点。
我们在做 Swift 的时候,很多 iOS 开发者,包括苹果内部的工程师,都在吐槽我们这几年在 Objective - C 上毫无建树,都在说你们为什么不做这个那个。我们当然不能告诉他们我们在全力开发 Swift,而他们所要的语法功能我们都会给。
—— Chris Lattner
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 社区起飞,让社区团结起来做一些很酷的事情。
—— Chris Lattner
![]()
在开源的推动下,Swift 有了出人意料的成长。
一开始,Chris Lattner 仅仅设想这门语言会在几年后在苹果内部圈子里产生影响,而苹果则认为这是一个更快速、更有效开发 iPhone、iPad 以及 Mac 电脑软件应用的工具。
2015 年 WWDC 大会上,苹果公司高级副总裁 Craig Federighi 表示,“我们认为未来 20 年 Swift 将成为编程的标准语言。我们认为它将成为未来主要的编程语言之一。”同时,他也表示,如果想要给更多企业开发者开发自己的移动应用提供支持的话,最好的办法就是开源。
开源之后,Swift 发展之好让我咋舌。当年我们开源了 LLVM 和 Clang,它们也发展喜人。但是,跟 Swift 比起来,它们的发展也太慢了,LLVM 和 Clang 开源后完全没有 Swift 这么火。
Swift 就不同了,开源一年之后,我们就有了上百万的开发者在使用这门语言 —— 我和很多有丰富开源经验的老工程师都吓了一跳,这简直了!然后我们每天收到无数的邮件和 pull requests,要求更新这个、要求优化那个,我们的节奏完全被打乱了。
我现在觉得开源这个决定至关重要。一来大家会帮着优化;二来我们有个巨大的论坛,在那里大家可以畅所欲言,全世界的人都在帮着 Swift 进步,这真的很棒。我们虽然没有一开始就具体计划要开源,但是苹果内部当时都觉得 Swift 肯定有一天要开源。
—— Chris Lattner
曾经有一句话很火 ——“Swift 统治世界”。这是 Chris Lattner 开玩笑说的,但渐渐地,无论是主创团队还是苹果其他人,都开始将 Swift 当成是未来世界的主流语言来看,在他们眼里,它将会超越 Python,甚至有一天取代 C。
![]()
在 Chris Lattner 的规划中,开源是重要的一环;然后,Swift 必须要有一个杀手级的产品;再然后,就要把 Swift 应用到服务器端;再接下来,Swift 要取代 Java。
02 开源多年,苹果也有委屈,大家过度揣测了吗?
尽管 Swift 致力开放,且雄心勃勃;但始终难以摆脱苹果封闭的刻板印象。
大家始终觉得, Swift 只是苹果自己搞出来的东西,是苹果自己的玩具,只能用在苹果自己的 iOS 系统和 macOS 系统上。对此,Swift 不断加大开源和构建社区的力度,希望 Swift 能更好地被接受,并在系统开发领域追上来。
我们的目标是建立一个包容的社区。但是,如果您不是 Apple 开发人员,每次搜索 Swift 的东西时都会陷入有关 iOS 的讨论,这会让人感到疏远。
这会让你觉得自己像个局外人,这是个错误的信号。我想,没有人打算让这种情况发生,但这个效果是真实的。这是我们作为一个社区面临的挑战。而且,我不知道这些问题有没有好的、简单的答案。
—— Chris Lattner
情况究竟是怎样的呢?在 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 的领导下,苹果的商业模式始终没有脱离软硬件一体化消费电子公司的范畴,依旧需要不断推出远远超过市场预期的新品来维持地位。
通过开源,苹果能超越自己一直以来的封闭模式吗?