Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Даглас Хёрли и Боб Бенкен в капсуле «Индевор»
Компания SpaceX ведёт стремительную разработку проектов сразу по нескольким направлениям. Первая ступень ракеты Falcon 9 после запуска полезной нагрузки в космос возвращается на Землю для повторного использования, подобное тестируют для прототипов Starship. На МКС корабль Crew Dragon доставляет экипаж, готовится второе поколение грузовиков Dragon. Рой спутников связи Starlink выдаёт больше сотни мегабит в секунду для реальных пользователей открытого бета-теста.
Все эти проекты требуют высокой степени автоматизации, за которую отвечает команда разработки программного обеспечения. Про неё специалисты SpaceX рассказывают с удовольствием: это не только важно для привлечения соискателей на открытые вакансии, но и интересно для всех остальных.
Сложность космоса
14 декабря 1966 года в беспилотном испытательном запуске «Союза» корабль 7К-ОК № 1 встал на стартовой площадке: не сработала «зажигалка» на одном из двигателей. Автоматика остановила последовательность действий запуска до того, как ракета успела отделиться от поверхности стартового стола. Персонал приблизился к ракете для её осмотра и оценки возможности повторного запуска. Внезапно сработала система аварийного спасения (САС) «Союза». Её пороховые двигатели бережно вынесли спускаемый аппарат на высоту 700 метров и отдали его во власть парашютов, но также зажгли разлившуюся горючую жидкость системы терморегулирования приборного отсека, который остался на Земле. Верхушка ракеты загорелась. Как вспоминает Черток, память о катастрофе Неделина заставила людей покидать стартовую площадку бегом. Погиб один человек.
Выяснение причин срабатывания САС на неподвижной ракете началось ещё до тушения стартовой площадки. Во время полёта ракета постоянно сравнивает отклонения инерциальной системы отсчёта от расчётной траектории. Если разница слишком велика, то срабатывает САС. Стоящая на стартовой площадке ракета всё же движется: она вращается с Землёй, а гироскопы «привязаны» к звёздам. При проектировании аварийных систем Земля предполагалась неподвижной. За 27 минут «набежало» примерно 8 градусов, и на 32 пиротехнических заряда САС поступил сигнал зажигания.
Этот «баг» упустили из виду даже без сложностей современных компьютеров. Сегодня электроникой управляются все критические системы любого космического аппарата. Это уже даже не «самый дорогой дефис в истории» зонда «Маринер-1» 1962 года: в современных системах пространство для ошибок исчисляется десятками, сотнями тысяч строк кода. Любой заметный сбой программного обеспечения вызывает деградацию качества работы или вовсе приводит к потере аппарата.
Кажется, что зрелость направления и сама культура аэрокосмической разработки свели на нет любые «детские» ошибки. Но это не так. До сих пор ракеты взрываются с ошибкой преобразования переменной, марсоходы зависают с инверсией приоритета, а орбитальные зонды падают из-за значения не в той системе измерения. Даже «Старлайнер», прямой конкурент Crew Dragon, не долетел до МКС из-за качества софта.
SpaceX выложила этот видеоролик с любовью к своей культуре проб и ошибок
На этом фоне любопытно выглядит пример SpaceX. Эта относительно молодая компания с заметными достижениями не случилась бы без программного обеспечения, которое быстро разрабатывают и тестируют небольшие команды.
«Сокол» на x86
Проблемы вызывает не только надёжность кода — космос враждебен даже к «железу». На Земле от радиации мы защищены магнитным полем и атмосферой. В космосе поток высокоэнергетических частиц с лёгкостью превратит единицу в ноль в ячейке памяти или вообще выведет из строя компоненты. Космическая микроэлектроника как минимум требует специальной сертификации, а иногда прибегает к специальным микросхемам, к примеру, на технологиях полупроводников кремния на сапфире.
В SpaceX игнорируют сформировавшееся щепетильное отношение к космическому оборудованию. Компания с момента основания выделялась своей любовью к относительно дешёвым компонентам. К примеру, в 2005 году журналисты сообщали, что в ракете Falcon 1 компьютеры общались по обычному кабелю Ethernet.
Как рассказывали (1, 2) инженеры SpaceX на конференции GDC 2015, на ракете Falcon 9 на каждой из ступеней установлены по три двухъядерных компьютера архитектуры x86. В каждом компьютере на каждом из двух ядер независимо друг от друга работает операционная система с полётным софтом. Также в ракете установлены микроконтроллеры архитектуры PowerPC. Они управляют разными исполнительными механизмами: двигателями, решётчатыми рулями и так далее.
Всё это оборудование объединено в систему actor-judge.
- Почти всё выражается в традиционном для ТАУ виде контура управления: много раз в секунду с датчиков приходят данные, по ним и прошлым состояниям системы принимается решение, компьютер выдаёт сигналы устройствам.
- Ядра выполняют вычисления независимо друг от друга. Результат работы двух ядер сравнивается. Если на обоих ядрах получился разный результат, этот инстанс команду не посылает.
- Микроконтроллеры получают команды от трёх разных компьютеров. Микроконтроллер решает, кому из трёх верить, и выполняет команду. При рассинхронизации компьютеров контроллер положится на тот, который был самым точным в прошлом.
- Успешный полёт Falcon 9 возможен всего с одним оставшимся компьютером из трёх.
Такая архитектура как упрощает тестирование на Земле, так и обеспечивает необходимый уровень устойчивости к радиации. Не нужны специальные дорогие микросхемы, у которых к тому же может оказаться архитектура, знакомая лишь небольшому числу разработчиков на рынке труда.
Управляющие компьютеры тестируют на так называемом стенде table rocket, «ракете на столе». «Мозги» Falcon 9 раскладывают на плоской поверхности и соединяют так, как они работают в реальной ракете. Затем специалисты запускают полный симулированный полёт, следят за поведением системы, её производительностью и возможными отказами. Во время симуляции могут отключить один из полётных компьютеров, чтобы понять, как на это ответит ракета.
Также всю систему управления в состоянии виртуализировать одна рабочая станция, что делает возможными массовое автоматизированное тестирование и проверку кода для полёта всего за сутки.
Похожая система с тройной избыточностью установлена в космическом корабле Dragon, говорили на GDC 2015. В ответах 2020 года сотрудники туманно намекнули, что кораблём Crew Dragon управляет отдельный четырёхъядерный процессор, сравнимый по вычислительной мощности со смартфоном пятилетней давности.
Вообще, SpaceX не отчитывается о точных моделях процессоров. Возможно, контроллеры PowerPC — это радиационно устойчивый RAD750, хорошо зарекомендовавший себя в марсоходах и зондах, а процессоры x86 — промышленные встраиваемые решения с низким тепловыделением и скромной производительностью.
Но для космоса многого не нужно. Сама МКС управляется процессором Intel 80386SX-20 с математическим сопроцессором 80387. Даже на момент запуска станции это был продукт десятилетней давности.
В космос в браузере
30 мая компания SpaceX впервые запустила людей на орбиту. Наконец появилась вторая опция доставки экипажа на Международную космическую станцию. С 2011 года единственным решением для этого были российские «Союзы».
Аудитория онлайн-трансляции обратила внимание, насколько корабль Crew Dragon выглядел крупнее трёхместной капсулы «Союза». При схожем внутреннем объёме у корабля SpaceX 4 метра диаметра против союзовских 2,2 м. SpaceX изначально рекламировала корабль как семиместный, но НАСА будет запускать на пилотируемых «Драконах» четырёх астронавтов.
Кроме физических различий наиболее заметно было то, как управляли кораблём люди. «Союз» не отходит от традиций авиационно-космического машиностроения: экипаж нажимает на тумблеры и клавиши, а сигнальные табло выводят информацию. «Крю Дрэгон» всё делает по-своему. Для футуристичного корабля SpaceX основной элемент — тачскрин.
Экраны Crew Dragon работают на браузерном движке Chromium, то есть интерфейсы созданы на HTML с использованием веб-компонентов, JavaScript и CSS. Внутри компании написали собственную реактивную библиотеку. Разработка интерфейсов идёт по методологии Agile с высокой планкой для покрытия юнит-тестами.
Скриншот браузерного симулятора стыковки.
Ещё до первого пилотируемого запуска SpaceX опубликовала браузерный симулятор стыковки «Крю Дрэгона» к МКС. Симулятор начинался как хобби двух разработчиков компании. Затем его решили закончить и опубликовали для широкой публики.
Симулятор остаётся симулятором: ничего общего с реальным кодом у него нет. Хотя оба продукта писала одна и та же команда, это два абсолютно разных проекта.
Всё это не значит, что космический корабль летает на JavaScript. Chromium на корабле используется только как средство отрисовки элементов пользовательского интерфейса. Слой взаимодействия с полётным программным обеспечением имеет все необходимые меры резервирования и находится за пределами дисплеев, говорят сотрудники SpaceX. Бэкенд написан на C/C++.
Обычный браузерный движок в космическом корабле — дерзкое решение. В ответах сотрудники SpaceX заверяли, что вне зависимости от технологического стэка стандарты разработки одинаковы, принципы написания надёжного и производительного ПО не меняются, а для понимания возможных ошибок тестирование идёт под разнообразными условиями. На случай отказов есть соответствующие уведомления и процедуры. Наконец, к тестированию добавляются сотни часов обучения астронавтов на полётных симуляторах на Земле.
На всякий случай под тач-дисплеями расположены физические клавиши. Они предназначены для критических ситуаций, к примеру, пожара в кабине корабля. Также есть физические кнопки «начать» и «прервать» для большинства операций, которые можно вызвать с дисплеев. НАСА разработало специальные требования к самим экранам, и решение SpaceX им соответствует.
Сотрудники SpaceX также объясняли, как они пришли к такому внешне нетрадиционному для аэрокосмической отрасли решению. Проект начинался как прототип для демонстрации образца дизайна для НАСА. Затем прототип с успехом запустили на реальном полётном «железе». Разработчикам понравились современные функции, которые присутствовали в браузерном движке, да и разработчиков под него на рынке достаточно.
Диаграмма показывает, как код на JavaScript изолирован от основных систем управления телескопа «Джеймс Уэбб»
Если отвлечься от опыта SpaceX, то ничего возмутительного в выборе JavaScript для космической области нет. В случае космического телескопа «Джеймс Уэбб» код на JS будет выполняться прямо на аппарате. Он не будет напрямую контролировать, к примеру, двигатели, он будет лишь вызывать другие программы.
Почему в космосе нет звука?
Потому что ракета летает на Linux.
Софт Falcon 9 регулярно обновляют. Почти каждый запуск ракета летит с незначительно обновлённым кодом. Хотя обновления настолько часты, «базу» под каждый конкретный запуск специально не адаптируют. Этим занимаются другие отделы SpaceX, которые вносят свои коррективы в полётные конфиги: задают переменные ветра в день запуска, меняют пределы отказоустойчивости и так далее.
Crew Dragon управляется операционной системой Linux с патчем PREEMPT_RT для работы в реальном времени. В SpaceX не используют какой-то стандартный сторонний дистрибутив. В компании собрали собственное ядро и связанные с ним утилиты. За годы разработки ядро почти не модифицировали. Были лишь мелкие изменения и несколько специализированных драйверов для работы с аппаратным обеспечением.
Среди используемых проектов с открытым исходным кодом — загрузчик операционной системы Das U-Boot, система сборки дистрибутива Buildroot, стандартная библиотека С++ и библиотека языка C Musl. Но вообще в SpaceX используют не так много написанного вне компании софта и выбирают открытые проекты только с максимально возможным качеством.
В SpaceX тесты пишут на Python, тестируют в LabVIEW, а летают на С++. При написании в С++ используют объектно-ориентированные техники языка, хотя предпочитают сохранять всё как можно более простым.
SpaceX на уровне кода закладывает возможность нормальной работы с потерей маршевых или маневровых двигателей с компенсацией алгоритмом. В конечные автоматы заложены всевозможные аварийные ситуации. К примеру, в конечный автомат корабля «Дрэгон» заложен автономный переход от сближения со станцией к уходу, если наблюдаются некоторые отказы.
Сотрудники SpaceX говорят, что в Dragon нет «ИИ» (вероятно, подразумеваются нейросетевые алгоритмы), хотя какое-то машинное зрение для навигации используется. Разработчики пояснили, что не исключают использование программ с машинным обучением когда-нибудь в будущем.
Starlink
Проект спутникового Интернета Starlink — это ещё больше компьютеров. В каждом запуске ракета Falcon 9 выводит на орбиту 60 спутников, которые содержат более 4 тысяч компьютеров на Linux. SpaceX вывела на околоземную орбиту десятки тысяч нод на Linux и более тысячи микроконтроллеров.
Анимация показывает, как раскрывается солнечная панель спутника
Полгода назад Starlink генерировал около 5 ТБ телеметрии в сутки, и группировка стала лишь крупнее. Растёт число спутников, идёт работа над уменьшением объёма пересылаемых данных. Чтобы снизить объём данных, которые хранятся на борту и пересылаются на Землю, часть проблем диагностируются на самом устройстве.
Каждый из спутников Starlink снабжён двигателем на эффекте Холла. За счёт него спутник занимает нужную позицию в рое и уходит от столкновения с космическим мусором. Но эти манёвры ещё нужно правильно выполнить, а отдел управления у крупнейшей группировки спутников крошечный.
Поэтому программисты озадачились тем, как избегать столкновений и управлять положением спутников автоматически. В разработанной системе спутникам задают, в какое окно нужно попасть — и они самостоятельно отправляются туда. Также несколько раз в сутки спутники получают с Земли данные по сближениям с другими объектами на орбите. Затем спутники самостоятельно вычисляют нужные манёвры и уходят от космического мусора.
Дублирование внутренних систем в случае спутника Starlink выполняется лишь до определённого предела. Из-за общего числа спутников отряд не заметит потери бойца. При отказе одной ноды пользователь на Земле будет подключаться к другому видимому в небе спутнику.
При разработке и тестировании каждый из спутников флотилии Starlink рассматривают не как отдельный спутник, а как сервер в дата-центре. Часть задач критически важна: это управление, обновление программного обеспечения, питание и безопасность. Под эти приложения пишутся отдельные тесты. Многие другие функции допускают более гибкий подход, похожий на разработку веб-сервисов. Поэтому команда разворачивает тестовый билд на небольшое число спутников и сравнивает, как они себя ведут в сравнении с остальной группировкой. Далее при возникновении проблем софт улучшают или откатываются к предыдущей версии.
Этот процесс тестирования нужен для быстрого улучшения системы. Разработчики SpaceX утверждают, что много раз так удавалось найти и исправить отказы, которые на Земле предугадать было невозможно.
Спутник Starlink пропускает через себя пользовательские данные, и компьютерный взлом угрожает прослушкой. В SpaceX предусмотрели этот случай и добавили оконечное шифрование. Также каждый из компонентов — спутники, шлюзы и пользовательские терминалы — исполняет только подписанный код, поэтому надолго в системе злоумышленнику не прописаться.
Культура разработки
Б́ольшая часть инженеров программного обеспечения SpaceX работает в Сиэтле (штат Вашингтон) и Хоторне (Калифорния), часть — из офисов в Техасе.
Команда разработчиков ПО SpaceX, 2013 год
Традиционную аэрокосмическую отрасль повергает в шок и скорость разработки, и размер подразделений SpaceX. Как в 2019 году заявил (подкаст, отметка 44:00) главный директор по программному обеспечению ВВС США Николас Чайллан, там, где у государственных агентств потребовалось бы как минимум 2,5 тысячи программистов, SpaceX нанимает 50. При этом команда разработчиков пишет софт на девять разных аппаратов и проверяет код за 24 часа.
SpaceX пытается привлекать разработчиков из игровой индустрии. На GDC 2015 представители компании говорили, что у обладетелей диплома с направлением computer science навыков управления памятью нет. Неожиданно, но для космоса подходят темп работы и методы оптимизации игровых разработчиков. Как говорит Илон Маск, по сравнению с MMO стыковка двух кораблей — это элементарно просто.
В рамках AMA на «Реддите» в 2013 году сотрудники рассказали про структуру отделов разработки программного обспечения.
- В команде полётного программного обеспечения 7 лет назад было 35 человек. Примеры деятельности отдела: программы для ракеты Falcon 9, прототипа для отработки посадки первой ступени Grasshopper и космического корабля Dragon. Команда пишет основные компоненты для этих платформ, тестирует полётный код, разрабатывает программное обеспечение для связи и анализа данных на наземных станциях. Иногда эти сотрудники помогают в местном ЦУПе обеспечивать полёт.
- С продуктами отдела разработки внутреннего корпоративного софта сталкиваются все сотрудники SpaceX. Основное направление — внутреннее веб-приложение компании. Через него, к примеру, создают заказы на оборудование, проводят инвентаризацию и отслеживают часы работы. Для всего этого есть сторонние решения, но в SpaceX предпочитают самописную систему. Стэк разработки — типичное веб-программирование начала десятых годов: C#, MVC4, EF, SQL; Javascript, Knockout, Handlebars, LESS; REST API, положительно охарактеризованный сотрудниками как «super sexy».
- В 2013 году 9 человек писали софт для полётных компьютеров, которые не летают. Чтобы управлять космическим аппаратом из современного ЦУПа, нужно передавать много данных в высокораспределённых системах. Эта команда разработчиков реализует сложные пользовательские интерфейсы со строгими требованиями.
- Команда тестирования авионики работает с конструкторами авиационной электроники и пишет программы для тестирования аппаратного обеспечения. Такой софт обычно работает во время механических тестов в реальной среде. Цель этого отдела — автоматизация поиска проблем с оборудованием.
Компания постоянно нанимает разработчиков и инженеров, и далеко не для каждой позиции нужно специальное образование. В офисах SpaceX звучит много разных акцентов, в том числе с пространства бывшего СССР. В компанию могут нанять не только обладателя американского паспорта, хотя ограничения режима контроля экспорта технологий военного назначения существуют. Для найма иностранцу потребуется вид на жительство — грин-карта США. На её получение с нуля уйдёт несколько лет. Если «гринка» уже есть, то вопрос лишь в умении показать уровень квалификации на собеседовании.
Глава и технический директор SpaceX Илон Маск известен своей нелюбовью к 40-часовым рабочим неделям. Он неоднократно заявлял, что работает по 80—120 часов в неделю. Каков поп, таков и приход. Частая жалоба на Glassdoor про SpaceX — плохой баланс жизни и работы. В анонимных отзывах сотрудники и стажёры говорят про частое выгорание и ставшие нормой 12 часовые смены.