Как стать автором
Обновить
1056.19
МТС
Про жизнь и развитие в IT

IT-археология: в коде игры Lunar Lander, созданной 55 лет назад, обнаружена скрытая ошибка

Время на прочтение3 мин
Количество просмотров2.8K

Хобби некоторых программистов — изучение кода старых игр и ПО. Иногда в нем обнаруживаются весьма любопытные вещи, например ошибки. На днях разработчик программного обеспечения на пенсии Мартин К. Мартин смог найти проблему в коде обработки довольно известной игры Lunar Lander, которая появилась на свет в 1969 году.

Что там за ошибка?

Эксперт обнаружил ее в ходе анализа пути посадки модуля с максимальной экономией ракетного топлива. Сама игра изначально написана 17-летним начинающим разработчиком Джимом Сторером. Он создал ее при помощи ПК PDP-8 и языка программирования FOCAL. Первая версия Lunar Lander — простая, как и многие другие игры и ПО того времени.

Так, в ней были лишь обновления статуса аппарата в ходе посадки на поверхность естественного спутника Земли. Игрокам требовалось управлять расходом топлива для того, чтобы успешно прилуниться. Если допущена ошибка, посадка не осуществлялась. Принимать решения необходимо было быстро — каждые 10 секунд от игрока требовалось найти выход из той или иной ситуации.

Несмотря на минималистичность самой программы, а также относительно сложное «прохождение», Lunar Lander стал популярным. Так, в 1974 г. появилась уже версия с графическим интерфейсом, что сделало ее еще более востребованной среди геймеров. Ну а в 1979 г. Atari выпустила аркадную игру, которая и запомнилась тысячам игроков того времени.

Lunar Lander стал культовым — его помнили все эти годы, а в 2009 г. у создателя оригинальной игры взяли интервью, восстановив историю реализации проекта. Кроме того, исходный проект был опубликован самим автором. Его оценили многие специалисты, но лишь 15 лет спустя, уже в 2024 году, разработчик и научный сотрудник MIT Мартин К. Мартин смог обнаружить ошибку в реализации физических расчетов.

Он проявлялся не всегда и не сразу, а лишь в том случае, если игрок пытался задействовать технику «самоубийственного торможения». Для того чтобы запустить такой сценарий, требуется быть уже опытным геймером, новичок в большинстве случаев об этом ничего не знает. Речь идет о выборе метода спуска, который основную часть пути представляет собой свободное падение с включением двигателей в последний момент. Если сделать все правильно, то посадочный модуль садится без проблем и забот.

Наконец, подходим к сути ошибки. Инженер обнаружил, что при задействовании этого сценария игра «не видела» прилунения модуля, хотя игрок — да. Проанализировав код, IT-археолог увидел, что он хорош, а внутри — большое количество различных физических расчетов. И в одном из случаев как раз и возникала ошибка, которая оставалась незамеченной более чем полвека.

Проблема возникала из-за того, что в формулу, отвечающую за расчет траектории летательного аппарата, забыли добавить деление на два. Ошибка, видимо, возникала просто по недосмотру, поскольку сама формула достаточно сложная, разработчик явно разбирался в том, что писал. При этом, напомню, игру создавал специалист, которому на то время исполнилось 17 лет. Как оказалось, ему помог отец — ученый-физик, предоставивший необходимую научную базу, а программист на ее основе написал код.

Не только игры

Ошибка в игре — интересно, но не более того, но схожие проблемы возникали и в ходе реализации реальных космических полетов. Так, при подготовке полета «Аполлона-8» Маргарет Гамильтон, о которой не раз и не два писали на Хабре, смогла найти серьезную уязвимость. Стоит отметить, что изначально проблему обнаружила дочь Гамильтон, которая играла с симулятором ПК «Аполлона-8». Однажды, запустив его, она выполнила последовательность P01.

Последняя не имеет отношения к полету и задействуется лишь перед стартом корабля. Но, как оказалось, если выполнить P01 уже в ходе полета, то возникают проблемы. Руководство NASA тогда не захотело встраивать защитные меры в ПО, равно как и указывать предостережение в инструкции. Решили, что профессионал высочайшего уровня, астронавт, никогда не допустит такой ошибки.

Оказалось, напрасно: после того как «Аполлон-8» должен был покинуть орбиту Луны, астронавт Джеймс Ловелл по ошибке запустил эту злополучную инструкцию. В конечном счёте из компьютера космического аппарата пропали навигационные данные, определить положение в пространстве стало крайне сложно. В итоге экипаж корабля начал ориентироваться по звездному небу и вносить правки вручную. А Маргарет Гамильтон 9 часов провела в поисках решения этой критической проблемы.

В итоге все сложности разрешились, астронавты вернулись на Землю. И даже это не все. Дело в том, что во время полета «Аполлона-13» возникла еще одна проблема, в ходе которой компьютер также пришлось перепрограммировать вручную. Участником того полета был все тот же Джеймс Ловелл, исправивший ситуацию и в этом случае — без него, скорее всего, случилась бы авария и команда никогда не вернулась бы на Землю. Но благодаря экстренному обучению настройки компьютера во время полета «Аполлона-8» он получил навыки, которые спасли команду уже другого космического корабля — «Аполлон-13».

Теги:
Хабы:
+10
Комментарии11

Публикации

Информация

Сайт
www.mts.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия