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

news/2023/12/1 5:42:03

苹果(Apple Inc.)有多伟大,我相信已经无需赘述了。但是,这里的伟大是指用产品和理念对行业进行的革命性颠覆,而不是对开源而言

相反,在某种程度上,苹果几乎就是开源的反义词。这种骨子里的 “封闭”,从苹果诞生的那一刻就决定了。

1976 年,两位都叫做 Steve 的创始人(乔布斯 和 Wozniak)在车库创建苹果的时候,估计也没想到他们之后的分歧会如此之大。Wozniak 是个典型的工程师,当他把那个后来被称作 AppleⅠ 的电路板展现给乔布斯时,当乔布斯用自己惊人的商业天赋将 AppleⅡ 推成 “爆款” 时,就注定了 Wozniak 的工程师特质只能在乔布斯的天赋下落得下风。

苹果两位创始人手里拿着 AppleⅠ,乔布斯在右,Wozniak 在左

最早的时候,苹果公司只出售硬件。为了不让其他公司的软件 “糟蹋” 自家的硬件,苹果很快开发出了自家系统;为了防止用户破坏改装,苹果产品不能擅自拆开,电脑不能插入扩展卡,iPhone 不能换电池,还使用了特制的螺丝 “防盗”。至此,苹果一家公司包办了整条产业链,从电子零件到销售网点,都是它的业务范围。无论硬件、软件、还是内容,都在它的控制之中。

除了绝无仅有的全封闭生态商业模式,苹果还盛行严苛的 “保密制度”,员工泄密就意味着被解雇甚至面临诉讼。

电影《史蒂夫・乔布斯》中法鲨饰演的乔布斯在阐述自己的 “封闭” 理念

苹果当真只有封闭吗?当然不是。苹果可是实实在在地参与和贡献过开源。2021 年 12 月 9 日,苹果为其开源项目推出了一个重新设计的网站,包含了 Swift、WebKit、FoundationDB、ResearchKit、CareKit、Password Manager Resources 六个自主开源项目,而苹果参与贡献的其他项目也放在了上面。

没错,即使在开源被微软称做 “毒瘤” 的时代,苹果也没有这样激进地反对开源,它只是默不做声地、用一种狡猾且精明的态度来处理与开源的关系。 

简单来说,开源对苹果来说更像是一种工具和手段,为它所用、达其目的。开源在试图用自己的价值观念去构建一个开放且协作的技术环境,但当资本开始用吸收、提炼、利用、改造等手段去进行 “柔性” 地招安、整合和收编开源时,“异化” 在所难免。而苹果正是此类资本的代表。

在本质上,开源更多是一种文化和信仰,是用社群的力量去构建完全开放的技术生态。而苹果所做的开源并没有涉及到这一深层次的 “理想”,反而一直在 “工具化” 开源,这种开源真的是我们想要的吗? 

上篇: 乔布斯的复仇衍生品 Darwin

“你是想卖一辈子糖水呢,还是和我们一起改变世界?”

乔布斯在邀请当时的百事 CEO John Sculley 加入苹果时,肯定没有想到他会被 Sculley 踢出这个自己一手带大的公司。

1985 年 9 月 16 日,乔布斯辞职苹果的同时,为 NeXT 提交了公司注册文件。乔布斯用手里的股票换了 7000 万美金,只留了 1 股,为的是还能参加苹果的股东会。而这笔钱也成为了 NeXT 电脑公司和皮克斯动画公司的创业基金。其中,NeXT 公司所做的事成为了乔布斯回归苹果的砝码。

1988 年,NeXT 公司推出了 NeXT 电脑,使用 NeXTStep 为操作系统。在当时, NeXTStep 是相当先进的系统,以 Mach 内核和 Unix (BSD) 为基础,使用 PostScript 提供高品质的使用者图形界面, 并以 Objective-C 语言提供完整的面向对象环境。

