在无法保证 ABI 兼容性的情况下,为特定 Linux 版本编译的应用程序如何能够在任何版本上运行?

在无法保证 ABI 兼容性的情况下,为特定 Linux 版本编译的应用程序如何能够在任何版本上运行?

假设有一个应用程序 - JDK,它是针对某些 Linux 版本(例如 4.18)编译的,可供下载。相同的应用程序如何可以在不同的 Linux 版本(例如 3.10)上运行?当 Linux 无法保证主要版本之间的 ABI 兼容性时。仅当为相同内核版本生成用户程序和内核的二进制文件时,才能保证用户程序和内核之间的 ABI 兼容性,如下图所示 - 在此输入图像描述

如果我上面关于 Linux 版本之间 ABI 不兼容的理解是正确的,那么为什么应用程序开发人员不提及生成二进制文件的 Linux 版本。就像硬件架构 - x86、x64、ARM 一样,他们在应用程序中提到了与之兼容的应用程序。

答案1

暴露给用户空间的内核 ABI应该是稳定的,也就是说,如果在给定内核上运行的程序在更高版本的内核上停止运行,则被视为严重错误,通常会被修复。如果该错误影响内核稳定系列中的任何版本,则其修复也将被向后移植。

当您看到对 RHEL 内核 ABI 的引用以及向后移植到旧内核的功能时,这超出了上游内核开发人员“承诺”的内核 ABI 稳定性。

对于应用程序来说,库比内核更受关注,并且不同发行版的支持也有所不同。参见示例RHEL 7 兼容性指南(请注意,它没有提到内核)。这是什么最低有效位最关心的是:它列出了应用程序可以依赖的库(在符合 LSB 的发行版上)及其 sonames。

相关内容