web-dev-qa-db-ja.com

異なるLinux / Unixカーネルは交換可能ですか?

Linuxカーネルを取得して、たとえばFreeBSDで使用したり、その逆(たとえば、DebianのFreeBSDカーネル)で使用したりできますか?普遍的な答えはありますか?制限は何ですか?障害物は何ですか?

14
user147505

いいえ、特にUnixスタイルのオペレーティングシステムの異なる実装のカーネルは交換可能ではありません。特に、それらはすべてシステムの残りの部分(ユーザースペース)への異なるインターフェイス、つまりシステムコール(ioctl仕様を含む)、彼らが使用する仮想ファイルシステム...

ソースレベルである程度互換性があるのは、カーネルとCライブラリの組み合わせ、またはカーネルとライブラリが公開するユーザーレベルのAPI(基本的には、POSIXで記述されているレイヤーのビューで、 isが実際にPOSIXであるかどうかを検討します。この例には、FreeBSDカーネルの上にDebianシステムを構築する Debian GNU/kFreeBSD と、Debianシステムを構築する Debian GNU/Hurd が含まれます。ハード。

これはカーネルの互換性のレベルではありませんが、再コンパイルを必要とせずにバイナリをさまざまなシステムで使用できるように、共通のアプリケーションバイナリインターフェイスを標準化する試みが行われてきました。 1つの例は Intel Binary Compatibility Standard です。これにより、それに準拠したバイナリを、iBCS 2レイヤーを備えた古いバージョンのLinuxを含む、それを実装する任意のUnixシステムで実行できます。私はこれを90年代後半にLinuxでWordPerfectを実行するために使用しました。

Linux内でFreeBSD chrootを構築する方法 も参照してください。

39
Stephen Kitt

一部のカーネルはバイナリ互換性があり、ユーザー空間プログラムをさまざまなABIと混在させることができます(たとえば、freebsdはLinuxバイナリである程度機能します)-ただし、コアバイナリ(たとえば、initプログラム、モジュールローダー、デバイスドライバーセットアップツール、Cライブラリ) 、ファイルシステムの設定に必要なツール...)実際には、カーネルレベルのインターフェースについて知る必要が多すぎて、外部カーネルでシステムを正常に起動できません。

また、ファイルシステムには互換性が必要です。また、バイナリ互換オプションはカーネルに「ハード」にコンパイルする必要があります-カーネルモジュールとして実装されたものはすべて、モジュールローダーを実行できないために失敗します。

前述のように、freebsdベースのdebianシステムのように再コンパイルする場合や、Linuxでnetbsd pkgsrcシステムを設定する場合(絶対に重要ではありませんが、サポートされており、可能です!).

4
rackandboneman