セルフホスティング
セルフホスティング(英: Self-hosting)は、ツール群やオペレーティングシステムの一部であるプログラムを使って、同じプログラムの新しいバージョンを作ることを指す。例えば、コンパイラでそのコンパイラ自身のソースコードをコンパイルすることなどを意味する。セルフホスティング・ソフトウェアはパーソナルコンピュータや大型のシステムでよく使われる。その他にセルフホスティングとなっている典型例としては、カーネル、アセンブラ、シェルなどがある。
全くソフトウェアが書かれていない新しいシステムの場合、ソフトウェアは別のセルフホスティングシステム上で開発され、ターゲットの新システムが読み取れる記憶装置に格納される。この形態の開発は、ターゲットシステムがある程度の信頼性を持って自身の開発に利用できるようになるまで続けられる。例えば、Linuxオペレーティングシステムの開発は、当初MINIXシステム上で行われた。新たなシステムで使うソフトウェアを、このような別のホストシステムを使わずに開発することは非常に珍しく、多くの場合不可能である。
プログラミング言語にも、セルフホスティング方式、すなわちコンパイラがその言語で書かれているものがある。新規のプログラミング言語の最初のコンパイラは、別の言語(場合によっては機械語)で書かれるか、ブートストラップ方式で開発される。セルフホスティング言語としては、LISP、Forth、Pascal、Delphi、C言語、Modula-2、Oberon、Smalltalk、OCaml、FreeBASIC、Haskell などがある。