此外,NeXTStep 操作系统提出程序坞(Dock or Taskbar)的概念和一系列现代 GUI 界面上的概念,例如拖动窗口时的实时滚动、彩色的图标概念、文件修改时的提示功能等,还开创了现代 GUI 编辑器的先河,对整个计算机界都产生了深远影响。

而 NeXTStep 所基于的基础 —— Mach 和 BSD 都是开源的。

但 NeXT 并没有给乔布斯赚到什么钱,反而和皮克斯动画一起将乔布斯卖苹果股票换来的 7000 万美金亏了个干净。在乔布斯快撑不住的时候,幸好皮克斯动画推出的《玩具总动员》大爆,才得以回血;而 NeXT 公司早从 1992 年起,就因为硬件销售情况不佳,开始授权其它硬件生产商使用 NeXTStep 系统,并在 1993 年停止了亏损的硬件业务,开始专心于软件市场开发。

NeXT 公司创始团队,乔布斯在 C 位

1996 年 12 月 20 日,苹果开始收购 NeXT 公司,其中包括所有知识产权、技术以及软件开发人员。1997 年 2 月 7 日,这笔收购以 4.29 亿美元和乔布斯获得 150 万股苹果股票的价格完成,同时乔布斯取代了当时的 CEO Amelio,王者归来。

这 11 年,不仅是乔布斯的蛰伏期,同样也是苹果的。1996 年决定收购 NeXT 的时候,苹果已经陷入了经营管理困局,电脑市场份额由鼎盛时的 16% 跌到 4%,股票也一蹶不振。

明面上看,苹果是在购买一个可以取代旧 Mac OS 的操作系统;但实际上,苹果就是在召回乔布斯。乔布斯归来后立马叫停了 Sculley 主导的 Newton 项目,继续推行自己 “Think Different” 的理念。事后我们再来审视,这无异于一场乔布斯的复仇故事

而 NeXT 所开发的操作系统,正是这场复仇中最有力的武器。

收购 NeXT 后,苹果开始开发基于 Mach 的 MacOS 继任者,将 Mach 内核从 2.5 升级到 3,使用 FreeBSD 内核中的概念和组件对其进行了扩展,以形成一个称为 XNU 的内核。在此基础上,苹果拿出了该公司史上的第一个开源项目 Darwin,它拥有 BSD 这支非常纯正的开源血统(主要是 FreeBSD),是一个完全开源的操作系统,与苹果自身商业的系统同源。

https://www.apple.com/newsroom/2000/04/05Apple-Releases-Darwin-1-0-Open-Source/

为此,苹果还特意聘请了 FreeBSD 创建人之一 Jordan Hubbard 掌管 BSD 技术团队(一开始其实苹果相中的是 Linux 之父 Linus Torvalds,但被 Linus 拒绝了)。随后,Hubbard 又成为了苹果 Unix 技术部门的主管,为苹果付出了 12 年的青春年华

除此之外,苹果还专门为 Darwin 设计了一款名叫 APSL(Apple Public Source License) 的开源许可证,这个许可证不仅得到了 OSI (Open Source Initiative)的认可,还被 FSF(Free Software Foundation)认可为 “自由软件许可证”。

APSL 与几款主流开源许可证对比

怎么回事?苹果难道转性了?不封闭了?当然不是,这恰恰是苹果利用开源的第一步。正如时任 FSF 副总裁的 Bradley Kuhn 之前评论的那样:

They clearly have some interest in helping certain Free Software projects (such as GCC and GDB), but I don't think they are really dedicated to the goal of software freedom. For them, it's likely only a pragmatic necessity that leads them to support some Free Software projects.

他们(苹果)显然对帮助某些自由软件项目(例如 GCC 和 GDB)有一定的兴趣,但我认为他们并没有真正致力于软件自由的目标。对他们来说,支持一些自由软件项目仅是因为一种现实层面的需求。

当时,Bradley Kuhn 看到一向以 “封闭” 著称的苹果开始允许内部员工参与开源,是非常欢迎的。但正如他所言,苹果所做的这一切并不是为了 “自由软件”。 

