返回资讯中心
外部精选
软件工程
#开发者实时流

Crate 推出 iOS 应用,可在 iPhone 和 iPad 上运行 Linux 虚拟机

来源标题:Crate: Run Linux VMs on iPhone and iPad

Crate 让完整 Linux 发行版直接在 iPhone 和 iPad 上本地运行,无需远程桌面或云虚拟机,离线可用且文件保存在设备本地。其 Rust 编写的 arm64 翻译引擎在 Mac 基准测试中耗时 24.5 秒,QEMU TCG 为 130.5 秒,并借助 virglrenderer、ANGLE 和 MoltenVK 实现 GPU 加速。支持带包管理器的标准 arm64 Linux,可安装浏览器、开发工具和 Claude Code 等应用。

Hacker News 最新nnx2026/11/15 · 今天27 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

Compact Runtime for Arm64 Translation and Emulation

完整的 Linux 发行版,包括桌面环境,在你的 iPhone 和 iPad 上以虚拟机方式运行,完全在设备本地完成。

iPhone Duo 横屏模式下的 Ubuntu 与 GNOME。

口袋里的一台真正的电脑。不是远程桌面,也不是云虚拟机:整个操作系统运行在 iPhone 上,可离线使用,文件也保存在本机。

真正的发行版。原版 arm64 Linux,自带包管理器,你在 Arm 笔记本或服务器上用的软件可以直接安装:浏览器、开发工具、Claude Code 这类编码 agent、CAD 应用。

为速度而生。我们从引擎开始就把 crate 做快。crate 引擎用 Rust 从零编写:一个 arm64 到 arm64 的翻译器,把大多数客户机指令原样复制进宿主代码,只重写涉及机器状态的部分。在 Mac 上,QEMU 的 TCG 需要 130.5 秒跑完的基准测试,crate 只需 24.5 秒;其余计时数据(包括 iPhone 上的)都在引擎的基准测试里。

GPU 加速。客户机的 OpenGL 通过 virglrenderer、ANGLE 和 MoltenVK 跑在 iPhone 的 GPU 上:桌面由硬件合成,3D 应用也在硬件上渲染。

为手机而设计。触摸即平板模式;键盘上方多出一排按键,提供 Esc、Ctrl、Super、Tab、功能键和方向键;桌面会随手机旋转或折叠而调整;iPhone Duo 有专属布局。

运行内容

Linux 优先。在 Install 标签页中安装,每个系统都有自己的账户:

即将推出:带 Hyprland 的 Omarchy(可以运行,仍有 bug 待修)、你自己的自定义 Linux 镜像,以及其他操作系统。

从目录安装 Ubuntu、Debian 和 Arch Linux ARM,每个都有独立的账户

安装时自选磁盘大小,内存上限可事后修改

GPU 加速桌面:客户机的 OpenGL 运行在 iPhone 的 GPU 上

触摸即平板,或使用硬件键盘,或使用带 Esc、Ctrl、Super、Tab、功能键和方向键按键排的屏幕键盘

iPad 上支持鼠标或触控板:滚轮滚动、右键和中键点击

外接显示器可作为虚拟机的屏幕,按显示器分辨率显示,iPhone 或 iPad 充当触控板(GNOME 可能需要手动设置分辨率;见 Known issues)

iPhone Duo 随折叠变化的专属布局

虚拟机的串口控制台,与桌面只隔一个标签页

通过 crate 内置的 StikJIT 或 StikDebug 启用 JIT

可分享用于 bug 报告的日志,崩溃后仍保留,并带内存追踪

安装

crate 需要 JIT,而 iOS 只向已附加调试器的应用开放 JIT,因此无法上架 App Store。每个版本提供未签名的 IPA,你用自己的 Apple 账户签名并从 Mac 安装;之后通过 crate 内置的 StikJIT 或 StikDebug 开启 JIT(见 JIT)。INSTALL.md 中有操作步骤,以及一段可粘贴到 Claude Code 的请求,让它替你完成。crate 在搭载 iOS 27.1 的 iPhone Duo 上开发。

