不同的Linux / Unix内核可以互换吗?


14

我可以使用Linux内核并将其与FreeBSD一起使用,反之亦然(例如,在Debian中为FreeBSD内核)吗?有普遍的答案吗?有什么限制?有什么障碍?


5
不,绝对不是。一个好的练习是尝试一下,看看它如何破裂。您甚至无法可靠地将Linux内核替换为更老的Linux内核。当然,替换userland工具是可行的(如果重新编译的话)。
库萨兰达


@Kusalananda关于替换从BSD到Linux的userland工具可能会很痛苦:有些BSD工具很难在非BSD系统上构建...多年来,我遇到了一些我想移植的工具,但事实并非如此:-/。
史蒂芬·基特

1
@StephenKitt反之亦然:-)特别是当软件对能够访问/proc或其他Linux特定功能做出假设时。
库萨兰达

您可以做的是获取x86_64(linux)内核,然后将其强制安装在32位i386发行版上(假定使用64位intel CPU并支持在其中编译的32位二进制文​​件)。这是众所周知的,但不是立即显而易见的……
RadovanGarabík,

Answers:


39

不,来自Unix风格操作系统的不同实现的内核是不可互换的,特别是因为它们都为系统的其余部分(用户空间)提供了不同的接口,即它们的系统调用(包括ioctl具体信息)以及所使用的各种虚拟文件系统。 ..

在源代码级别上,某种程度上可以互换的是内核和C库的组合,或者更确切地说,是内核和库公开的用户级API(实质上是POSIX描述的层上的视图,而没有考虑到它是否真正POSIX)。这样的例子包括Debian GNU / kFreeBSDDebian GNU / Hurd,后者在FreeBSD内核之上构建Debian系统,Debian GNU / Hurd在Hurd之上构建Debian系统。

这在内核互换性方面还不是很充分,但是已经尝试标准化通用应用程序二进制接口,以允许二进制文件可以在各种系统上使用而无需重新编译。一个示例是“英特尔二进制兼容性标准”,该标准允许符合它的二进制文件在实现该标准的任何Unix系统上运行,包括带有iBCS 2层的旧版Linux。在90年代后期,我曾用它在Linux上运行WordPerfect。

另请参见如何在Linux内部构建FreeBSD chroot


1
有人对保持内核和用户API的同步有多重要有很强的见解 :)
tonysdg '18

4
的确@tonysdg,相信我,对这一切都知道:-/。
史蒂芬·基特

@tonysdg我在您的链接上找不到一个页面。(除非这是我想念的笑话?)
mbrig

1
@mbrig:直到昨天,它才在这里-这里是一个存档版本:web.archive.org/web/20171102142621/http
//…

@StephenKitt:哎::(对不起!但是,即使在内核中都有代码开始也要赞誉!
tonysdg

4

一些内核具有二进制兼容性,允许您将用户空间程序与不同的ABI混合使用(例如freebsd可以在一定程度上与linux二进制文件一起使用)-但是,核心二进制文件(例如init程序,模块加载器,设备驱动程序设置工具,C库) ,实际上,设置文件系统所需的工具...)将有太多的知识需要了解内核级别的接口,才能成功启动具有外部内核的系统。

同样,文件系统将需要兼容。同样,二进制兼容性选项将需要“硬”编译到内核中-由于无法运行模块加载器,任何实现为内核模块的操作都会失败。

如前所述,如果您愿意重新编译,则用户环境通常具有一定的可移植性-例如基于freebsd的debian系统,或在Linux上设置netbsd pkgsrc系统(绝对不简单,但受支持并且可能!)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.