理论上是否可以在第二个(例如达尔文的 XNU)上执行为一个 POSIX 内核(例如 Linux)构建的,
为什么它不可能?
如果是因为库和/或共享对象,也许可以只留下内核,它是整个第二个操作系统的依赖项,然后从第一个开始使用其他所有东西?
所以你将只有来自第二个操作系统的内核和驱动程序,你可以 chroot 到某个地方,你将能够首先运行任何可执行文件?
或者我们可以制作某种动态包装器或静态翻译器吗?
UPD:好的,我发现了类似的东西,但只是粗略的建议,也许有人可以说得更清楚些?
为了让程序运行,有很多细节必须正确。库和共享对象是第一个问题,但即使您替换所有这些,系统调用接口也会因操作系统而异。
系统调用接口不是指函数原型,而是指用户空间任务如何调用内核中的系统调用。即使在 x86 上,也有不同的方法来实现转换到内核模式的陷阱,以及将系统调用参数详细信息传输到内核的不同方法。这方面的细节通常内置在库/共享对象中。
所以是的,理论上可以创建一个包装/翻译层,但这是很多工作,而且很难让所有细节都正确。这也是虚拟化近年来变得如此流行的原因之一。
我碰巧有一篇关于这个主题的博文:http: //codingtragedy.blogspot.com/2015/04/why-binaries-from-one-os-dont-work-on.html
总之1.二进制格式2.系统调用3.用户空间运行时,原则上都可以提供。实际示例包括运行 Linux 二进制文件的 BSD 和 Illumos。