Darwin (操作系统)

Darwin是由苹果公司于2000年所释出的一个开放源代码操作系统。Darwin是macOS和iOS操作环境的操作系统部分。苹果公司于2000年把Darwin释出给开放源代码社群。

Darwin是一种类Unix操作系统，并包含开放源代码的XNU内核。其以微核心为基础的核心架构来实作Mach，而操作系统的服务和使用者空间工具则以BSD为基础。与其他类Unix操作系统相似，Darwin也有对称多处理器的优点，高效能的网络设施和支援多种整合的档案系统。

整合Mach到XNU内核的好处是可携性，或者是在不同形式的系统使用软件的能力。举例来说，一个操作系统核心整合了Mach微核心，能够提供多种不同CPU架构的二进制格式到一个单一的档案（例如x86和PowerPC），这是因为它使用了Mach-O的二进制格式。Mach的缺点则是增加了操作系统内核的复杂度。在过去的微核心实作上，这种复杂度有时候会导致很难分离核心效能的问题。因此，采用Mach微核心会伴随风险，但它有潜在的好处是广泛的可移植性。以Darwin可移植性的具体例子来说，在2005年6月，苹果电脑宣布它会于2006年在Mac电脑上开始采用Intel处理器。

Darwin的开发者在2000年决定采用一个吉祥物，并最终选择了鸭嘴兽Hexley。苹果电脑没有把Hexley认可为Darwin的一个标志。

在2002年4月，Apple在互联网软件论坛（Internet Software Consortium, ISC）上成立OpenDarwin.org，一个协助合作Darwin发展的社群。OpenDarwin建立它自己释出的Darwin操作系统。值得注意的是OpenDarwin子计划中包含了DarwinPorts，其目标是组合下一世代的port集合给Darwin使用（长远来说，其也能供给其他BSD所衍生的操作系统所用）。OpenDarwin专案于2006年中止，并且于2007年由另一个PureDarwin专案成立去接手OpenDarwin之前的目标。

2003年7月，苹果在APSL的2.0版本下释出了Darwin，其是由自由软件基金会批准为自由软件的许可证。尽管它先前在较早的APSL版本已经达到开放源代码定义的要求，它们并不符合FSF对于自由软件的定义。

## 设计

<image>

### 内核

Darwin的内核是XNU，它是一种混合内核，它采用了来自OSF的OSFMK 7.3（Open Software Foundation Mach Kernel）和FreeBSD的各种要素（包括过程模型，网络堆栈和虚拟文件系统），还有一个称为I/O Kit的面向对象的设备驱动程序API。混合内核设计使其具备了微内核的灵活性和宏内核的性能。

### 硬件和软件支持

Darwin目前支持在Mac中使用的Intel x86处理器的64位x86-64变体以及在iPhone 5S，第六代iPod Touch，iPad Air，第四代Apple TV中使用的64位ARM处理器，最初的HomePod和更高版本，以及在iPhone 5C和更早版本，早期版本的iPod Touch，直到第四代的iPad以及第二和第三代Apple TV中使用的32位ARM处理器。XNU内核的一个开源的移植支持Apple尚未正式支持的Intel和AMD x86平台上的Darwin，尽管自2009年以来似乎未进行过更新。XNU内核的开源移植也可用于ARM平台。较旧的版本支持32位PowerPC，64位PowerPC和32位x86的部分或全部。

它通过对BSD的沿袭（主要是FreeBSD用户领域）支持POSIX API，并且可以在Darwin上编译为其他各种类UNIX系统编写的大量程序，而无需更改源代码。

Darwin不包含macOS的许多定义元素，例如Carbon和Cocoa API或Quartz Compositor和Aqua用户界面，因此无法运行Mac应用程序。但是，它确实支持macOS的许多鲜为人知的功能，例如mDNSResponder，它是多播DNS响应器，是Bonjour网络技术的核心组件，并已推出高级服务管理框架。

## 许可证

2003年7月，Apple在Apple Public Source License（APSL）2.0版之下发布了Darwin，自由软件基金会（FSF）将其归类为与GNU General Public License不兼容的自由软件许可证。它之前的版本是根据APSL许可证的较早版本发布的，尽管它确实满足了开放源代码定义的要求，但它不符合FSF对自由软件的定义。

## 版本历史

下表是主要的Darwin版本及其发行日期和相应的macOS版本的表格。请注意，相应的macOS版本可能是在其他日期发布的；有关这些日期，请参阅macOS页面。

