@alswl: 你知道 Linux 内核有一个 1997 年就引入的特性,让 Apple Silicon Mac 能高效运行 x86 容器吗? 它叫 binfmt_misc,Linux 2.1.43 引入,距今快 30 年了。 原理极其简单: Linux…
摘要
文章介绍了Linux内核自1997年引入的binfmt_misc特性,它允许通过注册规则将二进制文件交给指定解释器执行,如今在Apple Silicon Mac上结合Rosetta实现高效运行x86容器,性能接近原生70-90%。
查看缓存全文
缓存时间: 2026/06/05 15:16
你知道 Linux 内核有一个 1997 年就引入的特性,让 Apple Silicon Mac 能高效运行 x86 容器吗?
它叫 binfmt_misc,Linux 2.1.43 引入,距今快 30 年了。
原理极其简单: Linux 内核在执行一个二进制文件时,会先读取文件头的 magic number。如果你提前在 /proc/sys/fs/binfmt_misc/ 注册了一条规则 —— “遇到这种 magic 的文件,交给某个解释器处理” —— 内核就会自动把执行权转交给那个解释器。和 #!/bin/bash 的 shebang 机制本质一样,只是匹配的是二进制文件头。
最早它是用来让 Linux 直接 “运行” Java class 文件和 Windows PE 可执行文件的。后来 QEMU 利用这个机制实现了用户态跨架构模拟 —— 在 ARM 的 Linux 上直接执行 x86 ELF,内核自动调用 qemu-x86_64 翻译。
然后 Apple 来了。在 Apple Silicon Mac 上用 Colima / Lima 启动一个 Linux VM(使用 macOS 的 Virtualization.framework),打开 rosetta: true 后,会发生这些事:
- macOS 通过 virtio-fs 把 Rosetta 翻译器二进制挂载进 Linux VM 的 /mnt/lima-rosetta/rosetta
- VM 内部用标准的 binfmt_misc 注册一条规则:遇到 x86_64 ELF magic (7f454c46…02003e00),交给 /mnt/lima-rosetta/rosetta 处理
- 从此,VM 里任何 x86_64 二进制的执行都会被内核自动转交给 Rosetta 翻译
对容器来说完全透明 —— docker run –platform linux/amd64 nginx,Docker 拉下来的是 x86 镜像,容器里的进程是 x86 ELF,Linux 内核通过 binfmt_misc 自动调用 Rosetta 翻译执行。容器自己完全不知道发生了什么。
性能对比:
- Rosetta 方案:接近原生 70-90% 的性能(JIT 翻译,指令级优化)
- QEMU 全虚拟化方案:仅约 10-30%(完整模拟 x86 CPU)
一个 1997 年为了跑 Java class 文件设计的内核特性,在 2024 年成了 Apple Silicon 跑 x86 容器的关键基础设施。有时候最持久的架构决策,就是那些足够简单、足够通用的抽象。
$ colima ssh $ cat /proc/sys/fs/binfmt_misc/rosetta enabled interpreter /mnt/lima-rosetta/rosetta flags: OCF magic 7f454c4602010100000000000000000002003e00
相似文章
@geekbb: 在 Apple Silicon 的 macOS 上实现 NTFS 读写,无需内核扩展、无需关闭 SIP。 这其实是运行了一个 libkrun 微型虚拟机(基于 anylinuxfs,内部跑 ntfs-3g)来完成真正的 NTFS 写入,再…
ntfsmac is an open-source tool that enables NTFS read/write on Apple Silicon macOS by using a libkrun microVM running ntfs-3g, avoiding kernel extensions and SIP modifications. It provides both CLI and a GUI menu-bar app.
@sitinme: 有一个挺有意思的开源项目,叫 Cider,专门给 Apple Silicon 芯片的 Mac 做本地 AI 推理加速。 很多人买了 Mac mini、MacBook Pro ,想在本地跑模型,但总会出现速度不够快、内存吃得猛的情况 其实 …
Cider 是一个开源项目,专为 Apple Silicon Mac 设计,通过充分利用 M 系列芯片的算力来加速本地 AI 推理,适配 MLX 生态,支持 Qwen、Llama 等模型,安装简单。
elfuse: 在macOS Apple Silicon上原生运行Arm64/x86-64 Linux ELF二进制文件
elfuse 是一个轻量级的进程级运行时,可在 macOS Apple Silicon 上原生运行 Linux ELF 二进制文件,无需 Docker 或完整虚拟机,使用 Hypervisor.framework 并可选择 Rosetta 进行 x86_64 转换。
@timsneath:我怀疑 WWDC 上宣布的我个人最喜欢的功能之一将是一匹黑马:容器机器,让你的 Mac 运行一个轻量级、持久的 Linux 环境,并自动挂载你的主目录和仓库:https://t.co/dOBdfOOVxC
Apple 已开源 'container' 工具,用于在 Apple 芯片的 Mac 上以轻量级虚拟机方式运行 Linux 容器,支持 OCI 镜像,并为 macOS 26 进行了优化。
健忘的 CPU(M4 上的 Linux)
一篇详细的技术文章,讲述如何在 M4 Mac mini 上启动主线 Linux,克服新引入且强制启用的 SPTM(安全页表监控器)——它破坏了现有的基于 m1n1 虚拟机管理程序的工作流程,并让 SoC 启动到足以通过串口控制台进行调试的程度。作者对 Asahi Linux 团队表示感谢,并记录了被锁定的 GXF/RVBAR 寄存器以及早期 Linux 启动的进展。