首先,Darwin 的开源并没有打乱苹果既有的商业模式和市场优势。苹果出售的不是软件、也不是服务,而是机器。一个操作系统 Kernel 的开源不是什么大事,毕竟,开源的又不是苹果一向看重的 Aqua GUI,而对于 GUI 这样的核心优势,你要模仿苹果就能告你到破产。

其次,苹果之所以掺合自由软件这事,也是因为自由软件的确好用。比如,具有颠覆性的 Mac OS X 的基础就是 NetBSD 和 FreeBSD 的 BSD 版本,BSD 为 Mac 带来了多任务处理,并允许向它们移植大量 Unix 和 BSD 应用程序。因此, Mac 电脑开始摆脱创意艺术家工具的定位,成为一个更通用的系统,被越来越多的家庭和小型企业所使用。

除此之外,苹果(其实是 NeXT)还使用了 Richard Mattew Stallman(自由软件运动发起人)开发的 GCC 编译器。

有人认为,苹果引入开源的 BSD 子系统(主要包括 FreeBSD,还有少部分 OpenBSD 和 NetBSD)可以说是 Mac OS X 的精髓所在:一方面它提供了对各种业界标准的兼容,另一方面则保证系统安全性。

然而,由此衍生开源出来的 Darwin,苹果并没有好好照顾。

作为一个单独的产品,Darwin 并没有获得太多的人气。2002 年 4 月,苹果成立 OpenDarwin.org(一个协助合作 Darwin 发展的社群),这个社群可以创建发布自己的 Darwin 操作系统,且为开源开发人员提供资源,以便为苹果的 Mac OS X 交互和生产产品。但很快,OpenDarwin 项目就随着苹果对 OS X 的组件控制加强而于 2006 年 7 月 25 日关闭。

据知,OpenDarwin 团队在宣布该项目关闭时表示,OpenDarwin 已经 “成为仅用于 Mac OS X 相关项目的托管工具”。他们想要创建独立的达尔文操作系统,可是失败了。

较少来源的可用性、与苹果代表的不良互动、建立和跟踪来源的困难以及缺乏兴趣的社区,都应该为此负责。

如今,在苹果开源的官网上,我们已经找不到 Darwin 的踪影,取而代之的是一个名为 UNIX 的项目,被排在开源项目网页的角落。

https://developer.apple.com/opensource/

再次,苹果的这次开源行动给开源界带来好处有限,却反而还榨走了不少资源。一方面,苹果以开源之名继续从 BSD 世界中借鉴创新;另一方面,从 2001 ~ 2013 年,Jordan Hubbard 这一在 FreeBSD 社区举足轻重的人物因为在为苹果效力,而难以兼顾
到 FreeBSD,这或多或少为 FreeBSD 的发展带来不利。

最后,苹果对开源上游的反馈也是不足够的。根据 FreeBSD 基金会的记录
,苹果公司在 2021 年向该基金会捐赠的金额在 1000 到 4999 美元之间。当然了,秉承高尚品德,FreeBSD 的核心贡献者在被问及苹果贡献上游积极性不足的问题时,也没有因此责怪苹果。

此外,去年还有件趣事,也足以表明苹果对开源项目利用又轻视的心态。

2021 年 11 月,curl 创始人兼首席开发者 Daniel Stenberg 发表
了一篇吐槽苹果的博客,原因是当用户向苹果寻求帮助时,苹果直接回复用户让他自行联系 curl。

想象一下,一家市值万亿美元的公司将各种开源组件应用到自己的产品中,每年赚取数十亿美元的利润。当这家公司的一个用户向它提供的产品寻求帮助时,公司却把用户推给开源项目。这个开源项目是由志愿者运营和维护的,这家公司从未赞助过一分钱。

毫无疑问,Daniel 对苹果的做法颇有不满,因为它没有为项目做出任何贡献,却在别人求助的时候把问题抛到自己身上,无疑是被当成了免费的工具人

