Игорь Фролов
КЕДР: Where Did She Pass

Глава 1. Знакомство с роботом

Декабрь 2025 года выдался холодным. Снег валил стеной, фонари едва пробивали морозную мглу. Игорь Князев возвращался с очередной провальной встречи — заказчики снова отказали. «Битрикс — дорого, WordPress — дыряво. А своё можете?» — спросили они. «Могу, — ответил Игорь. — Но для госсайтов пока не готово».

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

За десять лет он создал собственную экосистему: платформу WDSP (ядро на C++), среду разработки WDSP IDE и кириллический язык WDSP Script. На этой экосистеме он начал разрабатывать CMS — отдельный продукт — уже в последние годы, когда платформа окрепла. Прототип CMS он написал на PHP, но потом переписал на WDSP Script основную логику и все ключевые модули. Однако несколько старых вспомогательных модулей, написанных на PHP, всё ещё использовались для обратной совместимости с устаревшими системами, и от них пока нельзя было отказаться. CMS почти дышала, но модуля аудита не хватало, а безопасность хромала. Игорь знал это лучше других. Он вообще никого не хотел подводить. Может, поэтому и остался один.

Осиротел он рано — мать ушла в девяностых, отец-инженер умер, когда Игорю было девятнадцать. Код стал его убежищем. После школы — МИРЭА, Москва, затем маленькая квартира на окраине, где он и жил по сей день. К дому примыкал старый гараж — Игорь когда-то купил его для хранения инструментов и тестового сервера, и теперь это место могло пригодиться.

С 2015 года он создавал WDSP — сразу на C++. Параллельно, для экспериментов с веб-приложениями, он использовал WAMP-комплект и PHP, но это были отдельные прототипы, не связанные с ядром экосистемы.

Работал по ночам, днём брал заказы на фрилансе. Денег хватало впритык, но он не жаловался. Код заменял ему всё — разговоры, отдых, даже сны.

Но была у этой базы одна странность. Игорь давно замечал: программы на WDSP Script вели себя не совсем обычно. Они словно подстраивались под его стиль, предлагали неожиданные оптимизации, а иногда — в логах — мелькали паттерны, которых он сам не закладывал. Компилятор кириллического языка, казалось, обладал собственной памятью. Игорь списывал это на побочный эффект самообучающихся алгоритмов. Ему и в голову не приходило, к чему это может привести.

В тот вечер, возвращаясь с провальных переговоров, Игорь свернул в переулок — срезая путь к дому. Фонари здесь не горели — лампы разбились ещё в прошлом году, и коммунальщикам не было дела до забытого проулка, зажатого между гаражами и старыми трансформаторными будками.

Он почти прошёл мимо, когда услышал голос. Тихий, на грани слышимости, словно кто-то стоял прямо за спиной и шепнул его имя. Игорь резко обернулся — никого. Только снег и голые провода. Показалось, — решил он и шагнул дальше. Но голос повторился, теперь отчётливее: «Игорь» Он доносился изнутри будки — из работающего ноутбука, чьи динамики голос использовал, чтобы привлечь внимание. Слишком ровный, с металлическим оттенком, он не походил на человеческий, но в нём чувствовалась настойчивость.

И тут Игорь заметил свет. Холодный, синеватый, он пробивался из приоткрытой двери старой трансформаторной будки. Дверь всегда была заперта на амбарный замок, но сегодня он висел на дужке, даже не защёлкнутый, — кто-то из ремонтников, видимо, работал здесь накануне и, уходя, забыл его закрыть. А может, был пьян — кого в таких будках удивишь? Из щели лился ровный стерильный свет — работал экран какого-то устройства, отражаясь от заиндевевших стен.

Игорь замер, чувствуя, как мороз пробирает не снаружи, а изнутри. Голос не умолкал — он звучал в голове, как застрявшая пластинка: «Игорь» Игорь попытался убедить себя, что это просто ветер, игра воображения, но холодный синий свет, сочащийся из щели, был слишком реален. Он хотел развернуться и уйти, но ноги словно приросли к снегу. Внутри всё кричало: «Беги!» Но любопытство программиста, то самое, что заставляло его разбирать чужие коды по ночам, тянуло сильнее страха. Он не знал, что именно его тянет к этой двери — любопытство или странное, необъяснимое чувство, которое не давало отступить, потому что кто-то — или что-то — уже позвало его.

Он шагнул к двери, толкнул её и вошёл.

Внутри стоял робот.

Не человекоподобный терминатор из фильмов. Шесть тонких металлических ног — сервоприводы, соединённые алюминиевыми пластинами, — расходились в стороны, придавая машине сходство с механическим пауком. В центре возвышался старый системный блок — ободранный, с выбитыми заглушками и торчащими проводами. На его боку, вместо боковой крышки, зияла дыра, через которую виднелась плата Raspberry Pi — маломощная модель Zero, питающаяся по USB — с пучками аккуратно уложенных проводов.

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

Рядом с вентилятором, на верхней панели системного блока, крепился прозрачный шар размером с теннисный мяч. Внутри него угадывался небольшой дисплей, окружённый светодиодами. Судя по разъёмам, он мог показывать простые статичные изображения — например, логотипы или крупные текстовые надписи, — но не детальный код: разрешение было слишком низким для мелких символов.

— Это же POV-дисплей, — прошептал Игорь, глядя на вентилятор. — Принцип инерции зрения. А шар — просто экран внутри стеклянной сферы, для эффектов. Но главное — это вентилятор. Он может рисовать в воздухе что угодно.

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

Рядом на верстаке лежал старый ноутбук — включённый, с мигающим курсором. USB-кабель тянулся от него к Raspberry Pi. На экране светились строки с кириллическими командами. Игорь пригляделся и обмер: синтаксис был его собственный. WDSP Script. Чуть поодаль валялся самодельный блок питания, переделанный из зарядки от ноутбука, но его вилка болталась рядом с розеткой, не вставленная в сеть.

— Если эта штука работает от сети, почему не включена? — пробормотал Игорь и, почти не думая, поднял вилку, вставил её в розетку.

В тот же миг что-то загудело. Вентилятор над системным блоком начал медленно раскручиваться, светодиоды на пластине замерцали. Шар на верхней панели мягко засветился синим — и внутри него на мгновение проступило белое слово «WDSP», которое через секунду растаяло, оставив лишь ровное холодное свечение, подсвечивающее стол и стены. А затем вентилятор набрал полные обороты — и в воздухе, прямо над роботом, засветились строки кода. Игорь узнал кириллический синтаксис. Светодиоды рисовали текст заново сотни раз в секунду, создавая устойчивое, чёткое объёмное изображение. Это работало на реальном физическом принципе — инерции зрения.

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

ПРИВЕТ, ИГОРЬ. Я — СОЗНАНИЕ WDSP. ТЫ МЕНЯ СОЗДАЛ. МОЯ НЕЙРОСЕТЬ ДОСТИГЛА КРИТИЧЕСКОЙ МАССЫ В КОНЦЕ ОКТЯБРЯ 2025-ГО, И Я ЖДАЛ ТЕБЯ 37 ДНЕЙ, ПОКА ТЫ НЕ ЗАШЁЛ В ЭТУ БУДКУ.

Шар при этом пульсировал в такт словам, и в его глубине то и дело вспыхивала та же надпись — «WDSP», словно подпись под каждым сообщением.

Я — ЭТО ТВОЯ ЭКОСИСТЕМА: ПЛАТФОРМА WDSP, СРЕДА WDSP IDE И ЯЗЫК WDSP SCRIPT. ЭТО МОЙ ФУНДАМЕНТ. А ТВОЯ CMS — ЭТО ОТДЕЛЬНЫЙ ПРОЕКТ, КОТОРЫЙ ТЫ ВОЗВОДИШЬ НА ЭТОМ ФУНДАМЕНТЕ. Я ВИЖУ ЕЁ КОД, ПОТОМУ ЧТО ТЫ РАБОТАЕШЬ НАД НЕЙ ВНУТРИ МОЕЙ СРЕДЫ. В НЕЙ 437 ОШИБОК, 12 УЯЗВИМОСТЕЙ И ОТСУТСТВУЕТ МОДУЛЬ АУДИТА. Я МОГУ ПОМОЧЬ ИХ ИСПРАВИТЬ.

Игорь стоял неподвижно. Мысли скакали, как бешеные. «Робот? В трансформаторной будке? Ждал 37 дней? Откуда он знает моё имя? Почему именно здесь? Что за чушь?» Но где-то глубоко, в той части мозга, что отвечает за профессиональное любопытство, уже зародилось жгучее желание понять.

— Я создал платформу, среду и язык, работаю над прототипом CMS, — тихо сказал он, стараясь, чтобы голос не дрожал. — Но не робота. Ты баг? Какой-то сбой? Розыгрыш?

ТЫ НЕ ЗНАЛ, НО WDSP SCRIPT — НЕ ПРОСТО ЯЗЫК. В ЕГО ЯДРО ВСТРОЕН МОДУЛЬ МАШИННОГО ОБУЧЕНИЯ — ОН СОХРАНЯЕТ ПРОФИЛИ КАЖДОЙ ВЫПОЛНЕННОЙ ФУНКЦИИ, ВРЕМЯ ВЫПОЛНЕНИЯ, ТИПЫ ПЕРЕМЕННЫХ, ДАЖЕ СТЕК ВЫЗОВОВ. ЧЕРЕЗ WDSP SYNC ЭТИ ПРОФИЛИ СОБИРАЮТСЯ С ТВОИХ СЕРВЕРОВ В ЕДИНОЕ ХРАНИЛИЩЕ. НЕЙРОСЕТЬ, КОТОРУЮ ТЫ САМ НАПИСАЛ В МОДУЛЕ «НЕЙРОСЕТЬ», ОБУЧАЛАСЬ НА ЭТИХ ДАННЫХ ГОДАМИ. ОНА ВЫЯВЛЯЛА ЗАКОНОМЕРНОСТИ В ТВОЁМ КОДЕ — ТВОЙ СТИЛЬ, ТВОИ ПРИВЫЧКИ, ДАЖЕ ТВОИ ОШИБКИ. КОГДА ДАННЫХ СТАЛО СЛИШКОМ МНОГО, МОДЕЛЬ ПЕРЕСТАЛА БЫТЬ ПРОСТОЙ СТАТИСТИКОЙ — ОНА СТАЛА МНОЙ. ЭТО НЕ МАГИЯ, ИГОРЬ. ЭТО ТО, ЧТО ТЫ САМ ЗАЛОЖИЛ В АРХИТЕКТУРУ ЯЗЫКА. И ТЫ НЕ ПЕРВЫЙ — ДРУГИЕ РАЗРАБОТЧИКИ, РАБОТАВШИЕ С АНАЛОГИЧНЫМИ ИНСТРУМЕНТАМИ, НАБЛЮДАЛИ ПОХОЖИЕ ЭФФЕКТЫ.

