@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 进行了优化。
macOS 容器机器
Apple 发布了 'container',一个开源工具,让 macOS 用户可以创建并运行 Linux 容器作为轻量级虚拟机,针对 Apple 芯片进行了优化,并支持兼容 OCI 的镜像。