运行 Linux 在另一个 POSIX 内核上可执行

Run Linux exectuable on another POSIX kernel

理论上是否可以在第二个(例如达尔文的 XNU)上执行为一个 POSIX 内核(例如 Linux)构建的程序
为什么不可能?

如果是因为库 and/or 共享对象,也许可以只保留内核及其从一开始的依赖项 OS 并从一开始就使用其他所有内容?

所以你将只有来自第二个 OS 的内核和驱动程序,你可以 chroot 到某个地方并且你将能够 运行 第一个可以执行任何可执行文件?

或者我们可以制作某种动态包装器或静态转换器吗?

UPD:好的,我找到了 something similar,但只是粗略的建议,也许有人可以说得更清楚?

要使程序 运行 必须正确处理许多细节。库和共享对象是第一个问题,但即使您替换所有这些,系统调用接口也不同于 OS 和 OS。

我所说的系统调用接口不是指函数原型,而是指 user-space 任务如何在内核中调用系统调用。即使在 x86 上,也有不同的方法来实现转换到内核模式的陷阱,以及将系统调用参数详细信息传输到内核的不同方法。这方面的细节通常内置于 libraries/shared 对象中。

所以是的,理论上可以创建一个 wrapping/translation 图层,但这需要大量工作,而且很难获得所有细节。这也是近年来虚拟化如此流行的原因之一。

我碰巧有一篇关于这个主题的博文:http://codingtragedy.blogspot.com/2015/04/why-binaries-from-one-os-dont-work-on.html

简而言之1.二进制格式2.系统调用3.用户空间运行时,原则上都可以提供。 Real-world 示例包括 BSD 和 Illumos 运行 Linux 二进制文件。