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位支持是閉源的）