Добавить в корзинуПозвонить
Найти в Дзене
Сбой системы

Катастрофа Ariane 5: взрыв ракеты из-за старого кода

Космодром Куру, Французская Гвиана. Тропическая влажность, безоблачное небо. На стартовой площадке — красавица Ariane 5, новейшая европейская ракета-носитель. Десять лет разработки. $7 миллиардов бюджета программы. Четыре спутника на борту стоимостью $370 миллионов. Это первый полёт. Вся Европа смотрит трансляцию. Инженеры Европейского космического агентства затаили дыхание. Обратный отсчёт. Зажигание. Взлёт. Через 37 секунд ракета превратилась в огненный шар. Ракета взлетела нормально. Первые секунды — штатный режим. Но на 37-й секунде бортовой компьютер внезапно отдал команду на максимальный поворот сопел двигателей. Ракета резко отклонилась от курса. Аэродинамические нагрузки превысили допустимые. Конструкция начала разрушаться. Система самоуничтожения сработала. Обломки рассыпались над Атлантическим океаном. Технические специалисты бросились к телеметрии. Что они нашли — потрясло всех. Бортовая навигационная система (SRI — Système de Référence Inertielle) измеряла горизонтальную ск
Оглавление

Отсчёт пошёл: 4 июня 1996 года

Космодром Куру, Французская Гвиана. Тропическая влажность, безоблачное небо. На стартовой площадке — красавица Ariane 5, новейшая европейская ракета-носитель. Десять лет разработки. $7 миллиардов бюджета программы. Четыре спутника на борту стоимостью $370 миллионов.

Это первый полёт. Вся Европа смотрит трансляцию. Инженеры Европейского космического агентства затаили дыхание.

Обратный отсчёт. Зажигание. Взлёт.

Через 37 секунд ракета превратилась в огненный шар.

Что произошло: технический разбор

Ракета взлетела нормально. Первые секунды — штатный режим. Но на 37-й секунде бортовой компьютер внезапно отдал команду на максимальный поворот сопел двигателей. Ракета резко отклонилась от курса. Аэродинамические нагрузки превысили допустимые. Конструкция начала разрушаться.

Система самоуничтожения сработала. Обломки рассыпались над Атлантическим океаном.

Технические специалисты бросились к телеметрии. Что они нашли — потрясло всех.

Убийца: переполнение целого числа

Бортовая навигационная система (SRI — Système de Référence Inertielle) измеряла горизонтальную скорость ракеты. Значение скорости хранилось как 64-битное число с плавающей запятой. Затем программа попыталась конвертировать это число в 16-битное целое.

Представьте: вы пытаетесь перелить ведро воды в напёрсток.

Ariane 5 была мощнее своей предшественницы Ariane 4 и набирала горизонтальную скорость в 5 раз быстрее. Значение скорости превысило 32 767 — максимум для 16-битного целого числа.

Произошло переполнение. Программа сгенерировала ошибку. Навигационная система выключилась.

Эффект домино: от бага до взрыва

Когда основная навигационная система отказала, управление переключилось на резервную. Но резервная система работала на том же коде. Она упала с той же ошибкой за 72 миллисекунды до основной.

Обе навигационные системы мертвы. Бортовой компьютер начал интерпретировать диагностические данные об ошибке как реальные навигационные данные. Эти «данные» говорили, что ракета страшно отклонилась от курса.

Компьютер честно попытался скорректировать траекторию — и отправил сопла в полный поворот. Ракета кувыркнулась. Конец.

Наследие Ariane 4

Самое обидное: этот код работал прекрасно на Ariane 4. Десять лет, десятки успешных запусков. Программу навигации просто скопировали в новую ракету без адаптации.

Никто не проверил, выдержит ли старый код новые параметры полёта. Никто не задался вопросом: «А что если скорость будет в пять раз больше?»

Более того — конвертация 64-битного числа в 16-битное вообще не была нужна для Ariane 5. Этот код использовался только при подготовке к старту на Ariane 4 и оставался активным первые 40 секунд полёта по инерции. Это был рудимент — бесполезный кусок программы, который никто не удалил.

Расследование

Европейское космическое агентство собрало специальную комиссию под руководством Жака-Луи Лионса. Отчёт был опубликован через месяц и стал библией для специалистов по надёжности ПО.

Ключевые выводы:

  • Ошибка была программной, не аппаратной.
  • Код не был протестирован с параметрами полёта Ariane 5.
  • Защита от переполнения была намеренно отключена для четырёх из семи переменных — «для экономии вычислительных ресурсов».

Экономия вычислительных ресурсов стоимостью в доли процента. На ракете за $370 миллионов.

Цена одного типа данных

Это не история о глупости. Инженеры Ariane 4 были блестящими специалистами. Их код работал безупречно — в тех условиях, для которых был написан.

Катастрофа произошла потому, что повторное использование кода стало догмой. «Этот модуль проверен, он летал десятки раз» — так говорили менеджеры. И были правы. Для старой ракеты.

$7 миллиардов программы. $370 миллионов спутников. 37 секунд полёта. И одна конвертация типа данных, которую никто не проверил.

Ariane 5 — это напоминание каждому разработчику: когда меняется контекст, старый код — это новая бомба.

Первый полёт Ariane 5 длился столько же, сколько вы читали этот абзац. Всё остальное — последствия.

Вы когда-нибудь копировали «проверенный» код в новый проект — и он взрывался? Какой самый дорогой баг вы видели? Пишите о своих фатальных сбоях в комментариях!

👉 Подписывайтесь на Сбой Системы — здесь технологии ломаются красиво.

#космос #программирование #разработка #ракеты #баги #технологии #история_it #наука #инженерия #сбой_системы

37 секунд полета стоимостью $370 миллионов: момент взрыва Ariane 5 из-за одной глупой ошибки конвертации типа данных.
37 секунд полета стоимостью $370 миллионов: момент взрыва Ariane 5 из-за одной глупой ошибки конвертации типа данных.