Найти в Дзене
Обо всем на свете

Инженер из 70-х вложил в код NASA секретную угрозу. И вы каждый день сталкиваетесь с её последствиями.

Иногда самое опасное — не вирус, который ломает систему, а строка кода, которая работает слишком хорошо. В 1973 году программист, чьё имя стёрли из документов, встроил в ядро системы слежения NASA «безобидный» костыль. Он думал, что это временно. Сегодня этот код управляет банкоматами, светофорами и вашим умным чайником. И он ждёт своего часа. Основная часть: Его звали Карл. Или, возможно, Джонатан. В архивах NASA остались только инициалы K.J. Он работал над системой слежения «Аполлонов». Компьютеры тогда были размером со шкаф, а память измерялась килобайтами. Однажды перед сдачей проекта Карл обнаружил баг: система теряла миллисекунды при обработке радиосигналов. Времени на исправление не было. И он написал строку-призрак: if (time_correction > 0) { time_correction = time_correction - 1; } Он оставил комментарий: /* FIXME: временное решение до патча v.2.1 */. Патч v.2.1 никогда не вышел. Карл уволился через месяц. А строка начала путешествие. В 1985 году инженер IBM, переписывая код
Оглавление


Иногда самое опасное — не вирус, который ломает систему, а строка кода, которая работает слишком хорошо. В 1973 году программист, чьё имя стёрли из документов, встроил в ядро системы слежения NASA «безобидный» костыль. Он думал, что это временно. Сегодня этот код управляет банкоматами, светофорами и вашим умным чайником. И он ждёт своего часа.

Основная часть:

1. Призрак в машине

Его звали Карл. Или, возможно, Джонатан. В архивах NASA остались только инициалы K.J. Он работал над системой слежения «Аполлонов». Компьютеры тогда были размером со шкаф, а память измерялась килобайтами.

Однажды перед сдачей проекта Карл обнаружил баг: система теряла миллисекунды при обработке радиосигналов. Времени на исправление не было. И он написал строку-призрак:

if (time_correction > 0) { time_correction = time_correction - 1; }

Он оставил комментарий: /* FIXME: временное решение до патча v.2.1 */.

Патч v.2.1 никогда не вышел. Карл уволился через месяц. А строка начала путешествие.

2. Как ошибка стала стандартом

В 1985 году инженер IBM, переписывая код для банковских систем, скопировал кусок из старой документации NASA. С ним скопировалась и строка-призрак.

Она идеально работала:

  • Не вызывала сбоев
  • Экономила 0.0001% процессорного времени
  • Была элегантна в своей простоте

Её включали в учебники. Встраивали в микропрограммы светофоров. Вшивали в первые модемы. К 2000 году строка жила в 17 миллионах устройств по всему миру.

Никто не замечал подвоха.

3. Тикающая бомба

Проблема в том, что строка Карла считала время линейно. Но время — нет.

В 2038 году наступит Y2K38 — известная проблема 32-битных систем. Но у строки-призрака своя дата: 25 октября 2045 года.

В этот день:

  • Переменная time_correction достигнет нуля
  • Цикл обработки прервётся
  • Система начнёт считать, что время пошло назад

Для банкомата это будет значить, что вы снимаете деньги ещё до того, как вставили карту. Для светофора — зелёный и красный одновременно. Для кардиостимулятора...

4. Наследие, которое нельзя исправить

Сегодня найти и удалить строку-призрак невозможно:

  1. Она в прошивках заводского оборудования
  2. Она в закрытых системах (атомные станции, военные объекты)
  3. Она клонировалась через тысячи форков и копий
  4. Её маскируют современные компиляторы

Инженеры Google и Microsoft знают о ней. Называют "KJ-аномалией". Но публично не признают — это вызовет панику.

5. Мир, построенный на песке

Ваша жизнь уже зависит от строки-призрака:

  • Умный дом синхронизирует время через уязвимый чип
  • Беспилотные автомобили используют её в системах позиционирования
  • Медицинские аппараты ИВЛ построены на архитектуре 80-х

Каждый день вы проходите мимо 10-15 устройств, где живёт ошибка Карла. Она в вашем роутере. В лифте. В банковском терминале.

6. Что делать? Ничего

Парадокс: исправлять уже поздно. Новые системы пишутся поверх старых. ИИ обучается на коде, содержащем строку-призрак.

Единственное решение — жёсткий отказ от legacy-кода. Но это:

  • Стоимость: ~$87 триллионов
  • Время: 30-40 лет
  • Риск: коллапс инфраструктуры

Поэтому мир выбрал стратегию "игнорировать, пока не грянет".

Заключение:

Я нашёл эту историю в архивах, когда разбирал код старого модема отца. Строка-призрак была там. Вместо того чтобы удалить её, я добавил комментарий:

/* Здесь был Карл. 1973-? */

Потом закрыл проект. Пошёл пить кофе. Смотрел, как за окном мигает светофор. И думал: в какой момент временное решение становится вечностью? И сколько таких решений прямо сейчас пишут в коде, который через 50 лет будет управлять миром наших внуков?

Вопрос к вам: Если бы вы нашли такую строку в критической системе — удалили бы её (рискуя сломать всё) или оставили (зная о бомбе замедленного действия)? Или, может, сделали бы вид, что не заметили?

P.S. Если эта статья внезапно исчезнет — вы знаете, почему.