版本｜版本发布日期｜对应的版本｜注解

0.1｜1999年03月16日｜Mac OS X Server 1.0发行版｜、初始版本、0.1是人为设置的版本号，为了便于排序和标识。它本身的标识是 Rhapsody 5.3

0.2｜1999年04月14日｜Mac OS X Server 1.0.1

0.3｜1999年08月05日｜基于 Rhapsody 5.5、可于archive.org找到ISO镜像、此后，内核从 NeXTSTEP/OPENSTEP/Rhapsody 更改为Mac OS X的较新XNU。

1.0｜2000年04月12日｜开发者预览第3版、可于archive.org找到ISO镜像

1.1｜2000年04月05日｜开发者预览第4版

1.2.1｜2000年11月15日｜Mac OS X 公开测试版｜代号 "Kodiak"

1.3.1｜2001年04月13日｜Mac OS X v10.0｜、代号 "Cheetah"、Darwin的首个商业版本、Cheetah(v10.0.0-4)的所有版本都有相同版本的Darwin

1.4.1｜2001年10月02日｜Mac OS X v10.1｜、代号 "Puma"、启动时间、实时线程、线程管理、缓存刷新和抢占式处理的性能改进、支持SMB和NFS、以Wget取代cURL

5.1｜2001年11月12日｜Mac OS X v10.1.1、更改编号方案以匹配Mac OS X内部版本编号方案

5.5｜2002年06月05日｜Mac OS X v10.1.5

6.0.1｜2002年09月23日｜Mac OS X v10.2｜、代号 "Jaguar"、GCC由2更新至3.1、支持IPv6及IPSec、mDNSResponder 服务探索的守护行程（Rendezvous)、新增CUPS, Ruby, Python、在HFS+中支持日志、速度更快的应用程序配置文件（"pre-heat files"）

6.8｜2003年10月03日｜Mac OS X v10.2.8

7.0｜2003年10月24日｜Mac OS X Panther｜、Mac OS X v10.3.0、BSD层与FreeBSD5同步、HFS+中的自动文件碎片整理、热文件集群和可选的区分大小写功能、用bash取代tcsh作为默认shell、支持只读NTFS（Darwin 7.9）.

7.9｜2005年04月15日｜Mac OS X v10.3.9

8.0｜2005年04月29日｜Mac OS X TigerMac OS X for Apple TV｜、Mac OS X v10.4.0、稳定版的应用程序接口,细粒度的内核锁,64位的BSD层、launchd服务管理框架、扩展文件属性，存取控制表、更新如cp及mv的命令以保护扩展属性及resource forks

8.11｜2007年11月14日｜Mac OS X v10.4.11

9.0｜2007年10月26日｜Mac OS X LeopardiPhone OS 1.0｜Mac OS X v10.5.0、Darwin 9.0.0d1中的iPhone OS 1支持、完整的POSIX标准实现，改进分层的行程排程模型，动态分配分页档案、动态资源限制（对个别档案与行程）、行程沙盒化、随机位址空间配置、DTrace的追踪框架、档案系统事件的管理员、目录的硬式连结、Apache1.3及PHP4更新至Apache 2.2及PHP 5、支持只读ZFS、最早用于iPhone的Darwin内核

9.8｜2009年08月05日｜Mac OS X v.10.5.8

10.0｜2009年08月28日｜Mac OS X Snow LeopardiOS 4.0｜Mac OS X v10.6.0、停止支援PowerPC架构、64-bit核心及驱动程式、libdispatch任务并行框架、OpenCL异构计算框架、初始支持自动引用计数、透过C语言支援Blocks、以HFS+数据压缩文件

10.1｜2009年09月10日｜Mac OS X v10.6.1

10.2｜2009年11月09日｜Mac OS X v10.6.2

10.3｜2010年03月29日｜Mac OS X v10.6.3iOS 4.0

10.4｜2010年06月15日｜Mac OS X v10.6.4

10.5｜2010年11月11日｜Mac OS X v10.6.5

10.6｜2011年01月06日｜Mac OS X v10.6.6

10.7｜2011年03月21日｜Mac OS X v10.6.7

10.8｜2011年06月23日｜Mac OS X v10.6.8

