ダウンロードできる一部のLinuxバージョン(4.18など)用にコンパイルされたJDKアプリケーションがあるとします。同じアプリケーションをさまざまなLinuxバージョン(3.10など)でどのように実行できますか? Linuxがメジャーバージョン間のABI互換性を保証できない場合。次の図に示すように、ユーザープログラムとカーネルのバイナリが同じカーネルバージョン用に作成されている場合にのみ、ユーザープログラムとカーネル間のABI互換性が保証されます。
上記のLinuxバージョン間のABIの非互換性について私が理解したことが正しいとしたら、アプリケーション開発者がバイナリが生成されるLinuxバージョンに言及しないのはなぜですか?ハードウェアアーキテクチャ(x86、x64、ARM)と同様に、アプリケーションと互換性のあるアプリケーションを指します。
答え1
ユーザー空間に公開されたカーネルABI安定的でなければならないつまり、特定のカーネルで実行されているプログラムが以降のカーネルで実行を停止すると、深刻なバグと見なされ、通常は修正されます。バグがカーネル安定シリーズのリリースに影響を与える場合、その修正もバックポートされます。
RHELカーネルABIへの参照と以前のカーネルにバックポートする機能を見ると、これはアップストリームカーネル開発者が「約束した」カーネルABIの信頼性を超えています。
アプリケーションの場合、ライブラリはカーネルよりも重要であり、サポートはディストリビューションによって異なります。例を見るRHEL 7互換ガイド(カーネルについては言及しません。)これは何ですか?最下位ビット最も興味深いのは、アプリケーションが依存できるライブラリ(LSB準拠のディストリビューション)とその名前を一覧表示することです。