Наверное, многие задавались вопросом, что используют для создания необходимых для работы космических аппаратов и сопутствующего оборудования космические агентства. В интернете есть фрагментированные ответы на этот вопрос, а мы постарались собрать всё вместе и сделать развернутую статью с подробной информацией. Так что просим под кат.
Что вообще применяется в космической отрасли
Сразу стоит сказать, что любая система, которая используется в космосе или на Земле для работы с космическими аппаратами, должна соответствовать стандартам безопасности отрасли. А они весьма строгие, ведь права на ошибку практически нет. Ошибка в месте запятой в дробном числе может быть причиной аварии или отказа определённой системы, что уже случалось.
Поэтому и выбор стека технологий тоже должен быть строгим. Вот список языков, которые используются в космонавтике:
Ada. Это один из старейших языков, который до сих пор применяется. Его достоинство в поддержке как объектно-ориентированного, так и не объектно-ориентированного программирования. Он подходит как для использования в комплексных системах, так и для низкоуровневой разработки. Язык позволяет обнаруживать ошибки ещё во время компиляции, а не уже непосредственного выполнения программы. Кроме того, в Ada преимущественно используются слова, а не символы. В целом это снижает риск ошибок при кодинге.
Язык ассемблера (от англ. assembly language) — императивный язык низкого уровня, который используется для представления команд CPU. Также один из старейших, используется в космонавтике очень давно.
Язык С. Относительно широко применяется, достоинства — производительность и гибкость.
C++. Этот язык в частности применяет в работе SpaceX, о чём поговорим ниже.
FORTRAN. Еще один «артефакт» прошлых эпох разработки, который до сих пор используется. Он один из немногих сохранившихся ЯП, появившихся ещё в 50-х годах прошлого века.
MATLAB. Очень хороший инструмент для вычислений. С его помощью анализируют различные полетные (и не только) данные, а также разрабатывают модели и реализуют симуляции в аэрокосмической отрасли.
Python. Вероятно, один из новейших языков в списке. Его применяют в SpaceX, NASA и других организациях. В частности Python используется для разработки ПО, которое получает, анализирует и систематизирует данные с телескопа «Джеймс Уэбб».
О NASA, SpaceX и Роскосмосе
NASA
В этой организации код ещё пару десятков лет назад писался почти исключительно на ассемблере, поскольку и чипы с рядом компонентов были не самые новые. Так, например, в 2006 году миссии THEMIS и STEREO работали на базе процессоров Intel 8085, выпущенных ещё в 1976 году. Соответственно, код для них писался на машинно-ориентированных языках. Понятно, что код этот простым не назовёшь, но ПО было очень быстрым. Вот сравнение кода на Ассемблере и Pascal.
Тогда же в NASA использовали и Fortran, но не для космического оборудования, а для систем, которые находились на Земле и предназначались для управления этим оборудованием. Также NASA в 70-е стала разрабатывать два специальных языка, HEL/S для ПО космических аппаратов, и HEL/G для наземного оборудования. Но они оказались непрактичными, сложными и в итоге никому не нужными.
Что касается Ada, этот язык применялся для управления объектами в режиме реального времени. Но чуть позже стали использовать более современные С, С++ и Perl. На С написана специальная ОС VxWorks для роверов, от Pathfinder до Curiosity. А вот программное обеспечение для визуальной навигации написано на С++. Но для проектирования полетов применяется всё же С.
Тем не менее, поскольку в распоряжении NASA — огромный «зоопарк» оборудования разных лет, то и языки используются разные. Так, например, Assembler используется, когда речь идёт о необходимости оптимизации или драйвере. Для моделирования, как минимум в JPL, большинство поддерживают MatLab. А вот скриптовые языки практически не используют, за исключением проектов, где требуется анализ данных, как в случае с обработкой информации с «Джеймс Уэбб».
О приверженности языку С как-то высказался один из разработчиков агентства (правда, еще в 2016 году — с того времени многое могло поменяться): «Код должен быть легко портируем на основной язык. На С написаны и драйвера для всего коммерческого оборудования. Этот язык быстрый, для него существует множество качественных библиотек, он позволяет писать на очень низком уровне, «ближе к железу», что крайне важно. Огромным плюсом является и то, что есть много компиляторов, которые придерживаются стандарта C. Например, если вы пользуетесь, gcc, то в силу строгости правил генерации кода вы можете быть уверены, что программа будет выполняться одинаково на абсолютном большинстве машин».
Вот, кстати, репозитории с ПО для Apollo-11 (понятно, что это восстановленный софт):
hrislgarry/Apollo-11 — самый популярный репозиторий с кодом на Ассемблере. ПО было восстановлено специалистами из Virtual AGC и Музея MIT. Именно так выглядел код для оригинальной лунной миссии.
alfonsokim/apollo-guidance-computer — ПО для Центра принятия решений миссии Аполлон-11. Основная часть кода написана на языках С и С++. Разобраться в коде будет гораздо проще, чем в Ассемблере.
virtualagc/virtualagc — ещё одна версия ПО для Центра принятия решений. Большая часть написана на Ассемблере. Также использованы Xproc и С.
И вот ещё список список open-source решений, используемых NASA.
Роскосмос
Если говорить о космических проектах прошлых лет, то, например, для разработки ПО аппаратов серии «Венера» использовался язык Fortran. Применялся он и для некоторых других систем.
Развитие современной базы инструментов разработки началось с момента начала реализации проекта «Буран». Для этого проекта разработали сразу несколько собственных языков:
ПРОЛ2 — язык для разработки комплексных бортовых программ в реальном времени.
ДИПОЛЬ — проблемно-ориентированный язык для создания программ для наземных испытаний.
ЛАКС — язык для моделирования.
Сейчас применяются и другие языки, включая вполне себе современные. Но отличием от «коллег» в случае Роскосмоса является использование ДРАКОНа (Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность).
Это реализация языка из семейства IEC 61131-3, а именно SFC. Собственно, ДРАКОН — не совсем язык, а скорее среда визуальной разработки определённых модулей процесса. При помощи этой среды можно видеть всё, что происходит и работает, на одном экране. Сейчас на базе такой среды разрабатывают программные пакеты для создания промышленных контроллеров, роботизированных систем и т.п.
А так в Роскосмосе используются и Java, Python и другие языки.
SpaceX
В компании, созданной Илоном Маском, тоже используются разные языки программирования. Но их подборка гораздо меньше, чем у NASA. Да и древние ЯП не применяются: все языки, что входят в стек SpaceX — современные высокоуровневые языки.
Так, например, ПО для Falcon и Dragon написано на С++. В компании его называют универсальным и применяют для разработки роботов, систем дистанционного управления и самих космических ракет. Насколько известно, именно С++ является основным. На Reddit сотрудники SpaceX периодически дают ответы относительно языков программирования, которые используются в компании. Вот один из ответов: «Нам нравится объектно-ориентированный подход в C++, но при этом мы стараемся писать настолько простой код, насколько это вообще возможно. Ещё мы используем несколько библиотек с открытым исходным кодом, но у нас очень жёсткие требования к их качеству, поэтому нам проще написать свои библиотеки, где мы точно уверены в качестве кода».
ПО, которое отвечает за полёт, пишется на C и C+. Так разработчиков компании обучают писать код для двигателя на языке C++ и придерживаться того же подхода к надёжности во всех проектах.
Для вывода информации на экраны в SpaceX выбрали HTML, JavaScript и CSS. Python, что вполне логично, используется для тестов. К слову, интерфейс на мониторах в Crew Dragon отображается с помощью движка Chromium и JavaScript.
Кроме него используются и C# вместе с JavaScript. Также в компании для реализации разных проектов применяют Knockout, Handlebars, Python, LESS. Для моделирования используют LabVIEW.
Возможно, кто-то из читателей знает дополнительные нюансы работы с ЯП в разных космических агентствах? Если да, расскажите об этом в комментариях.