近二十年里,ReactOS 一直围绕 x86 构建——这很自然,毕竟 Windows 本身就是 x86 生态的产物。但硬件格局正在变化:ARM64 服务器、ARM 笔记本、甚至 Windows 本身都有了 ARM 版本。ReactOS 近期宣布实验性支持 ARM64 架构,意味着这个开源 Windows 兼容项目不再只盯着传统 PC,而是试图在更广泛的硬件上复现 Windows 的二进制兼容性。
从 x86 到 ARM64:为什么这一步很难
ReactOS 的核心承诺是:Windows 程序和驱动可以直接运行,无需修改。这在 x86 上已经走了很长的路——内核、Win32 子系统、驱动框架都在模仿 NT 内核的行为。但搬到 ARM64 时,问题不只是换一个编译目标:
- 指令集差异:x86 和 ARM64 的调用约定、字节序、对齐规则完全不同,内核底层的手写汇编和内联函数需要逐个重写。
- PE/COFF 格式适配:Windows ARM64 使用的是 AArch64 变体的 PE 二进制,ReactOS 的加载器和运行时必须正确处理这些格式。
- 驱动兼容性:Windows ARM64 驱动和 x86 驱动不是同一套二进制,ReactOS 需要同时兼容两种驱动模型。
- 硬件抽象层(HAL):ARM64 平台的中断控制器、定时器、I/O 映射方式与 x86 的 PIC/APIC 模型差异巨大,HAL 必须重新实现。
目前这个支持标记为"实验性",意味着上述问题只解决了让系统启动和基本运行的部分,离日常可用还有距离。
ReactOS 的 ARM64 现状能做什么
根据项目进展,ARM64 版本已经能够:
- 启动到桌面环境(基本 GUI 可用)
- 运行部分 Win32 用户态程序
- 使用简化的内核和 HAL
但尚不能:
- 运行大多数 Windows x86 程序(WoW64 仿真层未完成)
- 加载第三方 Windows ARM64 驱动
- 提供稳定的日常使用体验
这和 ReactOS 在 x86 上早期的状态类似——先让系统跑起来,再逐步补齐兼容性。
实际动手:用 QEMU 跑一个 ReactOS ARM64 测试环境
如果你想亲眼看看 ReactOS 在 ARM64 上长什么样,最快的方式是用 QEMU 模拟。以下步骤基于 ReactOS 官方构建指南和 QEMU ARM64 虚拟化配置,假设你在 Linux 或 macOS 上操作。
第一步:获取 ARM64 构建镜像
ReactOS 的 ARM64 镶像目前需要自行编译,官方尚未提供稳定发布版。先拉取源码:
# 克隆 ReactOS 源码
git clone https://github.com/reactos/reactos.git
cd reactos
# 切到最新的 ARM64 支持分支(具体分支名以仓库为准)
git checkout master
第二步:配置 ARM64 交叉编译环境
ReactOS 使用 RosBE(ReactOS Build Environment)构建。在 x86_64 主机上交叉编译 ARM64:
# 安装依赖(Ubuntu/Debian 示例)
sudo apt update
sudo apt install build-essential bison flex cmake ninja-build
# 配置 ARM64 构建目录
mkdir build-arm64
cd build-arm64
# 使用 CMake 配置 ARM64 目标
cmake -G Ninja -DARCH=arm64 ../reactos
如果 CMake 报错缺少交叉编译工具链,需要安装 gcc-aarch64-linux-gnu:
sudo apt install gcc-aarch64-linux-gnu
第三步:编译并生成镜像
# 在 build-arm64 目录中执行构建
ninja bootcd
# 构建完成后,输出镜像通常在:
# output/arm64/bootcd.iso 或类似路径
ls -lh output/arm64/
注意:ARM64 构建可能耗时较长,且部分模块编译会失败——这是实验性支持阶段的常态。遇到编译错误时,可以尝试只构建内核和最小系统:
ninja ntoskrnl。
第四步:用 QEMU 启动 ARM64 镜像
# 安装 QEMU ARM64 支持
sudo apt install qemu-system-arm
# 启动 ReactOS ARM64(使用 virt 机器类型 + UEFI)
qemu-system-aarch64 \
-M virt \
-cpu cortex-a72 \
-smp 2 \
-m 2048 \
-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \
-cdrom output/arm64/bootcd.iso \
-drive if=virtio,file=reactos-arm64-disk.img,format=raw \
-net nic -net user \
-serial stdio \
-display gtk
如果系统启动成功,你会看到 ReactOS 的启动画面和串口调试输出。如果 UEFI 固件路径不存在,可以这样获取:
sudo apt install qemu-efi-aarch64
# 固件通常在 /usr/share/qemu-efi-aarch64/QEMU_EFI.fd
启动后通过串口(-serial stdio)可以看到内核日志,这对调试 ARM64 特定问题很有用。
这一步对开源生态意味着什么
ReactOS 的 ARM64 支持虽然还很粗糙,但它的方向值得关注,原因有三:
-
Windows 本身已经在 ARM64 上:微软的 Windows on ARM 已经迭代了好几代,WoW64 仿真层让 x86 程序能在 ARM 上跑。ReactOS 如果只停留在 x86,就永远只能兼容"旧 Windows",而无法跟随微软的硬件演进。ARM64 支持是跟上时代的必要条件。
-
ARM 服务器和嵌入式场景:在 ARM 服务器上运行 Windows 程序的需求真实存在——某些企业遗留系统只能跑在 Windows 上,而 ARM 服务器正在数据中心里扩张。ReactOS 如果能在 ARM64 上提供轻量级的 Windows 兼容层,可能比跑一个完整 Windows VM 更省资源。
-
驱动生态的挑战是双向的:ReactOS 在 x86 上最大的短板就是驱动兼容性。ARM64 上这个问题反而可能更容易——ARM64 平台的硬件种类相对有限(主要是通用设备),驱动模型更规范,ReactOS 可以从零构建更干净的驱动栈。
当前阶段的现实边界
在考虑尝试 ReactOS ARM64 之前,需要清楚几个硬限制:
- 不要指望运行你的 Windows 软件:WoW64(x86 程序在 ARM64 上运行的仿真层)还没实现,目前只能跑原生 ARM64 PE 程序,而这类程序数量极少。
- 不要在生产环境使用:实验性意味着随时可能崩溃、数据丢失、硬件不支持。
- 构建过程可能失败:源码的 ARM64 支持还在快速迭代中,某次提交可能编译不过,需要关注项目邮件列表和 GitHub Issues。
适合做的事情:学习 NT 内核在 ARM64 上的移植思路、观察开源项目如何处理跨架构兼容性、为项目提交 ARM64 相关的 Bug 报告或代码贡献。
检查清单:是否值得跟进
如果你在评估 ReactOS ARM64 对自己是否有价值,可以对照这几条:
| 问题 | 判断 |
|---|---|
| 你有必须在 Windows 上运行的 ARM64 场景吗? | 如果有,值得关注长期进展 |
| 你想研究 OS 跨架构移植技术吗? | ReactOS 是一个透明、可编译的真实案例 |
| 你需要现在就能用的 Windows ARM 兼容方案? | 不适合,Windows on ARM 或 Wine 更实际 |
| 你想贡献开源代码吗? | ARM64 是项目当前最需要人力的方向之一 |
ReactOS 的 ARM64 之路还很长,但这一步本身说明了一个事实:在 Windows 和 ARM 都在互相靠近的年代,一个开源的 Windows 兼容系统如果只守着 x86,就会被时间甩开。实验性支持不是终点,而是起跑线。