Программисты 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-компании. Для Жанетт главным сюрпризом было две вещи. Во-первых, в общих чертах отличий мало. А во-вторых, при написании ПО для спутников ты очень часто упираешься в ограничения, которые диктуют физика и математика. Когда пишешь код для приложений, работающих на Земле, таких проблем почти никогда не возникает.

И, конечно же, почти сразу поднялась тема отказоустойчивости и безопасности. Ведь при написании кода всегда возникают ошибки и на их устранение даже в коммерческих и важных программах уходят годы (а некоторые остаются навсегда). И дело не только в лени программистов, да желании заказчиков сэкономить на тестировании. Просто цена этих ошибок крайне редко бывает по-настоящему высока.

Другое дело — техника на пределе возможностей человеческих технологий, которая из-за одного бага может взорваться и отправить в утиль миллионы долларов или даже жизни людей. По словам Джаррет, разработка ПО для критически важных с точки зрения безопасности систем радикально отличается от написания кода в тех случаях, когда отказ допустим и не приведет к катастрофическим последствиям. Причем разница кроется, прежде всего, в мышлении программиста, к чему необходимо быстро привыкать.

Чтобы минимизировать возможность отказов на уровне программной инфраструктуры применяется специальный подход. Все компоненты ПО создаются небольшими и отдельными — с четкими границами применения и «ответственности». Это позволяет каждый фрагмент кода проверять в самых разных условиях перед внедрением в системы. Которые, в свою очередь, уже тестируются целиком множество раз. Главная задача — сделать так, чтобы поведение программного обеспечения в любых возможных ситуациях было предсказуемым, понятным и знакомым для разработчика.

В ответственных задачах вроде полета ракеты зависнуть и перезагрузиться — для компьютера недопустимо. Среди множества модульных компонентов обязательно есть защитные, которые контролируют поведение всей системы «на лету». Если что-то идет не по плану, у них есть четкие инструкции, как обыграть ситуацию. Иногда это просто сброс задачи и переход к следующей, иногда это комплексная стратегия, направленная на компенсацию неполадки различными способами. Ну, и, конечно же, многократное резервирование, без этого в ракетно-космической технике никуда и программное обеспечение — не исключение.