
ハイブリッドカーネルとは、オペレーティングシステムで使用されるマイクロカーネルとモノリシックカーネルのアーキテクチャの側面と利点を組み合わせようとするアーキテクチャを持つオペレーティングシステムカーネルのことです。 [ 1 ] [ 2 ]
従来のカーネルの分類は、モノリシックカーネルとマイクロカーネル(ナノカーネルとエクソカーネルはマイクロカーネルのより極端なバージョンと見なされている)である。ハイブリッドカーネルと通常のモノリシックカーネルの類似性から、「ハイブリッド」という分類は議論の的となっており、この用語はリナス・トーバルズによって単なるマーケティング用語として却下されている。[ 3 ]
ハイブリッドカーネルの基本的な考え方は、マイクロカーネルと同様のカーネル構造を持ちながら、その構造をモノリシックカーネルと同様の方法で実装することです。マイクロカーネルとは異なり、ハイブリッドカーネルではすべての(またはほぼすべての)オペレーティングシステムサービスがカーネル空間に存在します。マイクロカーネルのようにサービスをユーザー空間に配置することによる信頼性の向上は得られません。しかし、通常のモノリシックカーネルと同様に、マイクロカーネルで通常発生するカーネルモードとユーザーモード間のメッセージパッシングやコンテキスト切り替えによるパフォーマンスオーバーヘッドは発生しません。

ハイブリッドカーネルの代表的な例としては、MicrosoftのWindows NTカーネルが挙げられます。これは、 Windows 11やWindows Server 2025を含むWindows NTファミリーのすべてのオペレーティングシステムを支え、 Windows Phone 8、Windows Phone 8.1、Windows 10 Mobile、そしてXbox OneおよびXbox Seriesコンソールも支えています。
Windows NT は、ハイブリッド カーネルをベースとした最初の Windows オペレーティングシステムでした。ハイブリッド カーネルは、カーネギー メロン大学のリチャード ラシッドが開発したMach マイクロ カーネルの影響を受けた改良型マイクロ カーネルとして設計されましたが、純粋なマイクロ カーネルのすべての基準を満たしていませんでした。NT ベースの Windows は、エミュレーション サブシステムがモノリシック カーネルのようにカーネル モードではなくユーザー モードのサーバ プロセスで実行されるため、また Mach の設計目標に類似した設計目標が多数あるため (特に OS パーソナリティを一般的なカーネル設計から分離する)、モノリシック カーネルではなくハイブリッド カーネル (またはマクロ カーネル [4]) に分類されます。逆に、NT がマイクロ カーネル システムではない理由は、モノリシック設計の場合と同様に、システム コンポーネントのほとんどがカーネルと同じアドレス空間で実行されるためです(従来のモノリシック設計では、マイクロ カーネル自体は存在しませんが、カーネルは NT のマイクロ カーネルおよびカーネル モード サブシステムとほぼ同様の機能を実装します)。
Windows の主要なオペレーティングシステムのパーソナリティは、常に存在するWindows APIです。Windows パーソナリティを実装するエミュレーションサブシステムは、クライアント/サーバーランタイムサブシステム(csrss.exe) と呼ばれます。NT 4.0 より前のバージョンでは、このサブシステムプロセスにはウィンドウマネージャ、グラフィックスデバイスインターフェイス、グラフィックスデバイスドライバも含まれていました。しかし、パフォーマンス上の理由から、バージョン 4.0 以降では、これらのモジュール (特に内部グラフィックスサポートなしで設計されたモノリシックシステムでもユーザーモードで実装されることが多い) はカーネルモードサブシステムとして実行されます。[ 4 ]
NT 上で動作するアプリケーションは、OS パーソナリティ (通常は Windows API) のいずれかに記述され、ドキュメントが公開されていないネイティブ NT API には記述されません (デバイス ドライバ開発で使用されるルーチンを除く)。OS パーソナリティは、一連のユーザー モード DLL (ダイナミック リンク ライブラリを参照) を介して実装され、必要に応じてアプリケーション プロセスのアドレス空間にマッピングされます。また、前述のように、エミュレーション サブシステム サーバー プロセスも使用されます。アプリケーションは、アドレス空間にマッピングされた OS パーソナリティ DLL を呼び出すことでシステム サービスにアクセスします。この OS パーソナリティ DLL は、プロセス アドレス空間にマッピングされた NT ランタイム ライブラリ (ntdll.dll) を呼び出します。NT ランタイム ライブラリは、カーネル モードにトラップしてカーネル モードのエグゼクティブ ルーチンを呼び出すか、適切なユーザー モード サブシステム サーバー プロセスにローカル プロシージャ コール(LPC) を行うことで、これらの要求を処理します。これらのプロセスは、NT API を使用してアプリケーション プロセス、カーネル モード サブシステム、および相互に通信します。[ 5 ]

XNUは、 Apple Inc.がmacOS、iOS、watchOS、tvOSオペレーティングシステムで使用するために取得および開発したカーネルであり、 Darwinオペレーティングシステムの一部としてフリーかつオープンソースのソフトウェアとしてリリースされました。XNUはX is Not Unixの頭文字をとったものです。[ 6 ]
XNUは元々NeXTがNeXTSTEPオペレーティングシステム向けに開発したもので、 Machカーネルのバージョン2.5と4.3BSDのコンポーネント、そしてドライバ作成のためのオブジェクト指向APIであるDriver Kitを組み合わせたハイブリッドカーネルだった。
AppleがNeXTを買収した後、MachコンポーネントはマイクロカーネルであるOSFMK 7.3にアップグレードされました[ 7 ] 。 [ 8 ] Appleは、FreeBSDの一部を含むハイブリッドカーネルとして機能する、大幅に変更されたOSFMK 7.3を使用しています[ 7 ](OSFMK 7.3には、ユタ大学のMach 4カーネルの適用可能なコードと、オリジナルのカーネギーメロン大学のMach 3.0カーネルから分岐した多くのMach 3.0バリアントの適用可能なコードが含まれています)。BSDコンポーネントはFreeBSDプロジェクトのコードでアップグレードされ、ドライバキットはI/Oキットと呼ばれるドライバを作成するためのC++ APIに置き換えられました。
他のいくつかの最新カーネルと同様に、XNUはハイブリッド型であり、モノリシックカーネルとマイクロカーネルの両方の機能を備え、両方の技術を最大限に活用しようとしています。例えば、マイクロカーネルのメッセージパッシング機能によってモジュール性が向上し、OSのより多くの部分が保護されたメモリの恩恵を受けられるようになり、また、特定の重要なタスクにおいてはモノリシックカーネルの速度を維持しています。
「ハイブリッドカーネル」の件については、単なるマーケティングです。「マイクロカーネルはPRが良かったから、我々のカーネルもPRを良くするにはどうすればいいだろう?そうだ、かっこいい名前を使って、あのシステムが持っているPR上の利点をすべて持っていると示唆しよう。」