Linux 上跑 macOS 程序,Darling 怎么走
如果你的日常主力是 Linux,偶尔又碰到只有 macOS 构建的工具链、某个 .pkg,或者想验证「这坨 Darwin 二进制在 Linux 上能不能先活起来」。开虚拟机能解决,就是再装一套系统、再分一块盘、再等它开机。
Darling[1] 的目标更直接:在 Linux 上提供一套 Darwin / macOS 运行时,尽量不靠虚拟机。它有 Mach-O 加载器,还有用户态的 darlingserver,在 Linux 之上实现 Mach IPC、POSIX 和 Darwin 系统调用接口;
上层再补 Foundation、AppKit(基于 Cocotron)、CoreAudio、CoreFoundation 这类框架。底层不少组件来自 Apple 开源的 XNU、libSystem、Security;
更高层的框架仍在重写。命令行工具已经能用不少,GUI 还在推进,Metal 这边有一条经 Vulkan 翻译的初步后端。
最近 HN 上有人秀了一个偏 Linux ARM、专攻用户态跑 macOS CLI 的实验项目,评论区第一反应往往是:你知道 Darling 吗?两边目标有重叠,路径不一样。
Darling 更像「Wine 之于 Windows」那种整层运行时;新项目更轻、更聚焦 CLI。
作者也澄清过:Darling 同样跑在用户态,并不是非要改内核才能动。社区里还有人挂着 Darling 的 ARM64 支持 PR,说明这条路并没有停。
用法上,它有类似 Wine 的前缀概念,叫 DPREFIX。默认落在 ~/.darling,第一次用会自动建好,里面是一套偏 macOS 的目录树,软件装进去相对隔离。
前缀靠 overlayfs,所以别放在 NFS、eCryptfs 这类不友好的文件系统上;家目录整盘加密时,默认路径也可能踩坑,换个目录再导出环境变量即可。
装好之后,最小的确认是:
darling shell echo Hello world
这句话能打出来,说明系统调用模拟和运行时库这条链路通了。进 darling shell 之后,还可以用自带的 installer 装 .pkg(.mpkg 还不支持),用 hdiutil 挂 DMG。
官方示例里甚至会挂上旧版 Xcode 的 DMG,拷进 /Applications,设好 SDKROOT,用里面的 clang 编一个 Hello World。
注意:Xcode 图形界面本身还跑不起来,能用的是工具链和 SDK 那一层;现在的 Xcode 多半是 .xip,可以用 unxip 解开。
HN 评论里也有人把 Wine / Proton 拿来对照。游戏把兼容层养得很肥,是因为玩家愿意砸时间;生产力软件接触面大、版本又勤,Excel、After Effects 那种「双击就能开」仍然很难。
macOS 专属软件的用户群也更窄,动量不一定跟得上游戏。这不是泼冷水,而是把预期摆正:Darling 今天更适合折腾 CLI、装包、跑工具链、验证想法,而不是指望把整套创意套件搬过来。
Apple 的 ABI 表面也大,系统一两年一变,兼容层本来就要跟着追。
即便如此,这类项目还是让人高兴。你不用先买一台 Mac,也能在 Linux 上靠近 Darwin 的用户态;
想交叉编译 macOS 目标时,社区还会提到 osxcross[2] 这类工具,和「在本机直接跑 macOS 二进制」是互补关系。部分发行版有官方包,文档里也列了社区包,社区包需自担风险。完整构建步骤看 Darling Docs[3]。
若要试,先装官方包或按文档编一版,跑通 darling shell echo Hello world,再考虑往前缀里丢一个不重要的 .pkg。别一上来就冲最新 Xcode GUI。
参考资料
[1] Darling: https://github.com/darlinghq/darling
[2] osxcross: https://github.com/tpoechtrager/osxcross
[3] Darling Docs: https://docs.darlinghq.org/build-instructions.html