MacOS結構

Mac OS X 是蘋果公司所推出的對Classic Mac OS 作業系統替代品的產物。在多次失敗的嘗試之後，蘋果於1994年啟動了 Pink 項目（後來和 IBM 進行了合作），這就是 Taligent 和 Copland，兩年後這一項目取消。

通過收購獲得了 NeXT 和其 NeXTSTEP 作業系統之後，蘋果公司開始著手開發他們最新的作業系統 (Mac OS X)

Mac OS X 首次出現是1999年的Mac OS X Server 1.0，第一個正式的Mac OS X 桌面版本發布於2001年3月24日。

從10.5版本開始，Mac OS X 通過了 Open group Unix O3 單一 Unix 規範認證。

2016年6月，蘋果公司宣布OS X更名為macOS，以便與蘋果其他作業系統如iOS、watchOS和tvOS保持統一的命名風格。

Mac OS X 包含兩個主要的部分：以FreeBSD原始碼和Mach微核心為基礎的 XNU 混合內核，並在 XNU 上構建的 Darwin 核心系統；及一個由蘋果開發，稱為 Aqua 的閉源、獨占版權的圖形使用者界面。

細分的看，Mac OS X 系統可以分成五層結構，每一層有其代表性的技術。

## 開發

### NeXTSTEP

NeXTSTEP 使用基於卡內基梅隆大學開發的 Mach 2.5 微內核 BSD 4.3 子系統開發的混合內核。NeXTSTEP 還推出了基於 DPS 的窗口系統，通過在顯示器和印表機上使用同一種語言以達到更好的所見即所得效果。NeXT 還包含他們從 StepStone 的收購的面向對象的 Objective-C 的語言和一系列旨在加快軟體開發的框架（工具包）。

NeXTSTEP 最初設計運行在跑摩托羅拉68K處理器上，但後來被移植到英特爾的x86，惠普的PA-RISC和昇陽電腦的SPARC處理器。後來，開發工具和框架以OpenStep形式發布，作為一個開發平台，它可以其他作業系統上運行。

### Rhapsody

1997年2月4日，蘋果公司收購了NeXT，並著手開發 Rhapsody 作業系統。Rhapsody 基於 NeXTSTEP 構建，並將核心系統移植到了 PowerPC 架構上並添加了一個重新設計的使用者接口。允許舊 Mac OS 的程序運行在獨立的 JAVA 平台上的模擬層稱為 Blue Box，而 Objective-C 開發工具和框架被稱為 Yellow Box，Yellow Box 將為 Windows 獨立提供。

Rhapsody 項目的最終結果，以 Mac OS X Server 1.0 的形式於1999年發布。

### Mac OS X

<image>

在1998年的蘋果全球開發者大會(WWDC)上，由於 Macintosh 平台軟體開發者對 Rhapsody 上的Yellow Box 和 Blue Box存在諸多不滿，蘋果公司作出回應，稱 Mac OS X 將提供一個不同於 Rhapsody 中現存的、全新的 API。

來自 Macintosh Toolbox 的關鍵 API 使得 Mac OS X 可以直接運行在 BSD 層上而不需要 Macintosh 模擬層，這個接口被稱為 Carbon，是 Mac OS X 中五大主要 API 之一，Carbon 去除了約2000個有問題的 API（系統中 API 總數約8000個）並將之替換為現代作業系統兼容的系統調用。

與此同時，蘋果宣布將 Mach 部分內核版本號升級到3，BSD 部分的內核將被 FreeBSD, NetBSD 和 OpenBSD 項目所替代. 他們還發布了名為 I/O Kit的新驅動層，用於替代 NeXTSTEP 中的 Driver Kit，針對 Driver Kit 缺少電源管理和熱交換特性、自動配置功能匱乏等問題作出了改進。

在1999年的 WWDC 上，蘋果公司發布了 Quartz，一個基於 可攜式文檔格式 的窗口系統以避免產生（先前 NeXTSTEP 中 DPS 系統中遇到過的）和 Adobe 的版權糾紛和相關費用。

