Este artículo de Bryan Keller detalla el proceso de portar Mac OS X 10.0 (Cheetah) a la consola Nintendo Wii. La iniciativa, inicialmente considerada imposible por la comunidad, demuestra la viabilidad de ejecutar sistemas operativos complejos en hardware inesperado. El proyecto se centra en la adaptación de un sistema operativo de escritorio a una consola de juegos, abriendo nuevas posibilidades para la experimentación y el desarrollo de software.
El primer paso fue la investigación de la compatibilidad del hardware. La Wii utiliza un procesador PowerPC 750CL, un derivado del PowerPC 750CXe utilizado en algunos iMacs y iBooks G3, lo que indicaba una compatibilidad prometedora a nivel de CPU. La memoria RAM, aunque con una configuración inusual (88MB divididos entre 1T-SRAM y GDDR3), resultó suficiente para ejecutar Mac OS X Cheetah, que requería oficialmente 128MB, pero podía funcionar con menos. Otros componentes clave, como el control de interrupciones, la salida de video y los puertos USB, también fueron identificados como áreas a abordar.
El autor explica que Mac OS X tiene un núcleo de código abierto (Darwin, con XNU como kernel y IOKit como modelo de controlador), complementado con componentes propietarios. El proceso de arranque de un Mac tradicional involucra Open Firmware y BootX, pero el autor optó por escribir un bootloader personalizado desde cero, inspirado en el proyecto Wii Linux, para evitar la complejidad de portar estos componentes existentes. Este bootloader se basa en el código de ejemplo ppcskel y se encarga de inicializar el hardware de la Wii, cargar el kernel Mach-O desde la tarjeta SD, construir un árbol de dispositivos y pasar el control al kernel.
La ejecución del kernel implica decodificar el formato Mach-O, que contiene instrucciones sobre dónde colocar diferentes secciones del binario en la memoria. Una vez que el kernel toma el control, el bootloader deja de funcionar. El autor tuvo que analizar el código fuente de XNU para comprender el progreso del arranque y, debido a que el kernel desactiva la salida de depuración del bootloader, se implementó una solución alternativa para rastrear el proceso. El proyecto es un ejemplo de ingeniería inversa, adaptación de código y resolución de problemas a bajo nivel, y ofrece instrucciones para que otros puedan replicarlo en el repositorio de GitHub.
