윈도우 95나 XP를 써본 분이라면 '3D 핀볼 스페이스 카데트'를 기억하실 거예요. 학교 컴퓨터실에서, 부모님 몰래 켠 컴퓨터에서 한 번쯤은 튕겨봤을 그 은색 공이요. 이 게임을 이제 설치 없이 브라우저에서 바로 플레이할 수 있게 됐는데요. 단순한 추억팔이 얘기가 아니라, 그 뒤에는 사라진 소스 코드를 커뮤니티가 역공학으로 되살려낸 꽤 멋진 기술 이야기가 있어요.
이 게임의 기구한 역사
스페이스 카데트는 1995년, 심시티로 유명한 Maxis가 만든 'Full Tilt! Pinball'이라는 게임의 테이블 하나였어요. 마이크로소프트가 이걸 윈도우에 번들로 넣으면서 전 세계 수억 명이 즐기는 게임이 됐죠. 그런데 윈도우 비스타부터 조용히 사라졌는데, 여기엔 유명한 뒷이야기가 있어요. 마이크로소프트의 전설적인 개발자 레이먼드 첸의 회고에 따르면, 64비트 윈도우로 포팅하는 과정에서 공이 바닥과 장애물을 그냥 뚫고 지나가 버리는 충돌 감지 버그가 생겼대요. 원본 코드는 주석도 문서도 부실했고, 일정 안에 원인을 찾지 못해서 결국 게임 자체를 빼기로 했다는 거죠. 외부에서 받은 코드를 문서 없이 떠안는 게 얼마나 위험한지 보여주는, 개발자라면 남 일 같지 않은 일화예요.
디컴파일, 이게 뭐냐면요
그렇게 공식적으로는 죽은 게임을 2021년에 k4zmu2a라는 개발자가 되살려냈어요. 방법이 대단한데, 소스 코드가 없으니 배포된 실행 파일(exe)을 역으로 분석해서 C++ 소스 코드를 처음부터 복원해낸 거예요. 이걸 디컴파일이라고 하는데요. 컴파일은 사람이 읽는 코드를 기계어로 바꾸는 일방통행 과정이라, 거꾸로 되돌리면 변수 이름도 주석도 구조도 다 날아간 상태의 퍼즐만 남아요. Ghidra 같은 역공학 도구로 어셈블리를 한 줄씩 읽으면서 '이 함수는 공의 속도를 계산하는 것 같다', '이 값은 점수 배율이겠다' 하고 추론해서 사람이 읽을 수 있는 코드로 재조립하는, 엄청난 끈기가 필요한 작업이거든요. 이렇게 복원된 소스는 SDL이라는 크로스플랫폼 라이브러리 기반으로 정리되면서 리눅스, 맥은 물론이고 웹까지 이식됐어요. 네이티브 C++ 코드를 브라우저에서 돌릴 수 있게 해주는 WebAssembly 덕분에, 30년 전 게임이 이제 URL 하나로 실행되는 거예요.
브라우저에 윈도우 98을 통째로
이번에 소개된 페이지는 98.js라는 프로젝트의 일부인데요. 브라우저에서 그림판을 재현한 jspaint로 유명한 개발자가 아예 윈도우 98 데스크톱 전체를 웹 기술로 재현하고 있는 프로젝트예요. 창 관리, 바탕화면, 시작 메뉴 같은 옛 데스크톱 경험을 자바스크립트로 다시 만든 건데, 그 안에서 핀볼까지 돌아가니 완성도가 남다르죠. 웹 플랫폼이 얼마나 멀리 왔는지 보여주는 살아 있는 데모이기도 해요.
게임 보존이라는 흐름
이런 디컴파일 부활 프로젝트는 이제 하나의 흐름이 됐어요. 슈퍼 마리오 64가 통째로 디컴파일되면서 PC 네이티브 포트가 나왔고, 디아블로 1을 복원한 devilution, GTA 3를 복원한 re3 같은 프로젝트도 있었죠. 다만 조심할 부분도 있는데, re3처럼 저작권자가 법적 대응에 나서서 내려간 사례도 있거든요. 회사가 더는 팔지도 지원하지도 않는 소프트웨어를 커뮤니티가 살려내는 일과 저작권 보호 사이의 긴장은 여전히 회색지대예요. 스페이스 카데트는 다행히 마이크로소프트가 문제 삼지 않아서 살아남은 경우고요.
한국 개발자에게 주는 시사점
역공학이라고 하면 거창해 보이지만, 그 근육은 실무와 바로 이어져요. 문서 없는 레거시 코드를 읽어내는 일, 크래시 덤프를 분석하는 일, 외부 라이브러리의 이상 동작을 파헤치는 일이 전부 '남이 만든 블랙박스를 이해하는 능력'이거든요. 그리고 C++ 코드베이스를 Emscripten으로 웹에 올리는 파이프라인은 게임뿐 아니라 사내 네이티브 도구를 웹으로 옮길 때도 그대로 쓸 수 있는 기술이에요. 주말에 SpaceCadetPinball 저장소를 열어서 옛날 게임 코드가 어떻게 생겼는지 구경해보는 것만으로도 재미있는 공부가 돼요.
정리하면, 추억의 핀볼이 브라우저로 돌아온 건 역공학과 WebAssembly, 그리고 집요한 오픈소스 커뮤니티가 합작한 결과예요. 여러분의 추억의 윈도우 번들 게임은 뭐였나요? 지뢰찾기파세요, 카드놀이파세요?
🔗 출처: Hacker News