GNU Hurd は、GNU Machマイクロカーネル用にGNUの一部として書かれたマイクロカーネルサーバーの集合体です。これは、フリー ソフトウェア ファウンデーションのGNU プロジェクトによって 1990 年以来開発されており、 Unixカーネルの代替として設計され、[ 3 ] GNU General Public Licenseの下でフリー ソフトウェアとしてリリースされています。Linuxカーネルが実行可能なソリューションであることが証明されると、GNU Hurd の開発は減速し、時には停滞と活動および関心の再開が繰り返されました。[ 4 ]
Hurd の設計は、GNU Mach マイクロカーネル上で動作する一連のプロトコルとサーバープロセス( Unix 用語ではデーモン) で構成されています。 [ 3 ] Hurd は、Unix カーネルとの互換性をほぼ維持しつつ、機能性、セキュリティ、安定性において Unix カーネルを凌駕することを目指しています。GNU プロジェクトは、従来の Unixモノリシックカーネルアーキテクチャ[ 6 ]よりも優れていると認識された理由から、オペレーティングシステムにマルチサーバーマイクロカーネル[ 5 ]を選択しました。この見解は、1980 年代に一部の開発者によって提唱されていました。[ 4 ]
1991年12月、ハードの主任設計者はその名前を相互再帰的な頭字語として説明した。[ 7 ]
「Hurd」の意味を説明する時が来ました。「Hurd」は「Hird of Unix-Replacing Daemons」(Unix代替デーモンの群れ)の略です。そして、「Hird」は「Hurd of Interfaces Representing Depth」(深さを表すインターフェースの群れ)の略でもあります。私の知る限り、このソフトウェアは、相互に再帰的な頭字語のペアで命名された最初のソフトウェアです。
hurdとhird はどちらも英語のherdと同音異義語であるため、 GNU Hurd というフルネームは、カーネルの動作を反映した、grund of gnusという言葉遊びでもある。 [ 8 ]
このロゴはHurdボックスと呼ばれ、アーキテクチャを反映しています。このロゴはグラフであり、ノードはHurdカーネルのサーバーを表し、有向エッジはIPCメッセージを表します。[ 7 ]
リチャード・ストールマンは、フリーのGNUオペレーティングシステムを作成することを目的として、1983年9月にGNUプロジェクトを設立しました。 [ 9 ]当初は、カーネル開発に必要なコンポーネント(エディタ、シェル、コンパイラ、デバッガなど)が作成されました。1989年までにGPLが誕生し、欠けていた主要なコンポーネントはカーネルのみでした。[ 10 ] [ 11 ]
Hurd の開発は、MIT のコンピュータ科学研究所(LCS)のスティーブ・ウォード教授とそのグループが開発した研究用TRIXオペレーティングシステムに基づいて、1986 年にカーネル開発の試みが断念された後、1990 年に開始されました。 [ 12 ] Hurd の初期設計者であるトーマス・ブッシュネルによると、当初の計画は4.4BSD -Lite カーネルを採用することであり、今振り返ってみると、「これは見事に成功し、世界は今日とは全く異なる場所になっていただろうことは、私には明白です。」[ 13 ] 1987 年にリチャード・ストールマンは、カーネギーメロン大学のリチャード・ラシッドが開発したMach マイクロカーネルを使用することを提案しました。CMU が Mach コードを適切なライセンスで公開するかどうかが不確実だったため、この作業は 3 年間遅れました。[ 12 ]
1991年にLinuxカーネルがリリースされると、GNUのユーザーランドコンポーネントの主なユーザーはすぐにLinuxカーネルをベースとしたオペレーティングシステム(Linuxディストリビューション)になり、 GNU/Linuxという用語が作られるようになりました。
Hurd の開発はゆっくりと進んでいます。2002 年に Stallman が楽観的に発表し、その年の後半に GNU/Hurd がリリースされると予測したにもかかわらず[ 14 ] 、 Hurd は依然として実用環境には適していないと考えられています。開発全般は期待に応えておらず、依然としてかなりの数のバグと不足している機能があります。[ 15 ]この結果、Stallman を含む多くの人が期待していたよりも劣った製品になってしまいました。[ 16 ] 2010 年に 20 年間の開発を経て、Stallman は「GNU Hurd についてはあまり楽観的ではない。多少の進歩は見られるが、本当に優れたものになるには多くの根本的な問題を解決する必要がある」と述べましたが、すでにフリー カーネル ( Linux ) が存在するため、GNU システムにとって「完成させることは重要ではない」と付け加えました。また、Hurd を完成させても、フリー オペレーティングシステムに残された主な問題であるデバイス サポートは解決されないとも述べています。[ 17 ]
Debianプロジェクトをはじめとする多くのプロジェクトが、 Hurdプロジェクトに取り組み、IBM PC互換システム向けにHurdベースのGNUオペレーティングシステムのバイナリディストリビューションを作成してきた。
長年の停滞の後、2015年と2016年に開発が再び活発化し、この2年間で4つのリリースが行われました。[ 18 ]それ以降、リリースは行われていませんが、ディストリビューションはスナップショットを取得してディストリビューションリリースを作成します。 [ 19 ] [ 20 ] [ 21 ] [ 22 ] [ 23 ] [ 24 ]
2015年8月20日、Google Summer of Codeの最中に、 GNU GuixがGNU Hurdに移植されたことが発表された。 [ 25 ]

