Linux

在沒有 ABI 兼容性保證的情況下,為特定 Linux 版本編譯的應用程序如何在任何版本上執行?

  • October 4, 2020

讓我們說,一個應用程序 - JDK,它是針對某些 linux 版本編譯的 - 比如 4.18,可供下載。同一個應用程序如何在不同的 linux 版本上執行——比如 3.10?當主要版本之間的 Linux 不保證 ABI 兼容性時。僅當為相同的核心版本生成二進製文件時,才能保證使用者程序和核心之間的 ABI 兼容性,如下圖所示 - 在此處輸入圖像描述

如果我對 linux 版本之間的 ABI 不兼容的上述理解是正確的,那麼為什麼應用程序開發人員不提及生成二進製文件的 linux 版本。就像硬體架構 - x86、x64、ARM 一樣,它們與應用程序一起提到,它與之兼容。

暴露給使用者空間的核心 ABI應該是穩定的,也就是說,如果在給定核心上工作的程序停止在以後的核心上工作,這被認為是一個嚴重的錯誤,通常會被修復。如果該錯誤影響了核心穩定係列中的任何版本,則其修復也將被向後移植。

當您看到對 RHEL 核心 ABI 的引用以及對舊核心的反向移植時,這超出了上游核心開發人員“承諾”的核心 ABI 穩定性。

For applications, libraries are a much greater concern than the kernel, and support varies across distributions. See for example the RHEL 7 compatibility guide (and note that it doesn’t mention the kernel). This is what the LSB is mostly concerned about: it lists libraries which applications can rely on (on LSB-compliant distributions), along with their sonames.

引用自:https://unix.stackexchange.com/questions/612864