XNU(「X is Not Unix」)は、 1996年12月からApple Inc.で開発され、Mac OS X(現在のmacOS)オペレーティングシステムで使用されるコンピュータオペレーティングシステム(OS)カーネルであり、 Darwin OSの一部としてフリーかつオープンソースのソフトウェアとしてリリースされました。macOSの基盤であることに加えて、 iOS、iPadOS、watchOS、visionOS、tvOSの基盤でもあります。[ 2 ]
XNUは元々NeXTがNeXTSTEPオペレーティングシステム向けに開発したものです。これは、カーネギーメロン大学で開発されたMachカーネルのバージョン2.5から派生したハイブリッドカーネルで、Machプリミティブ上で動作するように変更された4.3BSDカーネルの大部分と、 DriverKitという名前のドライバを作成するためのObjective-Cのアプリケーションプログラミングインターフェース(API)が組み込まれています。[ 3 ]
AppleがNeXTを買収した後、カーネルはOSFのOSF MK 7.3 [ 4 ]とFreeBSDプロジェクトから派生したコードで更新され、DriverKitはIOKitと呼ばれるC++の制限されたサブセット[ 5 ] ( Embedded C++に基づく)[ 6 ]上の新しいAPIに置き換えられました。
macOS は、 The Open Group によるSingle UNIX Specification (SUS)の下で、2007 年にMac OS X 10.5 Leopard [ 7 ]をリリースして UNIX 認証を取得しました。 [ 8 ]それにもかかわらず、Apple は macOS が UNIX 認証を受ける前の NeXTSTEP 時代の名残である「XNU」という元の名称を維持しました。これは「X is Not Unix」の略です。このため、macOS 全体としては公式に UNIX オペレーティングシステムとして認識されているにもかかわらず、この名称は XNU が UNIX とは別物であることを示唆するため、混乱が生じています。[ 1 ]
XNUは、モノリシックカーネルとマイクロカーネルの両方の特徴を備えたハイブリッドカーネルです。[ 9 ]
2026年7月現在 XNU はARM64およびx86-64プロセッサで動作します。PowerPCのサポートはMac OS X Snow Leopardカーネルで削除されました。IA -32のサポートはMac OS X Lionカーネルで削除されました。32 ビット ARM のサポートはiOS 11で削除されました。x86-64のサポートはmacOS Golden Gateカーネルで削除されましたが、現在のリリースであるmacOS Tahoeのカーネルには残っています。
XNUカーネルのベースは、大幅に修正された(ハイブリッド)Open Software Foundation Machカーネル(OSF MK)7.3です。[ 4 ] OSF MK 7.3はマイクロカーネル[ 10 ]であり、ユタ大学のMach 4カーネルと、オリジナルのカーネギーメロン大学Mach 3.0マイクロカーネルからフォークされた多くのMach 3.0バリアントからの適用可能なコードが含まれています。
XNU は Mach をマイクロカーネルとして使用せず、他のサブシステム ( BSDのものなど) をユーザー空間デーモンとしてではなくカーネルの一部として組み込んでいます。XNU の Mach は、仮想メモリの管理、プロセス間通信(IPC) の促進、コンソールとの入出力(I/O) 操作に使用されます。 [ 11 ]
OSF MK 7.3は、オペレーティングシステムのコアを分離プロセスとして実行できるため、非常に柔軟性があります(Machコア上で複数のオペレーティングシステムを並列実行できます)。しかし、時間のかかるカーネル/ユーザーモードのコンテキストスイッチや、カーネルとサービスデーモンのアドレス空間間でメッセージをマッピングまたはコピーすることによるオーバーヘッドのため、パフォーマンスが低下することがよくあります。
AppleはOSFからOSF MK 7.3のライセンスを取得し、 MachコードとともにBSD関数をカーネルに組み込むことで、一部のタスクの効率化を図った。その結果、大幅に改変された(ハイブリッド型の)OSF MK 7.3カーネルが誕生した。
カーネルのBerkeley Software Distribution (BSD) 部分は、Portable Operating System Interface ( POSIX )アプリケーションプログラミングインターフェイス(API、BSD システムコール)、 Mach タスク上のUnixプロセスモデル、基本的なセキュリティ ポリシー、ユーザーおよびグループ ID、パーミッション、ネットワークプロトコル スタック(プロトコル)、仮想ファイルシステムコード (ファイルシステムに依存しないジャーナリングレイヤーを含む)、階層型ファイルシステム(HFS、HFS Plus (HFS+)) やApple File System (APFS)などの複数のローカル ファイルシステム、ネットワーク ファイルシステム(NFS) クライアントおよびサーバー、暗号化フレームワーク、UNIX System Vプロセス間通信(IPC)、監査サブシステム、強制アクセス制御、およびいくつかのロック プリミティブを提供します。[ 12 ] XNU に含まれる BSD コードは、最近FreeBSDカーネルのコードと同期されました。その多くは大幅に変更されていますが、 2009 年現在も Apple と FreeBSD プロジェクトの間でコード共有が行われています。[ 13 ] MachがBSDを初期化した後に最初に起こることは、メモリ割り当ての初期化です。[ 14 ]
Mac OS X Snow Leopard v10.6 ( Darwinバージョン 10)の XNU には、 K32と呼ばれる32 ビット版とK64と呼ばれる64 ビット版の 2 種類があります。[ 15 ] K32 は、ユーザーランドで 64 ビット アプリケーションを実行できます。[ 16 ] Mac OS X 10.6 の新機能は、64 ビットカーネル空間で XNU を実行できる機能でした。K32 は、 2008 年以降のMac ProおよびXserveモデルを除くすべてのマシンで使用される10.6 Serverのデフォルト カーネルであり[ 17 ]、64 ビット アプリケーションを実行できます。K64 は、K32 と比較していくつかの利点があります。[ 18 ]
6 キーと4 キーを押しながら起動すると、64 ビット カーネルをサポートするマシンでは K64 が強制的に起動されます。[ 19 ] K64 は 32 ビット アプリケーションを実行しますが、32 ビットカーネル拡張機能(KEXT)は実行しないため、ロードできるようにするには K64 に移植する必要があります。
OS X Mountain Lion (10.8) 以降の XNU は、64 ビット カーネルのみを提供します。
IOKit は、例外、多重継承、テンプレートなどの機能を持たない組み込みC++のサブセットで記述されたデバイスドライバフレームワークです。 [ 6 ]オブジェクト指向設計により、あらゆるクラスのドライバに共通する機能がフレームワーク内に提供され、デバイスドライバをより少ない時間とコードで記述できるようになります。IOKit はマルチスレッド、対称型マルチプロセッシング(SMP) に対応しており、ホットプラグ対応デバイスと自動的かつ動的なデバイス構成を可能にします。
多くのドライバはユーザーモードで実行するように記述でき、これによりシステムの安定性がさらに向上します。ユーザーモードで実行されているドライバがクラッシュしても、カーネルはクラッシュしません。しかし、カーネルモードで実行されているドライバがクラッシュすると、カーネルもクラッシュします。カーネルモードで実行されるドライバの例としては、ディスクアダプタおよびネットワークアダプタドライバ、グラフィックスドライバ、USBおよびFireWireホストコントローラのドライバ、 VirtualBox、Parallels Desktop for Mac、VMware Fusionなどの仮想マシンソフトウェアのドライバなどがあります。macOS Catalina以降のリリースでは、DriverKitにより、これらのタイプのドライバの一部をユーザーモードで実行できます。[ 20 ]
/O Kit は C++ の制限されたサブセットを使用します。
最後に、これは繰り返しておく価値があります。64 ビット アプリケーションを実行したり、 Mac に 4 GB を超える RAM をインストールしたりするために、64 ビット カーネルを実行する必要はありません。アプリケーションは 32 ビット カーネル上で 64 ビット モードで問題なく動作し、以前のバージョンの Mac OS X でも、4GB をはるかに超える RAM をインストールして活用することが可能でした。