蘋果還宣布，Yellow Box 被更名為 Cocoa 並撤回了 Yellow Box 將在 Windows 系統上提供的承諾。此次 WWDC 蘋果還首次演示了將 Mac OS X 運行在 HFS+ 格式的驅動器上。

第一個面向消費者的 Mac OS X 版本是2000年9月13日發布的公開預覽版。

## 結構

### 內核和設備服務層

內核和設備服務層包括 XNU 內核、設備驅動和其他底層組件。

XNU是由蘋果電腦發展的作業系統內核，被使用於Mac OS X中。它是Darwin作業系統的一部分，跟隨著Darwin一同作為自由及開放原始碼軟體被發布。其中，XNU 是X is Not Unix的縮寫。

XNU 包括 Mach 和 BSD （libSystem）兩個部分，最初版本的 XNU 是 Mach 2.5版本和 BSD 4.3 的混合，隨著Mac OS X 的發布，Mach 版本升級到3，BSD 部分被 FreeBSD 替代。

Mach 是一個由卡內基梅隆大學開發的電腦作業系統微內核，是最早實現微核心作業系統的例子之一，也是許多其它相似的項目的標準。

同UNIX一樣，Mach系統也包含了一組豐富的實用工具，並保留了 Unix 中驅動程序的概念用以硬體交互。

在Mac OS X 中，Mach 內核為系統提供了64位內核和主要驅動支持。

伯克利軟體套件（英語：Berkeley Software Distribution，縮寫為 BSD），也被稱為伯克利Unix（Berkeley Unix），是一個作業系統的名稱，現在 BSD 也被用於稱呼其衍生的各種套件。

BSD 開創了現代電腦的潮流，由於BSD設計出眾，代碼編寫清晰，包括它的文檔，BSD 是最早添加庫以支持 IP 協議棧和伯克利套接字的 Unix 系統，套接字系統的發明使得電腦系統的網路通信和本地讀寫一樣方便，BSD。時至今日，BSD仍在學術機構，乃至許多商業或自由產品的高科技實驗中，繼續被用作試驗平台，甚至在嵌入式設備中。

最初的Mac OS X 的內核 XNU 所使用的是 4.3BSD，該版本發布於1986年6月。時至今日，Mac OS X 中的許多命令行工具還是來源於 BSD。在 Mac OS X 中，文件系統、網路棧、IPC、通知機制的支持也來自 BSD。

### 核心系統層（Core OS）

核心系統層的技術和框架是硬體/網路相關的底層服務，這些服務是和內核特性直接相關的。包括以下組件和框架（不完全列舉）：

- 安全措施：（為上層提供支持）包括Gatekeeper、APP 沙盒化、代碼簽名等。
- Core OS 框架：包括磁碟管理、硬體加速、OpenCL、系統配置等。
- Hypervisor：虛擬化支持。

### 核心服務層（Core service）

核心服務層和使用者界面的應用程式沒有直接聯繫，但是它們建立在內核和核心系統層上，為APP提供諸如數據處理、字串控制、封裝網路庫等核心支持。包括以下組件和框架（不完全列舉）：

- iCloud 存儲服務和 CloudKit
- 社交網路帳號：包括保存在 Mac OS X 內的社交帳戶的管理。
- 文件管理
- 本地化設置：語言、貨幣、日期和時間的格式化、編碼、字體排版和渲染。
- 安全認證：包括本地帳戶、信任的證書、安全傳輸、密鑰串訪問等。
- Time Machine 支持：Mac OS X 的系統備份功能。
- Bonjour：區域網下的設備發現服務，是印表機服務和區域網文件共享服務的基礎。
- XML 和 SQLite 支持：系統和 APP 的配置文件使用 XML 格式進行存儲，數據使用 SQLite 格式進行保存。
- Webkit: 允許 APP 進行網頁渲染，具有 Web Core 和 JavaScript Core 兩個部分。
- 快速預覽：包括在 spotlight 中預覽和空格鍵預覽。
- Store Kit: 為 Mac Appstore 和 iTunes 提供支持，處理相關請求。
- Core Services Umbrella Framework：包括管理文件打開方式、MIME 支持、文件元數據管理、SearchKit 搜索支持、詞典服務等。
- Carbon: Carbon 也是 Mac OS X 上的原生 API，也是 Core Services Umbrella Framework 的子集，和 Cocoa 不同的是，Carbon是面向過程（Procedural）的程式語言API，也更加接近系統底層，可以使用包括 C 和 C++ 在內的多種程式語言進行開發，類似 Windows 的 win32 API。Carbon API 提供了良好的向下兼容性，為開發者快速將舊 MacOS 上的程序移植到 Mac OS X 提供了便利，但是 Carbon 本身已經處於被蘋果不建議使用的狀態，也沒有64位支持，在 Mac OS X 10.8 後蘋果沒有對 Carbon 提供後續更新。

