그 붕괴는 놀라운 일도 아니며, 우연히 발생할 법한 일도 아닌데, 세상이 여전히 규칙을 따른다는 것을 알게 되어 좋다.

1993년 12월, 당대 신규 인터넷에 열광하던 PC 게이머들 사이에서 엄청난 기대를 모으며 출시된 DOOM은 태동기 1인칭 슈팅(FPS) 장르의 표준을 확립했습니다. 그 인기가 워낙 압도적이었기에, 출시된 지 수년이 지난 후에도 사람들은 1인칭 슈팅 게임을 지칭할 때 '둠 클론(Doom clone)'이라는 표현을 사용했습니다. 게이머들은 이 타이틀에만 출시된 지 거의 32년에 걸쳐 수백만, 혹은 수십억 시간에 달하는 시간을 투자해 왔습니다. 이는 모드와 유저가 제작한 레벨이라는 가상 코르노코피아 덕분이기도 하지만, 그중 많은 수가 이 게임을 2년 이상 연속으로 구동해 본 것은 거의 불가능에 가깝습니다. 하지만 적어도 한 명이 시도했고, 그 결과는 바로… 충돌이었습니다.
LenOwO에 글을 올린 사이트 관리자 Minki는 2003년 당시 신규로 등장하던 Windows Mobile과 Intel XScale ARMv5 SoC를 탑재한 ASUS MyPal A620 휴대용 PC로 WinDOOM을 구동하여 예상했던 충돌을 재현했다고 보고했습니다. Minki는 해당 장치가 "라우터의 USB 포트에 연결된, DIY 18650 리튬 전지 기반 UPS"를 사용하도록 개조되었다고 설명했습니다. 그들은 이 시스템을 가동 상태로 놔둔 채 대부분 잊고 지내다가, 어제 장치 화면에 나타난 팝업창에서 애플리케이션 충돌을 확인하게 되었습니다.
WinDOOM은 당대 대부분의 소스 포트(source port)와 마찬가지로 1997년 원본 소스 코드 공개 버전을 기반으로 하므로, 원작 게임의 거의 모든 기능—그리고 대부분의 버그—를 재현합니다. 대규모 상용 소프트웨어 프로젝트와 마찬가지로, DOOM은 최종 1.9 버전에서도 수많은 알려진 버그를 가지고 있습니다. 그중 하나는 게임의 '어트랙트(attract)' 루프 등에서 '데모' 파일을 내부적으로 재생할 때, '가메틱(gametic)' 값이 새로운 데모 재생이 시작되어도 초기화되지 않는 기이한 현상입니다. 이 값은 다양한 목적으로 게임 타이밍을 추적하는 데 사용되며, 게임 렌더 루프와 무관하게 초당 35Hz, 즉 초당 35회 비율로 증가합니다.

기술 애호가가 40년 된 프린터 컨트롤러에서 둠을 구동시키다
가메틱 값이 초기화되지 않는다는 사실이 시간이 흐름에 따라 엄청난 수치로 누적될 것이라는 것은 고등학교 수준의 수학 지식만으로도 충분히 파악할 수 있는 부분입니다. DOOM 엔진을 개발한 존 카랙(John Carmack)은 이 점을 코딩 단계에서 분명히 인지했을 것이 분명하지만, 이 값이 부호 있는 32비트 정수(signed 32-bit integer)로 저장되기 때문에 큰 문제가 되지 않았다고 판단했을 가능성이 높습니다. 이는 최대 2,147,483,647 틱까지 수치가 유지된다는 의미입니다. C 언어에서 정수 오버플로우(Integer overflow) 동작은 정의되어 있지 않지만, x86 PC에서는 항상 최대 음수 값인 -2,147,483,647로 롤오버(roll-over)됩니다. 당연하게도, 이 게임은 이 상황을 매끄럽게 처리하지 못하며, 적어도 2003년 Windows Mobile 환경에서는 충돌을 일으킵니다.

초당 35틱 기준으로 가메틱 값이 오버플로우되는 데는 약 1.95년이 걸립니다. 이는 Minki가 계산한 시간보다 조금 적은 수치지만, 22년 된 ASUS PDA가 화면에 오류 메시지가 뜰 때까지 얼마나 방치되어 있었는지 누가 알겠습니까? 사진상으로는 이 구형 휴대용 컴퓨터가 큰 관심을 받고 있는 것 같지는 않습니다. 또한, Minki가 사용했을 가능성이 높은 WinDoom의 Windows CE 포트인 Doom4CE가 프레임 페이싱을 개선하고 하드웨어 요구 사양을 낮추기 위해 게임 틱 속도를 30Hz로 조정한 것일 수도 있습니다. 이러한 방식은 Jaguar나 Super NES 같은 DOOM의 콘솔 포트에서 흔히 쓰이던 기술이었습니다. 만약 그렇다면, 가메틱 값이 오버플로우되는 데는 약 2.26년이 걸리며, 이는 언급된 2.5년에 더 가까운 수치입니다.
어떤 경우든 핵심 결론은 이것입니다. DOOM 같은 게임 클라이언트를 2년 동안 연속으로 구동시키지 마십시오. 아마 다른 게임도 마찬가지일 것입니다. 적어도 전용 서버가 아닌 클라이언트 프로그램의 경우 말입니다. Minki의 실험을 통해 얻은 또 다른 시사점으로는 과학적 엄밀성(심지어 무관한 결론에 대한 실험적 검증까지도)과 "버려진" 하드웨어의 기발한 재활용 등이 꼽힙니다. 이는 Len0w0 게시판의 일종의 테마인 듯하니, 남들이 손대지 않은 도전을 한 그 그룹에게 박수를 보냅니다.
최신 뉴스, 분석 및 리뷰를 피드에서 받으려면 Google News에서 Tom's Hardware를 팔로우하세요. '팔로우' 버튼을 눌러 알림을 받으세요. (This is a standard call-to-action placeholder and would be removed or adapted for a final publication.)