11.0.0｜2011年07月20日｜Mac OS X LioniOS 5｜Mac OS X v10.7.0、XNU不再支持PowerPC二进制文件（大二进制文件仅适用于i386，x86_64）。、XNU需要x86_64处理器，基于ARM的iOS除外。、改进了应用程序的沙箱、完全支持自动引用计数

11.1.0｜2011年08月16日｜Mac OS X v10.7.1

11.2.0｜2011年10月13日｜Mac OS X v10.7.2

11.3.0｜2012年02月02日｜Mac OS X v10.7.3

11.4.2｜2012年10月04日｜Mac OS X v10.7.5 (额外的)

12.0.0｜2012年02月16日｜OS X Mountain Lion｜OS X v10.8.0、Mac OS X被更名为OS X。、不再推荐使用Objective-C垃圾收集，建议使用自动引用计数

12.6.0｜2015年01月27日｜OS X v10.8.5(带有安全更新2015-001)

13.0｜2013年06月10日｜OS X MavericksiOS 6｜OS X v10.9.0、虚拟内存压缩、计时器合并、OpenGL 4.1和OpenCL 1.2、服务器消息块版本2（SMB2）取代AFP成为共享文件的默认协议。这是为了提高性能和跨平台兼容性。、IPoTB（基于Thunderbolt桥的Internet协议）。、Open Transport API已被删除

13.4.0｜2014年09月07日｜OS X v10.9.5

14.0.0｜2014年09月18日｜OS X YosemiteiOS 7iOS 8｜OS X v10.10.0

14.5.0｜2015年08月13日｜OS X v10.10.5

15.0.0｜2015年09月16日｜OS X El CapitaniOS 9｜OS X v10.11.0iOS 9.0、系统完整性保护。即使由root或具有root特权的用户运行，也可以防止某些系统部件被进程修改或篡改。、sudo配置默认情况下使用“tty_tickets”标志，将会话超时限制为用户在其中验证程序的终端会话（例如窗口或选项卡）。、LibreSSL取代了OpenSSL

15.6.0｜2016年07月18日｜OS X v10.11.6iOS 9.3.3

16.0.0｜2016年09月13日｜macOS SierraiOS 10｜macOS v10.12.0iOS 10.0.1（初始发行版）、OS X被更名为macOS。、现在，仅有root用户或具有root特权的用户可以写入/Volumes目录、系统完整性保护现在涵盖了`/Library/ApplicationSupport/com.apple.TCC`目录，其中包含允许“控制计算机”的应用程序列表、删除了Objective-C垃圾收集器，并替换为Darwin v12.0（OS X v10.8）引入的自动引用计数。使用垃圾回收的Objective-C应用程序将不再起作用。、对PPTP的本机支持已删除。

16.5.0｜2017年03月27日｜macOS v10.12.4iOS 10.3、在iOS设备上将文件系统从HFS+更改为APFS。自10.12.0起，APFS已在macOS上可用，但不能在启动分区上使用。

16.6.0｜2017年07月19日｜macOS v10.12.6iOS 10.3.3

17.0.0｜2017年09月19日｜macOS High SierraiOS 11｜、在具有闪存的Mac上，macOS中引导分区的默认文件系统从HFS+替换为了APFS。在具有HDD的Mac上，必须重新格式化启动分区才能使用APFS。、将时间同步服务从ntpd替换为了timed、FTP和telnet命令被删除。、内核扩展（Kexts）将需要用户明确批准才能运行。

17.5.0｜2018年03月29日｜macOS 10.13.4、支持使用Thunderbolt 3的外部图形处理器，并删除了使用Thunderbolt 1和2的外部图形处理器的支持。

17.6.0｜2018年06月01日｜macOS v10.13.5

17.7.0｜2018年07月09日｜macOS v10.13.6iOS 11.4.1

18.0.0｜2018年09月02日｜macOS MojaveiOS 12

18.2.0｜2018年10月30日｜macOS v10.14.1iOS 12.1、在新的MacBook中增加了对新的Radeon Vega 20 GPU的支持

19.0.0｜2019年09月19日｜macOS CatalinaiOS 13

19.2.0｜2019年12月10日｜macOS 10.15.2iOS 13.3

19.3.0｜2020年01月28日｜macOS 10.15.3iOS 13.3.1、系统扩展取代了Kexts，并在内核之外的用户空间中运行。、DriverKit取代了IOKit。它引入了使用DriverKit构建的“ Dexts”（驱动程序扩展）。Driverkit是一个新的SDK，具有基于IOKit的所有新框架，但已进行了更新和现代化。设备驱动程序在内核外部的用户空间中运行。