ほとんどのUnix ライクなカーネルとは異なり、Hurd はサーバー/クライアント アーキテクチャを採用しており、最も基本的なカーネル サービス、つまりハードウェアへのアクセスを調整するマイクロ カーネルに基づいています。具体的には、 CPU (プロセス管理とスケジューリングによる)、RAM (メモリ管理による)、サウンド、グラフィックス、大容量ストレージなどのさまざまな入出力デバイス ( I/O スケジューリングによる) へのアクセスです。理論的には、マイクロ カーネルの設計により、すべてのデバイス ドライバをユーザー スペースで動作するサーバーとして構築できますが、現在ではこの種のドライバのほとんどはGNU Machカーネル スペースに含まれています。[ 26 ]
Hurdの開発者によると、マイクロカーネルベースの設計の主な利点は、システムを拡張できることである。新しいモジュールを開発するのにカーネルの残りの部分に関する深い知識は必要なく、1つのモジュールのバグがシステム全体をクラッシュさせることはない。Hurdは、ファイルシステムの機能を拡張するために使用されるモジュールのフレームワークであるトランスレータの概念を提供している。[ 27 ]
Hurdは初期から、マイクロカーネルとしてGNU Machを使用するように開発されました。これは、作業の大部分を節約することで作業を高速化できると考えたリチャード・ストールマンによる技術的な決定でした。彼はその点について間違っていたことを認めています。 [ 28 ] Machマイクロカーネル上で動作する他のUnixライクなシステムには、 OSF/1、Lites、MkLinuxなどがあります。macOSとNeXTSTEPは、 Machベースのハイブリッドカーネルを使用しています。
2004年以降、Hurdをより現代的なマイクロカーネルに移植するための様々な取り組みが開始されました。 2004年当初はL4マイクロカーネルが候補でしたが、開発は停滞しました。しかしながら、2005年にはHurdの開発者であるNeal WalfieldがL4/Hurd移植版の初期メモリ管理フレームワークを完成させ、Marcus Brinkmannがglibcの重要な部分、すなわちプロセス起動コードを動作させ、プログラムを実行できるようにすることで、C言語で書かれた最初のユーザープログラム(hello worldプログラムのような簡単なもの)を実行できるようにしました。
2005 年以来、ブリンクマンとウォルフィールドはHURD の新しいカーネルとしてCoyotos の研究を開始しました。 [ 29 ] [ 30 ] 2006 年、ブリンクマンは Jonathan Shapiro (Coyotos オペレーティングシステムの主要アーキテクト) と会い、GNU/Hurd での Coyotos カーネルの使用について支援と議論を行いました。さらに議論を重ねた結果、HURD 開発者は Coyotos (および他の同様のカーネル) が HURD には適していないことに気づきました。[ 31 ]
2007年、Hurd開発者のニール・ウォルフィールドとマーカス・ブリンクマンは、Hurdアーキテクチャに対する批判(「批判」として知られる)[ 32 ]と、将来のシステムの設計方法に関する提案(「ポジションペーパー」として知られる)[ 33 ]を発表した。 2008年、ニール・ウォルフィールドは、HURD用の最新のネイティブカーネルとしてViengoosマイクロカーネルの開発に着手した。2009年現在ウォルフィールドが作業する時間がないため、Viengoosの開発は一時停止されている。[ 34 ]
その間、他の人々はハードのマッハ版の研究を続けている。[ 35 ]
Hurdでは、従来のUnixの概念の多くが置き換えられたり、拡張されたりしている。
Unixでは、実行中のすべてのプログラムには関連付けられたユーザーIDがあり、通常はプロセスを開始したユーザーに対応します。このIDによって、プログラムに許可されるアクションが大きく左右されます。外部のプロセスは、実行中のプログラムのユーザーIDを変更することはできません。一方、Hurdプロセスは、複数のID、1つのID、またはIDなしを含むことができる一連のユーザーIDの下で実行されます。十分な権限を持つプロセスは、他のプロセスにIDを追加したり削除したりできます。たとえば、正しいログインパスワードと引き換えにIDを配布するパスワードサーバーなどが考えられます。
ファイルシステムに関しては、適切なプログラムを単一ファイルまたはディレクトリ階層全体のトランスレータとして指定できます。変換されたファイル、または後者の場合は階層の下位にあるファイルへのアクセスはすべて、実際にはそのプログラムによって処理されます。たとえば、ファイルトランスレータは、Unix のシンボリックリンクのように、読み取りおよび書き込み操作を別のファイルにリダイレクトするだけで済みます。Unixマウントの効果は、ファイルシステムトランスレータを設定することによって実現されます (「settrans」コマンドを使用)。トランスレータは、ユーザーにサービスを提供するためにも使用できます。たとえば、ftpfsトランスレータを使用すると、ユーザーはリモート FTP サイトをディレクトリ内にカプセル化できます。その後、ls、cp、rmなどの標準ツールを使用して、リモート システム上のファイルを操作できます。さらに強力なトランスレータとしては、UnionFSなどがあります。UnionFS を使用すると、複数のディレクトリを 1 つに統合できます。そのため、統合されたディレクトリを一覧表示すると、すべてのディレクトリの内容が表示されます。
Debianのドキュメントによると、サーバーは24台(コアサーバー18台とファイルシステムサーバー6台)あり、以下のように命名されています。[ 36 ]
サーバーはPOSIX APIを共同で実装しており、各サーバーはインターフェースの一部を実装しています。例えば、各種ファイルシステムサーバーはそれぞれファイルシステム呼び出しを実装しています。ストレージサーバーは、Linuxのブロックレイヤーと同様に、ラッパーレイヤーとして機能します。LinuxのVFSに相当する機能は、libdiskfsライブラリとlibpagerライブラリによって実現されています。

HurdベースのGNUディストリビューションには以下が含まれます。
これは、1990 年当時、カーネルを設計する最もクリーンな方法だと人々が考えていた方法でもあります。しかし、このカーネルを動作させるまでに何年もかかり、今でもうまく動作せず、1990 年当時は誰も知らなかった根本的な問題がこの設計にあるようです。
GNU カーネルを Mach ベースで開発するという技術的な決定については、私が全責任を負います。この決定が開発の遅さの原因となったようです。Mach を使用すれば作業の大部分を省くことができ、作業が速くなると考えましたが、それは間違いでした。