Linuxカーネルを使用して、たとえばFreeBSDで使用したり、その逆を行ったりすることはできますか(たとえば、DebianのFreeBSDカーネル)。普遍的な答えはありますか?制限は何ですか?障害物は何ですか?
承認された回答:
いいえ、Unixスタイルのオペレーティングシステムのさまざまな実装のカーネルは互換性がありません。特に、それらはすべて、システムの残りの部分(ユーザースペース)に対して異なるインターフェイスを提供するためです—システムコール(ioctl
を含む) 詳細)、使用するさまざまな仮想ファイルシステム…
ソースレベルである程度互換性があるのは、カーネルとCライブラリの組み合わせ、つまりカーネルとライブラリが公開するユーザーレベルのAPIです(基本的に、POSIXで記述されたレイヤーのビューはかどうかを検討する 実際にはPOSIX)。この例としては、FreeBSDカーネル上にDebianシステムを構築するDebian GNU / kFreeBSDや、Hurd上にDebianシステムを構築するDebian GNU/Hurdがあります。
これはカーネルの互換性のレベルではありませんが、一般的なアプリケーションのバイナリインターフェイスを標準化して、再コンパイルせずにさまざまなシステムでバイナリを使用できるようにする試みが行われています。一例として、Intel Binarycompatible Standardがあります。これにより、それに準拠するバイナリを、iBCS 2レイヤーを備えた古いバージョンのLinuxを含め、それを実装するすべてのUnixシステムで実行できます。私はこれを90年代後半にLinuxでWordPerfectを実行するために使用しました。