Darwin(ダーウィン)は、Appleが開発するオペレーティングシステム (OS) で、macOSやiOS、iPadOS、さらにはwatchOSとtvOS、audioOS、bridgeOS、visionOSの基礎となる部分でもある。

## 概要

Darwinはオープンソース及び自由ソフトウェアとして公開されており、他のフリーなUnix系同様に特定のライセンス、Apple Public Source License (APSL) 下で入手、インストール、運用が可能であり、PowerPCベースのMacだけでなく、サポートされているハードウェアドライバの問題からハードウェア構成は限定されるが、Intel Macではないインテル機でも動作する。

しかし、この公開されていたソースコードでは当初Intel Macには対応していなかったためインテル製CPUに移行後はクローズドソースになるのではないかという臆測も流れたが、Intel Mac発売から半年後に対応のソースコードが公開された。

なお、2005年4月にリリースされた Darwin 8.0以降、インストール用CDイメージは公開されていないが、後継プロジェクトPureDarwinのサイトからダウンロードできる。

## テクノロジー

Darwinは技術的にはNEXTSTEPからOPENSTEPに続く流れを汲み、Mach 3.0+BSDをベースとするUnix系のオペレーティングシステム(OS)の中核部で、一部の機能は他のBSD系OSからも取り入れている。ほぼPOSIX互換だが、Darwin自体はPOSIXのどのバージョンにも準拠認定されたことはない。Leopard以降、macOSはSingle UNIX Specification version 3 (SUSv3)準拠の認定を受けている。

カーネルはXNUと呼ばれ、Machを採用してはいるものの、macOSを動作させる場合には複数のサーバを組み込む必要はない。またパフォーマンス上の問題が懸念されたため、Darwinカーネル自体にマイクロカーネル構造は採用されていない。

ドライバモデルには、I/OKitと呼ばれるオブジェクト指向のフレームワークを採用している。NEXTSTEPで採用されたDriverKitの後継のライブラリで、DriverKitのObjective-Cでの実装を機能限定版のC++での実装に置き換えたもの。開発ツールはXcodeに含まれる。

Darwin (macOS) を立ち上げると最初に起動し端末の初期化を行うプロセスはlaunchdというデーモンであり、他のUnix系システムのinitに相当する機能を担う。またinetd / xinetdと同じようにネットワークのポートを監視したり、cronのように指定時刻ごとにプロセスを立ち上げる機能も担当する(採用はDarwin 8.0から)。

DarwinにはCore FoundationなどCore Serviceの一部も含まれる。ただし、CocoaやCore Image(OpenGL、GLSL)やCore Audio (OpenAL) やOpenCLといったAPIのほか、HTMLレンダリングエンジン群のWebKitやXQuartzなどのGUI関連も含まず、Darwin単体の操作画面はCUIとなっている。

- macOSの構造(2017年時点)
- Mac OS X 構造図表

## 歴史

Darwinは1989年に最初にリリースされた、NeXTのNeXTSTEP OS(バージョン4.0からはOPENSTEPとして知られる)に起源を持つ。1997年のAppleによるNeXTの買収後、次期のOSはOPENSTEPをベースに開発されることがアナウンスされた。これは同年にRhapsodyとなり、1999年には、Mac OS X Server 1.0、2000年には、Mac OS X Public Beta、そして2001年にはMac OS X 10.0に開発された。Mac OS Xのコアコンポーネントは、Apple Public Source Licenseの下、Darwinとしてオープンソースでリリースされているが、CocoaやCarbonのようなより高次のコンポーネントはクローズドソースのままとなっている。

Darwin 8.0.1までのバージョンでは、Appleは、ISOイメージの形でバイナリインストーラーを提供していた。これはMac OS Xのメジャーリリース後に、PowerPCとIntel x86システムでDarwinをスタンドアロンのOSとしてインストールできるものであった。Darwinは現在、ソースコードとしてのみ利用できる。ただしこれは、ARMアーキテクチャによるものを除いてであり、ARM向けDarwinはiOS、watchOS、tvOSから分離されてはリリースされていない。ただし、趣味的な開発者が公式のDarwinのソースコードをARMにポートしたwinocmがある。

## リリース履歴

以下は主なDarwinのリリースと、それに対応するmacOS (Mac OS X / OS X) の表である。 対応するmacOSは異なる日にリリースされたかもしれないことに留意し、それらのリリース日についてはmacOSの個別ページを参照。

