⇡#Часть 1: Вступление и японский «Кайрос»
В космонавтике есть слова, которые лучше не произносить вслух до того, как телеметрия подтвердит выход на расчетную орбиту. Одно из них — «триумф». Особенно если речь идет о японском частном ракетостроении, где изящное имя Kairos, отсылающее нас к древнегреческому «неуловимому мигу удачи», упорно отказывается оправдывать ожидания. Знаете, в чем главная ирония? В том, что 5 марта 2026 года этот самый бог момента снова споткнулся не о прогоревший в огне композит сопла или капризный клапан, а о банальные строчки кода. Те самые алгоритмы, которые, по задумке, должны были мгновенно реагировать на угрозу, в третий раз подряд устроили создателям из фирмы Space One цифровой саботаж.
Сначала был огненный гриб через пять секунд после старта в марте 2024-го, затем — полная потеря ориентации в декабре. И вот теперь — аварийное прекращение полета, потому что автономная система FTS (Flight Termination System) вдруг решила, что легкая «болтанка» при наборе высоты — это повод для самоубийства. Похоже, в современной «ракетно-космической криминалистике» усталость металла окончательно уступила место дефициту обычной человеческой логики. Мы привыкли искать причину в обломках двигателей, но Kairos в очередной раз доказал: миллиарды долларов сегодня превращаются в пыль из-за одной-единственной неверной строки в конфиге, которую кто-то посчитал «незначительной».
Старт ракеты-носителя Kairos (Space One) со стартового стола космодрома Кии (5 марта 2026 года). Тот самый момент, когда «благоприятный миг» превращается в дорогостоящий фейерверк. Самоликвидация как высшее проявление программного пессимизма. Фото агентства Kiodo
⇡#Часть 2. Грамматика аварий: трудности перевода
Если и есть в истории космонавтики памятник человеческому недопониманию, воздвигнутый на фундаменте из чистейшей самоуверенности, то это, безусловно, автоматическая станция Mars Climate Orbiter (MCO). В 1999 году этот аппарат за 327,6 миллиона тогдашних, еще «полноценных» долларов должен был стать флагманом амбициозной программы Mars Surveyor '98. Планы были наполеоновские: детальное препарирование марсианской атмосферы, мониторинг динамики льдов и, что немаловажно, работа в качестве высокоскоростного «роутера» для своего напарника — посадочного модуля Mars Polar Lander.
Драма разыгралась 23 сентября 1999 года, как раз в тот момент, когда станция должна была исполнить свой главный номер — выход на околомарсианскую орбиту. Спустя пять минут после включения двигателей MCO послушно скрылся за диском Красной планеты. Согласно циклограмме, связь должна была прерваться, чтобы возобновиться уже после завершения маневра. Но в расчетное время эфир ответил тишиной. Гнетущей, бесконечной тишиной, которая для инженеров в ЦУПе звучит громче любого взрыва.
Телеметрия, успевшая «проскочить» до потери сигнала, рисовала жуткую картину: станция пронеслась над Марсом на высоте всего 57 км вместо положенных 140–150. Оказавшись в плотных, по марсианским меркам, слоях атмосферы, MCO либо мгновенно разрушился под напором аэродинамических и тепловых нагрузок, либо, исполнив эффектный «блинчик» по воде, срикошетировал и ушел в бесконечное путешествие по гелиоцентрической орбите.
Когда страсти улеглись, Аварийная комиссия NASA (Mars Climate Orbiter Mishap Investigation Board) представила акт, который ввел бы в депрессию любого учителя математики. Выяснилось, что аппарат в далеком космосе погубила банальная неразбериха в наземном софте. В течение всего девятимесячного перелета маленькие двигатели ориентации MCO регулярно включались для подправки курса. Софт компании Lockheed Martin фиксировал эти импульсы в старых добрых имперских фунт-силах на секунду. А вот навигационный комплекс Лаборатории реактивного движения JPL (Jet Propulsion Laboratory) считывал эти же файлы, будучи свято уверенным, что перед ним — метрические ньютон-секунды.
Разница в коэффициентах (почти в 4,45 раза) привела к тому, что, пока баллистики на Земле любовались «идеальной» моделью полета, реальная траектория плавно, шаг за шагом, затягивала станцию в смертельные объятия атмосферы. В ТЗ на стыковку программных модулей просто забыли вписать требование к автоматической проверке размерностей. Система принимала «голые» числа, не имея ни единого шанса распознать в них чужую шкалу измерений. Полноценная наземная отработка взаимодействия этих систем отсутствовала как класс. Космос в очередной раз доказал: он не прощает небрежности в выборе единиц измерения, даже если вы — признанный лидер индустрии.
Расчетная и реальная траектория атмосферного маневра аппарата MCO. Тот самый случай, когда «имперские амбиции» в коде столкнулись с суровой метрической реальностью. MCO стал самой дорогой жертвой отсутствия переводчика с английского на общечеловеческий. Источник: Wikimedia
⇡#Часть 3. Родовая травма Ariane 5
Первый квалификационный полет первого европейского тяжеловеса Ariane 5 (он же Flight 501, или V88 в реестре Arianespace), случившийся 4 июня 1996 года, должен был открыть новую эру в коммерческой эксплуатации космоса. На борту — четыре дорогих научных спутника проекта Cluster, предназначенных для препарирования земной магнитосферы. Суммарный бюджет миссии, включая разработку самого носителя, по самым скромным оценкам, зашкаливал за 370–500 миллионов долларов.
Старт с космодрома Куру в Гвиане поначалу выглядел безупречно: ракета ушла в небо, уверенно набирая высоту и радуя глаз идеальным факелом. Но на 37-й секунде, когда носитель проткнул отметку в 3,5 км, произошло нечто невообразимое. Огромная махина вдруг совершила резкий, почти истеричный маневр по тангажу и рысканию, отклонившись от заданной траектории более чем на 20 градусов. Драма развивалась стремительно: автоматика FTS, обнаружив критическое нарушение угловых параметров, тут же исполнила ритуальное харакири. Ракета превратилась в ослепительный огненный шар, а уникальная научная нагрузка дождем из обломков осыпала окрестные болота.
Механизм сбоя оказался настолько же нелепым, насколько и поучительным. Это была классическая попытка «сэкономить на спичках», а точнее — на программном коде. Разработчики просто перенесли фрагмент софта инерциальной платформы наведения с Ariane 4 — ракеты заслуженной, но куда менее резвой. На 36-й секунде бортовой компьютер попытался записать значение горизонтальной скорости в ячейку памяти, которая имела жесткое ограничение — она физически не могла «вместить» число больше 32 767. Но Ariane 5 — это не старая «четверка», ее динамические характеристики были на порядок выше. Как только скорость превысила этот магический порог, возникло то самое целочисленное переполнение (integer overflow).
Для наглядности этот эффект можно сравнить с механическим счетчиком, у которого внезапно кончились разряды: процессор просто «захлебнулся» цифрами. Вместо реальных данных о скорости модуль выплюнул диагностический код ошибки, который основной вычислитель по какой-то роковой иронии интерпретировал как фактический угол отклонения. Система управления мгновенно вывернула сопла двигателей в крайнее положение, пытаясь «парировать» мнимый занос, что в итоге и разорвало ракету в клочья.
Независимая комиссия по расследованию (Ariane 501 Inquiry Board) позже назовет это неоправданным доверием к «программному наследию». Разработчики свято верили, что модуль, безупречно отработавший в десятках пусков предыдущей серии, не нуждается в повторной проверке. В итоге критический элемент информационной стыковки превратился в «спящую» уязвимость, которая активировалась лишь тогда, когда новая машина вышла на режимы, недоступные ее предшественницам. Это эталонный пример того, как экономия на комплексном моделировании превращает проверенное временем решение в фатальный дефект.
Взрыв ракеты Ariane 5 (миссия 501) в небе над Куру. Тот самый момент, когда 16-битное число оказывается сильнее сотен тонн ракетного топлива. Самый наглядный урок по наследованию кода в истории космонавтики. Фото ЕКА
Часть 4. Проклятие таймера и «виртуальная поверхность»
Современный этап освоения внеземных пространств, несмотря на весь цифровой лоск, оказался к программным просчетам ничуть не милосерднее эпохи перфокарт и пятидюймовых дискет. В декабре 2019 года новейший американский корабль CST-100 Starliner от почтенной корпорации Boeing (миссия OFT-1) вместо триумфальной стыковки с МКС устроил в космосе драматическое шоу по собственному спасению. Злой рок проснулся сразу после отделения от ракеты-носителя: вместо того чтобы чинно довыводиться на орбиту, корабль вдруг пустился в пляс, исполняя серию хаотичных и чрезвычайно интенсивных включений двигателей.
Центр управления в Хьюстоне с нарастающим ужасом наблюдал, как «Старлайнер» азартно выжигает запасы топлива на маневры, которые на данном участке траектории были ему абсолютно не нужны. К моменту, когда инженеры сумели вмешаться в этот цифровой бред, лимиты были исчерпаны, а долгожданная встреча со станцией стала физически невозможной.
Виновником торжества оказался бортовой компьютер, который считал некорректное значение из центрального вычислителя ракеты-носителя (блока управления верхней ступени). В итоге бортовая шкала времени (БШВ) получила немыслимый сдвиг на 11 часов вперед. Сразу после отделения компьютер «решил», что он уже полдня как в пути и пора бы активно маневрировать у самой станции. Согласно выводам комиссии NASA (Joint Independent Review Team), катастрофа (пусть и без человеческих жертв) стала результатом системного кризиса в тестировании: стремясь срезать углы и сократить издержки, Boeing отказался от полного цикла сквозного моделирования работы софта носителя и корабля. Эта «экономия» обошлась компании более чем в 1,5 миллиарда долларов.
Но игры со временем — это лишь половина беды. Куда страшнее случаи, когда программная логика заставляет аппарат безоговорочно «поверить» в ложную реальность. 19 октября 2016 года европейский посадочный модуль Schiaparelli миссии ExoMars-2016 прошел через атмосферу и уже готовился к мягкому касанию марсианского грунта. Но на высоте 3,7 км бортовой компьютер внезапно «психанул»: отстрелил парашют, включил и почти сразу погасил тормозные двигатели. Система твердо «решила», что она уже на твердой почве, и даже начала транслировать телеметрию, пока сам модуль в гробовом молчании просто падал вниз.
Механизм этого сбоя крылся в секундной аномалии: при раскрытии парашюта датчик угловой скорости выдал запредельное, «насыщенное» значение. Навигационный компьютер, переварив эти данные, пришел к абсурдному выводу: высота стала отрицательной. Система буквально «увидела» себя под поверхностью Марса и немедленно прекратила активный спуск.
Этот сценарий «виртуального приземления» почти дословно повторился 11 апреля 2019 года с израильским аппаратом Beresheet в лунном Море Ясности. Сбой одного из инерциальных датчиков и последовавшая за ним перезагрузка заставили софт полностью заблокировать главный двигатель на критической высоте. Когда систему удалось вернуть в строй, Луна была уже слишком близко.
Согласно актам аварийных комиссий, в обоих случаях причиной стала неполнота алгоритмической отработки нештатных режимов. Автоматика просто не умела адекватно реагировать на противоречивые данные от приборов. К сожалению, тот же дефицит «защитных барьеров» в логике проявился и в недавней миссии «Луна-25», где автоматика не смогла прервать работу двигателя, несмотря на явное отклонение от расчетных параметров. Это подтверждает: фатальная «настойчивость» программ в выполнении ошибочного маневра остается главной ахиллесовой пятой современных систем автоматической посадки.
Так, по мнению художника, может выглядеть посадочный аппарат Schiaparelli на Марсе. Когда софт «уверовал», что он уже под землей, хотя до нее оставалось еще почти четыре километра. Марсианская пыль — лучший проявитель для ошибок в логике управления. Фото Reuters
⇡#Часть 5. Молоток против интерфейса: когда сила заменяет логику
Если предыдущие аварии были тонкой битвой алгоритмов и размерностей, то драма, разыгравшаяся 2 июля 2013 года на Байконуре, — это чистый, незамутненный триллер о торжестве физической силы над инженерной мыслью. Тяжелая ракета-носитель «Протон-М» с разгонным блоком ДМ-03 и тремя спутниками «Глонасс-М» должна была планово восполнить нашу навигационную группировку. Но вместо этого она исполнила в прямом эфире танец «умирающего лебедя». Помните тот голос диктора, который внезапно дрогнул: «Кажется, что-то идет не так... Кажется, это будет катастрофа»? Спустя мгновение тяжелая ракета практически перевернулась в воздухе и вогнала себя в землю в полутора километрах от старта, превратив сотни тонн токсичных гептила и амила в огромный огненный гриб.
Когда аварийная комиссия добралась до обломков, она впала в ступор. Три из шести датчиков угловых скоростей (ДУС) были установлены со смещением на 180 градусов — проще говоря, «вверх ногами». Самое невероятное, что конструкторы «Протона» предусмотрели классическую «защиту от дурака»: конфигурация фиксирующих штифтов на посадочных местах физически не позволяла закрепить прибор неверно.
Причина дефекта вскрыла пугающую реальность производственного процесса. Сборщик, столкнувшись с естественным сопротивлением штифта, не пошел за чертежами и не позвал технолога. Он применил значительную силу, фактически «вколотив» датчики на место и пробив ими новые, абсолютно нештатные отверстия в корпусах. Ситуацию усугубило то, что место установки на приборной раме было крайне труднодоступным — в узком пространстве отсека. После завершения монтажа визуально проверить направление стрелок на корпусах было практически невозможно. Контролеры и представитель заказчика подтвердили правильность установки в формуляре фактически «вслепую». В результате система управления получила инвертированные данные и на 17-й секунде усердно «вбила» ракету в грунт. Тот случай, когда кувалда оказалась сильнее любого интерфейса.
Не менее показательны ситуации, когда аппарат губит «цифровая слепота» — неспособность системы распознать внешнее воздействие. В 2011 году амбициозная миссия к спутнику Марса «Фобос-Грунт» даже не смогла покинуть окрестности Земли из-за тяжелого программного отказа. Авария произошла на этапе формирования переходной траектории: маршевая двигательная установка просто не включилась, и аппарат завис на низкой опорной орбите.
Согласно официальным выводам, причиной стала перезагрузка двух из трех вычислительных машин под воздействием космического излучения. В коде бортового комплекса возникла ошибка, вызвавшая бесконечную логическую петлю перезагрузок. Аппарат перешел в режим экономии энергии, меланхолично игнорируя команды с Земли, пока не сгорел в плотных слоях атмосферы через несколько месяцев после запуска.
Иногда подобная «слепота» возникает на фоне общего успеха, как это случилось в 1985 году со станцией «Вега-1». При спуске зонда в агрессивной атмосфере Венеры внезапно включилась посадочная циклограмма забора грунта — на высоте 18 км! Механизм сбоя оказался почти анекдотичным: сильный вертикальный порыв венерианского ветра был воспринят бортовым компьютером как физический удар о грунт. Из-за отсутствия в программе жесткой логической проверки по барометрической высоте, автоматика «поверила» ложному сигналу датчика касания. В результате дорогостоящий бур азартно сверлил венерианскую атмосферу в двадцати километрах над поверхностью, а уникальные данные о почве были потеряны навсегда.
Взрыв упавшей ракеты-носителя «Протон-М». Тот самый случай, когда стрелка «Вверх» — это лишь рекомендация, которую можно оспорить с помощью хорошей кувалды. Фото Reuters
⇡#Часть 6. Выход из пике: диктатура математики
Японский Kairos, американские «Орбитеры» и европейские «Арианы» гибнут по разным сценариям, но их некрологи написаны под копирку. Первопричина всегда едина: фатальная неполнота цикла наземной экспериментальной отработки и высокомерное пренебрежение сквозным контролем алгоритмов. Мы всё еще по старинке проверяем системы на расчетные режимы «А» и «Б», наивно полагая, что этого достаточно, и напрочь забывая о коварных «сценариях Г», которые только и ждут момента, чтобы вцепиться в аппарат в реальном полете.
Единственным выходом из этого баллистического пике сегодня видится внедрение методов математического доказательства корректности ПО, или так называемая формальная верификация. В отличие от обычного тестирования, которое ищет баги «методом тыка», этот подход рассматривает программу как строгое, не терпящее двусмысленности уравнение. Использование специализированных языков — например, подмножества Ada/SPARK или микроядра seL4 — позволяет еще на этапе проектирования физически выжечь каленым железом целые классы фатальных дефектов: от переполнения регистров до логических коллизий при параллельных процессах.
В современных проектах уровня James Webb Space Telescope (JWST) или в программных сердцах новых многоразовых кораблей уже внедряются системы, которые попросту блокируют компиляцию кода при малейшем несоответствии форматов обмена данными. Если бы у разработчиков несчастного MCO стоял подобный фильтр, система управления с негодованием отвергла бы пакет данных, в котором «фунты» пытаются вломиться в функцию, ожидающую «ньютоны». Алгоритм распознал бы это как попытку стыковки несовместимых узлов и поднял бы тревогу задолго до того, как аппарат коснулся марсианского неба.
Более того, современная цифровая паспортизация и тотальная видеофиксация скрытых работ позволяют контролировать даже те узлы, до которых не доберется глаз самого дотошного контролера ОТК. Это создает двойной барьер: математическую «святую инквизицию» в коде и технологический заслон на сборке.
Сегодня в ракетно-космическом производстве систему ломает не отсутствие технологий (их-то как раз в избытке), а дефицит жесткой типизации и преступное пренебрежение математической проверкой логики на ранних этапах. В гонке за космос в конечном счете победит не тот, у кого мощнее двигатель или больше бюджет, а тот, кто полностью исключил случайность и пресловутый «человеческий фактор» из алгоритма. Диктатура математики — это, пожалуй, единственный надежный способ поймать тот самый капризный «кайрос» и превратить его из мгновения катастрофы в триумф миссии.
Зеркала James Webb Space Telescope (JWST) в чистой комнате как символа триумфа современных технологий тестирования. Когда код становится безупречным уравнением. Телескоп Джеймса Уэбба — живое доказательство того, что диктатура математики окупается сторицей