查看原文
其他

揭秘苹果(Apple)公司的开源根基:macOS和iOS与BSD的历史渊源及其深远影响

买十几部iPhone的 明说开源
2024-08-28
点击卡片关注一下,感谢您的支持!


认识到 BSD 在苹果辉煌历程中的核心地位,使我们能够更深刻地理解开源力量如何塑造了我们日常生活中不可或缺的科技产品。


想一想:苹果(Apple)公司设计精良、操作简便的设备,比如功能强劲的 MacBook 和普及广泛的 iPhone,其稳定性和高效运行都离不开一个开源操作系统的基础。那么,这个开源系统究竟是什么呢?尽管人们普遍认为苹果的 macOS、iOS、iPadOS、watchOS、visionOS 和 tvOS 是直接从 FreeBSD 发展而来,但这其实是一个常见的错误认知。


苹果公司的macOS和iOS等操作系统的真正根基,在于苹果早期操作系统技术与NeXTSTEP的结合。NeXTSTEP本身就是Mach和BSD技术的混合,出现的时间早于FreeBSD。随着时间的推移,这些操作系统确实吸收了FreeBSD用户空间的一些组件,但苹果的内核(XNU)并非直接基于FreeBSD。不过,它们都有着共同的BSD血统。(下图可以很好地解释这一演变)



#理解BSD及其各种衍生版本


要深入了解苹果公司的操作系统是如何发展演变的,就必须掌握不同BSD(Berkeley Software Distribution)版本的精髓及其深远影响。



伯克利原始的BSD版本

BSD诞生于20世纪70年代末的加州大学伯克利分校,作为对AT&T原始UNIX操作系统的拓展和创新,它为现代操作系统奠定了许多现今视作标准的特色。它的第一个版本1BSD于1977年发布,紧接着1978年推出了2BSD。其中,1981年的4.1BSD和1983年的4.2BSD是两个重要的版本,它们引入了快速文件系统(FFS)、TCP/IP网络协议和套接字API,这些技术至今仍然是现代操作系统的重要组成部分。


FreeBSD

FreeBSD,作为原始BSD的衍生操作系统,以卓越的表现、尖端的网络特性与全面的硬件兼容性闻名遐迩。自1993年脱胎于386BSD项目以来,它已在服务器、个人电脑和嵌入式系统领域占据一席之地。FreeBSD的坚若磐石与稳定可靠,使其成为承载高可用性需求与构筑互联网基石的理想选择。


NetBSD

NetBSD因其卓越的跨平台能力而广受赞誉。它的口号“当然能运行NetBSD”彰显了其兼容多种硬件架构的强大能力,无论是服务器、桌面计算机,还是嵌入式设备或大型机,都能流畅运行NetBSD。自1993年问世以来,NetBSD一直是BSD家族中可移植性和整洁设计的典范。


OpenBSD

OpenBSD于1995年从NetBSD中独立分支出来,它以安全、正确性和代码简洁性为核心理念。OpenBSD因恪守严格的安全规范,引领了诸如OpenSSH、PF(数据包过滤)和安全内存管理等安全技术的发展。OpenBSD对安全的坚定承诺,使其成为那些对安全有着极高要求的应用场合中最受青睐的选择。


其他 BSD 的衍生版本

BSD家族相继衍生出多个版本,每个版本都有其独特的专注领域和增强功能。例如,DragonFly BSD注重性能和可扩展性;而达尔文操作系统(Darwin OS)则是构成苹果公司macOS和iOS操作系统核心的重要部分。



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

macOS的核心在于XNU内核,这是一个集成了Mach微内核、BSD组件和面向对象的设备驱动程序接口I/O Kit的混合型内核。这样的设计使得macOS既具备了BSD类Unix系统的稳定性和可靠性,又保留了Mach微内核的高度灵活性。


达尔文操作系统(Darwin OS),作为苹果操作系统系列(涵盖 macOS、iOS、watchOS、tvOS 及 iPadOS)的开源根基,集 XNU 内核、BSD 组件及其它开源项目于一身。其历史脉络起始于 NeXT,这家由史蒂夫·乔布斯于 1985 年离巢苹果后所创办的公司。NeXT 打造了 NeXTSTEP,这一操作系统基于 Mach 微内核,并嵌入了 BSD 的功能。NeXTSTEP 后来发展成 OpenStep,当史蒂夫·乔布斯回归苹果时,NeXT 的技术随之被引入,从而催生了 Darwin 的诞生。


