我想知道是否有人能够在 OSX 上使用 chroot 来运行其他操作系统 (ubuntu、centos)。我知道它们非常不同,但几乎所有我想用它做的事情都不会关心内核级别的任何事情,所以我希望有一种方法可以在不使用 VM 的情况下做到这一点。
根据我的谷歌搜索,我看到有人问了这个问题,但除了“尝试虚拟机”之外没有其他真正的答案。但我真的很想在没有虚拟机的情况下做到这一点。
答案1
不幸的是,大多数程序做关心内核,无论直接关心还是不关心。
不同的操作系统甚至在最常见的功能上也存在显著差异(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 程序的东西。
答案2
chroot 会更改根目录;它不会更改可执行文件格式、应用程序二进制接口等,所有这些都是 OS X 和 Linux 之间的不同之处。运行另一个操作系统所需的操作远不止 chroot;它需要虚拟机。