Работники частной космической компании SpaceX провели сеанс вопросов и ответов в сообществе на сайте Reddit. Разработчики поделились информацией о различиях их работы от обычной IT-рутины и трудностями при создании программного обеспечения для техники, предназначенной для полета за пределы атмосферы с людьми на борту.

Несколько дней назад SpaceX в твиттере анонсировала мероприятие в формате AMA«Задавайте мне любые вопросы» с участием разработчиков на просторах. RedditВ официальном сообществе компании на крупнейшем интернет-форуме её сотрудники отвечали на вопросы пользователей по самым разным темам, например, о разработке пользовательских интерфейсов для кораблей. Crew Dragon и Starship до условий работы и тестирования ПО спутников Starlink.
Разрабатывал программное обеспечение для корабля специалист. Dragon Джарретт Фарнитано (Jarrett Farnitano), глава группы прикладного ПО Starlink Кристин Хуан (Kristine HuangРазработчик программного обеспечения, работающего на низком уровне, для системы лазерной связи Жанетт Миранда. Jeanette Miranda), глава группы, занимающейся ПО для Starship Эшер Данн (Asher DunnНачальница команды по разработке тестовых систем для спутников — Натали Моррис. Natalie Morris).
Кроме интереса любителей техники и космических исследований, сотрудникам… SpaceXКомпания приглашала всех заинтересованных в ответах на вакансии, при наличии нужных навыков, разумеется. Утешительно то, что опыт работы в ракетно-космической сфере не обязателен. Все вопросы и ответы можно найти полным собранием. здесь…а сама ветка беседы с вопросами, ответами и дополнениями находится… тутПо этим ссылкам доступна информация о технических деталях. Особые моменты выделены нами отдельно.

Разработка ПО для космонавтики в целом
Какой самый заметный вопрос поставили перед сотрудниками? SpaceX— Чем разрабатывается ПО для ракет и космических кораблей, по сравнению с разработкой ПО для обычных приложений? ITЖанетт удивило два момента. Во-первых, различий между компаниями мало. Во-вторых, при разработке программного обеспечения для спутников часто сталкиваются с ограничениями физики и математики. При написании кода для приложений, работающих на Земле, таких проблем практически нет.
Почти сразу же обсуждалась отказоустойчивость и безопасность системы. Ведь при написании кода неизбежны ошибки, устранение которых может занять годы даже в коммерческих программах (а некоторые остаются нерешенными). Это не только из-за лени программистов или желания заказчиков экономить на тестировании. Просто цена этих ошибок редко бывает существенно высокой.
Техника на пределе возможностей человеческих технологий из-за бага может взорваться, уничтожив миллионы долларов или жизни людей. Разработка ПО для критически важных систем кардинально отличается от написания кода в тех случаях, когда отказы допустимы. Отличие заключается прежде всего в мышлении программиста, к чему необходимо быстро привыкнуть.
Для минимизации отказов на уровне ПО применяют особый подход. Все программы состоят из небольших, изолированных компонентов с определенными задачами. Каждый фрагмент кода проверяется в разных условиях перед внедрением в системы. Системы, в свою очередь, подвергаются полному тестированию множество раз. Главная цель — сделать поведение программного обеспечения предсказуемым, понятным и знакомым для разработчиков во всех ситуациях.
В важных задачах, например полете ракеты, зависновение или перезагрузка компьютера недопустимы. Среди модульных компонентов всегда есть защитные, которые контролируют работу всей системы в режиме реального времени. Если что-то идет не так, у них есть четкие инструкции, как исправить ситуацию. Иногда это простой сброс задачи и переход к следующей, иногда это комплексная стратегия по компенсации неполадки различными способами. Многократное резервирование — это тоже обязательное условие в ракетно-космической технике, и программное обеспечение не исключение.
Автоматизация тестирования и контроля также широко применяется. Благодаря большому количеству телеметрических данных с каждого компонента программной системы отслеживаются параметры всех ее частей. Это помогает не только на этапе разработки ПО для ракет или кораблей, но и в эксплуатации большого «созвездия» спутников. StarlinkКаждый месяц величина увеличивается и к тому же через пару лет вырастет ещё в несколько раз. Натали говорит, что автоматизация помогает избежать необходимости нанимать сотни операторов для управления группировкой на орбите.

