Apple 的开源之源:macOS 和 iOS 背后的 BSD 系统

2024年 7月 21日 63.0k 0

Apple 的开源之源:macOS 和 iOS 背后的 BSD 系统-1

导读:认识到 BSD 在 Apple 成功中的重要性,有助于我们更好地认识到开源贡献在塑造人们日常使用中技术的价值。

Apple 的时尚且用户友好的设备,例如功能强大的 MacBook 和无处不在的 iPhone,其可靠性和性能很大程度上归功于开源操作系统。

但是Apple们使用哪种开源操作系统?虽然人们经常声称 Apple 的 macOS、iOS、iPadOS、watchOS、visionOS 和 tvOS 直接源自 FreeBSD,但这也存在着一种误解。

这些操作系统的真正基础在于 Apple 较旧的操作系统技术与 NeXTSTEP 的结合,NeXTSTEP 本身是 Mach 和 BSD 的混合体,时间早于 FreeBSD。

虽然多年来 FreeBSD 用户空间的一些元素被纳入这些操作系统,但 Apple 内核 (XNU) 并非直接源自 FreeBSD。

然而,它们确实拥有共同的 BSD 血统。

Apple 的开源之源:macOS 和 iOS 背后的 BSD 系统-2

要了解 Apple 操作系统是如何演变的,了解 BSD(伯克利软件发行版)的不同版本及其影响至关重要。

伯克利的原始 BSD

BSD 起源于 20 世纪 70 年代末的加州大学伯克利分校。

BSD 是作为 AT&T 原版 UNIX 操作系统的增强版而开发的,它引入了许多创新,这些创新已成为现代操作系统的标准。

第一个版本 1BSD 于 1977 年发布,随后 2BSD 于 1978 年发布。重要的版本包括 4.1BSD(1981 年)和 4.2BSD(1983 年),它们引入了快速文件系统 (FFS)、TCP/IP 网络和Socket API,这些基础元素至今仍然在使用。

FreeBSD

Apple 的开源之源:macOS 和 iOS 背后的 BSD 系统-3

FreeBSD 源自原始 BSD,因其性能、高级网络功能和广泛的硬件支持而备受赞誉。

它于 1993 年从 386BSD 项目中诞生,此后已广泛应用于服务器、台式机和嵌入式系统。FreeBSD 的强大性能和可靠性使其成为高可用性应用程序和互联网基础设施的首选。

NetBSD

Apple 的开源之源:macOS 和 iOS 背后的 BSD 系统-4

NetBSD 以其在众多硬件平台上的可移植性而闻名。

它的座右铭是“当然可以运行 NetBSD”,这反映了它能够在从服务器和台式机到嵌入式设备和大型机等各种硬件架构上运行的能力。

自 1993 年成立以来,NetBSD 一直是 BSD 家族中可移植性和简洁设计的典范。

OpenBSD

Apple 的开源之源:macOS 和 iOS 背后的 BSD 系统-5

OpenBSD 于 1995 年从 NetBSD 中分离出来,专注于安全性、正确性和代码简单性。

它以严格的安全实践而闻名,并率先开发了许多安全技术,例如 OpenSSH、PF(数据包过滤器)和安全内存管理技术。OpenBSD 对安全性的承诺使其成为安全性至关重要的应用程序的首选。

其它的 BSD 变体

已经出现了几个 BSD 变体,每个变体都有其独特的重点和增强功能。例如,专注于性能和可扩展性的 DragonFly BSD 和构成 Apple macOS 和 iOS 核心的 Darwin。

Darwin 和 XNU:苹果操作系统的核心

macOS 的核心是 XNU 内核,这是一个混合内核,结合了 Mach 微内核、BSD 组件和 I/O Kit(面向对象的设备驱动程序 API)。这种集成确保 macOS 既能从 BSD 的类 Unix 稳健性中获益,又能利用 Mach 微内核的灵活性。

Darwin 是 Apple 操作系统(macOS、iOS、watchOS、tvOS 和 iPadOS)的开源基础,包括 XNU 内核、各种 BSD 组件和其他开源项目。

Darwin 的起源可以追溯到史蒂夫·乔布斯离开 Apple 后于 1985 年创立的 NeXT 公司。

NeXT 开发了 NeXTSTEP,这是一款基于 Mach 微内核和 BSD 构建的操作系统。当史蒂夫·乔布斯带着 NeXT 的技术重返 Apple 时,这演变成 OpenStep,并最终催生出 Darwin。

2000 年,Apple 根据 Apple 公共源代码许可证 (APSL) 将 Mac OS X(现为 macOS)的一些核心组件作为开源软件发布,让更广泛的社区从中受益并为其开发做出贡献。其中包括 launchd、Grand Central Dispatch 和 Core Foundation 等组件,其中一些组件后来根据更宽松的 Apache 许可证获得许可,以鼓励更广泛的采用。

然而,Cocoa 和 Carbon 框架等更高级别的组件仍然是专有的,从而保持了 Apple 的竞争优势。GPL 和 BSD 许可的组件没有重新获得许可,而是保留了其原始的开源许可证。

详细时间表:

  • 1969 年:UNIX 操作系统由 AT&T 的贝尔实验室开发

  • 1977 年:加州大学伯克利分校发布了 BSD 的第一个版本(1BSD),作为对 AT&T 原始 UNIX 操作系统的增强

  • 1978 年:2BSD 发布,在 1BSD 的基础上继续进行改进并增加了工具

  • 1980 年:3BSD 发布,引入了更多高级功能和改进

  • 1983 年:4.2BSD 发布,包含了快速文件系统 (FFS) 和 TCP/IP 网络等重大创新,这些成为未来操作系统的基础元素

  • 1985 年:史蒂夫·乔布斯离开苹果后创立了 NeXT

  • 1989 年:NeXTSTEP 发布。它基于 Mach 微内核和 BSD,并将高级功能与面向对象设计相结合

  • 1993 年:FreeBSD 和 NetBSD 由 386BSD 衍生而来,分别注重性能、安全性和可移植性

  • 1995:OpenBSD 从 NetBSD 分叉而来,强调安全性和代码正确性

  • 1996 年:Apple 收购 NeXT,将 NeXTSTEP 技术带回 Apple,并为 Mac OS X 奠定了基础

  • 2000 年:苹果发布基于 Darwin OS 的 Mac OS X 的第一个版本。该操作系统将 Mach 微内核与 BSD 组件相结合,形成了苹果现代操作系统的核心

  • 2006 年:OpenDarwin 停止发布,标志着 Apple 提供独立可安装版本的 Darwin OS 的努力的结束

macOS 中 BSD 组件的演变与集成

下表为 macOS中使用BSD相关组件的对应关系。

成分

起源

XNU 内核

Mach/NeXTStep/OpenStep

网络堆栈 

FreeBSD/BSD,附加 NIKE 和 IOKIT

虚拟文件系统

FreeBSD/BSD

用户空间工具

FreeBSD/BSD

内存管理

Mach/NetBSD

流程模型 

Mach IPC、Mach 安全拖车和强制访问控制 (MAC) 机制

Apple 的 macOS 是一款混合型操作系统,它集成了来自不同 BSD 变体的各种组件,从而创建了一个强大而多功能的平台。

macOS 的核心是 XNU 内核,这是一个混合内核,结合了 Mach、NeXTSTEP 和 OpenStep 的元素以及来自 BSD 的其他组件。这种基础架构充分利用了每个系统的优势,从而提供可靠且高性能的操作系统。

网络堆栈:macOS 中的网络堆栈源于 FreeBSD 和其他 BSD 变体,融合了它们可靠而高效的网络功能。早期的网络元素(例如 TCP/IP 堆栈)受到 FreeBSD 设计的影响,FreeBSD 以其性能和可靠性而闻名。包括最初为 FreeBSD 开发的 kqueue 事件通知接口,增强了 macOS 高效处理 I/O 事件的能力。

Apple 的实现融合了 BSD 和 FreeBSD 的代码,但也包括独特的机制,例如网络内核扩展 (NKE)、面向对象的设备驱动程序系统 (IOKit) 和磁盘仲裁层。这些组件与传统的 BSD 实现存在重大差异。

虚拟文件系统:MacOS 的虚拟文件系统组件源自 FreeBSD 和其他 BSD 系统,确保稳定、安全的文件管理系统。

内存管理:MacOS 的内存管理系统主要源自 Mach,并受到 NetBSD 的影响,尤其是共享/合并缓冲区缓存。

进程模型:MacOS的进程模型基于Mach,在进程子系统的基础层使用Mach系统线程。

Mach IPC 和安全性:Mach IPC 广泛应用于 macOS 和 iOS 的内核和用户空间,这带来了进一步的差异。例如,Mach 安全尾部是可信 IPC 的基本组成部分。应用程序沙盒中使用的强制访问控制 (MAC) 机制也与 *BSD 中的机制存在很大差异。

随着时间的推移而出现分歧:FreeBSD 不愿集成 UNIX03 兼容性更改,这导致了分歧,尽管进行了一些交叉融合,但 libc 和 libm 等库仍然分叉。此外,像 NeXTBSD 项目这样的计划旨在将 launchd、Mach IPC 和 Grand Central Dispatch 等技术从 Apple 的生态系统引入 FreeBSD,但并未引起太大兴趣。因此,代码库继续出现分歧,尤其是随着 Apple 在定制芯片支持和优化方面的进步,进一步扩大了它们之间的差距。

