いいえ、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 システムをセットアップする場合などです (まったく重要ではありませんが、サポートされており、可能です!)。