Хобби некоторых программистов — изучение кода старых игр и ПО. Иногда в нем обнаруживаются весьма любопытные вещи, например ошибки. На днях разработчик программного обеспечения на пенсии Мартин К. Мартин смог найти проблему в коде обработки довольно известной игры 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».
Комментарии (11)
Mizar91
19.06.2024 09:07+5сама формула достаточно сложная, разработчик явно разбирался в том, что писал. При этом, напомню, игру создавал специалист, которому на то время исполнилось 17 лет. Как оказалось, ему помог отец — ученый-физик, предоставивший необходимую научную базу, а программист на ее основе написал код
Я правильно понимаю, что речь идет об этой формуле?
Или об этой?
Tarson
19.06.2024 09:07+2В Техника Молодежи в 1985-87 годах это всё уже было на ПМК
Mizar91
19.06.2024 09:07Да, помню обзор этой игры на БРП-4, там тоже ошибка была, когда критерием посадки считалась глубина кратера после очередной итерации. И я сам писал что-то такое очень давно на бейсике еще, будучи школьником. Поэтому совершенно не понимаю, зачем там научная база от ученого-физика.
positroid
19.06.2024 09:07Может, речь о чем-то таком? Ученая степень вряд ли нужна, но почему бы ученому-физику не помочь сыну с уравнением движения модуля с учетом силы тяжести и тяги двигателя
Areke
19.06.2024 09:07+1Уже же есть статья по этой теме от ру_вдс
SuharkovMP
19.06.2024 09:07Она появилась на 4 часа позже. Но при этом в ней куда больше деталей и интересного материала. Например, ее авторы не поленились вычислить формулу, в которой и была ошибка.
И они не постеснялись указать, что это таки перевод, в отличие от МТС.
Molchaliviy
19.06.2024 09:07Наверное, не уже, а ещё...
Судя по всему, МТС всё-таки были первыми, они опубликовали свою статью немного раньше.
Jury_78
Периодически вспоминают про проект НАСА Mars Climate Orbiter, где из-за путаницы в единицах измерений все испортили. :)