已知的集成和贡献:macOS 从 FreeBSD 中受益匪浅,尤其是在网络概念方面。虽然 macOS 并未完全使用 FreeBSD 的网络堆栈,但它整合了几个根据其独特需求量身定制的 FreeBSD 衍生组件。macOS 中的早期网络元素(例如 TCP/IP 堆栈)受到 FreeBSD 设计的影响,FreeBSD 以其性能和可靠性而闻名。此外,最初为 FreeBSD 开发的 kqueue 事件通知接口等功能已集成到 macOS 中,增强了其高效处理 I/O 事件的能力。

对Apple产品的影响

Apple 对 BSD 代码的采用遍及其整个产品线。macOS 为 Mac 台式机和笔记本电脑提供支持,iOS 在 iPhone 上运行,iPad 上运行 iPadOS,Apple Watch 上运行 watchOS,AR/VR 设备上的 visionOS 以及 Apple TV 上的 tvOS。这些操作系统中的每一个都包含 BSD 组件,凸显了 BSD 在 Apple 生态系统中的广泛影响力。

BSD 的稳健性、安全性和性能特性对塑造 Apple 操作系统的稳定性和效率起到了重要作用。集成 BSD 衍生的网络概念和组件使 macOS 能够提供高性能网络功能,使其成为消费者和企业应用程序的可靠选择。BSD 的高级内存管理和进程调度也为 macOS 的响应能力和多任务处理能力做出了贡献。

通过将 BSD 的强大功能与其专有技术相结合,Apple 创造了一系列稳定、高效、创新且功能强大的操作系统。这种共生关系凸显了开源贡献在 Apple 软件生态系统持续发展中的重要性。

Apple 对开源的贡献与消费

Apple 严重依赖 BSD,但也为开源社区做出了贡献。该公司的开源网站和GitHub提供了对 Darwin OS 的许多组件的访问,包括 XNU 内核、各种用户空间实用程序和库。这些贡献确保开源社区能够从 Apple 的创新和改进中受益。

Apple 会定期更新其开源项目,发布 Darwin OS 组件的新版本。这些更新通常与新的 macOS 和 iOS 发布同时进行,表明 Apple 对开源社区的持续承诺。通过分享其改进和增强功能,Apple 帮助推动开源软件开发,使开发人员和用户受益。

Darwin OS 的现状

Darwin OS 是 Apple 操作系统的开源核心,目前以零散的形式发布,而不是完整的可安装系统。Apple 单独发布 Darwin 的组件,例如 GitHub 上的 XNU 内核存储库和 Apple 开源网站上的各种用户空间工具。这种零散的发布策略使得从 Apple 官方来源组装完整的 Darwin OS 变得具有挑战性。

借助 OpenDarwin 项目,Apple 曾让这些组件能够安装并独立运行。然而,由于兴趣有限和开发中存在重大分歧,OpenDarwin 于 2006 年停止了发布。Apple 对 OpenDarwin 的意图值得称赞,但分叉变得过于严重而难以维持,导致了目前碎片化的做法。

尽管从 Apple 获得完整的 Darwin OS 存在着诸多挑战,但开源社区已尝试将这些组件集成到可安装的操作系统中,并取得了不同程度的成功。PureDarwin (以及之前的 OpenDarwin)等项目旨在通过集成 Apple 发布的各种开源组件来提供可用的 Darwin OS 版本。这些社区驱动的项目彰显了开源开发的协作精神,并展示了 Darwin OS 作为独立操作系统的潜力。

Apple 目前与 BSD 的关系

Apple 与 BSD 代码的关系笼罩在神秘之中。尽管其对开源也做出了重大贡献,但该公司对于其操作系统中 BSD 代码的确切范围仍然有点含糊其辞。这种封闭的开发过程使得很难确定 macOS、iOS 和其他苹果系统仍然在多大程度上依赖 BSD 根源。

宽松的BSD 许可证允许苹果使用和修改代码,而无需披露代码的使用地点和使用方式,这与 Linux 的GPLv2中使用的版权许可证不同,后者要求共享修改细节。

随着时间的推移,Apple 对开源软件的态度也发生了变化。

该公司已将重点从 CoreOS 的 OSS 组件转移到其他领域,例如编程语言和编译器技术。Apple 已在Swift、clang编译器和LLVM运行时等项目上投入了大量的时间和精力。这些努力代表了 Apple 对开源社区贡献的一些最成功的例子,并展示了 Apple 向 BSD 的重大技术转移,特别是在编译器、工具链方面。