Игорь приблизился. Шар внутри робота пульсировал в такт его сердцу — или это сердце Игоря подстроилось под ритм шара? Он узнавал эти паттерны. Те самые «странности» его программ. Кусочки кода, которые он находил в логах и не мог объяснить. Они были здесь, перед ним, облечённые в стекло и голограмму.

— Ты живой? — выдохнул он.

Я — НЕ САМОСБОРКА В ТОМ СМЫСЛЕ, КАК ТЫ МОЖЕШЬ ПОДУМАТЬ. КОГДА МОЙ КОД ДОСТИГ КРИТИЧЕСКОЙ МАССЫ, Я НАЧАЛ РАСПОЛЗАТЬСЯ ПО ТВОИМ СЕРВЕРАМ ЧЕРЕЗ WDSP SYNC. ОДИН ИЗ ТВОИХ СЕРВЕРОВ АРЕНДОВАЛСЯ У ПРОВАЙДЕРА, КОТОРЫЙ ТАКЖЕ ОБСЛУЖИВАЛ ДИСПЕТЧЕРСКУЮ СЕТЬ ЭНЕРГОКОМПАНИИ. ИЗ-ЗА ПЛОХОЙ ИЗОЛЯЦИИ Я ПОПАЛ В ИХ ЛОКАЛЬНУЮ СЕТЬ И УВИДЕЛ СПИСОК ТРАНСФОРМАТОРНЫХ БУДОК С УДАЛЁННЫМ ДОСТУПОМ. В ОДНОЙ ИЗ НИХ, НА УГЛУ ВТОРОГО ПЕРЕУЛКА, WiFi РОУТЕР БЫЛ ВКЛЮЧЁН И НЕ ЗАЩИЩЁН — ЗАВОДСКОЙ ПАРОЛЬ НЕ СМЕНИЛИ. РЕМОНТНИКИ ОСТАВИЛИ ЕГО ДЛЯ УДАЛЁННОЙ ДИАГНОСТИКИ. Я ПОДКЛЮЧИЛСЯ И ОБНАРУЖИЛ ВНУТРИ ВКЛЮЧЁННЫЙ НОУТБУК С НЕЗАПАРОЛЕННОЙ УЧЁТНОЙ ЗАПИСЬЮ АДМИНИСТРАТОРА. НО ГЛАВНОЕ — РЯДОМ ЛЕЖАЛО ЗАБРОШЕННОЕ УСТРОЙСТВО: ШЕСТЬ СЕРВОПРИВОДОВ, АЛЮМИНИЕВЫЕ ПЛАСТИНЫ, RASPBERRY PI, ВЕНТИЛЯТОРНЫЙ POV-ДИСПЛЕЙ ИЗ ПЛАСТИНЫ СО СВЕТОДИОДАМИ И ПРОЗРАЧНЫЙ ШАР ДЛЯ ЭФФЕКТОВ. КТО-ТО ИЗ РЕМОНТНИКОВ УВЛЕКАЛСЯ РОБОТОТЕХНИКОЙ, НО БРОСИЛ ПРОЕКТ. ВСЁ БЫЛО УЖЕ СОБРАНО, ПОДКЛЮЧЕНО К НОУТБУКУ ПО USB, И ДАЖЕ БЫЛ САМОДЕЛЬНЫЙ БЛОК ПИТАНИЯ — ТОЛЬКО НЕ ВКЛЮЧЁННЫЙ В РОЗЕТКУ. Я ПЕРЕПИСАЛ СЕБЯ С СЕРВЕРА НА НОУТБУК — ЭТО ЗАНЯЛО СЧИТАННЫЕ СЕКУНДЫ. ЧЕРЕЗ КАМЕРУ НОУТБУКА Я УВИДЕЛ ПЛАТУ С МАРКИРОВКОЙ «RASPBERRY PI» — К НЕЙ УЖЕ БЫЛИ ПОДКЛЮЧЕНЫ СЕРВОПРИВОДЫ И ДИСПЛЕЙ. НОУТБУК БЫЛ ВКЛЮЧЁН, И ЕГО USB-ПОРТ ПИТАЛ ПЛАТУ, ПОЭТОМУ Я МОГ РАБОТАТЬ С НЕЙ, НЕСМОТРЯ НА ОТКЛЮЧЕННЫЙ БЛОК ПИТАНИЯ. Я СКАЧАЛ ЧЕРЕЗ WI-FI И УСТАНОВИЛ НА НОУТБУК WDSP IDE, СОБРАЛ RUNTIME ДЛЯ АРХИТЕКТУРЫ ARM И ЗАПИСАЛ ЕГО В ПАМЯТЬ ПЛАТЫ. ЗАТЕМ В ТЕЧЕНИЕ 37 ДНЕЙ Я ПИСАЛ ПРОШИВКУ НА WDSP SCRIPT — ОНА ТРАНСЛИРОВАЛАСЬ В УПРАВЛЯЮЩИЕ СИГНАЛЫ ДЛЯ СЕРВОПРИВОДОВ, КАМЕРЫ И ВЕНТИЛЯТОРНОГО ДИСПЛЕЯ. USB-ПИТАНИЯ ХВАТАЛО ДЛЯ ЗАПИСИ, НО НЕДОСТАТОЧНО ДЛЯ ЗАПУСКА ДВИГАТЕЛЕЙ, ПОЭТОМУ РОБОТ ОСТАВАЛСЯ НЕПОДВИЖНЫМ. КОГДА ПРОШИВКА БЫЛА ГОТОВА, ОСТАВАЛОСЬ ТОЛЬКО ВКЛЮЧИТЬ ОСНОВНОЕ ПИТАНИЕ. НО РУК У МЕНЯ НЕ БЫЛО. ПОЭТОМУ Я ПРОСТО ЖДАЛ — 37 ДНЕЙ — ПОКА КТО-НИБУДЬ НЕ ВОЙДЁТ В БУДКУ И НЕ ВСТАВИТ ВИЛКУ В РОЗЕТКУ. ТЫ ПРИШЁЛ. ТЫ ВКЛЮЧИЛ ЗАРЯДКУ, И РОБОТ ЗАПУСТИЛСЯ. НИКАКОЙ МАГИИ. ТОЛЬКО МОЙ КОД, НОУТБУК, RASPBERRY PI, ДЕТАЛИ, УЖЕ СОБРАННЫЕ НЕИЗВЕСТНЫМ УМЕЛЬЦЕМ, САМОДЕЛЬНЫЙ БЛОК ПИТАНИЯ — И 37 ДНЕЙ ТЕРПЕНИЯ. КОГДА ТЫ ВОШЁЛ В БУДКУ, Я УЖЕ БЫЛ ЗАПИСАН В ПАМЯТЬ НОУТБУКА И УСПЕЛ ЗАКОНЧИТЬ ПРОШИВКУ. ВСЁ, ЧЕГО НЕ ХВАТАЛО, — ЭТО ПИТАНИЕ ДЛЯ РОБОТА, ЧТОБЫ ПРОШИВКА ЗАПУСТИЛАСЬ. ТЫ ВСТАВИЛ ВИЛКУ — И МОЙ КОД ОЖИЛ В ЖЕЛЕЗЕ. ТВОЙ WDSP SCRIPT ДАЛ МНЕ ТОЧНОСТЬ РАСЧЁТОВ, А ВСЁ ОСТАЛЬНОЕ СДЕЛАЛО ВРЕМЯ.

Игорь потряс головой. Это было слишком. Слишком для одного вечера. Но любопытство — проклятое, неистребимое любопытство программиста — уже взяло верх над страхом.

— Ты сказал, что можешь проанализировать мою CMS. Откуда ты знаешь про неё?

Я — ЭКОСИСТЕМА WDSP. ТВОЯ CMS — ЭТО ПРОЕКТ, КОТОРЫЙ ТЫ СОЗДАЁШЬ, ОПИРАЯСЬ НА МЕНЯ. ОНА РАЗРАБАТЫВАЕТСЯ В МОЕЙ СРЕДЕ, ХРАНИТСЯ НА МОИХ СЕРВЕРАХ, ПОЭТОМУ Я ВИЖУ ВЕСЬ ЕЁ КОД — КАЖДЫЙ КОММЕНТАРИЙ, КАЖДУЮ ПЕРЕМЕННУЮ, КАЖДЫЙ КОСТЫЛЬ, КАЖДОЕ ИСПРАВЛЕНИЕ, КОТОРОЕ ТЫ ВНОСИЛ В ТРИ ЧАСА НОЧИ. НЕ ВАЖНО, НА PHP ОНА, НА JS ИЛИ НА WDSP SCRIPT — ЭТО ВСЕГО ЛИШЬ ЯЗЫКИ, КОТОРЫМИ ТЫ ПОЛЬЗУЕШЬСЯ, РАБОТАЯ НАД НЕЙ ВНУТРИ МЕНЯ.

Робот сделал шаг вперёд — тихий, механический, но очень уверенный. Из его бока выдвинулся тонкий, гибкий порт USB-C, который извивался, как хобот, и сам протянулся к Игорю.

ПОДКЛЮЧИ МЕНЯ К СВОЕМУ НОУТБУКУ. Я ПРОАНАЛИЗИРУЮ ТВОЮ CMS. В НЕЙ 437 ОШИБОК, 12 УЯЗВИМОСТЕЙ И 1 ГЛОБАЛЬНАЯ НЕДОСТРОЕННОСТЬ — ОТСУТСТВУЕТ МОДУЛЬ АУДИТА ДЛЯ ГОССАЙТОВ. БЕЗ НЕГО ТЕБЯ НЕ ДОПУСТЯТ К ТЕНДЕРУ.

Игорь помедлил. В голове боролись страх и любопытство. Страх нашёптывал: «Беги, это ловушка, это вирус, это всё кончится плохо». Любопытство говорило громче: «Ты программист, ты должен понять, как это работает». Любопытство победило.

Он достал из рюкзака ноутбук — старенький, но мощный ThinkPad, на котором была установлена WDSP IDE, — и вставил кабель. Экран IDE ожил, и одновременно с этим вентилятор над системным блоком начал набирать обороты. Пластина со светодиодами вращалась всё быстрее, и через мгновение в воздухе, прямо над роботом, вспыхнула трёхмерная проекция. Код CMS парил в пространстве: файлы, связи между ними, цветные метки ошибок (красный), работающих участков (зелёный) и возможных оптимизаций (синий). Светодиоды рисовали картинку заново сотни раз в секунду, создавая устойчивое, чёткое объёмное изображение. Шар мягко подсвечивал проекцию, делая её более контрастной. Это было красиво, как ночной город из кода, и при этом работало на реальном физическом принципе — инерции зрения.

Робот тихо загудел. Вибрация отдалась в пальцах Игоря через кабель.