2000 年,苹果通过 Apple Public Source License(APSL)许可证将 Mac OS X(现 macOS)的部分核心组件开源,此举让广大开发者群体得以接触并贡献于其技术发展。这涵盖了 launchd、Grand Central Dispatch 和 Core Foundation 等关键模块,随后部分组件转至更开放的 Apache License许可证下,以鼓励更多领域的采用。然而,Cocoa 和 Carbon 等更高级别的框架仍旧封闭,以维护苹果的技术领先地位。对于原先遵从 GPL 和 BSD 开源协议的组件,苹果保留了它们的原始许可,确保了开源生态的连续性。


详细的时间线:

  • 1969年:美国AT&T的贝尔实验室成功开发了UNIX操作系统。

  • 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年:苹果公司收购了NeXT,将NeXTSTEP技术引入苹果,为Mac OS X的开发打下了基础。

  • 2000年:苹果推出了首个基于达尔文操作系统的Mac OS X版本。这个系统融合了Mach微内核和BSD的组件,成为苹果现代操作系统的核心。

  • 2006年:OpenDarwin停止更新,这标志着苹果不再提供独立、可安装的Darwin OS版本。


BSD技术在macOS发展中的演变与融合


ComponentOrigin
XNU KernelMach/NeXTStep/OpenStep
Network StackFreeBSD/BSD, with additional NIKE and IOKIT
Virtual File SystemFreeBSD/BSD
Userland ToolsFreeBSD/BSD
Memory ManagementMach/NetBSD
Process ModelMach IPC, Mach Security Trailers, and Mandatory Access Control (MAC) mechanisms
组件来源
XNU内核Mach/NeXTStep/OpenStep
网络堆栈FreeBSD/BSD,加入NIKE和IOKIT技术
虚拟文件系统来自FreeBSD/BSD
用户空间工具来自FreeBSD/BSD
内存管理基于 Mach/NetBSD
进程模型Mach进程间通信(IPC)、Mach安全尾随和强制访问控制(MAC)机制


苹果公司的macOS是一个融合了多种技术的操作系统,它将不同BSD版本的核心组件整合在一起,构建了一个既坚固又灵活的平台。macOS的核心是XNU内核,这是一种混合型内核,它融合了Mach、NeXTSTEP和OpenStep的精华组件,并加入了BSD的关键组件。这种基础架构充分利用了各个系统的长处,打造出一个既稳定又高效的操作系统。


网络堆栈(Network stack):macOS的网络堆栈基于FreeBSD和其他BSD版本,继承了它们稳定且高效的联网特性。例如,早期的TCP/IP网络协议栈就是受到了FreeBSD设计的启发,后者以其卓越的性能和可靠性著称。此外,macOS还采用了FreeBSD首创的kqueue事件通知接口,进一步提高了处理输入/输出事件的效率。苹果公司在实现网络堆栈时,不仅融合了BSD和FreeBSD的代码,还加入了如网络内核扩展(NKE)、面向对象的设备驱动系统(IOKit)以及磁盘仲裁层等独特机制。这些创新使得macOS在网络堆栈的实现上与传统BSD系统有了显著的不同。


虚拟文件系统(Virtual file system):macOS的虚拟文件系统组件继承自FreeBSD和其他BSD系统,这为macOS提供了一个稳定且安全的文件管理框架。


内存管理(Memory management):macOS的内存管理主要基于Mach内核,同时吸收了NetBSD的一些特点,尤其是在共享和合并缓冲缓存方面的设计。


进程模型(Process model):macOS的进程模型也建立在Mach内核之上,使用Mach系统线程作为进程管理的基础。


Mach进程间通信(IPC)和安全性:Mach IPC在macOS和iOS的内核及用户空间中得到了广泛应用,并带来了一些独特的差异。例如,Mach安全尾随是确保可信IPC的关键技术。而在应用程序沙箱中使用的强制访问控制(MAC)机制,与BSD系统中的实现也有较大的不同。


随时间发展的分歧:由于FreeBSD不愿融合UNIX03的兼容性变更,导致其与苹果的macOS在代码库上出现了分歧。即便双方进行了一些技术交流,libc和libm等库仍然走上了不同的进化道路。此外,旨在将苹果技术如launchd、Mach IPC和Grand Central Dispatch引入FreeBSD的NeXTBSD项目,也未能引起足够的关注。因此,随着苹果在自定义硅芯片支持和优化方面的不断进步,两个系统之间的差距日益扩大。


