# 닌텐도 Wii에서 Mac OS X 10.0(Cheetah) 구동 성공

> Clean Markdown view of GeekNews topic #28325. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28325](https://news.hada.io/topic?id=28325)
- GeekNews Markdown: [https://news.hada.io/topic/28325.md](https://news.hada.io/topic/28325.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-04-09T09:40:42+09:00
- Updated: 2026-04-09T09:40:42+09:00
- Original source: [bryankeller.github.io](https://bryankeller.github.io/2026/04/08/porting-mac-os-x-nintendo-wii.html)
- Points: 10
- Comments: 3

## Summary

닌텐도 **Wii**에서 **Mac OS X 10.0(Cheetah)** 을 GUI까지 부팅시킨 10년짜리 포팅 프로젝트입니다. Wii의 PowerPC 750CL이 G3 iMac 계열과 호환된다는 점을 이용해, XNU 커널 수정부터 부트로더, IOKit 드라이버까지 직접 작성했습니다. 88MB RAM에서 돌아가게 만든 것도 대단하고요. 실용성과는 거리가 있지만, **"안 될 것 같은 걸 끝내 해내는" 해커 정신**이 돋보이는 프로젝트입니다.

## Topic Body

- Wii의 **PowerPC 기반 하드웨어**를 이용해 **Mac OS X 10.0(Cheetah)** 을 네이티브로 실행하는 포팅 프로젝트 완성  
- **Darwin/XNU 커널**을 Wii에 맞게 수정하고, **부트로더·디바이스 트리·드라이버**를 직접 작성해 GUI 환경까지 부팅에 성공  
- **SD 카드·프레임버퍼·USB 입력 장치**를 지원하는 커스텀 **IOKit 드라이버**를 구현해 완전한 시스템 동작을 달성  
- **BAT 설정 충돌 수정**, **Hollywood SoC용 드라이버 계층 구축**, **RGB→YUV 변환 프레임버퍼** 등 Wii 특유의 구조를 반영  
- 10여 년간의 시도 끝에 Wii에서 **Mac OS X 완전 부팅 및 조작**을 실현하며, 불가능해 보이는 프로젝트의 도전 가치를 입증함  
  
---  
  
### Wii에서 Mac OS X 실행 프로젝트 개요  
- **Mac OS X 10.0 (Cheetah)** 를 **Nintendo Wii**에서 네이티브로 실행하기 위한 포팅 프로젝트 진행  
- Wii는 이미 **Linux**, **NetBSD**, **Windows NT** 등의 OS 포팅 사례가 있었으며, 이번에 **Mac OS X**이 추가됨  
- Wii의 **PowerPC 기반 하드웨어**를 활용해 **Darwin/XNU 커널**을 구동하고, 필요한 **드라이버와 부트로더**를 직접 작성  
- 결과적으로 Wii에서 **Mac OS X GUI 환경**까지 완전 부팅에 성공, 키보드·마우스 입력까지 지원  
  
### 실행 가능성 조사  
- Wii의 **PowerPC 750CL CPU**는 G3 iMac/iBook에 사용된 **PowerPC 750CXe**의 후속으로 CPU 호환성 문제 없음  
- Wii의 **88MB RAM**(MEM1 24MB + MEM2 64MB)은 공식 요구사양(128MB)보다 적지만, **QEMU 테스트**로 64MB에서도 부팅 가능 확인  
- 지원 하드웨어는 **USB Gecko(시리얼 디버깅)**, **SD 카드**, **인터럽트 컨트롤러**, **프레임버퍼 비디오 출력**, **USB 포트**  
- Mac OS X의 오픈소스 코어 **Darwin(XNU 커널, IOKit)** 을 Wii에 맞게 수정하면 상위 GUI 계층도 동작 가능  
- Wii는 **Homebrew Channel**과 **BootMii**를 통해 **자체 코드 실행**이 가능해 포팅 실험에 적합  
  
### 포팅 접근 방식  
- 세 가지 부팅 전략 중 선택:  
  1. Open Firmware 포팅  
  2. BootX 포팅  
  3. **커스텀 부트로더 직접 작성**  
- Wii 전용 부트로더를 새로 작성해 **하드웨어 초기화**, **커널 로드**, **디바이스 트리 생성**, **커널 제어 이양** 수행  
- 커널 실행 후에는 부트로더 코드가 불필요해지고, 이후 단계는 **커널 패치 및 드라이버 작성** 중심으로 진행  
  
### 부트로더 작성  
- **ppcskel** 예제 코드를 기반으로 Wii 초기화 및 SD 카드·프레임버퍼·USB 디버깅 기능 구현  
- **Mach-O 포맷**의 XNU 커널을 메모리에 로드하고 지정된 **엔트리 포인트**로 점프해 실행  
- 커널 실행 여부 확인을 위해 **LED 점멸 패치**를 삽입해 커널 진입 단계 추적  
- 커널 실행 경로를 역추적해 **device_tree.c** 단계에서 300 예외 발생 확인 → **디바이스 트리 전달 필요성** 인식  
- ## 디바이스 트리 생성 및 전달  
  - Wii의 고정 하드웨어 구조를 기반으로 **하드코딩된 최소 트리** 구성 (`/cpus`, `/memory`)  
  - `boot_args` 구조체에 **디바이스 트리 포인터**를 포함시켜 커널에 전달  
  - 이후 커널이 정상적으로 트리를 인식하며 부팅 진행  
  
### 커널 패치  
- XNU의 **BAT(Block Address Translation)** 설정이 Wii 메모리 맵과 충돌해 커널 소스 수정 필요  
- **Mac OS X Cheetah 게스트(QEMU)** 환경에서 커널 빌드 시스템 구성  
- **BAT 수정** 및 **USB Gecko 콘솔 출력 리다이렉션** 추가로 디버깅 가능  
- 이후 **가상 메모리, IOKit, BSD 서브시스템**이 정상 초기화됨  
- 부팅 로그에서 “**Still waiting for root device**” 메시지 발생 → **SD 카드 드라이버 필요성** 확인  
  
### 드라이버 작성  
- ## IOKit 구조 이해  
  - **IOKit**은 C++ 기반 커널 확장 프레임워크로, **드라이버-넙(nub)** 구조를 통해 하드웨어 계층을 표현  
  - 예시: `IOPCIBridge` → `IOPCIDevice` → `SomeEthernetCard` → `IOEthernetInterface`  
  - Wii는 **PCI 버스가 아닌 SoC(Hollywood)** 구조를 사용하므로, **IOPCIFamily**를 대체할 커스텀 드라이버 필요  
- ## Hollywood 드라이버  
  - `NintendoWiiHollywood` 드라이버 작성, 디바이스 트리의 “hollywood” 노드와 매칭  
  - 하위 하드웨어를 표현하는 **`NintendoWiiHollywoodDevice` 넙**을 생성·등록  
  - 이를 통해 SD 카드 등 하위 장치 드라이버가 연결 가능  
- ## SD 카드 드라이버  
  - `IOBlockStorageDevice`를 상속해 Wii SD 카드 접근 구현  
  - **MINI(Starlet 코프로세서)** 의 **IPC 명령**(`IPC_SDMMC_SIZE`, `READ`, `WRITE`)을 이용해 SD 카드와 통신  
  - 캐시된 메모리 문제 해결을 위해 **비캐시 메모리 버퍼** 사용  
  - 성공적으로 `IOMedia` 넙이 생성되어 **루트 파일시스템 인식** 및 완전 부팅 가능  
  - 부팅 로그에서 `BSD root: disk0s4` 확인  
- ## 프레임버퍼 드라이버  
  - `IOFramebuffer`를 상속해 Wii의 **MEM1 영역(0x01700000)** 을 프레임버퍼로 지정  
  - 초기 텍스트 콘솔과 GUI 전환을 위해 `isConsoleDevice()`를 `true`로 반환  
  - Wii의 비디오 하드웨어는 **YUV 포맷**을 사용하므로, **RGB→YUV 변환용 이중 프레임버퍼** 구현  
  - 변환 루프를 통해 60Hz로 색상 변환 수행 → **정상 색상 GUI 출력 성공**  
- ## USB 입력 지원  
  - Wii의 **OHCI USB 1.1 컨트롤러**를 구동하기 위해 `AppleUSBOHCI` 사용 시도  
  - 문제 1: **IOUSBFamily 소스 부재**로 디버깅 불가  
  - 문제 2: **IOPCIDevice 의존성**으로 Wii용 가짜 `NintendoWiiHollywoodPCIDevice` 작성  
  - 문제 3: **엔디언 불일치**(Wii는 reversed-little-endian)로 소프트웨어 바이트스왑 제거 필요  
  - IRC를 통해 **Mac OS X Cheetah용 IOUSBFamily 소스** 확보 후 수정·빌드 성공  
  - 결과적으로 **USB 키보드·마우스 입력 작동**, Wii가 완전한 Mac OS X 시스템으로 동작  
  
### 부트로더 및 커널 개선  
- ## 부트로더 개선  
  - **SD 카드 파티션 탐색 및 부팅 메뉴** 추가, **Apple Partition Map(APM)** 파싱 구현  
  - **커널 확장(kext)** 을 부트로더에서 로드해 `/chosen/memory-map` 노드에 등록  
  - 이를 통해 **수정되지 않은 Mac OS X 설치 이미지**로 부팅 가능  
- ## 커널 단순화  
  - Wii 전용 커널 수정 사항 최소화:  
  - BAT 설정 수정  
  - “hollywood” 노드 기반 I/O 주소 인식  
  - 프레임버퍼 캐시 일관성 수정  
  - 드라이버를 커널 외부로 분리해 빌드 효율 및 유지보수성 향상  
  
### 마무리  
- 2013년 대학 시절 구상했던 프로젝트를 10여 년 만에 완성  
- **Windows NT Wii 포팅 사례**에서 영감을 받아 도전  
- 결과적으로 Wii에서 **Mac OS X 10.0 완전 부팅 및 GUI 조작** 달성  
- “불가능해 보이는 프로젝트일수록 도전할 가치가 있다”는 교훈 강조

## Comments



### Comment 54962

- Author: ffdd270
- Created: 2026-04-09T11:18:13+09:00
- Points: 1

맛있는 글에 멋있는 글쓴이네요….

### Comment 54961

- Author: jjpark78
- Created: 2026-04-09T10:55:18+09:00
- Points: 1

덕중의 덕은 양덕이라더니..

### Comment 54955

- Author: neo
- Created: 2026-04-09T09:40:42+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47691730) 
- 이 프로젝트는 정말 **놀라운 작업**이었음. 글 자체도 흡입력이 있어서 끝까지 몰입했음  
  특히 “WindowServer가 불만을 표시했고, 이를 해결하려면 직접 framebuffer 드라이버를 작성해야 했다”는 부분이 인상적이었음  
  MacOS의 **I/O Kit 추상화 계층**이 실제로 제 역할을 하는 걸 보고 놀랐음. NeXT 개발자들에게 박수를 보냄
  - 나도 비슷하게 느꼈음. 드라이버를 처음 써보는 입장에서 학습 곡선이 가팔랐지만, 시스템이 살아 움직이는 걸 보고 IOKit의 접근 방식을 이해하게 되었음  
    다른 플랫폼의 드라이버 개발 경험이 없어서 비교는 어렵지만, 구조적으로는 꽤 매력적이었음
  - IOKit은 OS X를 위해 처음부터 새로 만들어진 것이고, NeXT 시절에는 **DriverKit**이라는 다른 모델을 썼다고 들었음  
    예전에 NetBSD 개발자들이 Mach/IOKit 호환 계층 위에서 PPC Darwin을 구동해 Xquartz까지 띄운 적도 있었음. NetBSD가 IOKit 호출을 번역했다는 점이 흥미로움
  - Linux의 스택과도 유사한 점이 많아서, **Linux on Wii 프로젝트**를 살펴보며 framebuffer 문제를 어떻게 처리했는지 비교해볼 생각임  
    Wii 위에서 이렇게 많은 OS가 돌아간다는 게 여전히 믿기지 않음
  - OPENSTEP 시절부터 여러 아키텍처와 운영체제를 대상으로 했던 경험이 이런 추상화에 도움이 되었을 것 같음
  - “MacOS가 얼마나 잘 추상화되어 있는지 놀랍다”는 말에 공감함  
    사실 좋은 추상화와 나쁜 추상화의 차이는 **얼마나 잘 설명되었는가**에 달려 있음

- 엔지니어링 자체도 대단하지만, 작성자가 **이코노미석에서 개발**을 하고 있었다는 점이 진짜 인상적이었음
  - 나로선 이코노미석에서 노트북을 제대로 쓰는 것도 힘든데, Wii까지 연결해서 디버깅했다니 믿기지 않음
  - 예전에 Apple이 비행기 안에서 편집하는 광고를 만든 적이 있었음 ([유튜브 링크](https://youtu.be/LQWjxAdSsHE))
  - 옆자리 사람은 아마 “저건 뭐지?” 하며 휴대폰만 보고 있었을 듯함. 나였으면 참지 못하고 물어봤을 것 같음
  - 사진을 보니 버스 같기도 하고 비행기 같기도 했음. 어쨌든 이동 중에 Wii를 들고 개발했다는 건 **엄청난 집중력과 헌신**의 증거임  
    (추가로 보니 첫 사진은 버스, 두 번째는 비행기였음)
  - 이동 중에 이런 복잡한 프로젝트에 몰입할 수 있다는 게 놀라움. 사진을 다시 봤는데 기차나 버스 같기도 함. 어쨌든 대단한 플렉스임

- 나는 **NetBSD Wii 및 Wii U 포트의 작성자**로서, 이 프로젝트에 진심으로 축하를 보냄  
  앞으로 어떤 문제를 어떻게 해결했는지 보는 게 기대됨
  - 당신의 포트가 큰 영감을 주었음. 이 분야에 많은 기여를 해줘서 고마움

- 예전엔 나도 하드코어한 Mac 매니아였고, 역공학으로 초창기 비공식 “iOS 앱”을 만든 적도 있었음  
  하지만 이번 프로젝트는 그 모든 걸 뛰어넘음. Wii에서 MacOS를 돌린 것도 놀랍지만, 글 자체가 너무 **정교하고 흥미로움**
  - 따뜻한 말 고마움 :)

- Wii의 RAM이 **88MB**뿐이라는 사실을 처음 알았음. 게임들이 전자 기반이 아니라서 다행이었음
  - 흥미로운 역사적 사실인데, Wii가 출시된 같은 달에 Windows Vista도 북미에서 나왔음  
    Vista 최소 요구 사양이 512MB였는데, 대부분의 PC가 그보다 적은 메모리를 가지고 있었음  
    요즘은 8GB가 줄고 16GB가 표준이 되어가는 걸 보면 세상이 많이 변했음
  - Wii 설정 메뉴가 **HTML 웹페이지**로 되어 있었다는 사실이 웃김. 2006년 콘솔도 웹의 손아귀를 피하지 못했음

- 프로젝트를 시작하기 전에 “이게 가능하기나 한가?”를 확인했는데, 2021년 Reddit 댓글에 “**0% 가능성**”이라는 말이 있었음  
  그걸 보고 오히려 동기부여가 되었음. 그래서 Wii의 하드웨어를 분석하며 시작했음. 진짜 웃겼음
  - 이런 프로젝트의 가치는 이런 “절대 불가능” 발언을 **영원히 박제**하는 데 있음  
    사람들은 ‘거의 불가능한 일’을 절대 일어나지 않을 거라 단정하면서 자신이 원칙적인 회의론자라고 착각함
  - 예전 Linux 농담이 생각남. “Linux에서 X를 어떻게 하나요?”라고 묻지 말고 “Linux에서는 X가 불가능하다”고 말하면 누군가 바로 방법을 보여줬다는 이야기였음
  - 나도 Adafruit의 MacroPad 문서에서 “BLE나 WiFi는 추가할 수 없다”는 문장을 보고 프로젝트를 시작했음  
    “정말 그래?” 하며 UART 포트를 재구성해 ESP32를 붙였음
  - “모든 게 마젠타색이다”라는 디버깅 장면도 재밌었음
  - 많은 인터넷 댓글러들이 이런 식으로 **냉소를 지적임으로 착각**함  
    무지한 냉소라는 개념이 없다는 게 문제임

- Wii에서 커널 패닉을 디버깅하면서 비행기 이코노미석에 앉아 있었다니, 그 **집중력의 수준**은 상상도 안 됨  
  대부분은 비행기에서 책 한 권 읽기도 힘든데 말임

- 정말 멋진 프로젝트였음. 예전 **저수준 개발의 황금기**가 떠오름  
  예전엔 VGA 초기화하고 픽셀을 찍는 게 쉬웠고, 6502 같은 칩도 접근성이 높았음  
  하지만 요즘은 시스템이 너무 복잡해져서 진입 장벽이 높아졌음  
  게다가 AI가 오히려 개발을 단순화시키는 척하면서 **접근성을 더 떨어뜨리고 있음**

- 나도 비슷하게 **Mac OS 9을 Wii U에 포팅**하려고 시도 중임  
  이 프로젝트를 보고 완전히 감명받았고, “불가능하다”는 생각이 들 때마다 다시 용기를 얻음
  - 정말 멋짐. Mac OS 9은 **폐쇄형 소스**라서 더 어려운 도전일 듯함
  - XNU나 Darwin 소스가 없다는 게 불리하지만, **System 7.1 유출 소스**, Ghidra, MCP 같은 도구로 보완할 수 있을 것임. 행운을 빔

- 글도 훌륭했지만, `.mov` 영상을 `&lt;video&gt;` 태그로 넣은 건 **브라우저 호환성** 문제가 있음  
  Chrome이나 Firefox에서는 재생되지 않음
  - Chrome과 Firefox에서 안 된다면, 사실상 거의 모든 브라우저에서 안 된다고 봐야 함
  - 고마움! 이미 수정했음
