(中)苹果有开源,但又怎样呢?

news2024/11/23 8:24:19

上篇(详情请戳:《(上)苹果有开源,但又怎样呢?
》)里说到,苹果首个开源项目 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 一直处于苹果的强力掌控之下,不仅在开源之初就充斥开源方面的争议,现在更是陷入了 “垄断” 和 “商战” 之中,呈现出一种别扭的姿态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/466477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA】将两个字符串相乘并返回字符串

🖊作者 : D. Star. 📘专栏 : Java 😆今日分享 : 越忙越不能熬夜. —晚安 , 好梦. 将两个字符串相乘并返回字符串 🌻前言:✔题目:🔎代码详情:1.创建字符创对象:2.将字符串转化为数字:3.数字相乘,并转化为字符串家人们,点…

[C++]——C++基础知识点(C++和C语言的区别)

文章目录 1. 前言2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C的输入输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理——名字修饰 6. 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 引用的使用场景6.5 引用和指针的…

招商基金数字化转型下的研发管理|ONES 客户案例

在 4 月 20 日举行的《中国企业软件研发管理白皮书》发布会上,招商基金信息技术部副总监、研发中心主管刘志昆作了《招商基金数字化转型下的研发管理》主题演讲,从数字化转型背景、研发管理所遇到的挑战出发,讲述招商基金如何摸索出适合自身环…

Pycharm连接MySQL

使用MySQL内置工具(命令) 创建数据库:unicom 数据表:admin 表名:admin 列:id 整型 自增 主键username 字符串 不为空,password 字符串 不为空,mobile 字符串 不为空 Python代码实…

echarts 象形柱图_矢量图_自定义样式

Echarts 常用各类图表模板配置 注意: 这里主要就是基于各类图表,更多的使用 Echarts 的各类配置项; 以下代码都可以复制到 Echarts 官网,直接预览; 图标模板目录 Echarts 常用各类图表模板配置一、象形柱图二、环形图…

电脑中了勒索病毒,Windows操作系统如何设置才能预防faust勒索病毒攻击?

随着计算机技术的不断发展,勒索病毒的加密程序也有了很大提升,phobos勒索家族也衍生出了各种后缀的勒索病毒,给我们的日常工作生活带来了很大困扰。随着phobos勒索家族的加密程序升级,faust勒索病毒已经成为该家族中较为疯狂的勒索…

BACnet IP通讯方式组网步骤

BACnet IP通讯方式组网步骤 文章目录 BACnet IP通讯方式组网步骤前言一、配置BACnet IP网络参数二、确定DDC控制器和扩展模块的BACnet地址三、配置BACnet对象:四、配置DDC控制器和扩展模块五、测试通信六、实现控制功能七、总结 前言 BACnet IP方式组网的几个优势&…

强烈建议互联网人转战实体和农业,去了就是降维打击!实体太缺人才了,老板也不缺钱!...

大环境不好,互联网人该何去何从? 一位网友提出了一个新思路:强烈建议互联网同学转战实体、农业这些行业。实体真的太缺人才了,目前大部分实体都留下70后、80后在继续奋斗。其实实体老板很多都不缺钱,经过多年积累&…

内外部函数和内存模型

1、函数(封装、复用) 功能性:最基本的特性; 扩展性:对于时刻变化的需求易于扩展; 维护性:对于时刻变化的需求易于维护,易于编码变更; 封装性:不要把所有的代…

sql优化慢查询

1.慢查询设置 慢查询设置(临时) -- 查看是否开启了慢查询日志 show variables like slow%;-- 开启慢查询日志 set global slow_query_log on;-- 更改日志路径 set global slow_query_log_file /data/mydata/app1-slow.log;-- 查看慢查询时间临界值&…

学习笔记-主成分分析法

定义 主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息。一般来说,当研究的问题涉及到多变量且变量之间存…

synchronize锁详解

目录 1、什么是synchronize? 2、为什么要用synchronize锁? 2.1 代码演示 2.2 原因分析 2.3 专有名词解释 2.3.1 临界资源 2.3.2 临界区 2.3.3 竞态条件 3、synchronize锁的原理 3.1 锁升级过程 3.1.1 偏向锁 3.1.2 轻量级锁 3.1.3 重量级锁…

【设计模式】七大设计原则--------单一职责原则

文章目录 1.案例1.1 原始案例1.2 改进一:类上遵循单一职责原则1.3 改进二:方法上遵循单一职责原则 2.小结 1.案例 1.1 原始案例 package com.sdnu.principle.singleresponsibility; //客户端 public class singleResponsibility {public static void m…

选择什么电容笔比较好?平价好用的iPad电容笔推荐

科学技术的迅速发展使人们的生活发生了巨大的变化。如今,众多的电子和数码产品层出不穷,而这种能够与平板电脑配套的电容笔也是如此。随着电容笔的不断发展,其应用范围也将不断扩大,今天,我将向大家推荐一些具有较高性…

总结:一文搞懂chatGPT原理

目前关于chatGPT的资料过于零散,没有详尽所有知识点、系统概述的文章,因此,笔者作了这篇总结性文章。 训练过程总览 理清演化路径 预训练(pretrain) GPT-3概述 GPT 3模型的理念 GPT-3如何学习 数据集 指令微调 (Instruction Fine-Tunin…

八大排序之交换排序与计数排序

此篇更新完成后,八大排序已经全部写完,还请各位可以多多支持!🥰 八大排序之选择排序_冷兮雪的博客-CSDN博客 八大排序之插入排序和归并排序_冷兮雪的博客-CSDN博客 目录 交换排序的基本思想🍭 一、冒泡排序&#x1f…

JS文件断点续传的切割与合并

总结一下大文件分片上传和断点续传的问题。因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况。http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件切片(…

基于html+css的图展示43

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

制冷暖通工业互联网平台建设

制冷暖通工业互联网平台建设需要遵循一定的流程,具体步骤如下: 需求分析:了解客户需求,包括业务流程、系统功能、界面设计等方面。 系统设计:基于需求分析,进行系统设计,包括系统结构、数据库设…

【细读Spring Boot源码】prepareContext之load

前言 启动过程中准备上下文中有一步加载在资源,下面看下详情 详情 调用点 private void prepareContext(DefaultBootstrapContext bootstrapContext, ConfigurableApplicationContext context,ConfigurableEnvironment environment, SpringApplicationRunListen…