Написать пост

На каких языках кодят в Роскосмосе, NASA и SpaceX

Аватарка пользователя Дух айтишной эмо школы

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

11 августа Роскосмос планирует запустить новый модуль — Луна-25. Он соберёт образцы грунта, изучит экзосферу и южный полюс спутника, и поможет узнать, есть ли на Луне вода и в каком количестве.

Мы решили, что это повод разобраться и рассказать, на каких языках программирования пишется ПО для космических кораблей и какие решения используют Роскосмос, NASA и SpaceX.

На чём кодят в Роскосмосе

Роскосмос использует особенный язык программирования — ДРАКОН, который был придуман ещё в Советском Союзе.

Это визуальный ЯП, который помогает создавать скрипты по алгоритмам. Название расшифровывается как Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность.

В основе ДРАКОНа лежат языки программирования ПРОЛ2, ДИПОЛЬ и ЛАКС, которые использовали в 70-х годах. ПРОЛ2 предназначен для разработки бортовых программ, ДИПОЛЬ — для программ наземных испытаний, а ЛАКС — для моделирования.

Разработчики ДРАКОНа придумали своего рода no-code систему, которая облегчила работу программистов и ускорила разработку.

Написать программу на ДРАКОНе можно даже в браузере.

На каких языках кодят в Роскосмосе, NASA и SpaceX 1

При этом ДРАКОН не является самостоятельным языком программирования. Это скорее программа для создания блок-схем. ДРАКОН поддерживает JavaScript, Python или C++, вместе с которыми он образует гибридные языки вроде ДРАКОН-Python.

В блоки вписывается код для выполнения программой. В них расписываются только функции, а ключевые слова вроде if, else, switch, case, for или while обозначаются средствами схемы. После этого блок-схема преобразуется в текстовый код.

Кажется, что ДРАКОН усложняет задачу: проще написать код, чем рисовать схемы и программировать одновременно. Но язык используется для сложных систем управления космическими кораблями, а в коде может быть множество вложенных функций с миллиардом if. В этом случае, легче разобраться в коде, когда он наглядно представлен в виде схемы.

Также можно подумать, что ДРАКОН — устаревшая разработка, которая не может использоваться вот уже 60 лет, когда в мир уже пришли нейросети.

Это не так: язык до сих пор применяется в ПО для систем управления ракет-носителей и разгонных блоков космических аппаратов. Среди них:

  • разгонный блок космических аппаратов ДМ-SL (в рамках международного проекта «Морской старт» — участники Россия, США, Украина, Норвегия);
  • разгонный блок космических аппаратов Фрегат (Российско-европейский проект);
  • модернизированная ракета-носитель тяжелого класса Протон-М;
  • разгонный блок космических аппаратов ДМ-03;
  • разгонный блок космических аппаратов «Наземный старт»;
  • ракета-носитель легкого класса Ангара 1,2;
  • ракета-носитель тяжелого класса Ангара-А5.

На чём кодят в NASA

Ещё в 2000-х годах код для космических аппаратов NASA писался на Ассемблере. Всё потому, что для кораблей использовали маломощные по современным меркам процессоры. К примеру, в 2006 году корабли работали на процессорах Intel 8085 1976 года выпуска.

От Ассемблера пытались отказаться: ещё в 1970-х годах NASA пытались разработать специальный язык программирования HAL. У HAL было два подвида: HAL/S для космических кораблей и HAL/G для центра управления.

HAL максимально очистили от конструкций, которые могли вызывать программные ошибки, чтобы получился инструмент без излишеств, который не подвёл бы астронавтов.

Несмотря на простоту и надёжность, HAL-языки были неудобными в плане синтаксиса, из-за чего HAL/S забросили, а HAL/G не стали разрабатывать вовсе.

Вот как выглядела запись z = y^2 +x*hi

К 1980 году для Министерства Обороны США разработали язык Ada. Это был универсальный язык, с помощью которого управляли кораблями, самолётами и военными базами. Именно его и решили использовать в NASA.

