一个叫Kakehashi的开源项目,最近让一件听起来不太可能的事情跑通了:在Linux ARM64服务器上,直接加载macOS专属的Mach-O二进制文件,跑通Darwin版本的7zzcurl,不用虚拟机,也不用JIT即时编译。安装命令只有几行,kh install 7zip之后,/usr/local/bin/7zz跑的就是苹果那份原生二进制。

这不是又一个“模拟器”故事。它的核心判断更像一道成本题:能不能用跑得慢几倍、但便宜得多的Linux ARM机时,替掉那些只为跑几个Mac命令行工具而占用的昂贵macOS云主机。

同架构翻译,工作量小了一个数量级

宿主是Linux aarch64,客户机是macOS ARM64,指令集完全一样,Kakehashi不需要做跨架构指令翻译——这是它和Rosetta 2(苹果的x86到ARM动态翻译,含JIT)最本质的区别。它要做的只是把BSD系统调用、动态链接、libSystem这层“胶水”翻译掉,项目内嵌了一份自由态的libSystem.B.dylib来撑起这层桥接。

同样做兼容层的还有Darling,靠内核模块加运行时复刻macOS用户态;README特意声明Kakehashi“不基于Darling”,且不允许引入任何专有Apple SDK或二进制。窄场景换来的是更小的工作量,但也划定了边界:git、codesign、GUI、真正的Security.framework,项目自己都写明还没做到,下一步才打算靠kh install xcode-tools啃git这块硬骨头。

翻译层不是免费的午餐

官方给出的自测数据,是判断这套方案值不值的第一手依据。在UTM虚拟机的Ubuntu aarch64环境下,对约8000个文件、240MiB的目录做7-Zip压缩,原生Linux 7zz耗时约22.5秒,同样任务在Kakehashi里跑Darwin版7zz要118秒,慢了约5.2倍。但换到文件数少、以压缩计算为主的负载,差距缩小到1.1到1.2倍

翻译层的代价:场景决定倍数 多文件压缩 5.2倍 约8000文件 / 240MiB 目录树,wall 22.5s → 118s 计算密集压缩 1.1–1.2倍 少文件、以LZMA压缩计算为主时,差距明显收窄

差距的来源不是“LZMA算错了”,而是路径遍历加每次系统调用的边界开销——文件越多、系统调用越密集,翻译层的税就收得越狠。

10颗星、零Issue,性能承诺还没被外人验证过

项目仓库目前有68次提交、10个star、1个fork,没有发布过任何GitHub Release,没有开放的Issue,也没有开放的Pull Request。这组信号和“7zz、curl已经跑通”的演示放在一起看,说明的是同一件事:现在能确认的只是作者自己跑出来的结果,性能数据和“能跑通”的结论,还没有经过外部环境的独立复现。

  • 提醒.网上没有找到专门针对Kakehashi这个项目名的社区讨论,凡是能查到的“兼容层框架覆盖不足”式批评,都是对Darling等同类项目的一般性怀疑,不能当作外界已经在批评Kakehashi本身。

这笔账在CI场景下怎么算

Kakehashi明确把自己定位在CI场景:不是要替代macOS桌面体验,而是让Linux ARM64跑通Darwin CLI工具,省下macOS云主机的钱。

GitHub Actions托管Runner的按分钟计费能说明这笔账的量级:Linux 2核arm64约$0.005一分钟,Linux 2核x64约$0.006,macOS 3到4核约$0.062,更大规格的macOS机型是$0.077到$0.102。macOS标准档位大约是Linux arm64的10到12倍价格。

场景Linux arm64 + khmacOS原生判断
多文件压缩(慢5.2倍)5×$0.005≈$0.0251×$0.062仍更便宜
计算密集压缩(慢1.1-1.2倍)更低更高优势更明显
慢几倍换来的账面便宜,前提是团队真的只需要几个CLI工具

如果CI流水线要跑的是xcodebuild、GUI测试、codesign签名,这套方案现在完全帮不上忙——这些恰恰是README自己列出的“尚未做出产品级承诺”的部分。它能顶替的,是那些只依赖几个Darwin命令行工具、又被迫为此占用macOS机时的DevOps流水线,接下来该盯的是这个项目会不会等到第一个Release、Issue区什么时候打开、git支持能不能真的落地。