ReactOS 踏入 ARM64:一个 Windows 兼容系统的跨架构野心

2026-05-27 32 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:9 分钟

近二十年里,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 支持虽然还很粗糙,但它的方向值得关注,原因有三:

  1. Windows 本身已经在 ARM64 上:微软的 Windows on ARM 已经迭代了好几代,WoW64 仿真层让 x86 程序能在 ARM 上跑。ReactOS 如果只停留在 x86,就永远只能兼容"旧 Windows",而无法跟随微软的硬件演进。ARM64 支持是跟上时代的必要条件。

  2. ARM 服务器和嵌入式场景:在 ARM 服务器上运行 Windows 程序的需求真实存在——某些企业遗留系统只能跑在 Windows 上,而 ARM 服务器正在数据中心里扩张。ReactOS 如果能在 ARM64 上提供轻量级的 Windows 兼容层,可能比跑一个完整 Windows VM 更省资源。

  3. 驱动生态的挑战是双向的: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,就会被时间甩开。实验性支持不是终点,而是起跑线。


相关推荐