| バージョン | リリース日 | 対応するリリース | 説明 |
| --- | --- | --- | --- |
| 0.1 | 1999年3月16日 | Mac OS X Server 1.0 |  |
| 1.0.2 | 1999年11月10日 | Mac OS X DP2 |  |
| 1.1 | 2000年4月5日 | Mac OS X DP4 |  |
| 1.2.1 | 2000年11月15日 | Mac OS X Public Beta |  |
| 1.3.1 | 2001年4月13日 | Mac OS X v10.0 |  |
| 1.4.1 | 2001年10月2日 | Mac OS X v10.1 | "起動時間、リアルタイムスレッド、スレッド管理、キャッシュフラッシング、プリエンプションハンドリング"に対するパフォーマンスの改善。SMB、Wgetを置き換えるcURLのサポート。 |
| 6.0.1 | 2002年9月23日 | Mac OS X v10.2 (Darwin 6.0.2) | GCCを2から3.1にアップグレード、 IPv6とIPSecのサポート、mDNSResponder service discoveryデーモン(Rendezvous)、CUPS, Ruby, Pythonの追加、HFS+でのジャーナリングのサポート(Darwin 6.2)、プログラムをより速く起動するためのアプリケーションプロファイル("pre-heat files")の追加。 |
| 7.0 | 2003年10月24日 | Mac OS X v10.3 | FreeBSD 5に対応したBSDレイヤー、自動デフラグメンテーション、hot-file clustering、HFS+でのcase sensitivityオプション、read-onlyなNTFSのサポート。デフォルトのシェルをtcshからbashに変更。(Darwin 7.9). |
| 8.0 | 2005年4月29日 | Mac OS X v10.4 Mac OS X for Apple TV (Darwin 8.8.2) | 安定的なカーネルプログラミングインターフェース、よりきめ細かいカーネルロック、64ビットBSDレイヤー、launchdサービス管理フレームワーク、拡張ファイル属性、アクセス制御リスト、cpやmvなどのコマンドを拡張属性やリソースフォークが保持できるようにアップデート。 |
| 9.0 | 2007年10月26日 | iOS 1.0 (Darwin 9.0.0d1) Mac OS X v10.5 | 完全なPOSIX準拠、階層的プロセススケジューリングモデルの改善、動的メモリ確保のスワップファイル、(ファイルやプロセスに対する)動的なリソース制限、プロセスのサンドボックス化、アドレス空間配置のランダム化、DTrace tracing framework、ファイルシステムイベントデーモン、ディレクトリハードリンク、Apache 1.3とPHP 4をそれぞれApache 2.2とPHP 5にアップデート、ZFSのサポート。 |
| 10.0 | 2009年8月28日 | Mac OS X v10.6 | PowerPCの公式サポートの終了(ただしカーネルなどいくつかのファットバイナリがPPCイメージをまだ含んでいる)、64ビットのカーネルとドライバ、libdispatchタスク並列化フレームワーク、OpenCLヘテロジニアスコンピューティングフレームワーク、C言語のBlocks(クロージャを作るためにラムダ式のような構文を用いる非標準の言語拡張)のサポート、HFS+における透過的なファイル圧縮。 |
| 10.1.0 | 2009年9月10日 | Mac OS X v10.6.1 |  |
| 10.2.0 | 2009年11月9日 | Mac OS X v10.6.2 |  |
| 10.3.0 | 2010年3月29日 | iOS 4.0 (Darwin 10.3.1) Mac OS X v10.6.3 |  |
| 10.4.0 | 2010年6月15日 | Mac OS X v10.6.4 |  |
| 10.5.0 | 2010年11月11日 | Mac OS X v10.6.5 |  |
| 10.6.0 | 2011年1月6日 | Mac OS X v10.6.6 |  |
| 10.7.0 | 2011年3月21日 | Mac OS X v10.6.7 |  |
| 10.8.0 | 2011年6月23日 | Mac OS X v10.6.8 |  |
| 11.0.0 | 2011年7月20日 | OS X v10.7 | XNUがPPCをサポートせず(i386, x86\_64のためだけのファットバイナリ)、x86\_64プロセッサを必要とする。アプリケーションのサンドボックス化の改善。 |
| 11.1.0 | 2011年8月16日 | OS X v10.7.1 |  |
| 11.4 | 2012年5月9日 | OS X v10.7.4 |  |
| 11.4.2 | 2012年9月12日 | OS X v10.7.5 |  |
| 12.0 | 2012年2月16日 | OS X v10.8 |  |
| 13.0.0 | 2013年6月11日 | OS X v10.9 |  |
| 13.1 | 2014年2月25日 | OS X v10.9.2 |  |
| 13.3.0 | 2014年6月30日 | iOS 7 OS X v10.9.4 |  |
| 14.0.0 | 2014年9月18日 | iOS 7.1-7.1.2, iOS 8 OS X v10.10 |  |
| 14.5.0 | 2015年8月13日 | OS X v10.10.5 |  |
| 15.0.0 | 2015年9月16日 | iOS 9.0 OS X v10.11.0 |  |
| 15.4.0 | 2016年3月21日 | OS X v10.11.4 |  |

