링크세상 링크모음
링크세상 링크모음 링크 애니 웹툰 링크 드라마 영화 링크 세상의모든링크

은퇴한 엔지니어, 달 착륙선 컴퓨터 게임 코드에서 55년 된 버그 발견

크게 하다 / 달 위의 아폴로 달 착륙선 독수리의 그림입니다.

금요일에 은퇴한 소프트웨어 엔지니어인 Martin C. Martin은 최근 원본에서 버그를 발견했다고 발표했습니다. 달착륙선 소프트웨어를 만지작거리면서 컴퓨터 게임의 물리 코드를 수정합니다. 1969년 Jim Storer라는 17세 고등학생이 만든 이 원시 게임은 액션을 텔레타이프의 텍스트 상태 업데이트로만 렌더링했지만 향후 버전을 위한 발판을 마련했습니다.

Storer가 Neil Armstrong과 Buzz Aldrin이 역사적인 문워크를 수행한 지 몇 달 만에 FOCAL이라는 프로그래밍 언어로 PDP-8 미니컴퓨터에서 개발한 이 전설적인 게임을 통해 플레이어는 달 표면으로 달 모듈이 하강하는 것을 제어할 수 있습니다. 플레이어는 부드러운 착륙을 달성하기 위해 연료 사용량을 신중하게 관리해야 하며, 적절한 양의 연료를 연소하기 위해 10초마다 중요한 결정을 내려야 합니다.

2009년, 첫 번째 달 착륙 40주년이 되기 직전, 나는 원작자의 저자를 찾아 나섰다. 달착륙선 1974년의 그래픽 버전과 1979년의 Atari 아케이드 타이틀 덕분에 당시 주로 그래픽 게임으로 알려졌던 게임입니다. Storer가 텔레타이프 게임으로 알려진 가장 오래된 버전을 만들었다는 사실을 발견했을 때 나는 그를 인터뷰하고 게임의 역사를 썼습니다. Storer는 나중에 자신의 웹사이트에 FOCAL로 작성된 원본 게임의 소스 코드를 공개했습니다.

달착륙선 게임, Jim Storer 제공.”>원본에서 인쇄된 텔레타이프 출력 스캔 <em>달착륙선</em> Jim Storer가 제공하는 게임.”  data-src=”https://cdn.arstechnica.net/wp-content/uploads/2024/06/lunar_lander_teletype_output-640×524.jpg” width=”640″ height=”524″  data-srcset=” https://cdn.arstechnica.net/wp-content/uploads/2024/06/lunar_lander_teletype_output-1280×1047.jpg 2x”/><figcaption class=
크게 하다 / 원본에서 인쇄된 텔레타이프 출력 스캔 달착륙선 Jim Storer가 제공하는 게임.

짐 스토어러

2024년, AI 전문가이자 게임 개발자이자 MIT의 박사후 연구원이었던 Martin은 연료 효율성을 최대화하여 모듈을 착륙시키기 위한 최적의 전략이라고 생각했던 것을 탐색하던 중 Storer의 고등학교 코드에서 우연히 버그를 발견했습니다. 사이에 알려진 기술 커발 우주 프로그램 매니아를 “자살 화상”으로 간주합니다. 이 방법에는 자유롭게 낙하하여 속도를 높인 다음 가능한 마지막 순간에 엔진에 점화하여 안전하게 착지할 수 있을 만큼 속도를 줄이는 것이 포함됩니다. 그는 또한 좀 더 부드럽게 착지하는 또 다른 접근 방식도 시도했습니다.

마틴은 자신의 블로그에 “나는 최근 가능한 한 부드럽게 착륙하고 최대 남은 연료를 사용하기 위한 최적의 연료 연소 일정을 탐색했습니다.”라고 썼습니다. “놀랍게도 이론상의 최선의 전략은 통하지 않았습니다. 게임은 착륙선이 실제로는 땅에 닿았는데도 땅에 닿지 않는다고 잘못 생각했습니다. 파고들면서 나는 게임의 정교한 물리학과 수치 계산에 놀랐습니다. 결국. 버그를 발견했습니다. 거의 55년 동안 눈에 띄지 않았던 ‘2로 나누기’가 누락된 것 같습니다.”

분열의 문제

Apollo 캡슐 상단의 발사 탈출 시스템 다이어그램.
크게 하다 / Apollo 캡슐 상단의 발사 탈출 시스템 다이어그램.

NASA

마틴은 교과서적인 착륙 전략을 적용했음에도 불구하고 게임에서 착륙선이 달 표면을 완전히 놓쳤다고 일관되게 보고하지 않는다는 사실을 발견했습니다. 이상 현상에 흥미를 느낀 Martin은 게임의 소스 코드를 파헤쳐 착륙 알고리즘이 Tsiolkovsky 로켓 방정식 및 Taylor 시리즈 확장을 포함하여 당시의 매우 정교한 물리학을 기반으로 한다는 사실을 발견했습니다.

위의 인용문에서 언급했듯이 문제의 근본 원인은 단순한 계산상의 실수, 즉 착륙선의 궤적을 계산하는 데 사용되는 공식에서 2로 나누는 부분이 누락된 것입니다. 사소해 보이는 이 오류는 큰 결과를 가져왔고, 시뮬레이션에서는 착륙선이 가장 낮은 궤적 지점에 도달할 때까지의 시간을 과소평가하고 착륙을 잘못 계산하게 되었습니다.

버그에도 불구하고 Martin은 당시 고등학교 3학년이었던 Storer가 자신의 게임에 고급 수학적 개념을 통합하는 데 성공했다는 사실에 깊은 인상을 받았습니다. 이는 오늘날의 기준으로도 여전히 인상적인 성과입니다. Martin은 Storer에게 직접 연락했고, 달착륙선 저자는 마틴에게 그의 아버지가 게임 시뮬레이션에 사용되는 방정식을 도출하는 데 도움을 준 물리학자라고 말했습니다.

사람들은 버그가 있는 Storer의 게임을 수년간 플레이하고 즐겼지만 현실감이 매력적인 상호 작용 경험에서 항상 가장 중요한 부분은 아니라는 사실이 드러났습니다. 그리고 고맙게도 Aldrin과 Armstrong의 경우 실제 Apollo 달 착륙 경험에서는 동일한 문제가 발생하지 않았습니다.

Martin의 흥미로운 디버깅 모험에 대한 자세한 내용은 그의 블로그에서 읽어보실 수 있습니다.