Изначально Ada был похож на языки Алгол и Pascal и отличался строгой типизацией. Позже он стал поддерживать принципы ООП, а последнее крупное обновление для Ada вышло в 2012 году. Также код на Ada был на 60% дешевле, чем на языке Си, и выдавал в 9 раз меньше ошибок.

Вот пример кода на Ada:

			with Ada.Text_IO;

procedure Hello is
  use Ada.Text_IO;
begin
  Put_Line("Hello, world!");
end Hello;
		

Внимательный читатель задастся вопросом: «А почему выгоднее использовать Ada, если Hello World занимает 7 строк?». Что ж, этот читатель будет абсолютно прав! ? Точно таким же вопросом задались и в Минобороны США, и в NASA.

Хотя код на Ada был прост, быстр и надёжен, он не был лёгким, из-за чего NASA перешла на С.

Сегодня большинство ПО в NASA разработано именно на С, а Python не используется вовсе. Также разработчики NASA стараются не использовать С++. Причина в том, что код на С++ трудно обслуживать, а в коде часто случаются ошибки.

При разработке на языке Си проблемы возникают реже, потому что он наиболее близок уровню “железа”, а писать на нём — легко и быстро.

Ещё, как ни странно, инженеры NASA не используют ресурсоёмкое железо и предпочитают чипы с частотой 20 MHz и оперативной памятью в 128 MB. Нагружать такое железо сложными скриптами нельзя: приходится экономить на всём.

На чём кодят в SpaceX

В отличие от NASA, SpaceX — компания Илона Маска, которая основана для колонизации Марса — использует именно С++, который идеально подходит для разработки дистанционных систем управления.

Можно предположить, что частная компания Маска может позволить себе использовать современное железо, для которого выполнение программ на C++ — не проблема.

Также SpaceX использует JavaScript: в частности, каркас веб-приложений Knockout.js и шаблонизатор Handlebars.

Чуть реже компания использует динамический язык стилей LESS и Python. Что касается операционных систем, SpaceX внедряет Linux.

Готовое ПО для полёта на Луну

К сожалению, космонавты не делятся конфигурациями ПО для запуска ракет, но есть обрывки информации о том, какие решения применялись ранее.

На GitHub можно найти несколько репозиториев с кодом для миссии Apollo-11 — той самой, в ходе которой американцы первыми высадились на Луну. Или которую якобы снял Стэнли Кубрик в одной из студий Голливуда.

Вот несколько репозиториев с восстановленным ПО для Apollo-11:

  1. chrislgarry/Apollo-11 — самый популярный репозиторий с кодом на Ассемблере. ПО было восстановлено специалистами из Virtual AGC и Музея MIT. Именно так выглядел код для оригинальной лунной миссии.
  2. alfonsokim/apollo-guidance-computer — ПО для Центра принятия решений миссии Аполлон-11. Основная часть кода написана на языках С и С++. Разобраться в коде будет гораздо проще, чем в Ассемблере. 
  3. virtualagc/virtualagc — ещё одна версия ПО для Центра принятия решений. Большая часть написана на Ассемблере. Также использованы Xproc и С. 

Кроме того, известна ОС, которая использовалась в NASA и SpaceX. Это VxWorks — UNIX-система, которая стала основной для кораблей серии Dragon. Также VxWorks использовали для марсохода Curiosity, который был запущен в 2011 году.

Ещё в 2021 году NASA опубликовала список open-source решений, используемых в программе. Здесь можно найти, к примеру, ПО для робота Astrobee, который выполняет стыковку и посадку на МКС.

Заключение

Надеюсь, после прочтения этой статьи вы загорелись желанием написать своё ПО для космического корабля, а в будущем вас ждёт судьба Илона Маска с собственным аналогом SpaceX. В таком случае, не забудьте упомянуть Tproger в торжественной речи, когда ваш модуль успешно приземлится на Луне! ?

А если вы уже своего рода Илон Маск или просто опытный разработчик ПО для космических аппаратов, делитесь инсайдами в комментариях: расскажите нам, какие языки программирования вы используете, какие технологии нужно рассмотреть начинающим косморазработчикам и как успешно запустить ракету в космос.

Следите за новыми постами
Следите за новыми постами по любимым темам
55К открытий56К показов