Наверное, многие задавались вопросом, что используют для создания необходимых для работы космических аппаратов и сопутствующего оборудования космические агентства. В интернете есть фрагментированные ответы на этот вопрос, а мы постарались собрать всё вместе и сделать развернутую статью с подробной информацией. Так что просим под кат.
Что вообще применяется в космической отрасли
Сразу стоит сказать, что любая система, которая используется в космосе или на Земле для работы с космическими аппаратами, должна соответствовать стандартам безопасности отрасли. А они весьма строгие, ведь права на ошибку практически нет. Ошибка в месте запятой в дробном числе может быть причиной аварии или отказа определённой системы, что уже случалось.
Поэтому и выбор стека технологий тоже должен быть строгим. Вот список языков, которые используются в космонавтике:
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.
Возможно, кто-то из читателей знает дополнительные нюансы работы с ЯП в разных космических агентствах? Если да, расскажите об этом в комментариях.
Комментарии (24)
forthuse
22.08.2023 11:08+5Интересно, а почему в статье обойдён вопрос использования Форт (Forth) языка для программирования научного оборудования т.к. и для него есть и аппаратные процессоры.
Сейчас самой странички http://forth.gsfc.nasa.gov/ на сайте нет, но в Веб архиве она сохранена.
(странно, что даже в каких то репозиториях от Nasa сей факт наличия Форт кода не стал публичным и зачем то была удалена даже официальная страница с сайта)Чужие: странная архитектура инопланетных компьютеров
P.S. Стековые процессоры есть и у России и Беларуссии, но используются ли они в Космосе
публичных сведений нет.
Blaukovitch
22.08.2023 11:08+2Intel 8085 (или аналоги), 2006 год
assembly language
На примере "Вояджеров" - идеальный вариант.
eandr_67
22.08.2023 11:08+8Назвать Ada, разработанный в 1980 году, "одним из старейших языков" и не упомянуть возраст созданного на 10 лет раньше C, по меньшей мере странно.
zodchiy
22.08.2023 11:08+5Не надо вводить людей в заблуждение, я видел рекламу в ютубе - "I want to work for NASA, so I'm learning Javascript, Python and React", полгода её крутили, реклама не врет!
cdriper
22.08.2023 11:08в космос ты это не отправишь
слишком до хрена кода, корректность которого никак не верифицируешь
DvoiNic
22.08.2023 11:08+9Хосспадя. Ну закопайте вы уже стюардессу с именем "ДУРАКОН".
Графит-Флокс — система с использованием оного "инструмента" — держится только и исключительно потому, что есть еще несколько одногодков Паронджанова, и только им он и нужен. И поэтому — писали уже то-ли на oberon.su, то-ли на хабре — разрабами используется "на отвали", "чтобы старперы отвязались". А в работе используют нормальные современные IDE.При помощи этой среды можно видеть всё, что происходит и работает, на одном экране.
при помощи этой, хм, ~~студенческой поделки ~~ "среды" видеть кроме статических картинок ничего нельзя.
angry_paimon
22.08.2023 11:08Типа вот бы ещё рассказывали какие российские ИТ-продукты юзают. Все три Труконф)
iliasam
22.08.2023 11:08Интересный документ попался: https://epizodsspace.airbase.ru/bibl/vestnik-lavochkina/2016/2016-1.pdf
48 стр - " Основные принципы построения программной системы подготовки и функционирования блока управления и специализированного языка программирования "
victor_1212
22.08.2023 11:08+2> ПО для Центра принятия решений миссии Аполлон-11. Основная часть кода написана на языках С и С++. Разобраться в коде будет гораздо проще, чем в Ассемблере.
Apollo 11 это 1969, C даже в проекте не было, хотя автор вероятно не в курсе, предшественник ada jovial не упомянут, что характеризует уровень статьи
jobless
22.08.2023 11:08+2Со слов автора, он есть на хабре. https://pl1.su/question/
Используется ли сейчас этот компилятор?
Да, с успехом используется в РКК «Энергия». Например, на Российском сегменте МКС на лэптопах (ноутбуках) экипажа постоянно запущена программа, информирующая экипаж о полетной обстановке. Экраны с этой программой часто попадает в кадры хроники с МКС. Она создана с помощью данного компилятора и в данный момент продолжает развиваться.
Bedal
22.08.2023 11:08Что касается Ada, этот язык применялся для управления объектами в режиме реального времени. Но чуть позже стали использовать более современные С, С++ и Perl.
очень хотелось бы посмотреть на систему реального времени, писанную на Перле. Сколь угодно мягкую.
dizatorr
22.08.2023 11:08Роскосмос использует для запуска космических кораблей ДРАКОНа.
Блин, звучит как строка из фэнтези. :)
R0bur
22.08.2023 11:08В этой организации код ещё пару десятков лет назад писался почти исключительно на ассемблере, поскольку и чипы с рядом компонентов были не самые новые. Так, например, в 2006 году миссии THEMIS и STEREO работали на базе процессоров Intel 8085, выпущенных ещё в 1976 году.
Степень новизны чипов не объясняет, почему нельзя было использовать кросс-компиляцию, например, с Си? Разве что сами программы настолько примитивны, что решили не тратить время на инструментарий.
Mike-M
22.08.2023 11:08Говоря о языке С, в статье следовало упомянуть его версию для ответственных применений MISRA C, к которым относится и аэрокосмическая отрасль.
BareDreamer
22.08.2023 11:08Википедия сообщает, что MISRA C – это не версия языка Си, а набор рекомендаций (правил) по программированию на Си.
programmerjava
А как же Rust ?
Sabirman
Насколько я помню, в NASA в системах реального времени запрещено работать с динамической памятью - вся память должна быть выделена сразу же при старте программы.
DancingOnWater
Пока я тут проблем не вижу.
DmitryZlobec
А нет ли ссылочки на эту рекомендацию.
fivlabor
https://habr.com/ru/companies/hexlet/articles/303160/
Ссылка на документ из статьи (JPL Standard C) не доступна, но можно здесь взять https://github.com/abougouffa/awesome-coding-standards/tree/master
Там же и MISRA, что примерно то же самое
Забавно, что в 2016 году в комментариях первый вопрос также про Rust
NooneAtAll3
А как это связано с Ржачкой?
Плюсы и Цешку ж не запрещают
Felin