セルフホスティングとは、コンピューター プログラム、ツールチェーンまたはオペレーティング システムの一部を使用して、そのプログラムの新しいバージョンを作成することを指します。たとえば、独自のソース コードをコンパイルできるコンパイラです。自己ホスト型ソフトウェアは、パーソナル コンピュータや大規模なシステムで一般的です。
通常、自己ホストされるその他のプログラムには、カーネル、アセンブラ、シェルなどがあります。
システムが非常に新しく、そのシステム用にソフトウェアが作成されていない場合、そのソフトウェアは別のセルフホスト システムで開発され、新しいシステムが読み取れるコンピュータ メモリに配置されます。
新しいシステムが独自の開発をホストできるようになるまで、開発はこのように続けられます。
たとえば、Linux オペレーティング システムの開発は、当初 Minix オペレーティング システム上でホストされていました。
現在では、既存のシステムから始めずに新しいソフトウェア開発ツールを作成することは行われなくなりました。
多くのプログラミング言語は自己ホスト型であり、同じ言語で書かれたその言語用のコンパイラが利用可能です。新しいシステムの場合、新しい プログラミング言語の最初のコンパイラは別の言語 (まれに機械語) で作成する必要があります。セルフホスト言語には、 Lisp 、Forth、C、Pascal、 Modula-2 、Oberon、 Smalltalk 、OCaml、および FreeBASIC が含まれます。
Thompsonハッキングで実証されたように、自己ホスト型プログラミング ツールに対する盲目的な信頼は潜在的なセキュリティ リスクです。
歴史
最初のセルフホスト型コンパイラ (アセンブラを除く) は、1962 年にマサチューセッツ工科大学(MIT) の Hart と Levin によって Lisp 用に書かれました。 (リンク) 。 Lisp インタプリタは以前から存在していましたが、コンパイラは存在しなかったため、新しい方法を使用してコンパイラをコンパイルしました。コンパイラは、他のLisp プログラムと同様に、インタプリタ内で実行できます。したがって、インタプリタでコンパイラを実行するだけで、独自のソース コードを与えてコンパイルすることができます。
この手法は、コンパイル対象と同じ言語のインタプリタがすでに存在する場合にも使用できます。
これは、それ自体を入力としてプログラムを実行するという概念に直接由来しており、停止問題の決定不可能性など、理論コンピューターサイエンスのさまざまな証明でも使用されます。

