翻译系统调用是否足以实现FreeBSD的Linux兼容层?

时间:2015-08-31 10:48:41

标签: linux freebsd

我很好奇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)。

实施中还有其他内容吗?

2 个答案:

答案 0 :(得分:3)

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

据我所知,策略的各个部分如下:

  • 提供一个系统调用层,模仿尽可能接近Linux系统调用结构和语义。在FreeBSD中,这一层被称为“linuxolator”
  • 安装一组vanilla预编译的Linux用户态库。这些库的工作原理是因为linuxolator提供了他们所依赖的正确的系统调用。
  • 安装/提供/安装Linux用户区域库和应用程序所期望的平台服务。例如:
    • 安装与Linux兼容的procfs - linprocfs。
  • 安装预编译的Linux应用程序并让它们依赖于这些Linux用户区库。

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

答案 1 :(得分:2)

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

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

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

如果您想在C中为两个操作系统编写应用程序,请尽量遵循POSIX。