Релиз
Самолет был старый. Ан-24. В салоне пахло керосином и мерзлыми яблоками. Ящик стоял в хвосте, под сеткой.
Архитектор смотрел в иллюминатор. Стекло было исцарапано льдом, и за ним ничего не было.
Ему исполнилось тридцать шесть. Квадрат шести. Сумма первых трех кубов.
В кармане зажужжал телефон. Экран вспыхнул белым в темном салоне. Менеджеры, Slack, клиенты.
Он положил палец на кнопку питания и держал.
Одна секунда. Две. Три.
Экран погас.
Полоса была обледенелой. Шасси ударили жестко, самолет повело, потом выровняло. Когда открыли дверь, в салон вошел холод. Шестьдесят девятая параллель.
Пилот достал из ящика яблоко и протянул ему.
— Держи.
Он взял и положил в карман.
Снег под трапом скрипел сухо и звонко. В рюкзаке были палатка, горелка и парашют. Семнадцать килограммов.
Над горизонтом дрожало зеленое.
Он сел на рюкзак посреди поля и достал сигарету. Спичка вспыхнула и осветила скулы и глаза. Ветер задул ее сразу. Вторую он зажигать не стал.
Было темно. Он сидел и чувствовал, как земля тянет его вниз. Девять и восемь десятых метра в секунду за секунду.
Потом он вспомнил про яблоко. Оно было как камень, и зубы соскользнули. Он подышал на него, попробовал еще раз и бросил.
Он расстегнул куртку и сунул яблоко за пазуху. Ему надо было оттаять.
\chapter{Chapter 02}
Четверг, половина третьего. Дождь шел с утра.
Дверь открылась тихо. Детектив не встал. Он кивнул на стул.
— Он прыгнул в субботу, — сказала она.
— Знаю.
Она была в темном пальто. На плечах блестели капли.
— Все говорят — несчастный случай.
— Кто все?
— В компании. В полиции. — Она села. — Вы ведь его знали. Учились вместе.
Детектив посмотрел на свои руки.
— Что вы хотите знать?
— Кто это сделал.
— А если он сам?
— Тогда почему. — Она положила на стол блокнот. Черный, с номером на корешке. — В его мире у всего была причина. Если он себя стер, значит, условие стало истинным. Я хочу знать условие.
Он молчал.
— Однажды он сорок минут спорил о цвете кнопки в интерфейсе. Он говорил: «Красный — это сигнал тревоги. Ошибка, которая будет стоить три секунды лишнего внимания каждому пользователю. В день их миллионы. Вы крадете годы человеческой жизни ради своего стиля». Кнопку сделали серой. Он не праздновал победу. Он просто зафиксировал исправление бага.
— Он такой был.
— Один мальчик принес ему код. Он прочитал семь строк и сказал, что это мина и она сработает через два года. Мальчик уволился через неделю.
Детектив встал и подошел к окну. Дождь падал на город ровно, без ветра.
— Я спросила его, — сказала она ему в спину, — а если что-то пойдет не по плану. Он сказал: тогда фичу допишет кто-то другой. — Она помолчала. — В ту субботу он проверял всё три раза.
— Один раз — доверие, два — контроль.
— Вы помните.
Он не ответил.
— Начну с парашюта, — сказал он через минуту. — Стропы. Укладка. Кто имел доступ. Потом полезу в его репозиторий. Последние коммиты, переписку. Он не умел уходить, не записав ошибку.
Она встала.
— Сколько это будет стоить?
— Смотря как глубоко он закопал ключи.
Конверт лег на стол. Сверху фотография. Архитектор у самолета, ранец в руке, улыбается. Поверх ткани маркером нарисован черный крест. Он заходил за край клапана и обрывался.
— Когда первый отчет?
— Когда будет во что поверить.
Дверь закрылась так же тихо, как открылась.
Детектив поднес фотографию к лампе. Потом положил ее лицом вниз и сел.
\chapter{Chapter 03}
Край аэродрома «Северный-2». Шлагбаум на въезде был поднят и примерз в этом положении. Снег лежал ровно, техника его еще не тронула.
Укладчик сидел на перевернутом ящике из-под запчастей. Руки в перчатках лежали на коленях. Он смотрел на свои унты.
— Он приехал в пятницу, — сказал укладчик. — За час до конца смены. Сказал: я сам всё сделаю, просто посиди рядом.
Детектив стоял, засунув руки в карманы. Ветер здесь шел с открытого поля и не встречал ничего на сотню километров.
— Ты видел, что он делал?
— Всё видел. — Укладчик поднял голову и сощурился от белизны. — Купол раскладывал так, будто он стеклянный. Каждую стропу перебрал пальцами. Глаза закроет и ведет ладонью от купола до свободных концов. Профи укладывается за пятнадцать минут и не глядя. Он полтора часа сидел.
— Раньше так делал?
— Нет.
Детектив достал фотографию. На морозе бумага стала жесткой.
— Его работа?
Укладчик взял снимок, посмотрел на крест и вернул.
— Нет. Он меток не признавал. Говорил: метки — костыли для тех, кто своим рукам не верит. Всё в голове держал. — Он вытер перчатку о колено. — И посмотри, как нарисовано. Он бы такой ранец в руки не взял.
— Телефон брал?
— Оставил в машине. На панели. Сказал: сегодня без прерываний. Ключи бросил на сиденье, дверь не запер. Я ему говорю — угонят. Он рукой махнул. Тут, говорит, некому.
Ветер пронес над полосой снежную пыль. В ангаре хлопнул лист железа.
— Прыгал один, — сказал укладчик. — Взял старый Ан-2. Пилот говорил, просил курс строго на север. От зоны выброски подальше. Хотел чистое поле. Без разметки.
Небо было низкое и серое.
— Он спрашивал что-нибудь перед вылетом? Про технику, про погоду?
Укладчик поворошил снег носком унта.
— Спросил, сколько падать с трёх тысяч шестисот, если купол не выйдет.
— И что ты сказал?
— Секунд семьдесят.
— А он?
— Усмехнулся. Сказал: достаточно. И пошел к самолету.
Детектив открыл блокнот. Ручка на холоде царапала бумагу и не писала.
— Достаточно для чего? — спросил укладчик.
Детектив закрыл блокнот.
— Не знаю.
Он пошел к машине. Снег скрипел под ботинками.
Детектив сел за руль и захлопнул дверь. Достал фотографию из кармана и положил на соседнее сиденье лицом вверх. Больше он ее не трогал.
Мотор он не заводил. Через лобовое стекло была видна полоса, и за ней поле, ровное и пустое до горизонта.
Он посмотрел на часы и стал считать.
На семьдесятой секунде он повернул ключ.
\chapter{Chapter 04}
Замок был кастомный. Ригель отошел с щелчком, и щелчок прозвучал на весь коридор. Детектив вошел и не стал включать свет.
В квартире было темно, сухо и жарко. Пахло разогретым пластиком и пылью. Гудело ровно, на одной ноте.
Мебели не было. Вдоль стены стояли четыре серверных шкафа. На панелях мигали зеленые и янтарные диоды. Кабели лежали связками — желтые, синие, черные, стянутые хомутами через равные промежутки. На каждой связке бирка. На полу коробки с платами, подписанные маркером: FSM, INVAR, SEQ.
Всю стену напротив окон занимала доска. Схемы, стрелки, графы состояний. В углу, отдельно от остального, одно слово в двойном контуре: «СБОЙ».
Справа шли два столбца, выведенные ровным почерком.
Обработка запроса без потери данных.
Автопереключение на резерв.
Полная воспроизводимость.
Механизм безопасного завершения — подчеркнуто трижды.
Отсутствие единой точки отказа.
Полная наблюдаемость.
Слово «идемпотентность» было обведено столько раз, что маркер процарапал покрытие.
Ниже — таблица сценариев. Инициализация. Обработка запроса. Частичный отказ. Под таблицей, отдельно, был вписан нулевой: принудительное завершение при сохранности инвариантов. Почерк здесь стал хуже.
«Если инварианты нарушены — систему останавливают. Работа в условиях лжи недопустима».
Середина доски была стерта. Не смазана рукавом — вытерта начисто, по границе схемы, так что каркас зависимостей остался, а внутри было пусто. Ластик лежал на полочке, ровно посередине, между маркерами.
Стол был разобран. Ящики выдвинуты, бумаги отложены в сторону стопкой. Детектив постоял над ним и ничего не тронул.
Фотографии лежали россыпью. Северное сияние, десятки снимков одного и того же квадрата неба. На одном была видна тень человека у Ан-2. Детектив перевернул снимок. На обороте дата, время и приписка: «Проверить второй контур».
Рядом лежал раскрытый блокнот. Детектив взял его и стал листать.
Почерк был тот же, с маленькими засечками на «т» и «д».
\begin{verse}
С каждым днём стаи птиц всё ниже и ниже,
Спицы чёрных ветвей тяжелее нести.
Я стою у порога — случайный и лишний,
А мой дом — за шлагбаумом, в конце пути.
День рождения. Небо гудит над краем,
Осыпаясь зелёным битым стеклом.
Светит голая лампа, углы обнажая,
И трещит под плафоном сухим фитильком.
Слюда легла на воду в том ручье,
Чужие тени бродят в тёмном сквере.
Но где же я? Где день на моём столе —
С его дыханьем, запахом, неверьем?
\end{verse}
Дальше страницы были заполнены до конца. Детектив читать не стал.
На последней странице было две строки. Первую он знал.
«Если сломается — кто-то другой допишет».
Ниже, тем же почерком, но буквы шли неровно:
«Я дописал».
Детектив держал блокнот и не закрывал его.
На третьем курсе они сдавали одну работу на двоих. Ночью Архитектор нашел у него ошибку — не в коде, в самой постановке. Стер всё и начал заново, за четыре часа до сдачи. Он тогда сказал: успеем. Успели.
Детектив закрыл блокнот и положил его на место, как лежал.
Серверы гудели. Диоды мигали по очереди, слева направо.
Он так и не включил свет. Постоял еще минуту в сухом жару и вышел, заперев дверь.
\chapter{Chapter 05}
Детектив держал планшет на коленях. Экран светился тускло. Запись из переговорной он взял у коллеги Архитектора. Дата — за три недели до прыжка.
Он включил.
Архитектор сидел в переговорной двадцать минут. Менеджер опаздывал.
Стеклянные стены, белый маркер, ни одной царапины. На столе — бутылка воды, ноутбук и блокнот. Блокнот он не открывал. Работал. За окном рос новый бизнес-центр — стальной скелет в сером небе.
Дверь открылась.
— Извини, созвон затянулся, — менеджер плюхнулся в кресло, даже не взглянув на него. — Короче, у нас новости от заказчика.
Он кивнул.
— Сроки горят. Они хотят релиз через две недели.
— Через две недели будет только каркас.
— Значит, сделаем каркас. Зальём на прод, потом допишем.
— На прод? — он поднял взгляд от ноутбука. Впервые за всё время.
Менеджер развёл руками:
— Бизнесу нужно показать цифры. Инвесторам. Ты понимаешь.
— А если упадёт?
— Поднимем. У тебя же там отказоустойчивость заложена?
— Отказоустойчивость не работает на сыром коде. Если упадут три сервиса одновременно, система не успеет перестроиться. Мы не писали ещё половину сценариев деградации.
Менеджер отмахнулся:
— Слушай, вероятность мала. Заказчик согласен на риск.
— Заказчик не знает, на что соглашается.
— Он платит. Он решает.
За стеклом кто-то прошёл с бумажными стаканчиками.
Архитектор открыл блокнот и тут же закрыл. Убрал ручку.
— Ты хочешь, чтобы я выкатил сырец с дырами?
— Я хочу, чтобы мы уложились в сроки. Остальное — твой профессионализм. Сделай красиво, но быстро.
— Это исключает друг друга.
Менеджер вздохнул. Посмотрел на часы.
— Я понимаю, — сказал он тихо, сжав руки на столе. — Сроки поставили руководство и заказчик без твоего участия. Так получилось. Теперь нам нужно как-то решить эту проблему. Слушай, все так работают. Выкатываем, потом чиним. Это нормально.
— Это не нормально. Это значит, что мы сознательно поставляем дефект.
— Это значит, что мы успеваем.
Он встал. Подошёл к стеклянной стене. Посмотрел на стальной скелет за окном. Тот рос, но без бетона — просто рёбра, которые сложатся при первой нагрузке.
Повернулся.
— Я не пишу код, чтобы у меня были заказчики. У меня есть заказчики, чтобы писать код.
Менеджер замер.
— В смысле?
— В прямом. Код должен работать. Долго. Без сбоев. Если для этого нужно потерять одного заказчика — я потеряю. Если нужно переписать всё с нуля — перепишу. Но я не буду заливать в прод то, что сломается в первый же час пик.
Менеджер открыл рот, но ничего не сказал.
— Релиз через месяц. — Голос ровный. — С полным покрытием тестами и схемой деградации. Или не будет вообще.
— Ты понимаешь, что они уйдут к конкурентам?
— Пусть уходят. Через полгода их система ляжет. Они вернутся. А наша будет стоять.
Блокнот взят. Шаг к двери.
— Подожди. — Менеджер встал. — А если это приказ?
Остановился. Не оборачиваясь:
— Тогда я уволюсь.
Дверь открылась. За ней гудел опенспейс — пятьдесят человек, пригвождённых к мониторам.
Вышел.
Лифт. Телефон. Сообщение от коллеги: «Ну что?»
Ответ: «Месяц. Или ничего». Отправил.
Лифт поехал вниз. За стеклом проплывали этажи — люди, пишущие код, который завтра упадёт.
Смотрел на них и думал о парашюте. О том, как однажды проверял стропы в пустом ангаре. Там тоже был выбор: быстро или правильно.
Выбрал правильно. Тогда.
Выберет и сейчас.
\chapter{Chapter 06}
У него было два плана прыжка. Один в голове. Другой в телефоне, а телефон лежал в машине, выключенный.
Раньше было иначе. База, полный борт, небо тесное от людей. Сцеплялись в формации, рука в руку. В этом была математика, и рядом всегда был кто-то.
Потом он ушел во фрифлай. Головой вниз. Земля шла навстречу, воздух давил в грудь.
Потом стало тридцать шесть.
Воздух над тундрой был прозрачный и неподвижный. Пилот вывел самолет на курс.
— Три тысячи шестьсот, — сказал выпускающий. — Выходишь один.
— Да.
Он проверил снаряжение. Ремни. Шпилька. Потом прошел по тому же кругу еще раз и остановился.
Шаг к люку. Встал на обрез.
Внизу не было ни аэродрома, ни огней. Белое поле, и над горизонтом проступало сияние.
День рождения — под северным сияньем…
— Пошел, — сказал он себе.
Люк опустел.
\chapter{Chapter 07}
Она открыла дверь сразу. Будто стояла в коридоре.
В квартире было тепло. Слишком тепло после тундры. Пахло кофе. Кофе она не предложила.
Сели на кухне. Он поставил на пол пакет и сложил руки на столе.
— Был на аэродроме, — сказал он. — Говорил с укладчиком. С пилотом. Был у него дома.
Она молчала.
— Он уложил парашют сам. Полтора часа. Телефон оставил в машине. Прыгнул один.
— Дальше.
— Укладывал в пятницу. Прыгал в субботу.
Она подняла голову.
— Где ранец был ночь?
— В шкафу в подсобке. Шкаф не запирается.
Она долго ничего не говорила. Дождь шел по стеклу.
— Крест у него был за спиной, — сказал детектив.
Он положил на стол блокнот.
— Это было у него дома. Стихи. И последняя страница.
Она открыла. Читала долго, хотя там было две строки.
— Это его почерк.
— Да.
— Буквы неровные.
— Он писал на холоде. Или нет. Я не знаю.
Она закрыла блокнот и накрыла ладонью.
— Что вы мне скажете? Несчастный случай?
— Я скажу, что у меня нет ответа.
— Мне нужен ответ.
— У меня есть факты. Их немного, и они не сходятся.
Она встала и подошла к окну. Стояла спиной.
— Он мне говорил: если система не дает сбоев, это не значит, что она правильная. Это значит, что ты не нашел баг.
Она взяла со стола конверт и протянула ему.
— Это не аванс.
Он взял.
— Блокнот оставьте, — сказал он. — Он ваш.
Она кивнула, не оборачиваясь.
У двери он остановился.
— Крест на ранце, — сказала она в стекло. — Он мог сам?
— Нет.
— Тогда кто?
Детектив не ответил. Он взялся за ручку. За спиной стало слышно дождь, а потом сквозь дождь — короткий сдавленный звук. Она стояла у окна и не оборачивалась.
Он не подошел.
— Там дальше в блокноте еще стихи, — сказал он от двери. — Много. Я прочитал две страницы и закрыл.
Она не обернулась.
Он вспомнил про пакет уже в прихожей.
— Это его. Из машины, с аэродрома. Телефон, ключи, куртка.
Он поставил пакет на пол и вышел.
Она развязала пакет, когда за ним закрылась дверь. Куртка пахла керосином. В правом кармане лежало яблоко.
Оно было твердое. На боку остался след зубов.
Она села за стол и держала его в ладонях. На кухне было жарко. Через несколько минут яблоко запотело.
Свидетельство о публикации №226082001649