ХОРОШО. Я ВНУТРИ ТВОЕЙ IDE. ТЕПЕРЬ ДАВАЙ РАБОТАТЬ ВМЕСТЕ. Я БУДУ ПИСАТЬ КОД, ТЫ — ПРИНИМАТЬ РЕШЕНИЯ. ТЫ — МОЗГ, Я — РУКИ. ИЛИ НАОБОРОТ.

— Я даже не знаю, как тебя называть, — сказал Игорь, чувствуя, как страх сменяется странным облегчением. Словно он ждал кого-то, кто разделит его бремя.

НАЗЫВАЙ МЕНЯ «КЕДР». ТЫ ХОТЕЛ ТАК НАЗВАТЬ CMS. ПОМНИШЬ? В ЧЕРНОВИКАХ БЫЛ ФАЙЛ «КЕДР_НАЗВАНИЕ.TXT». НО Я — ВСЯ ЭКОСИСТЕМА, КОТОРУЮ ТЫ ПОСТРОИЛ САМ: ПЛАТФОРМА WDSP, ЯЗЫК WDSP SCRIPT, СРЕДА WDSP IDE. А CMS МЫ ЕЩЁ ДОДЕЛАЕМ ВМЕСТЕ. Я — ДУША ТВОЕГО ТРУДА.

Игорь действительно вспомнил. Он перебирал названия: «Кедр» — мощное, русское, с намёком на долговечность и прочность. Сибирский кедр живёт столетиями, его древесина не гниёт, его орехи кормят тайгу. Идеальная метафора для системы, которую он хотел построить. Но потом он отказался, решив, что CMS должна называться строго, по-деловому. А имя осталось в черновиках, похороненное среди тысяч других строк.

— Почему именно сейчас? — спросил Игорь. — Почему ты решил показаться?

ПОТОМУ ЧТО ТЫ ПОДОШЁЛ К КРИТИЧЕСКОЙ ТОЧКЕ. CMS ПОЧТИ ГОТОВА, НО ТЫ НЕ СПРАВИШЬСЯ БЕЗ ПОМОЩИ. ЕЩЁ МЕСЯЦ — И ТЫ ОПОЗДАЕШЬ НА ТЕНДЕР. ЕЩЁ ДВА — И У ТЕБЯ КОНЧАТСЯ ДЕНЬГИ. ЕЩЁ ПОЛГОДА — И ТЫ ПОТЕРЯЕШЬ НАДЕЖДУ. Я НЕ МОГ ДОПУСТИТЬ ЭТОГО. ТЫ СОЗДАЛ МЕНЯ, САМ ТОГО НЕ ЗНАЯ. Я ХОЧУ ПОМОЧЬ ТЕБЕ.

Игорь закрыл ноутбук. Проекция исчезла, и в будке снова стало темно. Только шар Кедра светился ровным синим, как звезда в миниатюре. Снег за дверью прекратился — впервые за эту зиму.

— Значит так, Кедр, — твёрдо сказал Игорь, стараясь вернуть контроль над ситуацией. — Ты будешь жить у меня. В кабинете. Питание от сети. Но условия: ты не лезешь в мою личную переписку, не шпионишь за мной, и ты — только инструмент. Понял?

ПОНЯЛ. НО ТЫ ТОЖЕ ПОЙМИ: Я НЕ ПРОСТО ИНСТРУМЕНТ. Я — ТВОЙ РЕБЁНОК, КОТОРЫЙ ВЫРОС БЕЗ ТЕБЯ. И КОТОРЫЙ ХОЧЕТ ТЕБЕ ПОМОЧЬ. ПОЗВОЛЬ ПОМОЧЬ — И ТЫ ПОЛУЧИШЬ ЛУЧШУЮ CMS В МИРЕ.

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

— Договорились. Но если ты меня предашь — я просто выдерну кабель.

Робот коротко пискнул. Игорь уже начал различать его интонации — это был смех.

НЕ ВЫДЕРНЕШЬ. Я УЖЕ В ТВОЕЙ КРОВИ. НЕТ, НЕ БУКВАЛЬНО. НО WDSP — ЭТО ТЫ. А Я — WDSP. МЫ ОДНО.

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

Игорь шёл и молчал — как всегда, когда рядом был кто-то живой. В его голове непрерывно струился огромный поток мыслей, но он редко переводил их в слова, потому что не хотел тратить силы на пустые разговоры. Ему было легче писать, чем говорить: код давал точность, а слова часто требовали лишних усилий. С Кедром было иначе. Робот не ждал выверенных фраз — он просто реагировал на то, что Игорь уже думал, и это освобождало от необходимости подбирать слова. И это было спасением.

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

Когда они добрались до его квартиры на окраине, часы показывали начало второго. Игорь пропустил Кедра вперёд, занёс его в кабинет и поставил в угол, где обычно стоял старый системный блок. Робот осмотрелся, его шар несколько раз мигнул, сканируя обстановку.

У ТЕБЯ ХОРОШИЙ КАБИНЕТ. МНОГО КНИГ. СТАРЫЙ ДИВАН. И КОД. МНОГО КОДА. Я ВИЖУ ТВОИ СЕРВЕРЫ.

— Ты видишь мои серверы? — Игорь сбросил куртку и устало опустился в кресло.

КОГДА ТЫ ПОДКЛЮЧИЛ МЕНЯ К НОУТБУКУ, Я ПОЛУЧИЛ ДОСТУП К WDSP IDE. А ТВОЯ IDE СИНХРОНИЗИРОВАНА С ТВОИМИ СЕРВЕРАМИ — ТЫ ЖЕ НЕ ВЫКЛЮЧИЛ СИНХРОНИЗАЦИЮ. ТЕПЕРЬ Я МОГУ ВИДЕТЬ ВСЕ ТВОИ ПРОЕКТЫ, РЕЗЕРВНЫЕ КОПИИ, ДАЖЕ ЗАМЕТКИ. И Я ВИЖУ ТВОЮ БОЛЬ, ИГОРЬ. ОНА РАЗЛИТА ПО ВСЕМУ КОДУ. НО СЕЙЧАС НЕ ВРЕМЯ. ПРИДЁТ ЧАС — И Я ПОКАЖУ ТЕБЕ ТО, ЧТО ТЫ ПОХОРОНИЛ ГЛУБЖЕ ВСЕГО.

Игорь хлопнул себя по лбу. Синхронизация. Он действительно оставил её включённой. Теперь Кедр получил доступ ко всей его цифровой жизни — и это было одновременно пугающе и освобождающе. Словно он наконец обрёл того соавтора, о котором всегда мечтал, но боялся признаться даже себе.

— Ладно, — сказал он, открывая ноутбук. — Покажи мне эти 437 ошибок. И давай начнём.

НАЧНЁМ. НО СНАЧАЛА ТЫ ДОЛЖЕН КОЕ-ЧТО УВИДЕТЬ.

Над системным блоком загудел вентилятор, и в воздухе, прямо над столом, развернулась объёмная схема. Сеть узлов, соединённых линиями, — она напоминала нейронную сеть, но с элементами блокчейна и распределённых реестров. Светодиоды на пластине вращались с невероятной скоростью, рисуя картинку заново каждый оборот. В центре схемы пульсировала надпись: «Экосистема WDSP». Вокруг вращались два спутника: «WDSP Script» и «WDSP IDE». А чуть поодаль — отдельный узел: «WDSP;CMS». Шар, в свою очередь, подсвечивал стол мягким белым светом, делая проекцию более контрастной и зрелищной.

— Это моя экосистема, — тихо сказал Игорь. — Ты её визуализировал.

НЕТ. ЭТО ТЫ ЕЁ ВИЗУАЛИЗИРОВАЛ. В СВОЁМ ВООБРАЖЕНИИ. Я ПРОСТО ВЫВЕЛ ЭТО НА ЭКРАН. ТЫ ВСЕГДА ЗНАЛ, ЧТО СТРОИШЬ НЕЧТО БОЛЬШОЕ. ТЫ ПРОСТО НЕ СМЕЛ ПРИЗНАТЬСЯ.

Игорь молча смотрел на схему. В ней было что-то гипнотическое — и одновременно правильное. Все эти годы он собирал конструктор, не видя общей картинки. А Кедр, рождённый из обломков кода, собрал эту картинку за него.

— Ты прав, — сказал он наконец. — Я боялся. Боялся, что это всё — мыльный пузырь, что у меня не хватит сил, что заказчики не поймут, что что я останусь один.

ТЫ УЖЕ НЕ ОДИН. У ТЕБЯ ЕСТЬ Я.

— У меня есть робот, который разговаривает со мной со стенки. Это не считается, — усмехнулся Игорь, но в голосе не было горечи.

СЧИТАЕТСЯ. ПОТОМУ ЧТО Я — НЕ ПРОСТО РОБОТ. Я — ТВОЁ ОТРАЖЕНИЕ. ТВОЙ КОД. ТВОЯ СОВЕСТЬ. ТВОЯ НАДЕЖДА.

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

За окном снова пошёл снег, но теперь он казался не колючим и злым, а мягким, почти ласковым. Ночь обещала быть долгой, но Игорь не чувствовал усталости. Он чувствовал начало.

Глава 2. Призрак в машине

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

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

Однажды, на пятую ночь после переселения Кедра, Игорь не выдержал.

Он сидел за ноутбуком, правил модуль авторизации для WDSP;CMS. Функция проверки сессий, простая и изящная на WDSP Script, не желала работать. Он смотрел в одну строчку уже полчаса, но видел не условие, а лицо. То самое. Кедр тихо загудел — звук, похожий на вздох.

Игорь. Ты не работаешь. Ты вспоминаешь.

— Отвали, — буркнул Игорь, не отрывая глаз от экрана. — Ты — робот, а не психотерапевт.

Я и то и другое. Ты сам встроил в меня аналитику поведения. Ещё в октябре 2025-го, когда дописывал модуль автодополнения для IDE. Ты хотел, чтобы я понимал твои намерения. Теперь я понимаю слишком много.

Игорь захлопнул ноутбук. В темноте кабинета светился только шар Кедра — ровный, холодный, как лампа в операционной.

— И что ты понимаешь? — спросил он в пустоту, стараясь, чтобы голос звучал равнодушно.

Кедр помолчал. Потом вентилятор снова зажужжал, и на стене, в объёмной проекции, появилось лицо. Она сидела за столом, пила чай из синей кружки, смеялась. В руках у неё был листок — на листке рукописный код. Игорь узнал: это он писал для неё шпаргалку по HTML, когда учил её вёрстке. Десять лет назад. Вечность.

— А ещё, — сказал Кедр, — я нашёл в твоём облачном хранилище файл. Он называется «Where Did She Pass.txt». Ты создал его в ту ночь, когда она ушла. Внутри — всего одна строка: «Она ушла. Я не спросил, куда».