20.1.0｜2020年10月30日｜、macOS Big Sur、iOS 14｜macOS 11.0.1

20.2.0｜2021年12月15日｜macOS 11.1

20.3.0｜2021年02月02日｜macOS 11.2

20.4.0｜2021年04月20日｜macOS 11.3

20.5.0｜2021年05月24日｜macOS 11.4

20.6.0｜2021年06月02日｜macOS 11.5

21.0.0｜2021年06月07日｜、macOS Monterey、iOS 15、watchOS 8、tvOS 15、bridgeOS 6｜macOS 12.0 beta 1iOS 15.0 beta 1

21.0.1｜2021年10月25日｜macOS 12.0

21.1.0｜2021年10月25日｜macOS 12.0.1iOS 15.0

21.2.0｜2021年12月07日｜macOS 12.1iOS 15.2

21.3.0｜2022年01月26日｜macOS 12.2iOS 15.3

21.4.0｜2022年03月14日｜macOS 12.3iOS 15.4

21.5.0｜2022年06月24日｜macOS 12.4iOS 15.5

21.6.0｜2022年07月20日｜macOS 12.5iOS 15.6

22.0｜2022年06月06日｜、macOS Ventura、iOS 16、iPadOS 16、watchOS 9、tvOS 16、bridgeOS 7｜macOS 13.0 beta 1iOS 16.0watchOS 9.0tvOS 16.0

22.1.0｜2022年10月24日｜macOS 13.0iOS 16.1iPadOS 16.1watchOS 9.1tvOS 16.1

22.2.0｜2022年12月13日｜macOS 13.1iOS 16.2iPadOS 16.2watchOS 9.2tvOS 16.2

22.3.0｜2023年01月23日｜macOS 13.2iOS 16.3iPadOS 16.3watchOS 9.3tvOS 16.3

22.4.0｜2023年03月27日｜macOS 13.3iOS 16.4iPadOS 16.4watchOS 9.4tvOS 16.4

22.5.0｜2023年05月18日｜macOS 13.4iOS 16.5iPadOS 16.5watchOS 9.5tvOS 16.5

22.6.0｜2023年07月24日｜macOS 13.5iOS 16.6iPadOS 16.6watchOS 9.6tvOS 16.6

23.0.0｜2023年09月18日｜、macOS Sonoma、iOS 17、iPadOS 17、watchOS 10、tvOS 17、bridgeOS 8｜macOS 14.0iOS 17.0iPadOS 17.0watchOS 10.0tvOS 17.0

23.1.0｜2023年10月25日｜macOS 14.1iOS 17.1iPadOS 17.1watchOS 10.1tvOS 17.1

23.2.0｜2023年11月15日｜macOS 14.2iOS 17.2iPadOS 17.2watchOS 10.2tvOS 17.2

23.3.0｜2024年01月22日｜macOS 14.3iOS 17.3iPadOS 17.3watchOS 10.3tvOS 17.3

23.4.0｜2024年03月05日｜macOS 14.4iOS 17.4iPadOS 17.4watchOS 10.4tvOS 17.4

23.5.0｜2024年05月13日｜macOS 14.5iOS 17.5iPadOS 17.5watchOS 10.5tvOS 17.5

24.0.0｜2024年09月16日｜、macOS Sequoia、iOS 18、iPadOS 18、watchOS 11、tvOS 18、bridgeOS 9｜macOS 15.0iOS 18.0iPadOS 18.0watchOS 11.0tvOS 18.0

Mac OS X v10.1.1发行版中，版本号从Darwin 1.4.1跃升至5.1，旨在将Darwin与Mac OS X版本和内部版本号系统联系起来，而后者又是从NeXTSTEP继承而来的。在macOS的内部版本号系统中，每个版本都有一个唯一的开始内部版本号，用于标识其所属的整个macOS版本。Mac OS X v10.0的内部版本号以4开头，10.1的内部版本号以5开头，依此类推（早期的内部版本号代表开发人员的版本）。

命令终端中的`uname -r` 命令将显示Darwin版本号，`uname -v`命令将显示XNU构建版本的字符串，其中包括Darwin的版本号。

## 吉祥物

