是什么允许BSD运行Linux二进制文件,却不能运行Linux二进制文件?


42

是什么使BSD可以运行Linux(和其他类似Unix的)二进制文件,但是Linux(以及大多数情况下像其他Unix的二进制文件)却不能运行BSD二进制文件?


不知道,但答案可能与他们的许可证有关。我可以想象BSD与GPL不兼容,并且大多数Linux开发人员根本不会提出BSD的说法。

Answers:


55

市场力量。

专门针对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使用完全不同的可执行格式。与传统的x86 BSD相比,OS X上的动态链接也有很大不同

    有关Linux⇔OS X二进制兼容性的更多信息,请参见此问题

  2. FreeBSD ; OpenBSD的 ; NetBSD

  3. 某些种类的鲨鱼一样,停止前进的软件也会死亡。当我们在软件中遇到这种现象时,我们称其为“ 位旋转”而不是“窒息”,但是原因和结果是相同的。

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


3
Linux确实具有通过binfmt_misc模块执行非本机二进制文件的基础结构,该基础结构允许您注册任意二进制格式的处理程序。有些人以这种方式运行Mono应用程序,尽管我认为这很罕见。但是正如您所说,没有人有太多理由编写* BSD binfmt处理程序。
KutuluMike 2014年

这真的很有帮助。我只是在浏览FreeBSD手册(问问题之前),那是说BSD可以处理交叉* nix二进制文件,而Linux不能,但是没有解释它。这是有道理的,尽管老实说我期望更多的是技术原因,而不是市场因素是原因,但老实说,它们(技术原因和受欢迎程度)似乎比我紧密得多。
No Time

3
请注意,这不仅与BSD有关。您会在所有 Unices中看到完全相同的趋势:过去,Linux几乎可以运行任何Unix二进制文件:iBCS支持Solaris,386BSD,FreeBSD,NetBSD,BSDI / 386,SVR4(交互式,Unixware,USL,Dell等)。 ,SVR3通用,SCO,SCO OpenServer 5,Wyse V / 386,Xenix V / 386,Xenix 286等。如今,情况恰恰相反:所有现代Unices都支持运行Linux二进制文件。有两个例子表明此功能是如此重要,以至于供应商甚至将其冠以名字!(用于“ Linux”的IBM AIX 5L,用于“集成”的HP-UX 11i。)
JörgW Mittag 2014年

1
@JörgWMittagAIX 5L和HP-UX 11i均未真正运行Linux二进制文件,更不用说它们首先不支持x86体系结构。他们可能提供的是一个GNU开发环境,可以轻松地从源代码构建AIX和HP-UX二进制文件。
jlliagre 2015年
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.