在虚拟机中运行的 Claude Code 正在 Ubuntu 与 GNOME 环境下用 3D CAD 应用 SolidCraft 构建一把椅子。

带 GPU 加速的 Chrome:chrome://gpu 显示 canvas、合成、WebGL 和 WebGPU 均运行在 iPhone 的 GPU 上。

虚拟机自行设置分辨率:1280 × 800 比默认值能在屏幕上容纳更多内容。

Arch Linux ARM 与 KDE Plasma,应用菜单已打开。

外接显示器作为虚拟机的屏幕:Ubuntu 铺满显示器,iPhone Duo 变成它的触控板。

路线图

速度优先。每个虚拟机都运行在 crate 引擎上,因此引擎的速度就是整个应用的速度,这也是最需要帮助的地方:对引擎的贡献请提交到它的仓库。

一个在 crate 引擎上运行 Linux 虚拟机的 iOS 应用:JIT、安装虚拟机并启动到桌面。仍有少量 UI 占位实现(在代码中搜索 STUB、SAMPLE DATA 和 PLACEHOLDER)。

crate 在启动时(或调试器到达后)申请其代码区域:映射为可执行,由调试器在 brk #0x69 处授权(StikDebug 的 legacy.js 约定),然后重新映射为可写,并进行试运行。获取调试器有两种方式,在 Settings 中选择:

每次启动都会把 JIT 步骤记录到 Library/Caches/crate.log,配对消息记录到 Library/Caches/idevice.log。

crate 在此进程中运行虚拟机,使用 JIT 申请的代码区域。虚拟机屏幕在显示(virtio GPU,帧直接交给应用,触摸和按键作为 virtio 平板和键盘)与终端中的串口控制台(SwiftTerm,MIT)之间切换。在 iPhone 上,GPU 负责 3D:客户机的 OpenGL 通过 virglrenderer、ANGLE 和 MoltenVK 运行在 iPhone 的 GPU 上,三者均从上游源码构建(见 docs/PROVENANCE.md);在 Simulator 中,客户机以软件方式绘制。网络采用用户态模式,通过 libslirp(BSD-3-Clause)和 GLib(LGPL-2.1-or-later)实现,从源码构建为动态框架并嵌入应用。

镜像来自 arm64-desktop-images,其 GitHub workflow 负责构建并证明它们:Ubuntu 与 GNOME、Debian 与 KDE Plasma 或 Xfce、Arch Linux ARM 与 KDE Plasma 或 Xfce。每个版本都有一个 catalog.json,列出每个镜像的 kernel、initrd 和磁盘(xz 格式,分卷小于 2 GiB)及其 SHA-256 校验值、内核命令行和 cloud-init vendor-data。Install 读取最新的 catalog,下载镜像(期间 crate 必须保持打开),校验每个文件,通过 Apple 的 xz 解码器在分卷到达时解包磁盘(稀疏方式:空白空间不占空间),并将其扩展到 32 GB。账户来自 crate 在旁边写入的 seed 磁盘(seed.img,FAT,标签 CIDATA):cloud-init 的 NoCloud user-data,包含用户、密码的 SHA-512 crypt、主机名和时区,以及镜像的 vendor-data(其桌面的自动登录)。seed 以只读方式保持挂载,因此 cloud-init 只对虚拟机初始化一次。虚拟机的文件位于 Library/Application Support/VMs/<its ID>/。

虚拟机仍可手动放入 iPhone:用 devicectl device copy to ... --user mobile 把 vmlinuz、initrd.img 和 disk.img 复制到其文件夹中(不加此参数 crate 无法写入磁盘;切勿添加 --remove-existing-content,它会清空整个应用容器)。它使用 aTerm 的命令行启动。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →