不幸的是,大多数程序确实关心内核,无论是直接的还是不关心的。
不同的操作系统甚至在最常见的功能(epoll vs inotify vs kqueue,clone vs vfork vs rfork ...)上也有显着差异。
即使程序坚持使用与用户空间相同的最小功能(例如 stdio、基本文件访问),它(或者更确切地说,libc)仍然需要知道如何在内核中调用这些函数,这在 Linux 之间是完全不同的(普通的旧系统调用)和 OS X(系统调用和 Mach IPC 的混合)。
并且假设您可以首先让内核开始执行程序——OS X 内核不理解 ELF 格式,只能理解 Mach-O(以及各种遗留的 Mac OS 内容)。
存在各种模拟器——例如,FreeBSD 有 Linux 模拟,Wine 在 Unix 上运行 Windows 程序,似乎有一个适用于 Linux的OS X 模拟器——但我找不到任何可以在 OS X 上运行 Linux 程序的模拟器。
这里描述了如何在 FreeBSD 上模拟基本的 Linux 功能。
chroot 改变根目录;它不会改变可执行文件格式、应用程序二进制接口等,所有这些在 OS X 和 linux 之间都是不同的。运行另一个操作系统需要的不仅仅是 chroot;它需要一个虚拟机。