为什么操作系统需要明确支持 musl?

为什么操作系统需要明确支持 musl?

内核有基于中断和幻数的 API。这个API太底层了,对程序员来说不友好,所以libcs​​就被发明了。它们公开了方便的函数,可以直接调用内核 API。

事实1:Linux 内核 API 非常稳定,因此静态链接到旧 musl 的应用程序可以预期旧内核 API 行为仍然有效。

事实2:将 musl 静态链接到应用程序中,使整个应用程序直接调用内核 API。

事实 3:使用静态链接 musl 编译的应用程序将仅使用裸内核 API 在当前和未来版本的 Linux 上运行。

那么为什么有些发行版有明确的 musl 支持呢?拥有 Linux 兼容的内核 API 还不够吗?

我的一些“事实”一定是无效的,因为我无法回答我自己的问题。

答案1

你的三个事实足够准确,至少可以理解 C 库(在高层次上)需要什么。

我认为无效的是你对“明确的musl支持”的理解。有三种类型的分布从musl的角度来看:

  • 使用 musl 作为 C 库构建全部或大部分软件的发行版,例如 Alpine;通常这样做是为了减少安装大小(因为 musl 比 GNU C 库小得多);
  • 没有任何的发行版内置支持穆斯勒;
  • 为用户提供 musl 作为服务但不依赖它的发行版。

与任何其他二进制文件一样,您可以在任何 Linux 发行版上使用依赖于 musl 的二进制文件,只要您还提供所需的库。如果它是静态链接的,则无需提供库。对发行版本身没有具体要求。

您可能想知道上面的第三种类型。在不依赖它的发行版中提供 musl 是为了让想要使用 musl 构建二进制文件的用户变得更简单:这些发行版提供 musl 库(通常是静态和动态)、头文件和编译器支持所需的使用 musl 构建二进制文件。这意味着用户可以开始使用 musl 构建二进制文件,而无需自己安装 musl 并配置编译器。

一般来说,某些发行版支持给定功能,而其他发行版不支持这一事实并不意味着后者不支持该功能;这意味着最终用户需要完成所涉及的工作。

相关内容