Hexley是开放源代码的操作系统——Darwin（Mac OS X的核心）的吉祥物。Hexley是一个卡通的鸭嘴兽，通常戴着一个类似BSD小恶魔的帽子，并握着三叉戟。Hexley是由Jon Hooper所设计的，版权也为他所有。但Hexley并不附属于苹果电脑。本来这个吉祥物的名称应该是Huxley，源由是捍卫达尔文（Darwin）演化理论的英国生物学家托马斯·亨利·赫胥黎，而原先提议的人误以为是达尔文的助理，并错用了Hexley。而发现错误时，要改名已经太晚，因此沿用了Hexley这个名称。

## 衍生项目

由于Darwin的自由软件性质，已经有了一些旨在修改或增强操作系统的项目。

### OpenDarwin

OpenDarwin是基于Darwin的社区主导的操作系统。它由Apple Inc.和Internet Systems Consortium于2002年4月成立。其目标是加强Apple开发人员与自由软件社区之间的协作。苹果公司从该项目中受益，因为OpenDarwin的改进将纳入Darwin版本中。自由/开源社区受益于对其操作系统的完全控制，并且可以将其用于GNU-Darwin等自由软件发行版中。

2006年7月25日，OpenDarwin团队宣布该项目已关闭，因为他们认为OpenDarwin“已成为Mac OS X相关项目的唯一托管工具”，并且创建独立的Darwin操作系统的努力失败了。他们还指出：“消息来源的可用性，与Apple代表的互动，建立和跟踪消息来源的困难以及社区缺乏兴趣，这一切都为此做出了贡献。”它最后的稳定版本是2004年7月16日发行的7.2.1版。

### PureDarwin

PureDarwin是一个从Apple发行的Darwin源代码中创建可引导的操作系统映像的项目。自从OpenDarwin停止运行以及Darwin8.x以来发布可启动映像以来，由于许多组件都成为封闭源，因此创建完整的操作系统变得越来越困难。该项目已成功创建了基于Darwin 9和X11 GUI的Xmas版本和仅基于Darwin 17的命令行17.4 Beta。

### 其他衍生项目

<image>

- XQuartz（前身为XDarwin），是苹果电脑为Mac OS X/OS X/macOS（Darwin）上X Window系统的实作。
- GNUstep，GNU计划的专案之一。它将Cocoa（前身为NeXT的OpenStep）Objective-C软件库，部件工具箱（widget toolkits）以及其上的应用软件，以自由软件方式重新实作。
- Window Maker，是X Window系统上一个自由及开放源代码的窗口管理器，可让图形化应用软件在类Unix操作系统上执行。它最最初设计用来模拟NeXT的图形使用者界面，令其成为符合OpenStep相容环境。
- WebKit是一个开源的Web浏览器引擎(Web browser engine)。它被用于Apple Safari。Webkit亦被使用于Apple iOS的预设浏览器。
- MacPorts（以前是DarwinPorts），Fink和Homebrew是将UNIX程序移植到Darwin操作系统并提供包管理服务的程序。另外，几个标准的UNIX软件包管理器（例如RPM，pkgsrc和Portage）具有Darwin的移植。其中一些在自己的名称空间中运行，以免干扰基本系统。
- GNU-Darwin是一个将自由软件的软件包移植到Darwin的项目。它们用类似于Linux发行版的方式打包OS镜像。
- Darwine项目是Wine在Darwin上的移植，它使人们可以在Darwin上运行Microsoft Windows软件。
- SEDarwin是TrustedBSD强制访问控制框架和SELinux框架的一部分在Darwin上的移植。它已被合并到Mac OS X 10.5中。
- Darbat项目是Darwin在L4微内核系列上的试验性移植。它旨在与现有的Darwin二进制文件二进制兼容。
- Darling项目是用于在Linux系统上运行macOS二进制文件的兼容性层。它使用了一些Darwin的源代码。
- 有许多项目专注于驱动程序支持：例如无线驱动程序，有线NIC驱动程序，调制解调器驱动程序，读卡器，ext2和ext3文件系统。

## 基本资料

- 软件版本周期：Darwin
- 操作系统家族：类Unix系统
- 源码模式：自由及开放源码件
- 内核类别：混合内核
- 许可证：主要为APSL，含有闭源的设备驱动
- 编程语言：C、C++、Objective-C、汇编语言
- 运作状态：运作中
- 支援平台：目前：x86-64、64-bit ARM、历史上：PowerPC、IA-32、32-bit ARM （ARM32位支持是闭源的）