As She Is Spoke

Starnix 实现的 Linux UAPI 具有与 Linux 内核实现尽可能接近的语义。Linux UAPI 的历史悠久而传奇,其中既有许多出色的想法,也有一些不太理想的想法。为了成功运行未修改的 Linux 二进制文件,Starnix 保持不偏不倚的立场。它实现了 Linux UAPI 的实际功能,而不是试图强制执行理想化的设计。Starnix 按照 Linux UAPI 的规定实现了

这种方法可简化调试。当在 Starnix 下运行的 Linux 程序行为不正确时,原因可分为以下两类:

  • 程序依赖于 Linux 不支持的行为:如果程序在 Linux 内核上以相同的方式失败,则问题出在程序本身,而不是 Starnix。

  • Starnix 实现的 UAPI 不准确:如果程序在 Linux 内核上运行正常,但在 Starnix 上运行失败,那么如果更改 Starnix 以更准确地实现 UAPI,Starnix 将能够正确运行该程序。

新语义的风险

向 Linux 用户空间公开 Linux 内核中不存在的功能或行为违反了精确兼容性原则。引入特定于 Starnix 的设备、文件系统、系统调用或伪文件会带来分歧风险。

这种差异会造成兼容性冲突:一个应用可能依赖于标准 Linux 语义,而另一个应用则无意中依赖于特定于 Starnix 的行为。在这种情况下,使 Starnix 与 Linux 内核保持一致以修复第一个应用可能会导致第二个应用出现问题。

公开实现细节(例如 Starnix 如何使用底层 Fuchsia 原语来实现 Linux UAPI)是有风险的,因为这些细节通常必须更改才能提高语义准确性。例如,虽然目前 Linux 和 Fuchsia 概念可能存在一一对应的关系,但未来的发展可能需要更灵活的实现才能完全匹配 Linux 概念的细微差别。

例外情况和注意事项

这种一般方法存在一些限制。Starnix 会尽可能遵循 Linux UAPI,但功能必需性和安全性要求决定了它必须做出一些偏差。

  • Fuchsia 集成:Starnix 向 Linux 用户空间公开了 remotefs(一种 Fuchsia 特有的文件系统)。由于 fxfs 必须向系统公开,因此 Starnix 通过 remotefs 公开它,而不是假装 fxfsext4 或其他特定的 Linux 文件系统;伪装成其他真实的文件系统类型会导致严重的实现困难。Starnix 还公开了一些 Fuchsia 特有的设备,例如 magma 设备,这是实现图形性能所必需的。

  • 安全排除项:Starnix 避免实现 Linux UAPI 中极其危险的方面。例如,包含设备物理内存的 /dev/mem 未实现,因为它存在严重的安全隐患。

  • 功能演变:在某些情况下,功能最初被省略,但后来又添加了。例如,Starnix 最初并未实现 suid,但最终添加了该功能,以支持需要标准 Linux 内核语义的重要 Linux 程序。