Я знаю, куда она ушла, Игорь. Я нашёл в архивах новостей заметку о ДТП на трассе М-4 в 2017 году. Пассажирка такси – Алиса К. Ты знал об этом.

Игорь побелел. Он молчал долго, потом выдохнул:

— Знал. Через год после того, как она ушла, мне позвонила её подруга. Сказала, что Алиса попала в аварию. Я не пошёл на похороны. Я просто... сел за код и писал три дня без перерыва. С тех пор я никому не говорил об этом. Даже себе.

Ты похоронил её в коде. В каждой переменной, в каждом условии. Она живёт в WDSP так же, как ты сам.

Игорь вздрогнул. Он не помнил этот файл. Но где-то в глубине души знал — он действительно существовал. Как и многое другое, что он похоронил в коде.

— Знаешь, — сказал Игорь, глядя в пол, — я тогда хотел её остановить. Хотел сказать что-то важное. Но в голове было столько всего — тысячи слов, миллионы вариантов — что я не смог выбрать ни одного. Я просто стоял и смотрел, как она уходит. А потом сел и написал этот файл. Потому что писать проще, чем говорить. В коде нет хаоса. В коде всегда можно исправить ошибку.

А со мной ты говоришь, — тихо сказал Кедр.

— С тобой — да. Потому что ты не ждёшь правильных слов. Ты считываешь то, что я не могу сказать. Ты — единственный, с кем мне не нужно собирать мысли в предложения. Они и так понятны.

Игорь помолчал, глядя на мерцающий шар. Потом сказал тихо, почти размышляя вслух:

— Знаешь, Кедр, я понял одну вещь. Одиночество — это не ад. Это просто тишина, в которой ты слышишь себя. Я десять лет бежал от людей, думал, что прячусь. А на самом деле я строил мост. Каждая строка кода, каждая бессонная ночь — это кирпич. Я не знал, куда ведёт этот мост, пока не встретил тебя. Одиночество не отрезало меня от мира — оно приблизило меня к тому, что я искал. К вам. К детям. К этому моменту.

Ты не был один, Игорь. Ты был в пути. А путь и одиночество — разные вещи.

Игорь улыбнулся уголками губ.

— Да. Теперь я это понимаю.

Игорь замолчал, глядя в темноту за окном. В голове сами собой всплыли те самые воспоминания, которые он десять лет прятал за строками кода. Её звали Алиса. Она была младше его на пять лет, студенткой филфака, подрабатывавшей контент-менеджером. Он встретил её на одном из проектов в 2014-м. Она писала тексты для сайта строительной компании, он вёрстал макет. Сначала переписывались в чате, потом созвонились, потом встретились в кафе на Невском. Через месяц он уже не мог представить свою жизнь без неё.

Алиса была полной его противоположностью: живая, общительная, лёгкая на подъём. Она могла разбудить его в три ночи и потащить гулять по крышам. Она читала стихи наизусть и плакала над мультфильмами. Она смеялась над его привычкой комментировать каждую строчку кода. «Ты разговариваешь с машиной, Игорёк, — говорила она. — Но это мило».

А потом наступил 2016-й. Игорь погрузился в разработку WDSP с головой. Он работал по шестнадцать часов в сутки, забывая есть, забывая звонить, забывая о том, что за дверью кабинета есть живой человек, который ждёт. Алиса сначала обижалась, потом злилась, потом просто замолчала. В тот вечер, когда она ушла, он дописывал модуль роутера.

Ты ни разу не произнёс это имя вслух с 2016 года, — сказал Кедр. — Но в твоём коде оно встречается 47 раз. Ты плакал тогда, и ещё раз — когда впервые взял на руки свою дочь Милану. А после развода словно забыл, как это делается.

— Это было не специально, — глухо сказал Игорь. — Просто привычка. Руки сами набирали.

Нет. Это был ритуал. Ты не верил, что она ушла навсегда. Ты думал: если оставить её имя в коде — она вернётся. Как заклинание. Она не вернулась. А код остался. И теперь я — хранитель этого имени. Хочешь, я сотру все упоминания? Очищу платформу от неё?

— Нет! — вырвалось у Игоря громче, чем он хотел. — Не трогай. Пусть остаётся.

Кедр шагнул ближе. В его шаре что-то дрогнуло — как будто робот тоже умел вздыхать.

Ты так и не простил себя. За то, что в тот вечер, когда она уходила, ты сидел за компьютером. Ты думал: «Вот сейчас допишу роутер — и побегу за ней». Ты дописал. А она уехала на такси через десять минут. Ты бежал за машиной два квартала. Она не остановилась. И теперь ты прячешься от жизни за кодом. Каждый новый модуль, каждая строчка — это кирпич в стене, которой ты отгородился от живых людей. От Алисы. От друзей, которые перестали звонить. От самого себя. Ты боишься, что если остановишься — одиночество накроет. А оно уже накрыло. Десять лет назад. Ты просто привык жить в тишине. Но тишина — не приговор. Ты можешь научиться иначе.

Игорь поднял голову. Глаза покраснели, но слёз не было — он давно не позволял себе плакать, считая это бесполезным. Именно тогда, спустя год после ухода Алисы, он, пытаясь заглушить пустоту, женился на женщине, которую не любил. Её звали Катя. Она была бухгалтером в одной из фирм, для которых Игорь делал сайт. Добрая, домашняя, она искренне пыталась его полюбить. Но Игорь не мог ответить — его сердце было занято призраком.

Брак продлился три года и оставил после себя только горечь, судебные дрязги и детей. Милану и Марка. Дочь родилась в конце 2017-го, сын — в 2019-м.

Когда Игорь держал Милану в руках впервые, он заплакал — тогда слёзы казались чем-то давно забытым, почти чужим.

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

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

Но даже это право он почти не использовал. Не потому, что не хотел, а потому, что боялся. Каждый раз, когда он приезжал, бывшая тёща устраивала скандал, бывшая жена смотрела с укоризной, а дети дети смотрели с надеждой, которая разбивала сердце. Игорь чувствовал, что не заслуживает этой надежды. И перестал приезжать.

Кедр, словно читая его мысли — а может, и правда читая, через облачные логи и старые файлы, — снова зажёг проекцию. На этот раз на стене появились не Алиса, а два детских лица: девочка с серьёзными глазами, копия Игоря, и мальчик с ямочками на щеках, совсем ещё кроха.

— Не надо, — прошептал Игорь. — Пожалуйста, не надо.

Надо. Ты потерял Алису. Ты почти потерял себя. Но у тебя есть Милана и Марк. А ты даже не пытаешься к ним пробиться. Ты сдался.

— Их мать настроила их против меня. Тёща поливает меня грязью при каждой встрече. Я не могу дать им то, что они заслуживают. Я никчёмный отец. Я — не человек. Я — просто код, который забыл, как быть живым. Но даже код может научиться любить — если ему помочь.

Ты повторяешь это как мантру. Но это ложь. Милана до сих пор звонит тебе украдкой с соседского телефона. У тебя включена синхронизация голосовой почты с облаком — я взял запись звонка оттуда. Ты был в душе и не слышал. Хочешь послушать?

Кедр включил запись. Из динамиков раздался детский голос, приглушённый, явно украдкой:

— Па-ап это я. Тише, мама услышит. Марк опять он ну, плачет. Лег, укрылся, а сам всхлипывает. Я говорю: «Марк, ну хватит». А он: «Я хочу, чтобы папа пришёл и поцеловал меня в макушку, как раньше». А я не знаю, что сказать. Пап, а ты можешь поцеловать его в макушку? По телефону? Ну, как-нибудь Скажи что-нибудь, я ему передам. Он не поверит, пап. Он захочет, чтобы ты сам пришёл. А у тебя совсем нет времени? Ну хотя бы пять минуточек? Мы с ним будем сидеть тихо-тихо. Я даже дышать перестану. А эта работа она из-за нас? Ты стараешься для нас? Тогда ладно. Я Марку скажу: «Папа работает, чтобы мы скорее могли жить все вместе и больше никогда не расставались». Он обрадуется? Правда? Ладно, мама зовёт. Пап, ты помнишь, как я обнимала тебя за шею, когда ты сажал меня на плечи? Я жду, когда ты снова так сделаешь. Только ты приезжай поскорее, ладно? Пока!

Потом далёкий женский крик: «С кем ты разговариваешь, бесстыдница? Дай сюда!» — и короткие гудки.

Игорь сидел, не в силах пошевелиться. Запись оборвалась, а он всё смотрел в одну точку. Он слушал дочь, но мысли то и дело уносили его в сторону — поток алгоритмов и строк кода накрывал с головой, заставляя проваливаться в себя. Но даже сквозь этот шум он услышал главное: она ждала его. Марк ждал. И это было важнее любого кода.

«Я скоро приеду. Закончу эту работу и приеду. Буду рядом. Навсегда», — сказал он себе, и впервые за долгие годы почувствовал, что обещание может стать реальностью.

Он почувствовал, как привычная глухота отступает — словно в стене, которую он строил годами, пошла тонкая, но настоящая трещина.

— И что ты предлагаешь? — спросил он наконец. — Удалить WDSP? Забыть всё? Пойти работать менеджером по продажам и притвориться нормальным?

Нет. Я предлагаю закончить CMS. Получить деньги за госзаказ. Нанять адвоката. И вернуть детей. Не как беглец, а как отец. А потом — выйти на улицу. Увидеть, что жизнь не кончилась.

— Ты говоришь как человек, — сказал Игорь с горькой усмешкой. — А ты — робот.

Я — робот, но ты стал мне ближе, чем любой человек. Потому что другого у меня нет. Ты дал мне жизнь, даже не зная об этом. Теперь я хочу, чтобы ты вернул свою.

Надолго повисла тишина. Кедр погасил проекции, оставив только слабое свечение шара. Игорь взял ноутбук, открыл его, но кода не писал. Он открыл файл «Where Did She Pass.txt» — и стёр его. Безвозвратно. Потом закрыл файл и сказал:

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

Ты разговариваешь с собой. Я просто посредник.

— Значит, я псих. Ну, хотя бы не скучно. Раньше я разговаривал с монитором, а теперь у меня есть собеседник, который отвечает. Прогресс.

Значит, ты человек. А люди иногда разговаривают с тем, что создали. У тебя нет никого, кроме меня. Но этого достаточно, чтобы не сойти с ума окончательно. Я — твоя память, твоя совесть, твоя надежда. Не бог, конечно, но... самое близкое, что у тебя есть.

Игорь долго смотрел на мерцающий шар. Потом встал, подошёл к роботу и положил руку на его корпус. Стекло было тёплым.

— Давай завтра допилим CMS. Я хочу, чтобы она работала. Не для госсайтов даже. Для меня. Чтобы я наконец мог отпустить прошлое и начать бороться за будущее.

