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