已知的整合和贡献:macOS在网络概念方面显著受益于FreeBSD。尽管macOS并没有完全采用FreeBSD的网络堆栈,但它整合了几个专门为满足其独特需求而设计的FreeBSD衍生组件。例如,macOS早期的网络组件,如TCP/IP堆栈,受到了FreeBSD设计的影响,FreeBSD以其出色的性能和可靠性而著称。此外,如kqueue事件通知接口等特性,最初是为FreeBSD开发的,现在已经整合到macOS中,大大提升了其处理I/O事件的能力。


# 对苹果产品的影响


BSD代码在苹果公司的产品线中得到了广泛应用。从macOS驱动的Mac电脑,到iOS、iPadOS、watchOS、visionOS和tvOS,这些操作系统都融入了BSD的关键组件。这体现了BSD技术在苹果生态系统中的核心地位和深远影响。


BSD的稳定性、安全性和高性能等特性在塑造苹果操作系统(如macOS)的稳定性和效率方面起到了关键作用。macOS借助源于BSD的网络技术和组件,实现了卓越的网络性能,成为个人与企业用户的首选。同时,BSD的内存管理和进程调度优化,显著提升了macOS的交互体验和多任务处理能力。


苹果巧妙地将BSD的核心优势与自家的技术专利融合,构建出一系列集稳定性、高效性、创新性和实用性于一身的操作系统。这种互利共生的合作模式,突显了开源贡献在苹果软件生态系统持续进化中的重要性。


# 苹果对开源的贡献与消费