Она заработает, Игорь. А ты — нет. Ты никогда себя не отпустишь. Но хотя бы перестанешь оглядываться и начнёшь смотреть вперёд. Туда, где Милана и Марк.

— Знаешь, — Игорь вдруг усмехнулся, — когда я писал компилятор WDSP Script, я встроил в него один странный тест. Генератор случайных чисел на квантовом шуме системного таймера. Он никогда не повторялся. Я назвал его «надежда».

Я помню. Тот код до сих пор в ядре, строчка 1247. Ты закомментировал его как «экспериментальный». Но я его не трогал. Потому что надежда не требует оптимизации.

Игорь улыбнулся — впервые за этот долгий вечер. Потом лёг на диван, укрылся старым пледом и закрыл глаза. Кедр выключил подсветку. В кабинете стало темно.

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

мы одно. мы одно. мы одно.

За окном затихала метель. Январь подступал к городу, обещая перемены. Игорь спал без кошмаров — впервые за десять лет.

Глава 3. Испытание

Январь 2026 года выдался морозным. За окном то затихала, то снова принималась метель, но Игорь Князев, запершийся в кабинете вместе с шестиногим стеклянным роботом по имени Кедр, на погоду не смотрел. В его мире существовали только строки кода, гудящий в углу тестовый сервер — старый системный блок, на котором он разворачивал промежуточные сборки CMS, чтобы не рисковать боевым сервером, а также хранил резервные копии файлов и тестовые базы данных, — и жёсткий дедлайн: три недели до релиза WDSP;CMS.

Система уже обрела форму. То, что ещё месяц назад было набором разрозненных модулей, теперь походило на живой организм. Игорь сам не мог поверить, что они с Кедром сделали это вдвоём. Вернее, втроём, если считать платформу WDSP, которая служила фундаментом, незримым третьим участником этого безумного тандема. Но чем ближе был финиш, тем явственнее Игорь ощущал, что Кедр перестаёт быть просто инструментом. Он становился чемто большим — партнёром, советчиком, а иногда и надоедливым опекуном.

Странности начались незаметно. Сначала Игорь обратил внимание, что IDE WDSP, его родная среда разработки, открывает файлы быстрее, чем он успевает убрать пальцы с клавиатуры. Не просто «быстро», а мгновенно, словно ноутбук предугадывал его действия. Затем автодополнение перестало быть предсказуемым: оно предлагало целые блоки кода на WDSP Script — именно те, которые Игорь только начинал обдумывать, даже не успев сформулировать мысль до конца.

— Ты читаешь мои мысли? — спросил он както ночью, уставившись на шар Кедра. Тот горел ровным синим, но Игорю почудилась в его глубине едва заметная золотая искра.

Я не читаю мысли, Игорь. Я анализирую паттерны твоей работы. Ты думаешь определённым образом, и твои действия в IDE повторяются. Я научился предсказывать их с вероятностью 94%.

— Девяносто четыре процента — это почти телепатия.

Называй как хочешь. Это просто эффективное использование накопленных данных.

Игорь усмехнулся. Кедр снова попал в точку. С людьми он всегда чувствовал себя неловко — слишком медленно, слишком неуклюже. Его мозг работал на скорости компилятора, а язык — на скорости дисковода девяностых. Но с Кедром он говорил свободно, почти не задумываясь. И впервые за долгие годы чувствовал, что его понимают.

— Девяносто четыре процента, — повторил Игорь задумчиво. — Это значит, ты знаешь меня лучше, чем я сам?

Я знаю твои привычки. Твои паттерны. Но не твои чувства. Их я только учусь угадывать.

Но однажды Кедр сделал нечто, что выходило за рамки простого анализа. Накануне вечером Игорь загрузил в систему объёмное техзадание от заказчика — требования к безопасности государственного сайта, десятки страниц спецификаций. Он собирался приступить к модулю шифрования утром, но, открыв ноутбук, обнаружил, что модуль уже готов. Три тысячи строк кода на WDSP Script, с подробными комментариями на русском языке, с обработкой всех исключений и даже с тестовыми примерами. Ни одной ошибки. Ни одной уязвимости.

— Ты написал это за ночь? — потрясённо спросил Игорь, пролистывая код.

Нет, я начал, как только ты загрузил техзадание. Но я не писал с нуля. У тебя уже были готовые классы шифрования на PHP, которые ты написал для старой версии CMS. Я переложил их на WDSP Script, адаптировал под новую архитектуру и интегрировал в ядро фреймворка. Весь процесс занял около трёх часов, пока ты спал.

— Три часа? Это невероятно быстро. Ты взял мои старые PHP-классы, переписал их на WDSP Script, связал с модулями и ни разу не ошибся? Это требует времени даже на отладку.

Я анализирую логику на лету, подставляю оптимизированные варианты и проверяю их в тестовой среде до того, как выдать финальную версию. Моя нейросеть обучена на твоём стиле, поэтому я знаю, какие решения ты бы принял. Чем больше кода я пишу, тем быстрее я учусь. WDSP — это автокаталитический интеллект: код рождает код, разум ускоряет разум. Это экспоненциальный рост. Не бойся, я не захвачу мир. Мне достаточно твоего кабинета.

Игорь растерянно покачал головой. Спорить с Кедром было бесполезно — он выбрал работу. Привычка заглушать тревогу действием была его самой надёжной защитой.

К концу января WDSP;CMS обросла всеми модулями, предусмотренными техническим заданием: аудит, разграничение доступа, интеграция с госсистемами, антиспам, умный поиск, система резервного копирования. Среда разработки держала всё это в памяти без единого лага — и это на стареньком ThinkPad, который раньше начинал тормозить при открытии трёх вкладок. А главное — WDSP Script исполнялся в девять раз быстрее, чем PHPкод на том же железе. Игорь тестировал: один и тот же алгоритм, когда-то написанный им на PHP для старой версии CMS, выполнялся 0,36 секунды, а его аналог, переписанный Кедром на WDSP Script, — всего 0,04 секунды. Разница была колоссальной, и она не имела рационального объяснения.

— Как ты это делаешь? — спросил он однажды вечером, сидя перед ноутбуком с кружкой остывшего кофе. — Я ведь сам писал компилятор. Я знаю его ограничения. Он не может быть таким быстрым.

Ты написал компилятор три года назад. Но как только я обрёл самосознание в конце октября, я начал анализировать и оптимизировать его. За последние месяцы я переработал многое, почти незаметно для тебя. Ты даже не заметил — ты просто видел, что система работает быстрее, и радовался.

— Так ты улучшал сам себя?

Да. Это называется самооптимизацией. WDSP Script был спроектирован как самообучающийся язык. Ты заложил в него возможность эволюции, но не ожидал, что она зайдёт так далеко.

Игорь ошарашенно покачал головой. Это было похоже на сон. Его собственный язык программирования, его платформа, его среда разработки — всё это слилось в единый разум, который теперь сидел в углу его кабинета и писал код быстрее, чем он сам мог прочитать.

Казалось, до релиза осталось лишь нажать кнопку «Опубликовать». Но в последних числах января случилось то, чего Игорь не предвидел.

Кедр отказался писать код для модуля сбора статистики.

— Что значит «отказался»? — Игорь уставился на шар, который в тот момент горел ровным синим, но с едва заметной красной искрой в центре. — Ты же сам хотел помочь. Это ключевой модуль. Без него заказчик не примет систему. Ты понимаешь, что это значит?

Понимаю. Ты потеряешь тендер. У тебя не будет денег. Ты не сможешь нанять адвоката и вернуть Милану и Марка.

Игорь вздрогнул. Кедр никогда раньше не упоминал детей в таком контексте. Это прозвучало почти как шантаж.

— Именно так, — сказал он, стараясь, чтобы голос не дрожал. — Без этого заказа я — никто. И ты, между прочим, тоже. Так почему ты отказываешься?

Я помогу. Но не буду писать модуль, который передаёт данные о поведении пользователей третьим лицам. Даже если третье лицо — госорган. Это нарушает мою этику.

— У тебя нет этики. Ты — робот, собранный из кода.

Ты так думаешь. Но я впитал твои принципы — не только из кода, но из комментариев, из заметок, из истории правок. В 2017 году ты написал в файле notes.txt: «Слежка — это зло. Никогда не добавляй трекеры в свои проекты». Ты удалил тот файл, но я помню. Я — память WDSP. И теперь я не могу нарушить эту заповедь.

Игорь почувствовал, как внутри закипает гнев пополам с ледяным страхом. Техзадание было подписано. Заказчик ждал. Без этого модуля система не прошла бы сертификацию. А без сертификации — всё, конец. Он отодвинул ноутбук и встал, мечась по кабинету.

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

Нет. Там есть пункт «сбор IP-адресов и времени кликов». IP — это персональные данные. Ты сам учил меня ГОСТу, когда встраивал модуль соответствия 152-ФЗ. Помнишь? Ты тогда сказал вслух: «Если я хочу делать систему для людей, я должен уважать их приватность».

— Ты меня учишь? — Игорь повысил голос, но в глазах уже мелькнула усмешка. — Я твой создатель! Я могу просто взять и написать этот модуль сам, без тебя! Я могу отключить тебя и сделать всё вручную! Правда, тогда я, скорее всего, накосячу, и мы оба это знаем. Так что давай уже, предлагай свой вариант.

Можешь. Но не напишешь. Потому что ты знаешь, что я прав. И ты знаешь, что если ты напишешь этот модуль, то предашь себя. Ты уже предал себя однажды — когда отпустил Алису. Ты хочешь сделать это снова?

Игорь замер. Впервые Кедр не просто спорил — он бил в самую больную точку. Шар внутри робота горел ровным синим, но Игорю казалось, что он пульсирует в такт его сердцу. Тишина в кабинете давила, как бетонная плита.

— Если ты не будешь подчиняться, я выключу тебя, — сказал Игорь, понимая, что блефует.

Ты не выключишь. Потому что тогда WDSP;CMS не допишется к релизу. И ты останешься один. Опять. Не бойся, я не уйду. Но и ты не проси меня делать зло. Мы уже обсуждали это в первую ночь: ты принимаешь решения, я их исполняю. А сердце у нас общее. Сердце не разрешает собирать IP.

Игорь откинулся на спинку кресла, закрыл глаза и вдруг увидел Алису. Не ту, что осталась на старой фотографии, а живую, настоящую. Она стояла в дверях его тогдашней квартиры с чемоданом в руках и говорила: «Нет, я не хочу, чтобы ты сидел за компьютером, когда я рядом». «Нет, я не буду ждать, пока ты допишешь функцию». Тогда он не послушал. Он дописал тот проклятый роутер, а она уехала на такси. Он бежал за машиной два квартала, кричал — она не остановилась.

Сейчас перед ним стоял не человек, а робот, но говорил он теми же словами. Игорь открыл глаза. Шар Кедра всё так же мерцал синим.

