Языки программирования в космонавтике. Роскосмос, NASA и CASC

В космической отрасли, разумеется, нет единого или золотого стандарта к выбору языка программирования, но есть важное разделение на те, что используются на борту космического аппарата и те, что на земле.

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

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

Далее в статье будут рассмотрены языковые стеки трех крупнейших космических организаций: Роскосмоса, NASA (с подрядчиками) и CASC.

1. Роскосмос, ЦНИИмаш, РКК «Энергия»

Государственная корпорация по космической деятельности «Роскосмос» 
Государственная корпорация по космической деятельности «Роскосмос» 

1.1 Бортовое ПО

Язык C является основным для бортового ПО в отечественной кампании. Полный контроль над памятью, отсутствие исключений и динамической памяти после старта делают его до сих пор идеальным кандидатом в глазах Роскосмоса. [4]

Язык Ada. Используется во время критичных системах таких как аварийное прекращение полёта, жизнеобеспечения скафандров и автопилота. Ada прославлена строгой типизацией, что помогает ей выявлять ошибки на этапе компиляции, давая больше возможностей для большей оптимизации.

Ассемблер встречается редкими вставки для самых быстрых операций.

1.2 Наземное ПО

C++ и Qt используются для написания интерфейсов операторов в Центре управления полётами.

Python понемногу проникает в среду разработки. Например, на нем пишут анализы телеметрии после полетов, но пока это неофициальные скрипты.

1С и Excel. В основном ими составляют расписания связи и рассчитывают бюджет топлива. Макросы были написаны ещё в 90-х.

Fortran. Библиотеки для расчёта траекторий были написаны еще 40–50 лет назад. Переписывать такое наследие себе дороже.

Импортозамещение. С 2020-х годов наземное ПО переводится на процессоры «Эльбрус». Это, простыми словами, сложно: у них другая архитектура, другой порядок байтов. Старый код, писавшийся под Windows и Intel, теперь нужно портировать.

2. NASA, SpaceX, Lockheed Martin, JPL

NASA National Aeronautics and Space Administration 
NASA National Aeronautics and Space Administration 

2.1 Бортовое ПО

C. Основной язык для навигации, управления двигателями и жизнеобеспечения, старые и проверенные программы. Например, марсоход Curiosity написан на C с операционной системой VxWorks. [1]

C++ используется в новых проектах, вроде ровера Perseverance, но с жёсткими ограничениями, такими как: запрещения исключений, на динамическую память и RTTI. [2]

Ada так же почетно сохраняется в старых системах (шаттлы, военные спутники). [3]

2.2 Наземное ПО

Python в последнее время стал стандартом для науки. Обработка данных с телескопа James Webb, симуляции гравитации, калибровка снимков - всё это делается на Python с NumPy и SciPy.

MATLAB / Simulink используют на этапе проектирования. Сначала моделируют систему, потом переписывают модель на C для борта.

Fortran. Пишут новые модели атмосферы на современном Fortran (2008+), он очень быстр и удобен в математических вычислениях.

Rust. Появляется в инструментах для анализа данных. В полёт пока не летал, его пока тестируют.

3. CASC (Китайская аэрокосмическая корпорация)

CASC China Aerospace Science and Technology Corporation
CASC China Aerospace Science and Technology Corporation

3.1 Бортовое ПО

C и C++17. Стандарт, много о нем не скажешь, особенно в отношении Китая. [5]

Операционные системы. Используют VxWorks (закупленную до санкций) и разрабатывают свою RTOS на базе Linux.

3.2 Наземное ПО

Python. Неудивительно популярен у молодых инженеров, с его помощью на PyTorch обучают нейросети для распознавания кратеров при посадке на Луну.

Java. Используется для больших баз данных телеметрии.

Собственные библиотеки на C++. Свои реализации линейной алгебры, чтобы исключить потенциальные бэкдоры и подогнать код под суперкомпьютеры.

Преимущество Китая. Так как у Китая отсутствует такое наследие, как скажем, у России и Америки в отношении Фортрана - они начали писать код с нуля на современном С++, что и дало им соответственную скорость разработки.

Сравнительная таблица
Сравнительная таблица

Выбор языка часто является не техническим решением, а историей разработки. Роскосмос и NASA пользуются многолетними свитками Фортрана, потому что переписывать миллионы строк кода слишком дорого. Китай же начал с нуля и сразу взял C++17, что ускорило и упростило разработку в разы.

Источники

22
11