上篇(详情请戳:《(上)苹果有开源,但又怎样呢?
》)里说到,苹果首个开源项目 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% 的份额,居于第二。
https://gs.statcounter.com/
但目前, 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 兼容性问题开始合力定制规范。
https://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 一直处于苹果的强力掌控之下,不仅在开源之初就充斥开源方面的争议,现在更是陷入了 “垄断” 和 “商战” 之中,呈现出一种别扭的姿态。