为什么大多数 Linux 发行版不兼容 POSIX?我在很多地方都看到了它们不符合的情况(例如Mostly POSIX-compliant),但没有真正的解释来支持这一点。
C 库和/或工具可以做些什么来解决这个问题(即不对内核本身进行修改)?需要做什么?
假设的副本是询问哪个 Linux 发行版是 POSIX 兼容的;这是在问为什么大多数 Linux 发行版不符合 POSIX 标准。我要求提供具体细节(即某些功能或命令不兼容),而不是特定发行版未(尝试)获得认证的原因。
@PhilipCouling 的这条评论(谢谢!)很好地解释了这一点:
合规性和认证是不同的主题。答案指向与(不)合规主题无关的(重新)认证成本。
POSIX 没有指定内核接口,因此 Linux 在很大程度上是无关紧要的。它确实指定了系统接口、各种工具和 C 标准的扩展,它们可以存在于任何内核之上。它不是 POSIX 兼容的,因为它没有被提及,或者它是 POSIX 兼容的,因为它没有被提及,由您选择。
有 UNIX® 认证的 Linux 发行版,因此使用 Linux 拥有完全符合 POSIX 的操作系统当然是可能的。华为的 EulerOS 是有的,如果你愿意,你可以购买。其余大多数人还没有付钱,因此无法访问测试套件来检查一致性。
他们是否会在实践中满足这一点尚不清楚,但有些人确实比其他人更努力。我怀疑某些 BSD 比大多数 Linux 发行版更接近,但这是一个猜测:例如,我知道
execlp("cd", "/", NULL)
在大多数 Linux 发行版上都失败了,但适用于许多 BSD 并且是 POSIX 所要求的。