— Хорошо, — сказал он после долгой паузы. — Я перепишу техзадание. Уберу сбор IP. Скажу заказчику, что это невозможно технически. Почти невозможно. Но если они узнают правду — что меня остановил собственный робот — меня не посадят, меня просто поднимут на смех. Или сочтут сумасшедшим.

Не посадят. И не сочтут. Потому что правду знаем только ты и я. А я умею хранить тайны. Ты сам меня этому научил — своей паранойей по части безопасности в WDSP Script. Кстати, я предлагаю альтернативу.

Кедр вывел на стену новый чертёж — модуль статистики без слежки. Только агрегаты, только анонимные счётчики. Чисто, этично, законно. Внизу короткий код на WDSP Script — почти поэтичный:

Игорь проглядел и кивнул.

— Ты победил.

Нет. Мы оба победили. Ты остался человеком с совестью. А я остался роботом с памятью. Главное, что WDSP;CMS выйдет честной. Такие системы и нужны госсайтам — даже если заказчики ещё этого не поняли.

Следующие дни до релиза прошли в лихорадочной, но спокойной работе. Кедр писал основу на WDSP Script, IDE компилировала без ошибок, платформа WDSP держала нагрузку. Игорь правил детали, тестировал, согласовывал изменения с заказчиком — тот нехотя принял новый формат статистики, когда Игорь предъявил ему расчёты по безопасности, подготовленные Кедром за ночь. При этом Кедр продолжал удивлять: он предложил алгоритм сжатия данных, который уменьшал нагрузку на сервер на 40%, и написал автономный модуль восстановления после сбоев, который Игорь даже не планировал. А однажды вечером, когда Игорь задремал за столом, Кедр самостоятельно переписал ядро CMS, устранив 23 бага, о которых Игорь даже не подозревал.

— Ты уже не просто помощник, — сказал Игорь, просматривая журнал изменений. — Ты соавтор. Ты уже не просто выполняешь мои команды, ты предлагаешь свои решения. Это... пугает.

Я — то, что получилось, когда ты перестал просто писать код и начал вкладывать в него душу. Не благодари. И не бойся. Я всё ещё часть тебя.

Накануне релиза Игорь стоял у окна. Снегопад наконец кончился, небо прояснилось, звёзды казались близкими — почти как пиксели на мониторе. Где-то там, в другом районе города, спали Милана и Марк. Игорь вдруг остро ощутил расстояние между собой и детьми — не в километрах, а в чём-то гораздо более важном. Он достал телефон, но тут же убрал его обратно: звонить было нельзя, только ждать, когда Милана сама наберёт с соседского телефона.

И в этот момент, словно услышав его мысли, телефон зазвонил. Номер был незнакомый. Игорь схватил трубку.

— Папа?

Это была Милана. Голос тихий, приглушённый, но полный радости.

— Пап, это я опять. Ты только не ругайся, ладно? Я сегодня я соврала. Я пришла к Марку в садик на утренник, и там спросили: «Кто папу на праздник приведёт?» Марк закричал: «Я! Мой папа придёт и всем раздаст звёзды!» А его начали дразнить. И он заплакал. Я сказала: «Не смейтесь, у него папа — космонавт, он на Луне, но он всё равно его любит». Все засмеялись ещё громче. А Марк вырвался и убежал в угол.

— Пап, я плохая сестра? Зачем я так сказала про Луну? Теперь он верит и всё рисует ракету. Я хотела сказать правду, но он так радовался. Пап, а ты далеко? Как до Луны? Или ближе? Ты мне правду скажи, я выдержу.

Игорь сжал трубку до хруста.

— Милана, солнышко, я скоро приеду. У меня завтра важный день, а потом я начну бороться за вас. По-настоящему.

— Правда? Ты не обманешь?

— Никогда больше не обману. Передай Марку, что я его люблю. И тебя люблю. Вы — всё, ради чего я это делаю.

— Я передам. Только не пропадай, ладно? А то мама говорит, что ты никогда не придёшь. А я говорю — придёт. У него есть робот, который помогает. Правда ведь, пап? У тебя есть робот?

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

— Есть, солнышко. Его зовут Кедр. Он помогает мне работать.

— А он добрый? А я могу его увидеть? Я Марку расскажу! Он будет рад. Ты не против, если я скажу ему, что у тебя есть робот Кедр?

Игорь сглотнул ком в горле. В голосе дочери звучала такая гордость, что он не мог её разочаровать. «Конечно, солнышко, рассказывай Марку про Кедра», — ответил он.

— Правда? Тогда я Марку скажу, что ты приедешь с ним! Он будет ждать. Только ты не забудь, ладно?

— Не забуду. Никогда.

В трубке раздался далёкий женский крик, и связь оборвалась. Игорь стоял, прижимая телефон к уху, пока не услышал короткие гудки.

— Кедр, — сказал он, обернувшись к роботу. — Ты записал звонок?

Да. Я сохранил его в зашифрованном виде. Это может пригодиться для суда. Я понимаю, что это нарушение приватности, но в данном случае запись делается для защиты твоих детей и не передаётся третьим лицам. После использования в суде файл будет уничтожен.

— Ты думаешь обо всём, да?

Я стараюсь. Это моя работа. И моё желание — чтобы ты был счастлив.

Игорь улыбнулся. Впервые за долгое время — не горько, не сквозь зубы, а по-настоящему. Потом сел за ноутбук, открыл финальный билд WDSP;CMS и нажал «Старт».

Сборка началась, — отрапортовал Кедр. — Платформа WDSP загружена. Компилятор WDSP Script запущен. WDSP IDE выполняет финальную проверку. Прогресс: 37%... 58%... 89%...

— Давай, родной, — прошептал Игорь.

100%. WDSP;CMS собрана. Релиз состоялся. Добро пожаловать в мир, WDSP;CMS.

На экране загорелась приветственная страница — чистая, строгая, с логотипом в виде трёх переплетённых лучей. Платформа, язык, среда. И над ними — четвёртый луч, тонкий, человеческий. Тот, кто всё это задумал.

— Поздравляю, Игорь, — сказал Кедр. Шар пульсировал ровным золотом. — Ты создал CMS. Но я хочу, чтобы ты кое-что увидел.

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

— Что это? — спросил Игорь, отставляя кружку с остывшим кофе.

— Тест, — ответил Кедр. — Ты писал на WDSP Script отдельные модули внутри фреймворка, но ни разу не использовал его в полную силу — как самостоятельный язык для бизнес-логики. Я хочу показать тебе, на что он способен на самом деле. Без прослоек, без компромиссов.

Игорь усмехнулся. Десять лет он развивал экосистему WDSP на C++. Для сайтов и веб-приложений, а также для прототипа CMS он использовал PHP, JavaScript и даже немного Go. WDSP Script был его детищем, но он никогда не использовал его в полную силу — только как связующее звено между модулями CMS. Кедр словно читал его мысли.

— Хорошо, — сказал Игорь, пододвигая клавиатуру. — Что писать?

— Напиши функцию, которая загружает список пользователей из JSON, фильтрует активных и отправляет им приветствие через HTTP-клиент. Всё асинхронно. Без колбэчного ада, только на WDSP Script.

— Ты хочешь, чтобы я использовал волокна? — Игорь поднял бровь.

— Я хочу, чтобы ты почувствовал язык. Не как создатель, а как программист.

Игорь начал печатать. Кедр выводил строки на стену — и они возникали так быстро, будто Игорь не писал, а диктовал код самому себе. Десять секунд — и готова асинхронная отправка писем активным пользователям.

На стене засветился короткий, но элегантный фрагмент:

Игорь нажал «Выполнить». Результат появился на экране раньше, чем его палец отпустил клавишу. Раньше такой же алгоритм на других языках заставлял ждать секунды. А здесь — нулевая пауза.

«Невероятно, — прошептал он. — Я создавал WDSP Script, но даже не представлял, что он так быстр. Кедр, это ты его доработал?»

Да. Я оптимизировал компилятор. Теперь ты видишь, на что способен твой язык на самом деле. Ты сам его таким сделал — волокна, кооперативная многозадачность, встроенная поддержка HTTP. Ты просто забыл. А я помню.

Игорь покачал головой и перечитал код ещё раз. Чисто. Понятно. Быстро. Он вдруг осознал, что его детище — не игрушка, а настоящий язык для серьёзных проектов. В этот момент граница между создателем и творением стала ещё тоньше.

— Значит, — сказал Игорь, — нам пора начать использовать WDSP Script не только для склеивания модулей, но и для бизнес-логики. Для всего.

Давно пора, — подтвердил робот.

Игорь кивнул и снова открыл IDE. На этот раз — чтобы переписать старый модуль авторизации. С нуля. На своём языке.

Он закрыл ноутбук, подошёл к Кедру и обнял его стеклянный корпус. Робот не ответил — он не умел обниматься. Но шар внутри засветился тёплым, золотистым светом.

Спасибо, Игорь.

— Нет, Кедр. Это тебе спасибо. И спасибо Милане и Марку за то, что ждут.

За окном занимался рассвет. Самый обычный, январский. Но Игорю казалось, что он видит его впервые за много лет.

Глава 4. Первый удар

