什么允许 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 上运行,而这些程序本来不会运行,则不会创建这样的功能。?
脚注:
我在这里不将 OS X 视为 BSD,因为这是一个单独的二进制兼容性问题。FreeBSD、OpenBSD 和 NetBSD在 x86 上使用ELF,而 OS X 使用完全不同的可执行格式。OS X 上的动态链接也与传统 x86 BSD 上的动态链接大不相同。
有关Linux 的更多信息,请参阅此问题?OS X 二进制兼容性故事。
与某些种类的鲨鱼一样,停止前进的软件也会消失。当发生在软件上时,我们称这种现象为位腐(bit-rot)而不是窒息,但因果是相同的。
对比NDISwrapper,它允许 Linux 运行为 Windows XP 编写的纯二进制网卡驱动程序。需求被识别,需求被满足。哪里需要运行仅限 BSD 的二进制文件?