Она также объяснила, что в SpaceXРазработка и тестирование тесно переплетаются. Каждый программист участвует в поиске ошибок в своем коде, проверяет работу коллег и помогает устранить обнаруженные недочеты. Такой подход применяется на всех этапах: при ревизии исходного кода, тестировании на моделях, стендах и прототипах, а также при интеграции ПО с аппаратным обеспечением. В компании есть специалисты по разработке компонентов или систем для ракет, спутников и кораблей, а также отдельные группы, создающие инструменты для тестирования решений.
Симуляции, тесты, стенды, лаборатории
По словам Натали, у работающих со StarlinkПрограммистам предоставляется возможность провести финальное тестирование прямо в космосе. В распоряжении имеется множество спутников с развитыми системами отказоустойчивости, позволяющими использовать некоторые аппараты в качестве тестовых платформ. На них загружают новое ПО, наблюдают за работой и взаимодействием с остальной группой аппаратов, а затем развертывают обновление на остальные устройства. В случае возникновения проблем во время тестирования спутнику отправляют команду на перезагрузку, после чего он восстанавливает прежнюю прошивку.
Для судов и ракет этот метод не подходит по понятным причинам, поэтому приходится многократно проверять каждую деталь и систему на земле. SpaceXРазработали несколько программно-аппаратных комплексов для решения этой задачи. На начальном этапе каждый разработчик тестирует свой код на простых симуляциях, работающих на его компьютере. При отсутствии ошибок программа направляется на мощный вычислительный кластер. Там ее сначала проверяют в условиях более детальной симуляции самостоятельно, а затем как часть всей системы.
После успешного завершения проверок и устранения всех недостатков наступает этап испытаний на серьёзных стендах с настоящим оборудованием. Это могут быть отдельные элементы авионики, или целые узлы и агрегаты реальных ракет и космических кораблей. На последнем этапе проводят симуляцию всей миссии полёта. DragonДля того, чтобы процесс занимал десятки часов или даже дней, необходимо убедиться, что все этапы миссии пройдут гладко. Только после всего этого результат работы программистов (также, как и «железных» инженеров) может отправиться в конечный продукт. SpaceX, что стоит на стартовом столе.
Жанетт поделилась своим опытом разработки «космических лазеров». Из-за сложности организации надежной оптической связи между спутниками ей пришлось участвовать в нескольких собраниях различных департаментов. Встречи не ограничивались банальными посиделками за столом конференц-зала:
проводились мозговые штурмы по видеосвязи, встречи программистов с инженерами прямо в лаборатории. Вместе разбирали и собирали блок лазерной связи множество раз, чтобы сделать его лучше.
Dragon
С самого начала, когда появились первые фотографии пилотируемого варианта этого космического корабля… SpaceXПоявились претензии к излишней «гламурности» интерьера. Инженеры компании почти полностью отказались от привычных кнопок, приборов и рычажков, установив в капсуле три большие сенсорные панели с небольшим количеством необходимых кнопок под ними. Для чек-листов и дополнительной информации в комплект оборудования добавили несколько планшетов. Apple iPadМногие эксперты считают, что популярная в авиации практика приоритет отдаёт дизайну, а не надёжности и безотказности.

Рассказывая о пользовательском интерфейсе Crew DragonДжарретт говорит, что, во-первых, корабль полностью автоматизирован и способен выполнить все операции в воздухе без вмешательства экипажа. Во-вторых, такая «гламурная» система… SpaceXСистема сделана максимально отказоустойчивой. При неисправности любого дисплея остальные выполнят его функции. В случае выхода из строя всех дисплеев у астронавтов останутся аппаратные кнопки с вынесенными на них главными функциями.
Разрабатывая интерфейсы программного обеспечения для сенсорных экранов, специалисты… SpaceXУделили большое внимание тому, чтобы сделать интерфейс удобным и функциональным для людей во всех режимах полета. Например, самые популярные сенсорные кнопки для навигации размещены снизу экрана, так как при перегрузках астронавтам будет трудно поднимать руки вверх. Наиболее важные функции выделены большими пробелами и выведены за пределы часто используемых областей дисплея, чтобы избежать случайных нажатий. Таким образом, если человек нажал на функцию, то это было сделано осознанно и с определенной целью.
Особое внимание уделялось испытанию удобства сенсорных экранов при сильных вибрациях. Проверяли не только управление (нажатия), но и восприятие информации. Для этого проводились эксперименты: испытуемые играли в специально разработанную игру с помощью контроллера от игровой консоли. XboxУспех зависел от скорости и точности чтения с экрана форм, размеров, цветов фигур и текста людьми. Испытательный стенд находился на виброплите, имитирующей условия при запуске ракеты. В этом месте Джаретт пошутила — «что мы узнали наверняка, так это полную нереалистичность любых интерфейсов космической техники в фантастических фильмах».
Разработчики уделили внимание созданию комфортных условий для астронавтов. SpaceX, который они называют «quiet-darkКосмический корабль функционирует исправно — интерфейс минималистичен, отображая основные параметры всех систем. Если автоматика регистрирует отклонения от нормы, проблемные показатели выделяются особым образом, акцентируя самую важную информацию. В интерфейс постоянно вносятся улучшения, основываясь на опыте астронавтов во время работы на борту. Crew Dragon.
Starship
Эшер, ответственный за разработку программного обеспечения для проекта Илона Маска, столкнулся с вопросами о ходе работы. Программист утверждает, что подход к написанию кода для космического корабля из нержавейки не сильно отличается от того, что применяют инженеры. SpaceXВ Бока-Чике алгоритм выполняет действия: делает, проверяет, запускает, собирает данные, анализирует и возвращается к началу цикла. Falcon 9 и DragonУ Эшера и коллег больше свободы в действиях. Например, можно внедрить программное улучшение за несколько часов до испытаний. Starship. Если уверены, что это поможет, конечно.
Устройство регулярно модернизируют как программно, так и железобетонно. И хотя… StarshipВознаграждает значительным количеством оборудования и написанного кода. Falcon 9Для него приходится разрабатывать множество новых систем. Работа ведется непрерывно совместно с инженерами, занимающимися «железом». Самое важное: каждое новое испытание (не обязательно даже полет) приносит массу информации, специалисты постоянно учатся и могут сразу же внедрять совершенно новые идеи, быстро получая ответ — работает или нет.