### 媒體層

媒體層負責音訊、圖像等多媒體文件的處理，2D 和 3D 圖像的渲染，各種動畫支持。

- OpenGL：OpenGL是一個定義了一個跨程式語言、跨平台的應用程式接口（API）的規範，它用於生成二維、三維圖像。OpenGL本身與語言和平台無關，它將具體實現交給窗口系統，Mac OS X 也提供了OpenGL 的實現。
- Metal：Metal 是一種面向底層的硬體加速 API，Metal 在單一 API 下提供了類似 OpenGL 和 OpenCL 的功能，旨在為提供和 Windows上Direct3D 12和跨平台的Vulkan相似的功能和特性。從10.11開始在 Mac OS X 上提供支持。
- Quartz：Quartz 是Mac OS X 上的 UI 繪圖層，由 Quartz Compositor（合成視窗系統，管理和合成幕後視窗影片來創建Mac OS X使用者界面）和 Quartz 2D（以PDF規範為基礎的圖形庫，用來繪製二維文字和圖形，現在被稱為 Core Graphics）組成。
- 顏色管理
- 音影片文件解析：包括QuickTime Kit、Core Media、Core Video等一系列多媒體處理框架。
- 字體渲染系統：包括 Cocoa Text 系統和Core Text。

### 圖形使用者界面（Cocoa 層）

圖形使用者界面層包括設計和使用者交互的 UI、響應使用者操作、管理程序的行為。

- Aqua：Aqua 是承載於 Quartz 上的 GUI 系統和視覺主題，首次發布於2000年。
- X11（XQuartz）: XQuartz 是 Mac OS X 上 X窗口系統的一個實現，最初和 Mac OS X 10.2 公開預覽版一起提供，從 Mac OS X 10.8 開始不隨系統提供。
- Spotlight：Mac OS X 下的搜索工具。
- Cocoa: Cocoa是 Mac OS X 上原生面向對象的編程環境，建立在 Quartz 上並由Objective-C語言編寫，Cocoa 程序也主要使用Objective-C語言編寫，但是通過橋接技術，也可以使用 JAVA、Python、Ruby 等語言開發 Cocoa 應用。Cocoa是典型的 MVC 模式。
- Appkit：直接派生自NeXTSTEP的AppKit的。它包含了程序與圖形使用者界面交互所需的代碼。
- Foundation 工具包：首先出現在OpenStep中。在Mac OS X中，它是基於Core Foundation的。作為通用的面向對象的函數庫，Foundation提供了字串，數值的管理，容器及其枚舉，分布式計算，事件循環，以及一些其它的與圖形使用者界面沒有直接關係的功能。
- Core Data：Core Data是Mac OS X中Cocoa API的一部分，它允許按照MVC模型組織APP的數據，並以XML，二進位文件或SQLite數據文件的格式將其序列化。

## 外部連結

- Mac OS X 和 PDF
- Apple: Mac OS X — OS X 官方頁面。
- Mac OS X (arstechnica.com) — Mac OS X 評測 (10.0 - 10.10)
- Mac OS X Internals The web page associated with the book.
- OpenGL for OS X Apple developer guide for OpenGL.
- Kernel Extension Programming Topics Mac developer library.