Linuxカーネルを使用して、たとえばFreeBSDで使用したり、その逆に使用したりできますか(DebianのFreeBSDカーネルなど)。普遍的な答えはありますか?制限は何ですか?障害物は何ですか?
/proc
他のLinux固有の機能にアクセスできることを前提とする場合。
Linuxカーネルを使用して、たとえばFreeBSDで使用したり、その逆に使用したりできますか(DebianのFreeBSDカーネルなど)。普遍的な答えはありますか?制限は何ですか?障害物は何ですか?
/proc
他のLinux固有の機能にアクセスできることを前提とする場合。
回答:
いいえ、Unixスタイルのオペレーティングシステムのさまざまな実装のカーネルは、特にシステムの残りの部分(ユーザースペース)-システムコール(ioctl
仕様を含む)、使用するさまざまな仮想ファイルシステムに対して異なるインターフェイスを提供するため、互換性がありません。 ..
ソースレベルである程度互換性があるのは、カーネルとCライブラリ、またはカーネルとライブラリが公開するユーザーレベルのAPIの組み合わせです(基本的に、POSIXによって記述されるレイヤーのビューは、それはかどうかを検討している)、実際にPOSIX。この例には、FreeBSDカーネルの上にDebianシステムを構築するDebian GNU / kFreeBSDや、Hurdの上にDebianシステムを構築するDebian GNU / Hurdが含まれます。
これはカーネルの互換性のレベルではありませんが、再コンパイルを必要とせずにさまざまなシステムでバイナリを使用できるように、一般的なアプリケーションバイナリインターフェイスを標準化する試みがありました。1つの例はIntel Binary Compatibility Standardで、これに準拠するバイナリは、iBCS 2レイヤーを備えた古いバージョンのLinuxを含む、それを実装するUnixシステム上で実行できます。90年代後半にこれを使用して、LinuxでWordPerfectを実行しました。
Linux内部でFreeBSD chrootをビルドする方法もご覧ください。
一部のカーネルにはバイナリ互換性があり、ユーザー空間プログラムと異なるABIを混在させることができます(たとえば、freebsdはある程度Linuxバイナリで動作します)-ただし、コアバイナリ(たとえば、initプログラム、モジュールローダー、デバイスドライバーセットアップツール、Cライブラリ) 、ファイルシステムのセットアップに必要なツール...)実際には、外部カーネルを使用してシステムを正常に起動するには、カーネルレベルのインターフェイスについて知る必要があります。
また、ファイルシステムには互換性が必要です。また、バイナリ互換オプションはカーネルに「ハード」にコンパイルする必要があります。カーネルモジュールとして実装されたものはすべて、モジュールローダーを実行できなかったために失敗します。
前述のように、ユーザー環境は、freebsdベースのdebianシステムのように、またはLinuxでnetbsd pkgsrcシステムをセットアップするなど、再コンパイルする意思がある場合、多少移植性が高い傾向があります(決して簡単ではありませんが、サポートされております!)。