第 30.1 节 Linux 兼容层实现

注意:一个常见误解就是把 FreeBSD 的 Linux 兼容层当做虚拟机,认为这样做会降低软件的运行效率。实际情况是不仅不会慢,而且有些软件的运行速度还会比在 Linux 中更快,运行效率更高。因为他不是模拟器,也不是转译,而是 Linux ABI 实现。

https://cgit.freebsd.org/src/tree/sys/compat/linux/linux_file.copen in new window

从这里不难看出。做的事情只有一个:识别 Linux 系统调用,然后找到对应的 FreeBSD 系统调用实现。把原 Linux syscall 请求劫持到 FreeBSD syscall 的入口上面去。

题外话——使用 Linux 兼容层为什么不是苦难哲学?

总有人的思想认识不到位,还是很迂腐,认为开机就 kldload linux64kldload linux 是一种可笑的行为,殊不知荀子曾曰“君子生非异也,善假于物也”,使用 Linux 兼容层即是如此。没有什么荒唐可笑的地方,你们怎么不去嘲笑 Linux 上用 Wine/Crossover 的人,怎么不去嘲笑 Windows 上的 Linux 兼容层和 Android 兼容层?我看你们一个个用的比谁都欢。这是一种缺乏 BSD 自信,欠缺 BSD 自觉的表现,更是一种典型的自我双标行为。

在 FreeBSD 上使用 Linux 的兼容层目的无非有二:①扩展软件量;②避免 Linux 的苦难哲学。可谓是一举多得。