我可以使用Linux内核并将其与FreeBSD一起使用,反之亦然(例如,在Debian中为FreeBSD内核)吗?有普遍的答案吗?有什么限制?有什么障碍?
/proc
或其他Linux特定功能做出假设时。
我可以使用Linux内核并将其与FreeBSD一起使用,反之亦然(例如,在Debian中为FreeBSD内核)吗?有普遍的答案吗?有什么限制?有什么障碍?
/proc
或其他Linux特定功能做出假设时。
Answers:
不,来自Unix风格操作系统的不同实现的内核是不可互换的,特别是因为它们都为系统的其余部分(用户空间)提供了不同的接口,即它们的系统调用(包括ioctl
具体信息)以及所使用的各种虚拟文件系统。 ..
在源代码级别上,某种程度上可以互换的是内核和C库的组合,或者更确切地说,是内核和库公开的用户级API(实质上是POSIX描述的层上的视图,而没有考虑到它是否是真正POSIX)。这样的例子包括Debian GNU / kFreeBSD和Debian GNU / Hurd,后者在FreeBSD内核之上构建Debian系统,Debian GNU / Hurd在Hurd之上构建Debian系统。
这在内核互换性方面还不是很充分,但是已经尝试标准化通用应用程序二进制接口,以允许二进制文件可以在各种系统上使用而无需重新编译。一个示例是“英特尔二进制兼容性标准”,该标准允许符合它的二进制文件在实现该标准的任何Unix系统上运行,包括带有iBCS 2层的旧版Linux。在90年代后期,我曾用它在Linux上运行WordPerfect。
一些内核具有二进制兼容性,允许您将用户空间程序与不同的ABI混合使用(例如freebsd可以在一定程度上与linux二进制文件一起使用)-但是,核心二进制文件(例如init程序,模块加载器,设备驱动程序设置工具,C库) ,实际上,设置文件系统所需的工具...)将有太多的知识需要了解内核级别的接口,才能成功启动具有外部内核的系统。
同样,文件系统将需要兼容。同样,二进制兼容性选项将需要“硬”编译到内核中-由于无法运行模块加载器,任何实现为内核模块的操作都会失败。
如前所述,如果您愿意重新编译,则用户环境通常具有一定的可移植性-例如基于freebsd的debian系统,或在Linux上设置netbsd pkgsrc系统(绝对不简单,但受支持并且可能!)。