一开始,因为 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 的发展,为它的运作和功能作出贡献,并且他们的工作将会公开。
苹果的确在把握着主导权,但外界对此的揣测只会层层加码。这种刻板印象和怀疑论调,在 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 的领导下,苹果的商业模式始终没有脱离软硬件一体化消费电子公司的范畴,依旧需要不断推出远远超过市场预期的新品来维持地位。
通过开源,苹果能超越自己一直以来的封闭模式吗?