当前位置: 首页 > web >正文

Rosetta 2介绍

1. 什么是 Rosetta 2?

Rosetta 2 是 Apple 提供的一个 动态二进制翻译器,作用是:

让你在 Apple Silicon(ARM 架构的 M1/M2/M3 芯片)上运行本来只能在 Intel(x86_64 架构)上运行的软件。

它背后做的事情类似于:

你会 ARM 语言,但来了个只说 x86 的外国人。
Rosetta 2 在你俩之间实时翻译,让你们能合作。

2. 什么是 QEMU?

QEMU 是一个强大的 系统级模拟器(emulator),可以:

  • 模拟 不同 CPU 架构(比如 ARM ↔ x86)

  • 模拟 设备和系统调用

  • 可以是“轻量的用户空间模拟”或“完整的系统级虚拟化”


问题产生的根源:Apple Silicon 的架构差异

Apple Silicon Mac(M1/M2/M3)Docker 镜像(大多数)
ARM64 架构x86_64 架构(amd64)

这意味着你运行的是:

在 ARM Mac 上运行一个 x86_64 的 Linux 容器!

这中间就有一层转换“鸿沟”——两个 CPU 架构完全不一样。


Docker 如何解决这件事?

Docker Desktop 为你做了「跨架构运行」的支持,用的是:

ARM Mac + Docker Desktop↳ LinuxKit 虚拟机(运行 Linux 内核)↳ 容器运行时遇到 x86_64 程序↳ 自动注入 QEMU(用于 x86 ↔ ARM 翻译)

Docker Desktop 默认会用 QEMU 做「syscall 层翻译」:x86 程序的系统调用(比如 fork、clone)被拦截后转成 ARM 的系统调用运行。

⚠️ 这种“只翻译 syscall”的方式有局限性:有些复杂场景(如 Chromium 多进程)跑不动。


开启 "Use Rosetta" 后发生了什么?

当你开启:

“Use Rosetta for x86/amd64 emulation on Apple Silicon”

Docker Desktop 就不再仅仅使用 QEMU 的 syscall 翻译了,而是:

使用 macOS 原生 Rosetta 2 做完整的用户空间仿真!

它让整个 x86_64 的容器:

  • 看上去像在一个真实的 x86_64 Linux 主机上运行;

  • 所有指令、库调用、fork、sandbox、线程行为都能模拟得更完整;

  • 对 Puppeteer 这种依赖底层 fork/zygote/sandbox 的程序来说,它能“原地复活”。


简单对比总结

模式默认 QEMU 翻译(不打开 Rosetta)开启 Rosetta 模拟
运行方式部分 syscall 模拟完整 x86_64 模拟
程序行为兼容性差(尤其是多进程、沙箱)高(像真实 x86)
Puppeteer Chromium 能否启动经常失败多数成功
性能一般略慢但稳定
是否推荐开发调试用 Puppeteer 容易崩溃 推荐

图示理解

你原来跑的是:ARM Mac└── Docker Desktop└── Linux (ARM64) with QEMU└── x86_64 binary  ← syscall 转换不全你开启 Rosetta 后:ARM Mac└── Rosetta + QEMU└── 模拟完整 x86_64 用户空间└── x86_64 binary  ← sandbox / fork 正常

总结一句话:

“强制用 Rosetta 对 amd64 镜像做完整仿真”,就是让你在 M1/M2 Mac 上运行 x86_64 Linux 程序时,不只是拦截系统调用,而是整套 CPU 指令都模拟成 x86_64,让程序(如 Chromium)“以为它真在一台 Intel 机器上”,从而解决 Puppeteer 多进程、沙箱启动失败的问题。

http://www.xdnf.cn/news/13871.html

相关文章:

  • 第三章支线七 ·路由边境 · 多页世界的穿梭之术
  • 【MicronTech】eMMC 部件编号解析
  • flutter 的lottie执行一次动画后关闭
  • Windows美化终端、安装wsl和docker
  • Python Day49
  • 一阶/二阶Nomoto模型(野本模型)为何“看不到”船速对回转角速度/角加速度的影响?
  • 智慧管廊数字化运维管理平台
  • 规则引擎rule-engine v1.0实现解释(一)-规则,执行,容器
  • Vue3中组件Ref打印Proxy(Object)与defineExpose的深度解析
  • navicat 有免费版了,navicat 官方免费版下载
  • vue2项目开发中遇到的小问题
  • Goland使用手册(1)
  • 【亲测有效】MybatisPlus中MetaObjectHandler自动填充字段失效
  • Tess4J:基于 Java 的 OCR 解决方案
  • php反序列化漏洞学习
  • 电脑PC端使用的备忘录记事软件推荐哪个
  • 【3】使用TRAE AI在已有框架中新增页面并实现切换的痛苦经历
  • boa 找不到动态库的解决办法:
  • 【零基础勇闯嵌入式岗】从单片机低功耗中获得的启发
  • 正则表达式入门
  • 【AIGC】Qwen3-Embedding:Embedding与Rerank模型新标杆
  • 【狂飙AGI】第2课:大模型方向市场分析
  • # Flask:Python的轻量级Web框架入门之旅(超级实用!)
  • 测试过程中有哪些风险?
  • KU115LPE-V10型FPGA加速卡
  • Linux操作系统之文件系统下
  • 友思特方案 | 友思特车载双目相机技术赋能农业:Monarch 智能拖拉机解决方案
  • linux基础day01
  • [25-cv-06422]David律所代理Dreams USA玩具手办商标维权
  • Java日期格式化