一般来说,在 FreeBSD 上构建的二进制文件可以在 Linux 操作系统上运行,尤其是 Ubuntu 吗?
答案1
您无法在 Linux 上运行为 FreeBSD 构建的二进制文件(请参阅这个问题)。它们基本上是不同的操作系统,仅共享一小部分 API(POSIX 兼容性)。
但是,如果你有源代码,你可以构建二进制文件对于 Linux在 FreeBSD 上;术语是“交叉编译”。例如,Windows 程序通常在 Linux 系统上编译。
答案2
理论上,你可以让一个操作系统运行为其他操作系统制作的二进制文件。实际上,这需要工作,而且这种情况并不常见,因为人们不想为它做这些工作。
有几件事可能会妨碍你:
- 不同的芯片
- 不同的系统调用
- 不同的库调用
- 文件/路径不同。
因此,假设您想在 Intel Linux 机器上运行 Intel FreeBSD 二进制文件。芯片相同,无需模拟。但系统调用接口不同。有人必须为 Linux 内核编写代码才能意识到,当您运行 FreeBSD 二进制文件时,要使用不同的系统调用表。由于它们都是 UNIX,因此这变得更容易一些,许多代码可以相同。
但随后您将需要库。理论上,这些库可以从 FreeBSD 发行版中复制,然后动态加载器将知道 FreeBSD 库的这个特殊位置。如果有任何配置文件路径或硬编码输出路径,也必须处理这些。
所以,这是可行的,但需要做很多工作。因此,这项工作通常只针对不流行(或太新)的操作系统进行,以便运行更流行或更成熟的操作系统的二进制文件。
最初,Microsoft NT 能够运行 OS/2 命令行应用程序,并且理论上(半吊子)具有运行 POSIX 应用程序的能力。随着 OS/2 变得无关紧要,这种能力已被放弃,人们喜欢 NT 就是因为 NT,而不是因为任何可以运行 POSIX 的东西。我没有足够的资格说运行 Windows 95 应用程序的 Windows 7 是否被视为从另一个操作系统运行,或者只是运行一些融入 Win7 的古老代码。
如果 MacOSX 为 Carbon(一组兼容库)编码,则可以运行 MacOS 7/8 二进制文件。这有助于迁移到 MacOSX。他们还需要 PowerPC 芯片的模拟。
由于 Linux 比 FreeBSD 更常见,因此实际上不需要很多人在 Linux 上模拟 FreeBSD。FreeBSD 上的应用程序在 Linux 上不可用的情况很少见。所以没有人做过这项工作。但是,FreeBSD 运行 Linux 二进制文件。由于 Linux 是一个移动目标,当 Linux 内核发生很大变化或需要新的库时,仿真需要更新。