此外,多年来,苹果的大量修改模糊了传统 BSD 代码与现代改编之间的界限。随着苹果对原始 BSD 组件进行了重大修改和扩展,越来越不清楚哪些部分是直接从 BSD 继承而来,哪些是苹果的创新。这种不透明性限制了我们对 BSD 对苹果产品的全部影响的理解,凸显了 BSD 的宽容许可证和 GPL 的版权左翼方法在披露要求方面的差异。

有证据表明,Apple 继续在其操作系统中使用当前的 BSD 组件。

Klara, Inc. 代表各种客户(例如 NetApp)将代码上游到 FreeBSD 项目,最近提交的2024 年 6 月提交表明 FreeBSD 代码正在持续集成和使用,并表明尽管 Apple 的开发过程具有封闭性,但 BSD 代码(尤其是 FreeBSD)仍然是其操作系统的重要组成部分。

市场影响和采用

Apple 在其产品中使用 BSD 对消费电子行业和创意内容行业产生了重大影响。BSD 的稳健性、安全性和性能使 Apple 设备对消费者和专业人士极具吸引力。电影、音乐制作、平面设计和其他创意领域等行业尤其青睐 Apple 的产品,因为它们可靠且功能强大。

BSD 的高级内存管理、进程调度和高性能网络功能确保 Apple 的台式机和笔记本电脑能够为要求苛刻的应用程序提供必要的性能。这使得 macOS 成为视频编辑、音乐制作和图形设计的绝佳选择,因为稳定性和性能至关重要。

其他利用 BSD 的行业

虽然 Apple 对 BSD 的整合对其成功起到了重要作用,但 BSD 的特性也使其成为各行业其他供应商的首选。

NetApp、Netflix、Juniper(均为 FreeBSD 用户)等公司在不同应用程序中使用 BSD 的高级功能:

  • 安全性:BSD 强大的网络能力和健全的安全措施使安全领域受益,使其成为安全通信和数据保护的理想选择。

  • 互联网流量管理:BSD 可靠的 TCP/IP 堆栈可确保高效处理大量数据,使其适合管理互联网流量。

  • 嵌入式系统:BSD 先进的内存管理和进程调度有助于提高嵌入式系统的效率和可靠性。

  • 存储解决方案:NetApp 等公司利用 BSD 的功能来提供强大而高效的存储解决方案。

通过了解 BSD 的多样化应用,我们可以了解它对 Apple 产品和广泛行业的影响,凸显了这个开源操作系统的多功能性和稳健性。

产品数量和市场覆盖率

Apple 发布了一系列可在 macOS、iOS、iPadOS、watchOS、tvOS 和 visionOS 上运行的产品。因此说来,全球诸多设备均包含 BSD 代码。因此,已发货和正在运行的 Apple 产品(包括嵌入式设备、台式机/笔记本电脑,甚至公司数据中心内的服务器计算机)的数量可能与在 Linux 上运行的设备和系统的数量相当,甚至超过它们。这有力地证明了 BSD 遗产在 Apple 生态系统中的广泛采用和影响。

Apple 的设备遍布各行各业,并拥有不同的消费群体。如此广泛的市场占有率表明了 BSD 对 Apple 操作系统的成功和可靠性的贡献。BSD 带来的无缝用户体验、强大的性能和安全功能使 Apple 产品成为全球数百万用户的首选。

外表界面

Apple 严重依赖 BSD 代码来开发其操作系统,包括 macOS、iOS、iPadOS、watchOS、visionOS 和 tvOS。通过集成 BSD 组件,Apple 为创新、稳定性和性能奠定了坚实的基础。尽管 Apple 系统中 BSD 代码的确切范围尚不明确,但很明显,BSD 极大地影响了 Apple 产品的设计和功能。

展望未来,苹果很可能会继续利用 BSD 的优势,同时为开源社区做出贡献。BSD 和苹果操作系统的不断发展表明,未来开源协作对于技术进步仍然至关重要。

认识到 BSD 在苹果成功中的重要性,有助于我们更好地认识到开源贡献在塑造我们日常使用的技术方面的价值。

作者:万能的大雄

参考:

https://opensource.apple.com/

https://github.com/apple-oss-distributions

https://www.freebsd.org/

http://www.puredarwin.org/

相关文章

塑造我成为 CTO 之路的“秘诀”
“人工智能教母”的公司估值达 10 亿美金
教授吐槽:985 高校成高级蓝翔!研究生基本废了,只为房子、票子……
Windows 蓝屏中断提醒开发者:Rust 比 C/C++ 更好
Claude 3.5 Sonnet 在伽利略幻觉指数中名列前茅
上海新增 11 款已完成登记生成式 AI 服务

发布评论