是什么让 BSD 可以运行 Linux 二进制文件,反之则不行?

No *_*ime 43 bsd

什么允许 BSD 运行 Linux(和其他类 Unix)二进制文件,但 Linux(和其他大多数类 Unix)不能运行 BSD 二进制文件?

War*_*ung 57

市场力量。

专门针对 Linux 的程序比针对 *BSD 的程序要多得多。许多软件源代码具有足够的可移植性,可以在两者上进行编译,但是许多提供 Linux 二进制文件的软件生产商并不费心为 BSD 这样做,因为它们的市场份额比 Linux 小。¹

如果某个软件只能以二进制形式用于不同的操作系统,则 ABI 仿真是使其运行的一种方式,这正是 BSD 所做的。²

曾几何时,当 x86 Unix 在 Linux 上占据市场多数时,iBCS功能被添加到 Linux 中,以允许它运行为 SCO Unix 等构建的二进制文件。随着 Linux 市场份额的增加,人们对该功能的兴趣下降,因此在 Linux 2.3 开发系列期间,它被允许年久失修。³ SCO 的诉讼帮助将该功能从 Linux 中推出,但我认为这是市场流失的次要产生特征的力量。

没有技术原因为什么 Linux 有一天无法获得类似 iBCS 的功能来运行 BSD 二进制文件,但除非 BSD 和 Linux 的市场地位出于某种原因切换,否则这是不可能的。

今天,几乎没有人要求这样的事情。你知道有多少只用于 BSD 的二进制程序,它们不是为 Linux 构建的?肯定有一些,但我猜其中大部分是用于嵌入式 BSD,例如Junos。如果不允许一组重要的程序在 Linux 上运行,而这些程序本来不会运行,则不会创建这样的功能。?


脚注:

  1. 我在这里不将 OS X 视为 BSD,因为这是一个单独的二进制兼容性问题。FreeBSD、OpenBSD 和 NetBSD在 x86 上使用ELF,而 OS X 使用完全不同的可执行格式。OS X 上的动态链接也与传统 x86 BSD 上的动态链接大不相同

    有关Linux 的更多信息,请参阅此问题?OS X 二进制兼容性故事。

  2. FreeBSD ; 开放式BSDNetBSD

  3. 某些种类的鲨鱼一样,停止前进的软件也会消失。当发生在软件上时,我们称这种现象为位腐(bit-rot)而不是窒息,但因果是相同的。

  4. 对比NDISwrapper,它允许 Linux 运行为 Windows XP 编写的纯二进制网卡驱动程序。需求被识别,需求被满足。哪里需要运行仅限 BSD 的二进制文件?

  • Linux 确实具有通过`binfmt_misc` 模块执行非本地二进制文件的基础设施,该模块允许您注册任意二进制格式处理程序。有些人以这种方式运行 Mono 应用程序,但我认为这种情况很少见。但是正如您所说,没有人有太多理由编写 *BSD binfmt 处理程序。 (4认同)
  • 请注意,这不仅仅是关于 BSD。你在 *all* Unices 上看到了完全相同的趋势:在过去,Linux 几乎可以运行任何 Unix 二进制文件:iBCS 支持的 Solaris、386BSD、FreeBSD、NetBSD、BSDI/386、SVR4(Interactive、Unixware、USL、Dell 等.), SVR3 generic, SCO, SCO OpenServer 5, Wyse V/386, Xenix V/386, Xenix 286 可能还有其他一些。如今,情况正好相反:所有现代 Unices 都支持运行 Linux 二进制文件。有两个例子,这个功能被认为*如此*重要,供应商甚至把它放在名字中!(IBM AIX 5L 用于“Linux”,HP-UX 11i 用于“集成”。) (4认同)