2021年,Reddit一条评论给这个项目判了死刑:"这事发生的概率是百分之零。"三年后,Mac OS X 10.0 Cheetah正在Wii上原生运行——不是模拟器,是真·移植。开发者用88MB内存(官方要求128MB)让苹果2001年的系统活了过来,顺便证明了"不可能"这个词在技术圈有多廉价。
硬件考古:Wii和G3 Mac是远房亲戚
Wii的心脏是PowerPC 750CL处理器。这芯片和G3 iBook、G3 iMac用的750CXe是同一个家族谱系,血缘近到可以互相认亲。CPU这块,门槛算是迈过去了。
内存才是硬骨头。Wii的88MB拆成两半:24MB 1T-SRAM(MEM1)+ 64MB GDDR3 SDRAM(MEM2)。这种混搭在消费电子产品里堪称行为艺术——快内存当缓存用,慢内存当主力,任天堂的硬件设计师当年显然有自己的想法。
Mac OS X Cheetah官方最低要求128MB,但开发者用QEMU实测发现:64MB能开机,能跑,不崩。这个发现直接决定了项目从"痴人说梦"降级为"只是很难"。
其他待办硬件清单包括视频输出、存储接口、输入设备……每一项都需要从零写驱动。但最难的部分已经确认:不是硬件不支持,是人还没写代码。
系统解剖:苹果留了半扇后门
Mac OS X的结构像三明治。底层是开源的Darwin(XNU内核+IOKit驱动框架),上层是闭源的苹果调味酱:Quartz图形层、Dock、Finder、全套系统应用。理论上,只要啃动开源层,闭源部分会自己跟上来——它们只认内核接口,不认硬件。
真正的麻烦在启动流程。PowerPC Mac用Open Firmware作为最底层软件环境,可以理解为开机后第一个醒来的代码。它负责硬件初始化、设备树构建,最后把控制权交给BootX——Mac OS X的专属引导程序。
BootX的工作更繁琐:初始化文件系统、加载内核到内存、准备启动参数、最终把CPU交给XNU。一旦内核跑起来,BootX和Open Firmware就被踢出群聊,后续全是XNU的戏份:处理器初始化、虚拟内存、IOKit、BSD子系统,层层递进直到桌面出现。
Wii没有Open Firmware。它用的是Broadway芯片自带的启动ROM,一套完全陌生的底层逻辑。开发者需要造一座桥,让Mac OS X以为自己在和Open Firmware对话,实际上对面是Wii的硬件抽象层。
移植实战:给系统做"器官移植"
项目被命名为wiiMac,核心是一个自定义bootloader。这个程序要骗过Darwin,让它相信运行在真正的Mac硬件上。
第一步是设备树伪造。Open Firmware会生成一棵"设备树"描述硬件布局,Darwin内核启动时要读这棵树。Wii的硬件布局和任何G3 Mac都不一样,bootloader需要动态构建一棵假树,把Wii的内存映射、中断控制器、总线拓扑翻译成Mac能理解的格式。
内存管理是精细活。Wii的24MB快内存和64MB慢内存不能简单拼接成88MB连续空间——速度差异会导致系统崩溃。开发者最终把快内存划给内核关键数据结构,慢内存留给用户空间和缓存,这种分层策略让性能损失控制在可接受范围。
驱动开发是持久战。Wii的视频芯片(Hollywood GPU)没有公开文档,开发者通过逆向工程和社区既有成果(如Linux的Wii驱动)拼凑出基础支持。足够让系统显示画面,但别指望硬件加速——Quartz的特效会变成幻灯片,这是88MB内存的宿命。
存储方案走USB或SD卡。Wii的光驱接口被彻底绕过,毕竟Mac OS X不会说"Wii光盘"这种方言。文件系统用HFS+,和原版Mac保持一致,方便后续直接挂载镜像调试。
跑起来的样子:能用,但没必要
最终成果是一个技术意义上的"完整系统":能进桌面,能打开Finder,能运行基础应用。Dock的放大动画会卡顿,窗口拖动有延迟,启动时间以分钟计。但命令行工具响应正常,Darwin的底层工具链可以完整运行——对于开发者目标而言,这已经超额交付。
项目代码完全开源,托管在wiiMac仓库。README里写着安装步骤,需要一台能运行Homebrew的Wii、一张SD卡、以及接受现实的心理准备。社区反馈两极:操作系统爱好者视其为艺术品,实用主义者反问"图啥"。
开发者自己的回答藏在项目介绍里:"这个项目全是关于学习和导航无数'未知的未知'。"翻译成人话:重点不是让Wii变成可用电脑,是证明那条Reddit评论错了。百分之零的概率,在足够的好奇心面前,就是百分之百的动手理由。
现在仓库的issue区躺着几个待办:声音驱动未完成、USB键盘偶尔掉线、更好的内存优化方案。但核心目标已经达成——PowerPC架构的Mac OS X,在停产十五年后,找到了一台任天堂游戏机作为新宿主。下一个会是谁?
热门跟贴