Какие языки программирования используют в космосе

В невесомости не проводят код-ревью — однако любой баг может оказаться фатальным. Рассказываем о нелегкой профессии «космического программиста»

Прошло время, когда спутники просто красиво летали и делали «пип-пип-пип». Сегодня спутник — это настоящий сервер в космосе, а само безвоздушное околоземное пространство пронизано высокоскоростными каналами связи (даже на МКС есть полноценный вай-фай).

Управлять спутниками — сложно, здесь требуется труд сотен программистов. Только для удержания спутника на заданной орбите требуется обработать массу информации с различных датчиков — ориентации, скорости, магнитного поля. Кроме того, спутники не просто летают, они выполняют полезную работу. Например, служат ретрансляторами в системах связи, фотографируют Землю, ведут радиоразведку.

Вот для чего ещё нужны программы:

  • Для управления полётом ракеты и вывода спутника на орбиту. Небольшой баг в расчётах может привести к аварии и выходу оборудования из строя.

  • Для использования в ЦУПе, Центре управления полётами. Здесь моделируют ситуации и ищут пути их решения. Например, тестируют разворот спутника в космосе.

  • Для обработки данных, полученных от спутника. Например, почти в каждом смартфоне есть программы навигации, умеющие обрабатывать сигнал от спутников. Если спутник ведёт фотосъёмку, то нужны программы для обработки спутниковых изображений.

Радиоактивное излучение в космосе легко может вывести из строя оборудование на основе массовых электронных плат. Поэтому в спутниках используют специальные защищённые микросхемы. Соответственно, программирование усложняется.

На каких языках пишут программы в Роскосмосе, NASA и SpaceX

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

Основной язык разработки в Роскосмосе — ДРАКОН, «Дружелюбный русский алгоритмический язык, который обеспечивает наглядность». Его создали ещё в Советском Союзе. В его основе лежит язык ПРОЛ2, который используют для разработки бортовых программ, а также ДИПОЛЬ для наземных испытаний и ЛАКС для моделирования. По сути, ДРАКОН — это не полноценный язык для программирования, а система для создания блок-схем. Вы можете сами попробовать составить на нём какую-либо схему. ДРАКОН поддерживает JavaScript, Python или C++, вместе с которыми образует гибридные языки, например ДРАКОН-Python.

Artboard

В NASA ещё в 2000-х годах писали код в основном на Assembler. Это низкоуровневый язык программирования, представляющий собой машинный код. Для работы спутников использовались микросхемы 70-х годов, которые программировали как раз на ассемблере.

Был также специальный язык программирования для космоса — ADA. Это один из старейших языков высокого уровня, предназначенный для автоматизации управления процессами, например, в бортовых компьютерах. Сейчас он устарел и используется редко.

Большинство программ NASA пишется на C. В том числе, известный марсоход Curiosity программируется на «Си», даже без «плюсов». Но также иногда используются C++ (для визуальной навигации) и Fortran (для управления оборудованием на Земле). NASA пыталось уйти от такого «зоопарка» языков программирования, но из-за разного оборудования достичь этого пока не удалось.

Космические компьютерные технологии — иллюстрация басни про лебедя, рака и щуку. С одной стороны, спутникам и межпланетным аппаратам нужны новейшие приборы и камеры. А с другой стороны всё это работает на старой-доброй аппаратной и кодовой системе 20-летней давности (ведь это оборудование проверено многократно).

У SpaceX, в отличие от старых космических гигантов, более современный подход к программированию. Здесь в основном используют C++: его называют универсальным и применяют для разработки роботов, систем дистанционного управления и космических ракет. C++ потребляет больше ресурсов, чем тот же C, но компания активно внедряет массовые процессоры и серверы, которые мощнее специальных космических. Для повышения надёжности вместо одного сервера управления используется три, каждый из которых может работать самостоятельно. Также в SpaceX пишут на JavaScript — например, интерфейс на мониторах в Crew Dragon, — а для тестирования используют Python.

Какие казусы бывают из-за багов

4 июня 1996 года ракета-носитель Ariane 5 взорвалась в космосе. Были уничтожены четыре спутника научной программы Cluster, предназначенных для изучения взаимодействия солнечного излучения с магнитным полем Земли. Причина — ошибка преобразования переменной: программа была рассчитана на старый тип ракет, а в алгоритме запуска использовали новый.

20 декабря 2019 года нештатно закончился полёт американского космического корабля CST-100 Starliner. Причиной стала ошибка в софте: бортовое время, которое отсчитывал таймер корабля, отличалось от фактического.

23 сентября 1999 года космический аппарат Mars Climate Orbiter развалился в марсианской атмосфере, поскольку в программном компоненте давалось значение импульса, измеренное в фунт-сила-секундах, а другой компонент принимал его в ньютон-секундах.

Космос не прощает ошибок в программировании, поэтому главное требование к космическому ПО — многократное и тщательное тестирование. Если вы хотите писать код вообще без единой ошибки, то вас ждут в ЦУПе!

Как стать разработчиком ПО для космоса

В вузах, связанных с аэрокосмической отраслью, есть факультеты, которые готовят разработчиков ПО для спутников и всего, что с ними связано. Вот несколько примеров:

Космический центр имени М.В. Хруничева активно нанимает программистов. Работать предстоит в том числе над новой лунной программой, а также программировать гражданские спутники связи. Космический программист — это отличная работа для тех, кто влюблен в код не меньше, чем в звёзды.

Краткий пересказ от Yandex GPT