Технологии, вызывающие удивление в ракетно-космическом секторе.
В дополнение к сенсорным экранам на борту космического корабля, SpaceXИспользует много спорных на первый взгляд технологий, скрытых от глаз. Поинтересовались отказом от систем реального времени. real-time operating system, RTOSПрограммное обеспечение в ней всегда и везде отвечает на события не позже установленного предела времени. Если задача не успевает быть выполнена, система ее отбрасывает, чтобы не тратить ресурсы. RTOS считаются стандартом.
А программисты SpaceXРазработали весь программный комплекс для ракет на основе специальной платформы. Linux— дистрибутивов. Да, к этой группе операционных систем существуют дополнения, предоставляющие возможности для работы в режиме реального времени. Но это неполное решение и полноценной RTOSНе удаётся. Причина неясна, но вероятно связана с недостатками возможностей. RTOSДжарретт описал, как разработчики компании преодолели трудности создания программного обеспечения для работы в режиме реального времени.
Что самое главное — SpaceXПрактически все программное обеспечение разрабатывается самостоятельно. Вследствие этого компоненты всех систем проходят тестирование всеми возможными способами, и разработчики точно знают их поведение в разных условиях. Время выполнения каждой операции не ограничено сверху, а просто известно заранее. При возникновении неполадок срабатывают защитные механизмы. RTOS они встроены в ядро, а в решении SpaceXОтдельные программы обеспечивают реализацию. Многолетний опыт успешных полётов подтверждает надёжность работы.
Астронавты видят на экранах в капсуле всё то, что создано благодаря широко распространенным веб-интерфейсам. Crew DragonБольшая часть информационных панелей для операторов центра управления полетами была представлена «не-космической» технологией, которая, к удивлению, оказалась невероятно надежной, быстрой и, что немаловажно, гибкой для подобных целей. StarshipКорабли получат экраны управления с веб-интерфейсом, но его модифицируют в сравнении с тем, применяемым на «Драконе». Цель задач у судов различна.
Немного юмора и недомолвок
Некоторую информацию сотрудники SpaceXКонечно же, не смогли раскрыть. В частности, отвечая на вопрос о передаче технических данных между спутниками StarlinkКристин, отвечая с наземной станции, дала максимально осторожный ответ. Несмотря на вопросы о количестве информации и потоков, она лишь утвердила, что данных много и они представлены в собственном формате. Эшер, возможно, забыл или сознательно не продемонстрировал актуальную версию пользовательского интерфейса. Crew Dragon.
Не обошлось и без доли юмора. Пользователь, проявлявший интерес к… RedditЭшер ответил на вопрос девочки о сложностях создания ракетного двигателя, сказав, что работа двигателя — постоянный взрыв, и самое трудное — сделать так, чтобы взрыв происходил внутри. В разговоре упомянули еду в офисе, на что Эшер просто ответил «омномном».

Ну и не забыли про развлечения. Когда у ребят из SpaceXСпросили, сколько времени проводят в популярной игре. Kerbal Space ProgramПользователи откликнулись положительно, INT_MAXС учетом того, что это параметр из заголовочного файла стандартной библиотеки общего назначения, написанной на языке программирования C, такую реакцию можно понять двояко. Либо потому, что его значение может превышать два миллиарда, либо потому, что время в игре приходится жестко лимитировать. INT_MAX — это ограничитель).