Mac OS X v10.1.1のリリースで、バージョン番号がDarwin 1.4.1から5.1へ飛んでいるのは、DarwinをmacOSのバージョンとビルド番号の体系に結びつけたためである。macOSのビルド番号の体系では、すべてのバージョンが固有のビルド番号ではじまり、macOSのバージョンの全体の中のどの部分であるかわかるようになっている。Mac OS X v10.0は4ではじまるビルド番号があり、10.1には5ではじまるビルド番号があった(初期のビルド番号は開発者リリースを表していた)。Darwinのバージョンにあるピリオド以下の番号は、Mac OS Xのバージョンにある二つめのピリオド以下の番号とおなじである。Mac OS X v10.1.1(バージョン番号が飛んだときのバージョン)の場合は、ビルド5M28および10.1.1リリースであり、バージョン番号の5.1はこれに由来する。

ターミナルでuname -rのコマンドを実行するとDarwinのバージョン番号が表示され、uname -vとするとDarwinのバージョン番号をふくんだXNUのビルドバージョンが表示される。

## 派生プロジェクト

Darwinは自由ソフトウェアであるため、修正や強化を目的とする多くのプロジェクトがある。

### OpenDarwin

OpenDarwinはDarwinシステムをもとにしたコミュニティ主導のOSである。Appleの開発者と自由ソフトウェアコミュニティとの協調を高めることを目指して、2002年4月にAppleとInternet Systems Consortiumによって設立された。このプロジェクトはAppleによるDarwinのリリースに恩恵を与えたが、しかし独立したDarwin OSを作成する試みは達成できず、プロジェクトは停止した。

### PureDarwin

2007年、PureDarwinプロジェクトがOpenDarwinの後継としてはじまり、現在Darwin 9にもとづいたリリースの制作が進められている。「PureDarwin XMas」と呼ばれる、Darwin 9にもとづいたデベロッパープレビューが入手できる。このリリースはX11、DTrace、ZFSをもつ。「PureDarwin nano」は最小限のコンポーネントだけをもつ、別のリリースである。

### その他

- XQuartzは、macOS (Darwin) 向けのX Window Systemの実装。前身はXDarwin。
- GNUstepは、macOSのCocoaのインタフェースと同様、NeXTのOPENSTEPから派生。ウィジェット・ツールキットも含まれている。GNUstepのデスクトップ環境とするために開発されたウィンドウマネージャにWindow Makerがある。
- Étoiléは、GNUstepをもとに開発されたデスクトップ環境。
- WebKitは、macOSに搭載されるウェブブラウザ・Safariのレンダリングエンジン。
- MacPorts(かつてのDarwinPorts)、Fink、HomebrewはUNIXプログラムをDarwin OSに移植し、パッケージ管理を提供する、よく知られたプロジェクトである。さらに、RPM、pkgsrc、Portageなどいくつかの標準的なUNIXパッケージ管理システムもDarwin portsをもっている。これらの中にはベースとなるシステムに干渉しないよう、独自の名前空間で動くものもある。
- GNU-Darwinは自由ソフトウェアのパッケージをDarwinに移植するプロジェクトである。
- DarwineプロジェクトはWineの移植で、Microsoft WindowsソフトウェアをDarwin上で実行できるようにする。
- SEDarwinはTrustedBSDの強制アクセス制御フレームワークと、SELinuxフレームワークの一部をDarwinに移植する これはMac OS X v10.5に組み込まれた。
- DarbatプロジェクトはL4マイクロカーネルへのDarwinの実験的な移植である。既存のDarwinバイナリと互換であることを目指している。
- ドライバのサポートに主眼を置いたさまざまなプロジェクトがある。ワイヤレスドライバ、有線NICドライバ、モデムドライバ、カードリーダ、ext2やext3ファイルシステムなど。