GN⁺: 스페이스 퀘스트 II 마스터 디스크 실수
(lanceewing.github.io)Space Quest II 마스터 디스크 실수
- 2024년 5월 22일
- 이 디스크의 외관에는 특별한 점이 없지만, 저장된 데이터에는 Sierra On-Line이 전혀 알지 못했을 것이며 포함시키고 싶지 않았을 특별한 것이 있음.
- 만약 Sierra 어드벤처 게임 컬렉션에 720KB 플로피 디스크가 있다면, 당신은 혼자가 아님.
- Space Quest II의 버전 2.0D와 2.0F는 드물지 않았음.
단순한 디렉토리 목록
- 디스크의 파일 목록을 보면 특별한 점이 없음.
- 버전 2.0D의 목록을 보면, 다른 Sierra 게임 디스크와 다를 바 없음.
- 타임스탬프는 게임의 주요 데이터 파일(PICDIR, LOGDIR, VIEWDIR, SNDDIR, VOL.0, VOL.1)이 1988년 3월 14일에 작성되었음을 보여줌.
- .OVL 파일은 1988년 3월 15일, AGI 인터프리터 코드는 1988년 3월 18일에 작성됨.
- 디렉토리 목록에서 특이한 점은 디스크의 "사용되지 않은" 공간이 사용된 공간보다 많다는 것임. 302,918 바이트가 사용되었고 402,432 바이트가 사용되지 않은 것으로 표시됨.
헥스 에디터 사용
- 디스크에 무엇이 있는지 더 자세히 보기 위해 헥스 에디터라는 도구가 필요함.
- 1980년대에는 Norton Utilities가 자주 사용되었고, 현대에는 Maël Hörz가 작성한 HxD Hex Editor가 훌륭한 대안임.
- 새로 포맷된 DOS 플로피 디스크에서는 사용되지 않은 섹터가 0xF6 바이트 값으로 채워져 있어야 함.
- Space Quest II 버전 2.0D의 디스크 2는 이 경우에 해당하지만, 디스크 1에는 0xF6 바이트로 채워진 섹터가 없음.
- 디스크 1의 사용되지 않은 섹터는 C 소스 코드처럼 보이는 것으로 채워져 있음.
- 이는 마스터 디스크가 다른 용도로 사용되었고, 파일이 삭제된 후 제대로 포맷되지 않았음을 강하게 시사함.
AGI 인터프리터 소스 코드
- 헥스 에디터에서 데이터를 보면 텍스트처럼 보임.
- ASCII 텍스트를 텍스트 에디터에 복사하여 보면 C 소스 코드처럼 보임.
- 두 개의 함수가 정의되어 있으며, 하나는 DisplayStatusLine, 다른 하나는 StatusLineOn임.
- DisplayStatusLine 함수는 현재 점수와 소리 상태를 표시하는 텍스트 줄을 표시하는 것으로 보임.
- 이 소스 코드는 AGI 인터프리터의 일부임.
- 헥스 에디터에서 더 많은 사용되지 않은 섹터를 스크롤하면 많은 양의 소스 코드가 있음.
- 이 소스 코드는 연속된 섹터에 저장되어 있어 추출하기 쉬움.
- 총 93개의 파일로 나뉘며, 75개의 C 소스 파일, 16개의 어셈블리 언어 소스 파일, 2개의 DOS BAT 파일로 구성됨.
- 총 15,000줄 이상의 코드가 있으며 대부분의 파일이 완전함.
- 이 Space Quest 2 게임 디스크에는 Sierra On-Line의 AGI 인터프리터 소스 코드의 약 70%가 포함되어 있음.
소스 파일 변경 이력
- 일부 소스 파일에는 헤더 주석에 변경 이력이 포함되어 있음.
- 예를 들어 ANIMATE.C 소스 파일의 헤더 주석은 파일 이름, 기능 설명, 컴파일러 이름(MWC), 변경 이력을 포함함.
- 프로그래머들은 자신의 이니셜을 사용하여 자신을 식별함.
- JAS는 AGI 인터프리터 코드를 작업한 주요 프로그래머인 Jeff Stephenson, DCI는 Chris Iden임.
- Robert Heitman도 언급되지만, 그의 초점은 주로 그래픽 도구에 있었음.
AGI.EXE 메모리 맵
- SQ2 2.0D 720KB 디스크 1에는 AGI.EXE 실행 파일의 메모리 맵도 포함되어 있음.
- 메모리 맵은 AGI 인터프리터를 구성하는 모듈과 소스 파일의 목록을 제공함.
- 총 98개의 소스 파일이 언급되었으며, 그 중 71개가 SQ2 디스크에 완전하게 포함됨.
- 이는 AGI 인터프리터 소스 코드의 약 70%가 SQ2 디스크에 포함되어 있음을 의미함.
Sierra의 지적 재산
- 1984년 Sierra On-Line은 사업을 유지하기 위해 고군분투했음.
- King’s Quest의 성공이 그들의 운명을 바꾸는 데 큰 역할을 함.
- AGI 어드벤처 게임 시스템과 그로 인해 만들어진 게임들이 Sierra On-Line의 주요 수익원이었음.
- AGI 인터프리터 소스 코드는 Sierra의 핵심 지적 재산이었음.
- 소스 코드의 70%가 대량으로 복사되어 고객에게 발송된 것은 큰 실수였음.
어떻게 이런 일이 발생했는가?
- 새로운 게임 버전이 준비될 때, "생산 사본" 마스터 디스크를 생성하여 FormMaster 디스크 복제 기계에서 사용함.
- 이 기계는 디스크의 모든 바이트를 복사함.
- Space Quest II 버전 2.0D와 2.0F의 디스크 1은 포맷되지 않은 상태에서 사용되었음.
- 이로 인해 수십만 개의 SQ2 디스크가 AGI 인터프리터 소스 코드의 70%를 포함하게 됨.
위기를 모면한 상황
- 거의 확실히 의도치 않은 실수였음.
- Sierra, 경쟁사, 고객 모두 이 사실을 알아차리지 못했음.
- 2016년 10월 온라인 사용자 NewRisingSun에 의해 처음 발견됨.
- AGI 시대의 끝에 발생한 일이었기 때문에 큰 문제가 되지 않았음.
- 이는 흥미로운 디지털 고고학 이야기이며, Sierra On-Line이 AGI 인터프리터를 어떻게 작성했는지 볼 수 있게 해줌.
관심 있는 사람들을 위해, 추출된 AGI 인터프리터 소스 코드를 GitHub 리포지토리에 업로드했음: https://github.com/lanceewing/agi
AGILE, 웹 기반 AGI 인터프리터를 확인해보세요. 이 구현은 원래 AGI 소스 코드에 의해 안내되었음.
GN⁺의 의견
- 디지털 고고학의 가치: 이 기사는 디지털 고고학의 중요성을 보여줌. 오래된 소프트웨어와 데이터는 역사적, 기술적 가치를 지니고 있음.
- 보안 실수의 교훈: 이 사건은 데이터 보안과 관리의 중요성을 강조함. 민감한 데이터를 다룰 때는 항상 철저한 검증과 포맷이 필요함.
- 기술 발전의 증거: AGI 인터프리터 소스 코드는 1980년대 게임 개발의 기술적 진보를 보여줌. 이는 현대 개발자들에게 영감을 줄 수 있음.
- 오픈 소스의 힘: 원래 소스 코드가 공개됨으로써, 현대 개발자들이 이를 연구하고 새로운 프로젝트에 활용할 수 있는 기회를 제공함.
- 경쟁사의 위험: 만약 이 소스 코드가 당시 경쟁사에 의해 발견되었다면, Sierra On-Line의 경쟁 우위가 크게 손상되었을 것임. 이는 기업의 지적 재산 보호의 중요성을 상기시킴.
Hacker News 의견
해커뉴스 댓글 모음 요약
-
Double Dragon II: The Revenge for DOS (1989)
- 이 게임은 두 개의 플로피 디스크로 배포되었으며, 하나의 디스크에는 삭제된 아카이브 파일에 전체 소스 코드가 포함되어 있었음. DIR 명령어로는 보이지 않지만 쉽게 복구 가능했음.
-
신디사이저 ROM 리버스 엔지니어링
- 최근 신디사이저 ROM을 리버스 엔지니어링하면서 Yamaha DX9 ROM에서 펌웨어 심볼 테이블의 일부와 개발 시스템 코드 블록을 발견했음. 이러한 발견은 과거 개발 도구에 대한 깊은 이해를 제공해줌.
-
어린 시절의 게임 추억
- 이 게임은 어린 시절의 중요한 부분이었으며, 현재의 삶에서는 같은 종류의 "연결"을 느끼기 어려움. Space Quest 2, 3, 4는 DNA의 일부처럼 느껴짐.
-
AGI 엔진의 비밀
- AGI 엔진에는 경쟁자가 유출로부터 이익을 얻을 만한 특별한 비밀은 없다고 생각함. Sierra 게임은 그래픽과 스토리 작성에 많은 노력을 기울였기 때문에 성공했음.
-
메모리 맵과 소스 코드
- 메모리 맵, 일부 소스 코드, 리버스 엔지니어링 도구를 사용하면 전체를 재구성할 수 있을 것임.
-
HxD Hex Editor
- 현대의 훌륭한 도구로는 Maël Hörz가 작성한 HxD Hex Editor가 있음. macOS 사용자는 Hex Fiend를 확인해볼 만함.
-
Air Fortress의 ROM
- Famicom 버전의 Air Fortress에는 의도치 않게 많은 데이터가 포함되어 있었음. 일본 카트리지는 128+128KB였고, 미국 NES 버전은 128+32KB로 축소됨.
-
수작업 릴리스 아티팩트
- 과거에는 수작업으로 릴리스된 아티팩트에 남은 데이터가 포함되는 경우가 많았음. 현대의 CICD와 자동화된 빌드 시스템 덕분에 이러한 일이 줄어듦.
-
소스 코드 발견
- 디스크에 소스 코드가 포함된 것을 아무도 발견하지 못했음. 이는 최근 테트리스와 슈퍼 마리오 브라더스의 발견을 떠올리게 함. 인터넷과 에뮬레이터 덕분에 오래된 게임들이 새로운 생명을 얻음.
-
변경 이력 주석
- 변경 이력 주석은 세부 사항과 장인 정신을 보여줌. 이는 'No Silver Bullet' 에세이를 떠올리게 하며, 소프트웨어가 여전히 프로그래머에 의해 한 줄씩 작성되고 있음을 시사함.