在 Linux 上运行 FreeBSD 二进制文件

Bri*_*ian 4 linux freebsd ubuntu

一般而言,在 FreeBSD 上构建的二进制文件是否可以在 Linux 操作系统上运行,尤其是 Ubuntu?

use*_*686 9

您不能在 Linux 上运行为 FreeBSD 构建的二进制文件(请参阅此问题)。它们基本上是不同的操作系统,仅共享一小部分 API(POSIX 兼容性)。

但是,如果您有源代码,则可以在 FreeBSD 上为 Linux构建二进制文件;该术语是“交叉编译”。例如,Windows 程序通常在 Linux 系统上编译。


Ric*_*lka 9

理论上,您可以让操作系统运行为其他操作系统制作的二进制文件。在实践中,它需要工作,而且不会发生很多,因为人们不想为它做工作。

有一些事情可能会妨碍您:

  • 不同的筹码
  • 不同的系统调用
  • 不同的库调用
  • 文件/路径不同。

因此,假设您想在 Intel Linux 机器上运行 Intel FreeBSD 二进制文件。芯片是一样的,不需要仿真。但是系统调用接口不同。必须有人为 Linux 内核编写代码才能意识到,当您运行 FreeBSD 二进制文件时,要使用不同的系统调用表。由于它们都是 UNIX,因此这变得更容易一些,很多代码可以相同。

但是你需要这些库。这些理论上可以从 FreeBSD 发行版复制,然后动态加载器就会知道 FreeBSD 库的这个特殊位置。如果有任何配置文件路径,或硬编码的输出路径,这也必须处理。

所以,它是可行的,但它需要工作。很多工作。因此,这项工作通常只针对不受欢迎(或太新)的操作系统完成,以便为更流行或成熟的操作系统运行二进制文件。

最初,Microsoft NT 能够运行 OS/2 命令行应用程序,并且具有运行 POSIX 应用程序的一些理论上(半途而废)的能力。随着 OS/2 变得无关紧要,这种能力已被取消,人们喜欢 NT 而不是 NT,而不是任何可以运行 POSIX 的东西。我没有足够的资格说运行 Windows 95 应用程序的 Windows 7 是否被视为从另一个操作系统运行,或者只是运行一些融入 Win7 的古老代码。

Mac OSX 可以运行 MacOS 7/8 二进制文件,如果它们被编码为一种叫做 Carbon(一组兼容性库)的东西。这有助于迁移到 MacOSX。他们还需要对 PowerPC 芯片进行仿真。

由于 Linux 比 FreeBSD 更常见,因此确实不需要很多人在 Linux 上模拟 FreeBSD。FreeBSD 上的应用程序在 Linux 上不可用的情况很少见。所以没有人做过这项工作。但是,FreeBSD有能力运行 Linux 二进制文件。由于 Linux 是一个移动目标,当 Linux 内核发生很大变化时,需要更新仿真,或者需要新的库。