Языки программирования в космонавтике. Роскосмос, 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
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 (Китайская аэрокосмическая корпорация)
3.1 Бортовое ПО
C и C++17. Стандарт, много о нем не скажешь, особенно в отношении Китая. [5]
Операционные системы. Используют VxWorks (закупленную до санкций) и разрабатывают свою RTOS на базе Linux.
3.2 Наземное ПО
Python. Неудивительно популярен у молодых инженеров, с его помощью на PyTorch обучают нейросети для распознавания кратеров при посадке на Луну.
Java. Используется для больших баз данных телеметрии.
Собственные библиотеки на C++. Свои реализации линейной алгебры, чтобы исключить потенциальные бэкдоры и подогнать код под суперкомпьютеры.
Преимущество Китая. Так как у Китая отсутствует такое наследие, как скажем, у России и Америки в отношении Фортрана - они начали писать код с нуля на современном С++, что и дало им соответственную скорость разработки.
Выбор языка часто является не техническим решением, а историей разработки. Роскосмос и NASA пользуются многолетними свитками Фортрана, потому что переписывать миллионы строк кода слишком дорого. Китай же начал с нуля и сразу взял C++17, что ускорило и упростило разработку в разы.