В открытый доступ выложили программу для лунной миссии «Аполлон-11»

Когда инженеры лаборатории измерительных приборов Массачусетского технологического института (МТИ) в 1960-е годы приступили к разработке программного обеспечения для лунной миссии США, нужных технологий попросту не существовало. Специалистам предстояло их изобрести. Теперь код программного обеспечения доступен на GitHub, и это настоящая капсула времени, пишет Quartz.

Достижения лаборатории измерительных приборов

Лаборатория измерительных приборов МТИ была основана в 1932 году гениальным Чарльзом Старком Дрейпером, отцом инерциальной навигации. В 1973 году она была переименована в честь основателя и отделена от института. Сейчас лаборатория имени Дрейпера является некоммерческой организацией и занимается исследованиями в различных областях – освоения космоса, национальной безопасности, энергетики и здравоохранения.

Разрабатывая программное обеспечение для полета на Луну, специалисты лаборатории создали новый путь сохранения компьютерных программ, который получил название «rope memory» (веревочная память ). Память нового типа позволяла хранить 2,5 МБ данных в носителе объемом 1 м3, аналоги, существовавшие ранее – всего 140 КБ.

Rope Memory. Фото: Wikimedia / Public domain
Rope Memory. Фото: Wikimedia / Public domain

Кроме того, инженеры МТИ разработали особую версию языка программирования ассемблер. Для многих современных программистов язык ассемблера непонятен сам по себе. Его сложно читать, крайне трудно отлаживать. К тому же, что именно делает конкретный фрагмент кода, понять непросто. Сегодня программирование осуществляется на языках высокого уровня, а вставки на ассемблере, который напрямую обращается к ресурсам устройства, могут присутствовать для оптимизации работы программы с регистрами процессора, памятью и пр.

Ассемблер – язык для машин, а не для людей

На космическом корабле «Аполлон-11» была установлена система Apollo Guidance Computer (AGC). Программисты МТИ написали тысячи строк «эзотерического» кода на ассемблере, чтобы заставить машину выполнять все необходимые расчеты.

Apollo Guidance Computer. Фото: Wikimedia / Public domain
Apollo Guidance Computer. Фото: Wikimedia / Public domain

Чтобы понять, как много кода было написано, ресурс приводит фото Маргарет Гамильтон, директора программной инженерии подразделения измерительной лаборатории МТИ, рядом со стопкой распечаток кода. Ей тогда было около 30.

Фото: NASA
Фото: NASA

К слову, Гамильтон в свои 80 продолжает заниматься научной работой. И именно она вместе с коллегами в 1969 году предотвратила срыв посадки «Аполлон-11» на Луну – за три минуты до прилунения компьютер был перегружен входящими данными, но специалисты нашли решение проблемы.

Код, восстановленный вручную

Код для AGC впервые выложили в открытый доступ в 2003 году. Технический исследователь Рон Берки транскрибировал его с оригиналов МТИ и набрал вручную каждую из тысяч строк программы. Дело в том, что институт выложил отсканированные места, которые были частично повреждены, и порой код не читался. Берки пришлось потрудиться, чтобы восстановить пробелы в коде.

Сканированием листов кода занимался и пилот Гэри Нефф из Колорадо. Когда Берки узнал об этом, он попросил у Неффа его версию отсканированной программы. Исследователь был счастлив, когда выяснил, что на 100% верно дополнил недостающие фрагменты.

Работа Берки сделала код программы для «Аполлон-11» доступным для других исследователей. Кроме того, специалист создал симулятор AGC для проверки работоспособности кода:

Хотя проект Берки был огромным успехом, некоторые фрагменты кода не были понятны современным разработчикам. 7 июля бывший стажер NASA Крис Гарри загрузил программное обеспечение в репозиторий GitHub, сделав его доступным широкому кругу специалистов и любителей.

Спустя несколько часов программисты стали препарировать программу, а также изучать комментарии, которые оставили в коде специалисты МТИ. Чаще всего комментарии поясняли, что делает тот или иной фрагмент программы. Но порой они делали процесс изучения сотен строк на ассемблере не таким унылым.

В коде программы обнаружили забавные шутки и отсылки к событиям 1960-х

К примеру, один из файлов кода назывался BURN_BABY_BURN--MASTER_IGNITION_ROUTINE (это можно перевести как «жги, детка, жги– программа мастера зажигать»). Первый комментарий пояснял это:

Это отсылает к 1965 году и беспорядкам в Лос-Анджелесе (восстание в Уоттсе, пригороде Лос-Анджелеса, против расовой сегрегации) и было вдохновлено экстраординарным диск-жокеем и владельцем радиостанции Великолепным Монтегю. Великолепный Монтегю использовал фразу «Жги, детка! ЖГИ!», когда крутил самые горячие новые записи. Великолепный Монтегю был харизматичным голосом соул-музыки в Чикаго, Нью-Йорке и Лос-Анджелесе с середины 1950-х до середины 1960-х.

В этой подпрограмме около 900 строк, и в первом и последнем комментариях кода можно рассмотреть своеобразную игру, которую предложила команда программистов – приветствие и прощание:

В файле под названием LUNAR_LANDING_GUIDANCE_EQUATIONS.s (его можно перевести как «уравнения для управления прилунением») две строки, предположительно, были временными, однако вошли в финальную версию программы:

В том же файле есть комментарий, который говорит астронавту «вернуть эту глупость обратно»:

Берки пояснил:

Этот код – все о позиционировании антенны радара для приземления. Я полагаю, что он показывает код, чтобы предупредить астронавта о необходимости изменения его положения.

А в файле PINBALL_GAME_BUTTONS_AND_LIGHTS.s («кнопки и огни для игры пинбол»), который описывается как «системная программа для экрана и клавиатуры для обмена данными между AGC и оператором компьютера» есть своеобразная цитата из Шекспира – фрагмент седьмой сцены четвертого акта второй части «Генриха VI» (хотя в коде указано, что это фрагмент шестой сцены второго акта):

Тебе в глаза докажут, что при тебе есть люди, которые только и говорят, что о существительных да о глаголах, и все такие поганые слова, какие невтерпеж слышать христианину.
(перевод Е. Бируковой)

Это похоже на отсылку к языку программирования AGC, отметил один из пользователей Reddit. Язык использует предопределенные «существительные» и «глаголы» для выполнения операций. К примеру, глагол номер 37 означает «запустить программу», а существительное номер 33 – «время возгорания».

Сейчас программисты уже хорошо изучили код и смогли назвать проблемы, которые, скорее всего, возникали на «Аполлоне-11». К примеру, неполадки возникали в работе систем перемешивания в криогенных резервуарах и в цепях питания.

Один из пользователей предположил, что что-то не так не с кодом – проблема вызвана чем-то другим. Виновата не программа, а Луна. Возможно, на другом спутнике проблем при посадке не возникло бы:

Другой отправил его к основам – нужно было просто выключить и включить компьютер:

Еще один разработчик предположил, что, возможно, просто необходимо обновить программное обеспечение. В «Аполлоне-14» все исправлено: