![是什么允许 BSD 运行 Linux 二进制文件,但反之则不行?](https://linux22.com/image/60090/%E6%98%AF%E4%BB%80%E4%B9%88%E5%85%81%E8%AE%B8%20BSD%20%E8%BF%90%E8%A1%8C%20Linux%20%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BD%86%E5%8F%8D%E4%B9%8B%E5%88%99%E4%B8%8D%E8%A1%8C%EF%BC%9F.png)
是什么让 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 上运行(否则这些程序将无法运行),那么就不会创建这样的功能。⁴
脚注:
我在这里并没有将 OS X 算作 BSD,因为这是一个单独的二进制兼容性问题。 FreeBSD、OpenBSD 和 NetBSD 使用极低频在 x86 上,而 OS X 使用完全不同的可执行格式。动态联动也是截然不同在 OS X 上比在传统的 x86 BSD 上。
看这个问题有关 Linux ⇔ OS X 二进制兼容性故事的更多信息。
对比NDIS包装器,它允许 Linux 运行为 Windows XP 编写的纯二进制网卡驱动程序。需求被识别,需求被满足。哪里需要运行仅限 BSD 的二进制文件?