
게임기에 윈도우라니, 이게 무슨 일이냐면요
가끔 개발자들 사이에서 "이걸 굳이 왜?" 싶지만 보고 있으면 감탄하게 되는 프로젝트들이 있잖아요. 이번에 소개할 entii-for-workcubes가 딱 그래요. 닌텐도의 옛 게임기인 게임큐브와 Wii(위)에서 마이크로소프트 윈도우 NT를 부팅해서 돌리는 프로젝트거든요. 그것도 에뮬레이터로 흉내 내는 게 아니라, 진짜 그 게임기 하드웨어 위에서 직접요.
처음 들으면 말이 안 되는 것 같죠. 윈도우는 PC에서 도는 거 아니냐고요. 그런데 여기에 재미있는 역사가 숨어 있어요.
윈도우 NT는 원래 'PC 전용'이 아니었어요
많은 분들이 모르는 사실인데, 90년대의 윈도우 NT는 여러 종류의 CPU를 지원하도록 설계됐어요. 우리가 아는 인텔(x86)뿐 아니라, MIPS, Alpha, 그리고 PowerPC(파워PC) 라는 칩에서도 돌아갔거든요. 마이크로소프트가 "특정 하드웨어에 종속되지 말자"는 생각으로 OS의 하드웨어 의존 부분을 HAL(Hardware Abstraction Layer, 하드웨어 추상화 계층) 이라는 얇은 층으로 분리해 뒀던 거예요. 이게 뭐냐면, OS 본체는 그대로 두고 칩 종류별로 이 HAL만 갈아 끼우면 다른 하드웨어에서도 돌게 만드는 구조예요.
그런데 결정적인 포인트가 있어요. 게임큐브와 Wii의 CPU가 바로 PowerPC 계열이거든요. 즉, 윈도우 NT가 한때 지원했던 그 칩과 같은 족보인 거예요. 이 프로젝트는 바로 이 점을 파고들어서, 옛날 PowerPC용 윈도우 NT를 이 게임기들에 맞게 되살린 거죠.
그래도 그냥 되는 건 아니에요
칩 종류가 같다고 바로 부팅되는 건 아니에요. 게임기는 PC가 아니니까요. 우선 윈도우 NT는 부팅할 때 ARC 펌웨어라는 표준 인터페이스를 기대해요. 펌웨어가 뭐냐면, 전원을 켰을 때 OS가 뜨기 전에 하드웨어를 깨우고 준비시키는 가장 밑단의 소프트웨어예요. 게임큐브엔 그런 게 없으니, 개발자가 이 ARC 펌웨어 역할을 하는 코드를 직접 만들어 넣어야 했어요.
게다가 게임기의 부품들, 그러니까 화면 출력, 메모리 카드, USB, 컨트롤러 같은 것들은 윈도우가 전혀 모르는 장치들이에요. 그래서 이 하나하나에 대한 드라이버도 새로 작성해야 했고, 앞서 말한 HAL도 이 기기에 맞게 손봐야 했죠. 한마디로 "칩이 같다"는 출발점만 있고, 그 위 모든 다리를 직접 놓은 거예요. 이게 이 프로젝트의 진짜 노가다이자 묘미예요.
업계 흐름에서 보면
이런 작업을 보통 하드웨어 포팅(porting) 이라고 불러요. OS를 원래 의도되지 않은 기기에서 돌리도록 옮기는 거죠. 비슷한 사례로 옛날 매킨토시(역시 PowerPC였어요)에 리눅스를 올리거나, 라즈베리파이·스마트워치·심지어 임신테스트기에 둠(DOOM)을 띄우는 'Can it run DOOM?' 문화가 있잖아요. 결이 같아요. 다만 게임 한 개가 아니라 완전한 운영체제 전체를 올린다는 점에서 난이도가 차원이 달라요.
이런 프로젝트가 단순한 장난만은 아닌 게, 여기서 다루는 부트로더·HAL·드라이버·메모리 맵 같은 지식은 임베디드 시스템과 운영체제 개발의 핵심 그 자체거든요. 실무에서 새 보드(하드웨어)에 리눅스 올리는 작업이랑 본질적으로 똑같은 기술이에요.
한국 개발자에게는
당장 업무에 쓸 일은 없겠죠. 하지만 운영체제가 하드웨어와 어떻게 맞물려 돌아가는지를 이만큼 적나라하게 보여주는 학습 자료도 드물어요. "OS는 어떻게 부팅되는가", "드라이버는 왜 필요한가", "같은 코드가 어떻게 다른 칩에서 도는가" 같은 질문에 막연했던 분이라면, 이 프로젝트의 코드와 문서를 따라가 보는 것만으로도 시스템 프로그래밍 감각이 확 올라와요. 저수준(low-level) 개발이나 임베디드 쪽을 노리는 분께는 특히 좋은 교보재예요.
한줄 정리
게임큐브·Wii가 PowerPC 칩을 쓴다는 역사적 우연을 파고들어, 잊힌 윈도우 NT를 되살린 운영체제 포팅의 교과서 같은 사례예요.
여러분이 본 '이걸 왜 했지 싶은데 멋진' 해킹 프로젝트는 뭐가 있나요? 이런 삽질이 실력에 도움이 된다고 보세요, 아니면 그냥 재미일 뿐일까요?
🔗 출처: Hacker News