【问题标题】:Is translating system call enough to implement Linux compatibility layer of FreeBSD?翻译系统调用是否足以实现 FreeBSD 的 Linux 兼容层?
【发布时间】:2015-08-31 22:31:28
【问题描述】:

我对 FreeBSD 的 Linux 兼容层机制很好奇,并在下面得到了一些信息。 https://en.wikipedia.org/wiki/FreeBSD#Compatibility_layers_with_other_operating_systems https://unix.stackexchange.com/questions/172038/what-allows-bsd-to-run-linux-binaries-but-not-vice-versa

两个操作系统的主要区别在于系统调用的不同。 而且,我知道 Linux 应用和 BSD 应用依赖于不同的标准动态库(例如 linux-gate.so.1)。

在实现中还有什么其他的吗?

【问题讨论】:

    标签: linux freebsd


    【解决方案1】:

    能够在 FreeBSD 中运行 Linux 应用程序的方法是多方面的。

    据我了解,策略的各个部分如下:

    • 提供一个系统调用层,尽可能地模仿 Linux 系统调用结构和语义。在 FreeBSD 中,这一层称为“linuxolator”
    • 安装一组 vanilla 预编译的 Linux 用户空间库。这些库之所以有效,是因为 linuxolator 提供了它们所依赖的正确系统调用。
    • 安装/提供/装载 Linux 用户空间库和应用程序期望的平台服务。例如:
      • 挂载与 Linux 兼容的 procfs - linprocfs。
    • 安装预编译的 Linux 应用并让它们依赖于这些 Linux 用户空间库。

    Linux 应用程序调用 Linux 库,这些库调用 Linuxolator 的 Linux 系统调用,后者调用 FreeBSD 系统调用。

    【讨论】:

      【解决方案2】:

      某些功能在 Linux 上可用(udevsystemdinotify(7)、...)但在 FreeBSD 上不可用(反之亦然)。

      一些系统调用有不同的标志。 FreeBSD mmap(2) 与 Linux mmap(2) 不完全相同...

      两者都是 Unix 系统,但魔鬼在细节中。

      如果您想用 C 编写适用于两种操作系统的应用程序,请尽量遵循 POSIX。

      【讨论】:

      • 请注意,“对于这两种操作系统,请努力遵循 POSIX”一直是一个很好的建议,因为 POSIX 已经存在并且“两种操作系统”都是 BSD 4.3 和 Sys V.3。
      猜你喜欢
      • 2014-03-29
      • 2012-08-27
      • 2016-05-25
      • 2010-10-04
      • 2012-09-19
      • 1970-01-01
      • 2018-05-02
      • 2022-01-16
      • 2015-05-24
      相关资源
      最近更新 更多