苹果公司虽然高度依赖BSD,但也积极回馈开源社区。苹果的开源网站(https://opensource.apple.com/)和GitHub(https://github.com/apple-oss-distributions)上提供了Darwin操作系统的许多组件,包括XNU内核、各种用户空间工具和库。这些贡献确保了开源社区能够从苹果的创新和改进中受益。


苹果公司定期对其开源项目进行更新,发布Darwin操作系统的组件的新版本。这些更新往往与新的macOS和iOS版本发布同步,表明苹果公司对开源社区的持续承诺。通过分享其创新和改进,苹果公司帮助推动开源软件的发展,从而使开发者和用户受益。


# 达尔文操作系统(Darwin OS)的现状


苹果操作系统的开源核心——达尔文操作系统(Darwin OS)目前以碎片化的形式发布,而不是作为一个完整且可安装的系统。苹果公司分别发布Darwin的各个组件,比如在GitHub上的XNU内核仓库,以及苹果开源网站上的各种用户空间工具。这种碎片化的发布策略使得从苹果的官方来源组装一个完整的达尔文操作系统变得具有一定难度。


借由OpenDarwin项目,苹果曾尝试将这些组件整合为可独立安装运行的系统。可惜的是,由于关注度不高以及与主线开发路径的显著差异,OpenDarwin在2006年后停止了发行。苹果对于OpenDarwin的设想原本是积极的,但分支间的差距逐渐加大,难以继续同步,最终促成了现今的分散发布策略。


虽然从苹果公司获得一个完整的达尔文操作系统(Darwin OS)面临挑战,但开源社区已尝试着手将这些分散的组件拼凑成可安装的操作系统,并取得了一定的成功。像PureDarwin项目(及其前身OpenDarwin)就是力图通过整合苹果公开的开源组件,来打造出一个实用的达尔文操作系统版本。这些由社区推动的项目不仅体现了开源软件的共融共创精神,同时也证明了达尔文操作系统作为独立操作系统的潜力。


# 苹果公司目前与BSD的关系


苹果公司与BSD代码的关系颇为神秘。尽管它在开源领域做出了重要贡献,但对于其操作系统中BSD代码的具体范围,公司仍保持一定的模糊性。这种封闭的开发过程使得很难准确判断macOS、iOS以及其他苹果系统在多大程度上仍基于BSD。BSD的宽松许可协议赋予了苹果公司使用及修改代码的自由,却无需透露具体的方式和应用细节,这一点与Linux所采取的GPLv2的copyleft许可截然不同,后者要求任何修改必须公开共享。


苹果对开源软件的策略随着时代的变迁而发展。公司不再仅仅关注核心操作系统(CoreOS)的开源软件部件,而是拓宽视野,深入探索编程语言编译器技术。苹果在Swift编程语言、clang编译器和LLVM运行时等开源项目上投入了大量时间和精力。苹果公司在开源社区里做出了很多努力,他们回馈给BSD诸多核心技术,尤其在编译器工具链上的革新,这展现出了大公司的担当和贡献。


此外,多年来,苹果公司对BSD代码的大量修改使得传统BSD代码和现代改编之间的界限变得模糊。由于苹果对原始BSD组件进行了重大修改和扩展,很难确定哪些部分直接来自BSD,哪些是苹果的创新。这种不透明性限制了我们对BSD对苹果产品影响的全面理解,同时,也鲜明地凸显出了BSD宽松许可(Permissive)和GPL的著佐权型许可(copyleft)在披露要求上的差异。


有证据显示,苹果公司在其操作系统中仍然采用着最新的BSD组件。2024年6月,Klara公司代表不同客户(如NetApp)向FreeBSD项目提交的最近代码提交记录,显示了FreeBSD代码的持续整合与利用。这表明尽管苹果的开发流程相对封闭,但BSD代码(尤其是FreeBSD)仍然是其操作系统的一个核心组成部分。


#采用BSD给苹果公司带来的市场影响和应用情况


苹果公司在其产品中应用BSD技术,对消费电子行业和创意内容领域产生了深远影响。BSD的坚固性、安全性和高性能特性,使得苹果设备深受消费者和专业人士喜爱。特别是在电影、音乐制作、平面设计以及其它创意产业,苹果的产品因其可靠性和强大的功能而备受推崇。


BSD提供的先进内存管理、进程调度和高性能网络功能,确保了苹果台式机和笔记本电脑能够满足高性能应用的需求。这使得macOS成为了视频编辑、音乐制作及图形设计等专业领域里的优秀选择,这些领域极度依赖系统的稳定性和卓越性能。


# 其他行业如何利用BSD


虽然苹果公司对BSD的整合在其成功中起到了关键作用,但BSD的特性也使其成为其他行业中各种供应商的首选。诸如NetApp、Netflix、Juniper等公司——皆为FreeBSD的使用者——以及其他企业,均在各自的应用领域中充分挖掘并利用着BSD所具备的先进特性:


  • 安全性:BSD的网络能力和安全措施使其在安全领域具有优势,非常适合安全通信和数据保护。

  • 互联网流量管理:BSD的TCP/IP堆栈可靠,能有效处理大量数据,非常适合管理互联网流量。

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

  • 存储解决方案:像NetApp这样的公司利用BSD的能力提供强大高效的存储解决方案。


通过认识到BSD在各种应用中的广泛影响,我们可以更好地理解它对苹果产品和多个行业的贡献,突显了这个开源操作系统的多功能性和稳定性。

#产品数量与市场覆盖范围


苹果公司发布了一系列运行macOS、iOS、iPadOS、watchOS、tvOS和visionOS的广泛产品。因此,全球许多设备中都包含了BSD代码。因此,包括嵌入式设备、台式机/笔记本电脑,甚至公司数据中心的服务器计算机在内的苹果产品数量,可能与甚至超过了运行Linux的设备和系统的数量。这表明BSD遗产在苹果生态系统中得到了广泛采用和影响。


苹果的设备遍布各个行业和不同消费群体。这种广泛的市场覆盖展示了BSD对苹果操作系统成功和可靠性的贡献的重要性。BSD提供的无缝用户体验、强大性能和安全特性,使得苹果产品成为全球数百万用户的首选。


#未来展望


苹果公司在其操作系统的开发中,包括macOS、iOS、iPadOS、watchOS、visionOS和tvOS,严重依赖BSD代码。通过整合BSD组件,苹果公司为创新、稳定性和性能奠定了坚实的基础。尽管苹果系统中的BSD代码的确切程度并不透明,但显然BSD对苹果产品的设计和功能产生了显著且重大的影响。


展望未来,苹果公司很可能会继续利用BSD的优势,同时为开源社区做出贡献。BSD和苹果操作系统的持续发展表明,未来开源合作对于技术进步仍然是至关重要的。认识到BSD在苹果成功中的重要性,有助于我们更好地理解开源贡献在塑造我们日常使用的技术方面的价值。


#参考阅读:

-苹果公司开源官网:https://opensource.apple.com/

-苹果公司GitHub:https://github.com/apple-oss-distributions

-FreeBSD项目:https://www.freebsd.org/

-PureDarwin项目:https://www.puredarwin.org/





亲爱的读者们,不星标《明说开源》公众号,不仅会收不到最新推送,还会看不到主理人精心挑选的封面大图星标《明说开源》,不错过每一篇最值得阅读的开源文章。
作者:Jason Perlow
编译:李小明
@明说开源




继续滑动看下一个
明说开源
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存