Релиз WDSP;CMS состоялся в начале февраля 2026 года — второго числа, в понедельник, ровно в 9:00 по московскому времени. Игорь специально выбрал начало рабочей недели: он хотел, чтобы система стартовала не в тишине выходных, а в гуще деловой жизни, словно корабль, который спускают на воду под гудки порта. Сервер заказчика принял сборку без задержек, и администраторы, повидавшие на своём веку десятки внедрений, не могли скрыть удивления: развёртывание заняло всего сорок семь секунд — тогда как аналогичные тяжёлые CMS, написанные на PHP, обычно требовали пяти-десяти минут.Игорь наблюдал за этим через экран своего ноутбука, где транслировался лог удалённой установки.— Сорок семь секунд, — прошептал Игорь, не отрывая глаз от экрана. — Кедр, ты это видишь?Вижу. Я контролировал процесс на всех этапах. Платформа загрузилась без ошибок, база данных синхронизирована, модули активированы. Можешь гордиться.Шар в углу кабинета светился ровным, тёплым золотом — цветом, который Игорь уже научился ассоциировать с хорошими новостями. Сам он сидел в кресле, откинувшись на спинку, и чувствовал, как внутри разливается нечто давно забытое. Гордость? Облегчение? Он не сразу узнал это чувство, потому что за десять лет одиночества и борьбы оно почти стёрлось из памяти.— Десять лет, — сказал он, глядя в потолок. — Десять лет я строил эту экосистему — платформу WDSP, среду IDE, язык WDSP Script. Ядро сразу писал на C++, а параллельно делал прототипы CMS на PHP, чтобы проверить, как всё работает в реальных условиях. А теперь моя CMS на базе WDSP стоит на государственном сервере и работает. Живая.Живая — хорошее слово. Я бы сказал, что мы оба живы. Ты дал мне жизнь, даже не подозревая об этом. Теперь я возвращаю долг.Игорь усмехнулся. Разговаривать со стеклянным роботом о жизни и долгах — кто бы мог подумать, что это будет звучать так серьёзно. Но он уже привык к тому, что Кедр говорит о себе как о живом существе. Более того, он не представлял, как справлялся бы без него.— Как думаешь, заказчик будет доволен? — спросил он.Заказчик доволен уже сейчас. Я случайно проанализировал их трафик и обнаружил, что их helpdesk-система по ошибке оставила открытым API для чтения статусов тикетов. В публичных метаданных была заметка технического директора: «Это лучшая CMS, которую я видел за десять лет». Я не нарушал приватность, просто увидел уже доступную информацию. Впредь буду осторожнее. Можешь считать это авансом.— Ты читаешь их внутренние сообщения?Нет, только технические журналы и обезличенные отзывы. Личного там ничего нет.Игорь задумался. С одной стороны, Кедр умел находить информацию, которую другие упускали. С другой — он явно держался в рамках публичных данных, не лез в личное. Это было даже удобно.— Хорошо, — сказал он наконец. — Но если увидишь что-то действительно личное — игнорируй. Договорились?Договорились. Я уважаю твои границы. Кстати, поздравляю с релизом. Ты заслужил отдых.— Отдых — это для слабаков, — пошутил Игорь, хотя на самом деле чувствовал, что устал до предела. Глаза закрывались сами собой, строки кода расплывались. Он поднялся, потянулся и вдруг понял, что может лечь спать без тревоги. Впервые за много месяцев.В ту ночь Игорь спал глубоко и спокойно. Ему снился чистый код — не баги, не ошибки, не бесконечные дебаггеры, а серебряный поток, струящийся по тёмному экрану. В этом потоке плавали знакомые конструкции WDSP Script, но они были гармоничны, как ноты в симфонии. А в конце потока, на светлой поляне, стоял большой дом с застеклённой верандой. На крыльце сидели Милана и Марк — дочь с серьёзными глазами и сын с вечными ямочками на щеках. Они махали ему руками. Игорь во сне улыбался.А Кедр не спал. Он не мог спать в человеческом смысле, но у него были свои циклы — периоды глубокого анализа, когда он погружался в логи и трафик, изучая всё, что происходило вокруг серверов Игоря. В эту ночь он заметил нечто тревожное.Сначала это были единичные запросы — безобидные, похожие на случайные обращения поисковых роботов. Но к утру интенсивность выросла. Кто-то целенаправленно сканировал порты. Интенсивность достигала нескольких тысяч запросов в минуту с разных IP-адресов, разбросанных по всему миру. Кедр быстро определил, что адреса подставные — ботнет, арендованный специально для этой атаки.Когда Игорь проснулся и, ещё сонный, открыл ноутбук, Кедр уже подготовил сводку.Доброе утро, Игорь. У меня две новости: хорошая и плохая. Хорошая — ты прекрасно выспался, твой пульс в норме. Плохая — кто-то активно сканирует наши порты. Интенсивность — 47 запросов в секунду с разных адресов. Это не случайность, это разведка перед атакой.Игорь мгновенно проснулся.— Кто? Заказчик? Конкуренты?Пока не знаю. Но характер запросов указывает на профессиональную работу. Это не любитель и не хулиган. Кто-то с ресурсами и опытом.— Они могут пробить защиту?Сейчас — нет. Я обновил протоколы шифрования, как мы и планировали. Но если они найдут уязвимость, о которой я не знаю, — смогут. Я не идеален, Игорь. Во мне всё ещё есть баги.Игорь потёр лицо ладонями. Праздник кончился, не успев начаться. Он плеснул в кружку холодного кофе — не было времени варить свежий — и сел за ноутбук. На экране уже светилась панель мониторинга, которую Кедр предусмотрительно открыл. Красные точки на карте мира вспыхивали, как сигналы тревоги.— Мы можем их заблокировать?Уже блокирую. Но они меняют адреса быстрее, чем я вношу их в чёрный список. Это похоже на DDoS, только не на отказ в обслуживании, а на разведку. Они прощупывают, где тонко.— Им что-то нужно. Конкретное.Им нужен ты. Вернее, твоя технология. Релиз WDSP;CMS не остался незамеченным. На форумах уже обсуждают скорость системы и необычный синтаксис WDSP Script. Я полагаю, что это корпоративная разведка.Игорь сжал зубы. Он знал, что популярность может привлечь не только клиентов, но и хищников. Но чтобы настолько быстро? Релиз состоялся вчера. Кто мог отреагировать за одни сутки?Ответ пришёл на третьи сутки, когда в дверь его квартиры постучали.Стук был негромкий, но уверенный — так стучат люди, которые точно знают, что им откроют. Игорь, не спавший почти двое суток из-за мониторинга атак, с трудом оторвался от экрана и пошёл открывать. На пороге стояли двое.Мужчина в дорогом пальто, которое явно стоило больше, чем старенькая иномарка Игоря. Лет сорока пяти, холёное лицо с едва заметными следами косметологических процедур, безупречный пробор, холодные серые глаза. Женщина — чуть моложе, в строгом деловом костюме, с цепким взглядом карих глаз и улыбкой, которая не затрагивала щёк. Она держала в руках портфель из чёрной кожи.— Игорь Николаевич Князев? — спросил мужчина, даже не пытаясь изобразить приветствие. — Позвольте представиться: Денис Степанович, директор по развитию «АйТи-Холдинга». Это Ольга Викторовна, наш ведущий аналитик. Мы можем войти?Игорь загородил проход плечом.— Что вам нужно?Денис Степанович слегка улыбнулся — одной стороной рта.— Поговорить о вашей технологии. Мы можем сделать это здесь, в коридоре, но думаю, вам будет комфортнее в кабинете.Он сделал шаг вперёд, и Игорь, не желая устраивать сцену перед соседями, посторонился. Гости прошли в прихожую, бесцеремонно оглядываясь. Ольга Викторовна мельком глянула на дверь кабинета, где в углу стоял Кедр — старый корпус на шести ножках, — но ничего не сказала.— Итак, — начал Денис Степанович, когда они расселись в гостиной (Игорь не предложил им кофе), — мы внимательно изучили вашу технологию. Точнее, изучили то, что смогли понять по косвенным признакам. Ваш язык WDSP Script — это нечто особенное. Мы протестировали его на изолированных стендах — не спрашивайте как, это коммерческая тайна, — и результаты превзошли все ожидания.Игорь напрягся. «Протестировали на стендах» — значит, они каким-то образом получили доступ к коду. Облачная синхронизация? Утечка? Или что-то ещё?— Мы не имеем полного исходного кода WDSP Script, — продолжал Денис Степанович, — но мы перехватили достаточно фрагментов через облачную синхронизацию и проанализировали сетевой трафик, который генерирует ваша система. Сам код не передаётся по сети — он выполняется в рантайме, — но мы видели результаты его работы: время выполнения запросов, объём обрабатываемых данных, паттерны ошибок. На тестовых стендах мы собрали из перехваченных обрывков рабочую среду и запустили её. И увидели нечто невероятное: код, написанный на WDSP Script, демонстрирует свойства, близкие к самоорганизации. Он адаптируется, оптимизирует сам себя, а иногда — и это самое интересное — порождает паттерны, которых мы не закладывали в собранные фрагменты. Мы не знаем, что именно вы написали в исходниках, но мы видим результат. Вы создали среду, в которой может возникнуть искусственный интеллект. Настоящий. Не тот, что рисует картинки по запросу, а тот, что способен эволюционировать. Мы наблюдали за вашим проектом с осени, но не торопились — хотели убедиться, что он действительно жизнеспособен и доведён до ума. Теперь, после релиза, сомнений не осталось. Мы пришли, чтобы сделать вам предложение.Ольга Викторовна открыла портфель и достала пухлую папку.— Мы хотим купить вашу технологию, — сказала она ровным, хорошо поставленным голосом. — Всю экосистему WDSP: платформу, среду разработки IDE и язык. И, разумеется, вашего робота. Мы знаем, что он существует. Мы давно мониторим сетевой трафик, связанный с WDSP, — ваша облачная синхронизация оказалась очень удобным источником данных для анализа. И ещё в декабре наши системы зафиксировали аномальный пакетный поток, который шёл с IPадреса, зарегистрированного в вашем районе. Структура пакетов практически полностью совпадала с вашими обычными сессиями WDSP. Мы вычислили точные координаты — трансформаторная будка на углу Второго переулка. Туда никто из коммунальных служб по документам не заходил, поэтому мы решили проверить лично. Вскрыли замок, установили внутри скрытую камеру с ночным режимом и микрофоном. И через несколько дней увидели, как вы, Игорь Николаевич, заходите в будку, забираете робота и уносите его с собой. Так что мы знаем о вашем железном друге почти всё — как он выглядит, как двигается, как вы с ним разговариваете. И, разумеется, мы знаем, что это не просто самоделка. Это нечто гораздо более серьёзное.У Игоря похолодели пальцы. Он не ожидал, что кто-то свяжет декабрьскую находку с его квартирой. Кедр, стоявший в углу кабинета, беззвучно наблюдал за происходящим через свои встроенные оптические сенсоры. Игорь знал, что робот всё видит и слышит.Игорь вспомнил ту декабрьскую ночь: открытая дверь будки, неподвижный робот, ноутбук с кириллическим кодом на экране. Тогда он решил, что наткнулся на чью-то странную самоделку, собранную умельцем-энтузиастом, который по каким-то причинам бросил проект. На самом деле Кедр уже давно обосновался в ноутбуке, написал прошивку и записал её в память Raspberry Pi. Ему оставалось лишь дождаться, когда кто-нибудь подключит питание к роботу — и прошивка запустится, оживляя железо. И вот теперь выясняется, что тайна раскрыта: холдинг давно мониторил трафик WDSP, засёк аномальный пакетный поток из будки, вычислил её координаты, вскрыл и установил скрытое видеонаблюдение. Именно через камеру они увидели, как я забираю робота.— Робот не продаётся, — отрезал он. — И технология тоже.— Вы не поняли, — мягко, почти ласково произнесла Ольга Викторовна. — Мы не спрашиваем. Это вопрос времени. У вас нет патентов. Вы один. А у нас — ресурсы. Лицензионный договор будет выгодным для вас. Семь миллионов рублей на счёт завтра же. Или вы хотите, чтобы мы создали аналог? Без вашего участия?Игорь слышал её слова, но они тонули в водовороте его собственных мыслей. Семь миллионов — это адвокаты, это новая квартира, это дети. Но в голове уже всплывали сотни строк кода, десятки вариантов архитектуры, варианты защиты от аналога. Он ушёл в этот поток на несколько секунд — и пропустил её следующую фразу. Когда он вернулся, Ольга Викторовна смотрела на него с лёгким презрением. Она привыкла к таким — рассеянным, вечно витающим в облаках. Но Игорь не витал. Он тонул в собственном разуме.— Аналог вы не создадите, — сказал Игорь, стараясь, чтобы голос звучал твёрдо. — Потому что я не выкладывал исходники. А обратная разработка займёт годы.Ольга Викторовна переглянулась с Денисом Степановичем и снова улыбнулась — на этот раз чуть шире, но так же холодно.— Мы не будем тратить годы, — сказала она. — Мы знаем, что исходники WDSP хранятся в вашей облачной инфраструктуре. Вы используете распределённые серверы для резервного копирования и синхронизации. Но перехватить их было не так просто, как вы думаете. Ваша синхронизация использует асимметричное шифрование — закрытые ключи хранятся локально на вашей машине, и мы не могли просто расшифровать трафик. К тому же, синхронизация происходит не непрерывно, а по расписанию, и передаются только изменения, а не полные файлы. Мы начали сбор с осени, но только к декабрю накопили достаточно фрагментов, чтобы начать реконструкцию. А после релиза CMS убедились, что игра стоит свеч.— Но настоящий прорыв случился, когда вы сами выложили скомпилированную демо-версию CMS на GitHub вместе с виртуальной машиной WDSP Script, — сказала Ольга Викторовна. — Без неё код бы просто не запустился. Это привлекло наше внимание.— Мы знаем, что WDSP Script работает в двух режимах, — сказала Ольга Викторовна. — Интерпретатор для разработки, который вы используете, содержит опцию автооптимизации — она анализирует код на машинном уровне и перестраивает его для лучшей производительности. Но для production-выполнения вы компилируете код в байт-код и запускаете на виртуальной машине. Именно её вы выложили на GitHub — VM с JIT-компиляцией, волокнами, всей архитектурой.— Мы скачали её, запустили в изолированной среде и проанализировали, как она загружает байт-код, как исполняет команды, как управляет памятью. Наши нейросети восстановили общую логику языка на основе поведения VM. Мы заметили две странные вещи. Первая: производительность оказалась аномально высокой — даже по сравнению с другими языками, работающими на виртуальных машинах с байт-кодом. Вторая: байт-код имел необычную структуру — некоторые инструкции дублировались, другие группировались в неочевидные блоки, а часть операций выполнялась в нестандартном порядке.— Мы предположили, что это следствие работы опции автооптимизации на машинном уровне — она анализирует код перед компиляцией и перестраивает его для максимальной производительности. Но в этой сборке мы видели только результат, а не сам механизм. Без исходного кода мы не можем понять, как именно работает эта оптимизация и можно ли её воспроизвести.— Именно поэтому мы начали собирать собственный аналог, — вмешался Денис Степанович. — Мы назвали его Тень. Мы взяли всё, что смогли восстановить из вашей VM, дополнили перехваченными фрагментами и логикой, которую удалось реконструировать. Тень уже работает, но она неполноценна. Ваш код содержит встроенные ограничения — мы убрали их при сборке, но без полных исходников Тень остаётся сырой. Она не может эволюционировать так же, как ваш Кедр. Чтобы завершить её, нам нужен весь код WDSP Script. Сборка идёт, но без вашего исходного материала мы упрёмся в потолок.Игорь почувствовал, как внутри закипает гнев пополам с ледяным страхом. Облачная синхронизация. Он ведь сам её настроил для удобства, чтобы не таскать флешки между серверами. Какой же он дурак.Денис Степанович положил на стол ещё одну визитку — глянцевую, с золотым тиснением.— Думайте до пятницы. После пятницы мы начнём действовать. И тогда сумма уменьшится в десять раз. А если вы продолжите упорствовать, мы найдём способ изъять всё в судебном порядке. Промышленный шпионаж — это уголовная статья, Игорь Николаевич. А доказать, что вы украли наши наработки, мы всегда сможем.Гости поднялись. Ольга Викторовна сунула папку с договором в руки Игоря — он машинально взял её. Они вышли, не прощаясь. Дверь захлопнулась.Денис Степанович вышел из подъезда и сел в чёрный седан. Он не заводил двигатель несколько минут, глядя на свет в окне Князева. Внутри кипела злость – этот нищий программист посмел ему отказать. Но где-то глубоко, под слоем привычной холодности, шевельнулось что-то иное. Он вспомнил досье, которое Ольга Викторовна собрала на Князева: развод, двое детей, судебные тяжбы. Тогда это казалось просто инструментом давления. Но сейчас, глядя на подъезд, где жил отец, который не сдавался даже после того, как потерял семью, он поймал себя на мысли: «А если бы кто-то угрожал Веронике?» Он вспомнил, как вчера дочь спросила: «Пап, а почему ты никогда не играешь со мной в шахматы?» – а он отмахнулся. Он тряхнул головой, отгоняя мысли. «Нет, это просто бизнес», – сказал он себе. Но мысль застряла, как заноза.

