Wii에서 Mac OS X 10.0 Cheetah 구동 성공!
Wii의 PowerPC 750CL 프로세서와 Mac OS X 10.0 Cheetah의 하드웨어 호환성 분석을 시작으로 프로젝트가 시작됨
부트로더(Bootloader) 개발, 커널 패치, SD 카드 드라이버, 프레임버퍼 드라이버 등 Wii 하드웨어에 맞는 드라이버 개발에 성공함
IOKit 드라이버 모델(Driver Model)을 활용하여 Wii 하드웨어 추상화(Hardware Abstraction)를 구현함
USB 키보드 및 마우스 지원을 위해 IOUSBFamily 소스 코드(Source Code)를 수정하는 과정을 거침
개발자들은 프로젝트의 기술적 성취(Technical Achievement)와 상세한 문서화에 대해 극찬함
Wii 하드웨어 분석 및 Mac OS X 호환성 검토
프로젝트는 Wii의 PowerPC 750CL 프로세서(Processor)가 G3 iBook 및 iMac과 유사하다는 점에 착안하여 시작되었다. Wii의 88MB RAM(24MB 1T-SRAM, 64MB GDDR3 SDRAM)이 Mac OS X Cheetah의 최소 요구 사양인 128MB RAM보다 적지만, QEMU를 통해 64MB RAM으로 부팅하여 문제 없음을 확인했다. 이는 하드웨어 제약(Hardware Constraints)을 극복하고 Mac OS X를 Wii에서 실행하기 위한 첫 번째 단계였다.
커스텀 부트로더(Custom Bootloader) 개발 및 커널 패치
저자는 Open Firmware 또는 BootX를 포팅하는 대신, Wii Linux 프로젝트를 참고하여 커스텀 부트로더(Custom Bootloader)를 처음부터 작성했다. 부트로더는 Wii 하드웨어 초기화, SD 카드에서 커널 로드, 장치 트리 구성, 커널에 제어권 전달 등의 역할을 수행했다. 커널 패치를 위해 LED를 활용한 디버깅(Debugging) 방법을 사용했으며, Hopper Disassembler를 사용하여 커널 바이너리(Binary)를 분석했다. 이는 Wii 환경에 맞는 부팅 프로세스(Booting Process)를 구현하기 위한 핵심적인 과정이었다.
IOKit 드라이버 모델(Driver Model)을 활용한 Wii 하드웨어 지원
Mac OS X 드라이버는 IOKit을 사용하여 개발되었으며, 저자는 Wii의 Hollywood SoC(System-on-a-Chip)를 위한 드라이버를 작성했다. IOKit의 IOBlockStorageDevice를 상속받아 SD 카드 드라이버를 구현하고, IOFramebuffer를 상속받아 프레임버퍼 드라이버를 개발했다. 특히, Wii의 YUV 기반 비디오 하드웨어와 Mac OS X의 RGB 기반 프레임버퍼 간의 호환성 문제를 해결하기 위해 듀얼 프레임버퍼(Dual-Framebuffer) 전략을 사용했다.
USB 키보드 및 마우스 지원을 위한 IOUSBFamily 포팅
USB 키보드 및 마우스 지원을 위해 AppleUSBOHCI 드라이버를 사용하려 했으나, IOUSBFamily 소스 코드 부재, IOPCIDevice 의존성, 엔디안(Endianness) 문제 등 여러 난관에 직면했다. 저자는 IOPCIDevice를 상속받는 NintendoWiiHollywoodPCIDevice를 생성하고, AppleUSBOHCI의 설정을 변경하여 문제를 해결하려 했다. 또한, IOUSBFamily 소스 코드를 직접 수정하여 엔디안 문제를 해결하고, USB 장치 지원을 구현했다.
커뮤니티의 열광적인 반응과 프로젝트의 가치
커뮤니티에서는 프로젝트의 기술적 난이도(Technical Difficulty)와 저자의 상세한 문서화에 대해 극찬을 보냈다. 특히, 2021년 레딧(Reddit) 댓글에서 불가능하다고 언급된 프로젝트를 성공적으로 완수한 점에 대해 놀라움을 표했다. 또한, 경제적인 비행기 좌석(Economy Class Airplane Seat)에서 개발을 진행한 점에 대한 유머러스한 반응도 있었다. 이는 프로젝트가 단순한 기술적 성취를 넘어, 개발자들에게 영감(Inspiration)을 주는 사례임을 보여준다.