OpenDarwin 项目关停之后,  
  PureDarwin作为其非正式的继承者出现了。这个社区致力于让 Darwin 更可用,但实际上,它与 OpenDarwin 之间没有任何官方关系。这个被社群拯救出来的项目,已经与苹果无关了。


http://www.ppmy.cn/news/58139.html

相关文章

学习 Python 之 Pygame 开发魂斗罗(十五)

学习 Python 之 Pygame 开发魂斗罗(十五) 给魂斗罗游戏加入Boss1. 分析boss2. 创建boss类3. 在主类中加载Boss4. 修改子弹类逻辑,让boss可以开火5. 修改主类逻辑,让boss正常开火 给魂斗罗游戏加入Boss 在上次的博客学习 Python 之…

从五一的旅游热潮看,该如何实现数字文旅的转型升级?

文旅产业是文化和旅游行业的融合,属于国家战略性产业,资源消耗低,带动系数大,就业机会多,综合效益好。改革开放以来,随着国内工业化、城镇化的快速发展,日益增长的大众化、多样化消费需求为文旅…

行内元素、块级元素和置换元素、非置换元素

背景 看了很多的文章,很多文章把元素分为行内、行内块、块元素。但是img、input等又能设置宽高,有些文章归类于行内元素 ,有些归类于行内块元素,故而查看mdn文档。并没有行内块元素一说 [块级元素 - HTML(超文本标记语…

第二十章 渲染管线

渲染管线是计算机图形中最基础最核心的部分,它是将3D场景显示到2D平面的技术过程。在DirectX课程中,我们就介绍了渲染管线,分为固定渲染管线和可编程渲染管线(Shader)。但是在DirectX 10版本之后统一了渲染架构&#x…

CSI指纹预处理(中值、均值、Hampel、维纳滤波、状态统计滤波器)

目录 前言 1、箱线法 2、中值滤波器 3、均值滤波器 4、Hampel滤波器 5、维纳滤波 6、状态统计滤波器 前言 因为设备、温度和实验室物品摆设等因素的影响,未经处理的CSI数据不能直接使用,需要对数据进行异常值处理以保证数据的稳定性,…

司空见惯 - 一树春风

一树春风有两般 南枝向暖北枝寒 现前一段西来意 一片西飞一片东(一片东来一片西) —— 了元《一树春风》 了元是谁? 了元,字觉老,号佛印,浮梁王氏子。北宋著名诗僧,禅僧。住镇江金山寺&#…

BLE调制与解调的一些东西

BLE调制 BLE是GFSK的IQ调制 IQ调制 所谓IQ调制,就是利用IQ两个分量序列去控制两路正交信号,I和Q两个序列可以是任意数字,也可以是符合某些规律的序列。 总的原理公式就是: cos(ab)cos(a)cos(b)-sin(a)sin(b) Acos(b)-Bsin(b)M…

文件系统和软硬链接

文章目录 一.文件系统1.了解磁盘的物理结构2.磁盘的存储结构a.磁盘读取 3.磁盘的逻辑结构a.为什么操作系统不直接使用CHS地址?b.实际IO一次的大小 4.磁盘的分区管理4.1.ext文件系统a.文件查找b.文件删除 4.2目录的属性和数据 二.软硬链接软链接的建立和删除软链接的…

[SWPU CTF]之Misc篇(NSSCTF)刷题记录⑥

NSSCTF-Misc篇-[SWPUCTF] [长城杯 2021 院校组]签到[巅峰极客 2021]签到[羊城杯 2021]签到题[鹤城杯 2021]流量分析[SWPU 2019]神奇的二维码[NISACTF 2022]为什么我什么都看不见[NISACTF 2022]bqt[SWPU 2020]套娃[NISACTF 2022]huaji?[SWPUCTF 2021 新生赛]gif好像有…

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 3 (人工神经网络)

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 1 万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 2 (传统机器学习方法如何选择) 人工神经网络 人工神经网络模型得名于这样一个事实,即所拟合的数学模型的形式受到大脑中神…

20 标准模板库STL之map和multimap

基础知识 1、map是一个键值映射的容器,键不能重复,值可以重复,内部使用红黑变体的平衡二叉树来实现。向map中插入新的元素时,会自动调节二叉树的排列,将元素放到合适的位置。multimap与map不同的地方在于,map内相同数值的键只能出现一次,multimap内相同数值的键可以出现…

第43天-DP-第九章 ● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

文章目录 1. 单词拆分2.多重背包3. 背包总结 1. 单词拆分 s class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());// 1. dp[i] 为true代表 可以拆分为一个或者多…

『LogDashboard』.NET开源的日志面板——登录授权页面扩展

&#x1f4e3;读完这篇文章里你能收获到 了解LogDashboard扩展开源项目——LogDashboard.Authorization掌握LogDashboard扩展内置登录页的使用方式 文章目录 一、LogDashbaord介绍1. 功能支持2. 快速开始 二、LogDashboard.Authorization1. 功能介绍2. 项目接入3. 更多示例 一…

分治FFT(NTT)

前置知识 c d q cdq cdq分治快速傅里叶变换&#xff08; F F T FFT FFT&#xff09;快速数论变换&#xff08; N T T NTT NTT&#xff09; 前言 分治 F F T FFT FFT是基于分治的算法&#xff0c;通过每次计算左区间对右区间的贡献&#xff0c;来降低 F F T FFT FFT的时间复杂度…

Java ATW和Swing开发全面指南

Java是一种具有广泛应用的计算机编程语言&#xff0c;它有着广泛的跨平台能力&#xff0c;深受程序员喜爱。ATW和Swing是Java中两个重要的开发框架&#xff0c;可以使Java的界面设计更加优美、易用&#xff0c;同时提高开发效率。 本指南将为大家详细介绍Java ATW和Swing开发&a…

ubuntu22.04安装与配置

目录 一、环境及下载 iso下载 VM配置 二、虚拟机与环境配置 虚拟机开始后的配置 一些工具配置 参考&#xff1a; VMware Workstation Pro 文档 一、环境及下载 iso下载 Download Ubuntu Desktop | Download | Ubuntu 新出了23但是偶数年份稳定支持&#xff0c;所以我…

人群计数传统方法:object detection, regression-based

数据标注方式&#xff1a; &#xff08;1&#xff09;人很少、人很大的时候用bounding box&#xff0c;把人从头到脚都框进长方形方框内&#xff0c;这个方框只用记录三个点的坐标&#xff0c;左下、左上、右下&#xff1b;测试集预测的时候&#xff0c;除了点的坐标还要输出这…

微信小程序实现订阅消息功能(Node服务器篇)

在上一篇内容当中在微信小程序中实现订阅消息功能&#xff0c;都在客户端(小程序)中来实现的&#xff0c;在客户端中模拟了服务器端来进行发送订阅消息的功能&#xff0c;那么本篇就将上一篇内容中仅在客户端中实现发送订阅消息功能进行一个分离&#xff0c;使用 Node.js 搭载后…

【代码随想录】刷题Day11

1.栈解决括号判断问题 20. 有效的括号 1.由于最先的左类括号是最后被判断的&#xff0c;所以我们使用的是栈来判断 2.如果碰到左类括号&#xff0c;那就直接入栈 3.如果碰到右类括号&#xff0c;如果栈中是空的&#xff0c;那么说明没有括号和它对应&#xff0c;直接返回false…

动态规划 --- 电线布设

动态规划 — 电线布设 题目描述 说是话&#xff0c;刚看到也是很懵逼&#xff0c;不想交子集是什么&#xff1f;乱七八糟的连线。 其实仔细想想后&#xff0c;觉得题目应该是说给定了这些点的连接端点&#xff0c;然后从他给的连线中选择出不想交的且条数最多的连线&#x…
最新文章