Multiboot仕様は、ブートローダーがx86オペレーティングシステムカーネルをロードする方法を記述したオープン標準です。[ 1 ] [ 2 ] この仕様により、準拠するブートローダーの実装であれば、準拠するオペレーティングシステムカーネルをブートできます。そのため、オペレーティングシステム固有のブートローダーを必要とせずに、異なるオペレーティングシステムとブートローダーが連携して相互運用できます。結果として、マルチブートとも呼ばれる、1台のコンピュータ上での異なるオペレーティングシステムの共存も容易になります。
この仕様は元々1995年に作成され、フリーソフトウェア財団によって開発されました。GNU Hurd、VMware ESXi、Xen、およびL4マイクロカーネルはすべて、この方法を使用して起動する必要があります。GNU GRUBは、GNUオペレーティングシステムおよびその他のオペレーティングシステムで使用されるリファレンス実装です。[ 3 ] 2019年7月現在 マルチブート仕様の最新バージョンは、2009年に定義された0.6.96です。[ 2 ] UEFIをサポートする互換性のない第2版であるマルチブート2仕様が後に導入されました。2019年4月現在 Multiboot2の最新バージョンは2.0で、2016年に定義されました。[ 4 ]
Multibootではヘッダーは構造体として定義され、イメージファイル全体に存在する必要がありますが、Multiboot2ではフィールドまたはフィールドのグループに型タグがあり、これによりMultiboot2ヘッダーから省略することができます。
OSイメージファイル内では、ヘッダーはMultibootの場合は最初の8192(2 13)バイト、Multiboot2の場合は32768(2 15)バイトにある必要があります。ローダーはマジックナンバーを検索してヘッダーを見つけます。これはMultiboot [ 5 ]とMultiboot2の場合0x1BADB002で("1 bad boot")です。0xE85250D6
ヘッダーでは、entry_addr制御がOSに渡されるコードを指します。これにより、さまざまな実行可能ファイル形式が可能になります(実行可能ファイル形式の比較を参照)。OSカーネルがELFファイル(実行可能およびリンク可能形式)である場合(Linuxカーネルの場合はそうである)、Multiboot2ではこれを省略できます。ELF形式はオープンソースの世界では非常に一般的であり、e_entryエントリポイントを含む独自のフィールド()があります。
OSのエントリポイントにジャンプする前に、ブートローダーは、システムからどのように離脱したかをOSに伝えるためのブート情報構造を提供する必要があります。マルチブートの場合、これは構造体であり、マルチブート2の場合、各フィールド(グループ)にはタイプタグとサイズがあります。