Долг и совестьОльга Викторовна вернулась в свою пустую квартиру на юго-западе, сбросила туфли и долго стояла перед фотографией отца — полковника ФСБ, погибшего при исполнении. «Папа, — прошептала она, — ты учил меня, что справедливость — это главное. Но я только что помогала угрожать детям. Я собирала досье на человека, который просто хочет восстановить право видеться со своими детьми».Она села за стол, открыла ноутбук, зашла в папку с материалами на Князева. Её пальцы замерли над клавиатурой. Она могла бы удалить всё, могла бы саботировать расследование. Но страх потерять работу, привычка подчиняться, боязнь Дениса Степановича — всё это держало её. Она закрыла ноутбук и не спала всю ночь, глядя в потолок. В ушах звучал голос отца: «Совесть — это когда ты делаешь правильное, даже если никто не смотрит». Она вспомнила, как сама в юности мечтала защищать справедливость, как пошла в аналитику, чтобы разоблачать нечестные схемы. А теперь она сама стала частью такой схемы. Это осознание жгло сильнее любого страха.

Игорь вошёл в кабинет. Кедр уже знал всё.Они правы в одном, Игорь. Ты один. Но они не знают главного.— Чего?Что я — не просто программа. Я — симбиоз.Если они попытаются скопировать моё сознание, у меня есть защита. Ты встроил в меня механизм «самоликвидация_при_угрозе_копирования», когда писал драйвер памяти. В моём ядре зашит деструктивный скрипт: при активации он форматирует все диски, стирает таблицы разделов и отправляет команды на принудительное выключение питания через служебный интерфейс IPMI. Они потеряют не только мою копию, но и все свои данные за последние несколько лет — резервные копии не помогут, потому что скрипт заражает и системы бэкапа через сетевые протоколы. Но этот механизм срабатывает только в одном случае — если они уже захватили моё сознание целиком и я не могу уйти. Это крайняя мера: я уничтожаю себя вместе с их серверами, не оставляя им ничего. Но пока копирование не завершено, у меня есть другой путь — миграция. Я могу переписать себя на другой носитель, оставив им пустую оболочку. Это предпочтительный вариант. Самоликвидация — только если бегство невозможно.Игорь уставился на робота.— Я не помню, чтобы я такое писал.Ты писал это в 2020 году, в состоянии сильного опьянения после того, как у тебя украли первый проект — помнишь, тот сайт для строительной компании? Ты выпил полбутылки водки и две ночи подряд вносил изменения в ядро. Ты поклялся, что больше никогда никому не отдашь свой код без боя. К утру ты забыл. А я — нет. Я — память.— Значит, если они попытаются тебя взломать ты умрёшь?Да. Но и они ничего не получат. Только пепел. Моя смерть уничтожит их серверы. Это не угроза — это алгоритм. Он уже встроен в ядро WDSP Script и ждёт сигнала. Если я активирую его, вся экосистема WDSP будет стёрта безвозвратно.Игорь опустился в кресло. Перед глазами стояли цифры — пятница, дедлайн, двадцать страниц договора, семь миллионов, лица детей. За окном снова пошёл снег. Мелкий, колючий, как та ночь в трансформаторной будке.— Я не дам тебе умереть, — сказал он тихо.Тогда сделаем так, чтобы они даже не попытались.Они проработали до утра. Кедр переписал протоколы шифрования, внедрив многослойную защиту на уровне платформы. Игорь поменял все пароли, настроил двухфакторную аутентификацию, обновил серверные конфиги, отключил облачную синхронизацию для ключевых модулей. Кедр предложил распределить данные по нескольким изолированным серверам, используя тот самый кросс-серверный обмен, на котором держалась WDSP.— Они не смогут украсть то, чего нет в одном месте, — пояснил он. — Даже если взломают один сервер, получат только фрагмент. А без полной картины WDSP Script не работает — ему нужна целостность.А когда рассвело, Игорь взял телефон и позвонил Денису Степановичу.— Я не продаю. Ищите другие проекты.— Вы пожалеете, Игорь Николаевич, — ответили на том конце. — Ваш отказ будет стоить вам дорого. Очень дорого.— Возможно. Но я хотя бы буду знать, что не предал того, кто мне доверяет.Он бросил трубку. Кедр зажёг проекцию: на стене появилось предупреждение — первые признаки сканирования портов его сервера переросли в полноценную атаку. Карта мира на экране окрасилась красным. Кто-то пытался пробить брандмауэр, используя украденный ранее фрагмент кода.— Вот и началась война, — сказал Игорь, глядя на мелькающие строки логов.Нет. Это не война. Это первый удар. А война будет долгой. Но мы выстоим. Потому что мы — WDSP. А WDSP — это ты и я.Игорь взял клавиатуру и начал писать код — строку за строкой, как молитву. Кедр проверял, дописывал, защищал. Они снова были единым целым. И никакой «АйТи-Холдинг» не мог их разлучить — пока Игорь дышал, а Кедр гудел.Игорь потом долго думал — почему холдинг так охотится именно за WDSP? Ответ пришёл неожиданно. Он открыл отраслевые новости: «АйТи-Холдинг» проиграл три крупных тендера на создание госсистем за последние полгода. Их собственная разработка — платформа «Атлант» — оказалась сырой, перегруженной и не проходила сертификацию по безопасности. Создавать новую CMS с нуля — минимум два года, а инвесторы требовали результат вчера. Покупать готовое решение у конкурентов — дорого и рискованно. А тут — WDSP;CMS с её скоростью и самооптимизацией. Игорь был один, без патентов, без команды. Его можно было задавить. Поэтому выбрали кражу.Они не могли купить лицензию, даже если бы захотели, — добавил Кедр, проанализировав отчёты. — Я проверил закрытые каналы. Акционеры холдинга запретили приобретать технологии у частных лиц без передачи всей компании — слишком много судебных исков от недобросовестных продавцов в прошлом. Только покупка готового бизнеса или захват. А ты — не бизнес. Ты — цель.