是什么允许 BSD 运行 Linux 二进制文件,但反之则不行?

是什么允许 BSD 运行 Linux 二进制文件,但反之则不行?

是什么让 BSD 可以运行 Linux(和其他类 Unix)二进制文件,但 Linux(和大部分其他类 Unix)却不能运行 BSD 二进制文件?

答案1

市场力量。

专门针对 Linux 的程序比针对 *BSD 的程序多得多。很多软件源代码具有足够的可移植性,可以在两者上进行编译,但是许多提供 Linux 二进制文件的软件生产商懒得为 BSD 这样做,因为他们有总体而言,市场份额比 Linux 更小。^

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

曾几何时,当 x86 Unix 相对于 Linux 占据市场多数时,iBCSLinux 中添加了此功能,以允许其运行为 SCO Unix 等构建的二进制文件。随着 Linux 市场份额的增加,人们对这个功能的兴趣下降了,以至于它被允许年久失修。Linux 2.3 开发系列期间.³ 的上合组织诉讼帮助将这一功能引入 Linux,但我相信,与诞生该功能的市场力量的丧失相比,这是次要的。

没有技术原因说明 Linux 有一天无法获得类似 iBCS 的功能来运行 BSD 二进制文件,但这不太可能,除非 BSD 和 Linux 的市场地位因某种原因发生转变。

如今,这样的事情已经很少有人呼吁了。您知道有多少 BSD 的纯二进制程序,但它们并不是为 Linux 构建的?肯定有一些,但我猜大多数都是针对嵌入式 BSD 的,例如朱诺斯。如果不允许一组重要的程序在 Linux 上运行(否则这些程序将无法运行),那么就不会创建这样的功能。⁴


脚注:

  1. 我在这里并没有将 OS X 算作 BSD,因为这是一个单独的二进制兼容性问题。 FreeBSD、OpenBSD 和 NetBSD 使用极低频在 x86 上,而 OS X 使用完全不同的可执行格式。动态联动也是截然不同在 OS X 上比在传统的 x86 BSD 上。

    这个问题有关 Linux ⇔ OS X 二进制兼容性故事的更多信息。

  2. 自由BSD;开放BSD;网络BSD

  3. 某些种类的鲨鱼,停止前进的软件就会死亡。我们称这种现象为位腐烂而不是软件发生窒息,但因果是一样的。

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

相关内容