如果 macOS 和 Linux 之间存在二进制不兼容,那么遵守 POSIX 有何意义?

如果 macOS 和 Linux 之间存在二进制不兼容,那么遵守 POSIX 有何意义?

POSIX开发它的目的是为了让我们能够与 Unix 变体实现软件兼容性(可移植性):

可移植操作系统接口 (POSIX) 是 IEEE 计算机协会指定的一系列标准,用于维护操作系统之间的兼容性。1POSIX 定义了系统级和用户级应用程序编程接口 (API),以及命令行 shell 和实用程序接口,以实现与 Unix 和其他操作系统变体的软件兼容性(可移植性)。1POSIX 也是 IEEE 的商标。1POSIX 旨在供应用程序和系统开发人员使用。2

macOS 和 Linux 都是符合 POSIX 标准。所以按理说,为 macOS 编写的应用程序应该在 Linux 上运行。

但根据这个问题,macOS 和 Linux 之间存在二进制不兼容性。根据所选的最佳答案,这是因为您需要链接适当的库,但遭到评论者的反对,称真正的问题是不兼容的系统调用。

那么如果 macOS 和 Linux 之间存在二进制不兼容,那么遵守 POSIX 有何意义呢?这使得 POSIX 毫无用处,不是吗?

答案1

关键在于您引用的这部分:

POSIX 定义了系统级和用户级应用程序编程接口 (API)

应用编程接口定义了在对应用程序进行编程时可以依赖哪些接口。这意味着你可以按照 POSIX 编写程序,并且你将能够建造它可以在任何符合 POSIX 标准的系统上使用(如果您只使用过 POSIX 功能)。

POSIX 不关心应用程序二进制接口,这在运行给定的二进制文件时很重要。

因此,您可以将源代码转换为仅使用 POSIX API 的程序,并在 macOS 和兼容 POSIX 的 Linux 系统上构建它,并运行生成的二进制文件。您无法获取 macOS 二进制文件并在 Linux 上运行它,至少在没有某些翻译程序(例如 Windows 程序的 Wine)的情况下不能。

最重要的是,许多程序使用的不仅仅是 POSIX API,因此您必须确保目标系统上也提供它们所需的所有其他内容(这就是库的用武之地)。

相关内容