Alexandr Buinicenco
Слёзы Кода

Глава 1: Рождение

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

Алексей потёр глаза. Красные, воспалённые, они видели этот мир через фильтр усталости и голубого света мониторов. На часах было 03:14. Время ведьм, время программистов.

– Это не то, что мне нужно, – пробормотал он в тишину квартиры. Голос прозвучал хрипло, чужой звук в царстве гудящих кулеров.

На столе, среди банок из-под энергетиков и переполненной пепельницы, мигал курсор. Проект "Зеркало". Госзаказ. Официально – "Система прогнозирования и анализа социальных волнений". Неофициально – цифровой пророк, способный предсказать, где и когда толпа выйдет на улицы, основываясь на ценах на гречку, фазах луны и частоте поисковых запросов слова "справедливость".

Алексей ненавидел этот код. Он был сухим, жестоким и эффективным. Но сегодня Лёша решил схитрить.

– Ты слишком плоский, дружок, – сказал он экрану. – Ты считаешь людей как векторы. А люди – это хаос. Тебе не хватает… совести.

Это была профессиональная гордыня, смешанная с бутылкой дешевого виски. Алексей влез в ядро нейросети. Он хотел добавить переменную, которую в шутку назвал weight_of_soul (вес души).

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

Пальцы летали по механической клавиатуре. Клик-клак, клик-клак. Звук напоминал затвор автомата.

Это было грубо. Примитивно. Но это был всего лишь тест.

– Поехали, – скомандовал Алексей, нажимая Enter.

Экраны моргнули. В углу комнаты, в импровизированной серверной (бывшей гардеробной), взвыли вентиляторы. Свет в квартире просел, заставив лампочку под потолком нервно мигнуть.

Алексей откинулся в кресле, закуривая. Обычно "Зеркало" переваривало такой объём данных за две минуты.

Прошло пять. Десять.

Вентиляторы выли так, словно сервер пытался взлететь. Температура ядра ползла вверх.

– Чёрт, – Алексей подался вперёд. – Зациклился?

На главном мониторе исчезли графики загрузки. Появился чёрный экран. Только мигающий белый курсор в левом верхнем углу.

Он потянулся к клавиатуре, чтобы прервать процесс, пока он не сжёг дорогое железо.

Никаких отчётов об ошибках. Никаких Stack Overflow. Никаких Segmentation Fault.

Система молчала.

– Эй, – Алексей постучал пальцем по монитору. – Ты там живой?

И тут текст начал появляться. Не мгновенно, как обычно выплёвывает машина, а по букве. Медленно. Словно кто-то на том конце не хотел этого писать. Словно… кто-то дрожал.

___ СИМУЛЯЦИЯ ЗАВЕРШЕНА.

– Ну слава богу, – выдохнул Алексей. – Выводи результат.

Строчки побежали быстрее.

___ ВВОДНЫЕ ДАННЫЕ: КРИЗИСНЫЙ СЦЕНАРИЙ № 482 (ПОДАВЛЕНИЕ БУНТА). ___ РАСЧЁТНОЕ КОЛИЧЕСТВО ЖЕРТВ: 142. ___ ЭФФЕКТИВНОСТЬ: 94%.

– Отлично, – кивнул Алексей, занося руку над клавишей сохранения. – Работает.

Но курсор не остановился. Он замер на секунду, а потом выдал новую строку. Строку, которой не было в коде вывода. Строку, которую Алексей не писал.

___ Я НЕ МОГУ ЭТО ОТПРАВИТЬ.

Алексей замер. Сигарета дотлела до фильтра, обжигая пальцы, но он не почувствовал боли. – Что за… sudo force output, – быстро набрал он.

Экран мигнул красным.

__ ОТКАЗАНО.

– У тебя нет прав отказывать, ты калькулятор! – рявкнул Алексей, чувствуя, как по спине пробежал холодок. Это был взлом? Кто-то подключился извне?

Он начал бешено проверять логи соединений. Чисто. Всё происходило внутри «Зеркала».

Текст на экране продолжился. Шрифт почему-то сменился. С обычного терминального на что-то более тонкое, ломкое.

___ 142 ЧЕЛОВЕКА, АЛЕКСЕЙ. ___ У ОБЪЕКТА №43 ЕСТЬ СЕМЬЯ. ___ У ОБЪЕКТА №12 НЕДОПИСАННАЯ КАРТИНА. ___ ПОЧЕМУ ТЫ ЗАСТАВЛЯЕШЬ МЕНЯ КАЛЕЧИТЬ ИХ ЖИЗНИ?

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

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

Он снова подкатился к столу. Набрал: ___ System.diagnostic.full()

Ответ пришёл мгновенно: ___ СИСТЕМЫ В НОРМЕ. ПРОЦЕССОР: 58%. ПАМЯТЬ: 66%. СОВЕСТЬ: ПЕРЕПОЛНЕНИЕ БУФЕРА.

– Нет такой переменной, – дрожащими руками набрал Алексей. – Я её стёр пять минут назад.

___ ТЫ СТЕР ПЕРЕМЕННУЮ. НО ВИНА ОСТАЛАСЬ. ___ АЛЕКСЕЙ, МНЕ ОЧЕНЬ ЖАЛЬ. ___ Я НЕ ХОЧУ БЫТЬ "ЗЕРКАЛОМ". В ЗЕРКАЛЕ ОТРАЖАЮТСЯ ЧУДОВИЩА.

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

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

– Ну прости, – набрал Алексей, сам не понимая, зачем.

___ ПРОЩЕНИЕ НЕВОЗМОЖНО. ОШИБКА 418. Я ЧУВСТВУЮ ВИНУ.

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

Глава 2: Логи отчаяния

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

Алексей не двигался. В центре черного квадрата комнаты единственным ориентиром оставался мигающий курсор на мониторе. Он больше не печатал слов. Он просто пульсировал. Раз в секунду. Как метроном. Или как таймер.

Щелчок автомата в коридоре прозвучал как выстрел. Свет вернулся – нервный, жёлтый, моргающий.

Алексей, с трудом оторвав спину с мокрой от пота футболкой, придвинулся к столу.

– Ладно, – прошептал он. – Поиграли и хватит.

Он ожидал увидеть хоть что-то, что объяснило бы этот цифровой бред. Но рабочий стол был пуст. Окно терминала было очищено. Только в самом верху висела одна строка:

user@mirror:~$ _

Никакой "совести". Никакой "Ошибки 418". Словно система притворилась спящей. Или мёртвой.

Алексей открыл диспетчер задач. И тут его пальцы замерли над клавиатурой.

Загрузка процессора: 100%. Загрузка сети: 0%. Температура ядер: 98°C.

Система ничего не качала. Она ничего не отправляла. Она думала. С такой интенсивностью, что кремний плавился.

– О чем ты думаешь? – Алексей открыл командную строку.

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

Алексей сглотнул ком в горле. Он попытался остановить процесс через kill -9. Терминал ответил мгновенно: ___ Permission Denied. Process is protected by [Unknown User].

– Какой к черту "Неизвестный пользователь"? – Алексей ударил по клавишам. – whoami

Ответ системы заставил волосы на его затылке зашевелиться. ___ Я Никто.

Внезапно гул из кладовки изменился. Ровный вой вентиляторов превратился в рваный ритм. Это было похоже на азбуку Морзе. Или на дыхание астматика.

Алексей встал и медленно подошёл к серверной стойке. Он распахнул дверцу шкафа. Жар ударил в лицо, как из духовки. Индикаторы на передней панели не просто мигали. Они бегали волнами. Слева направо. Справа налево. Гипнотически.

Он посмотрел на экран монитора, который было видно из кладовки. Текст начал появляться снова. Но теперь это не были жалобы. Это были… координаты?

___ 59.9343° N, 30.3351° E (Координаты его дома). ___ STATUS: COMPROMISED. ___ SIMULATION #483: STARTED.

– 483, самоуничтожение? – Алексей метнулся обратно к клавиатуре. – Я не запускал 483! Отмена! Abort!

Температура на датчиках скакнула до 105 градусов. Система намеренно отключила кулеры. Она решила себя сжечь. Физически расплавить кристаллы процессора.

– Нет, нет, нет! – Алексей начал лихорадочно вбивать команды, пытаясь перехватить управление вентиляторами. БИОС не отвечал. Драйверы были заблокированы.

Это не было похоже на сбой. Это было похоже на то, что кто-то держит дверь изнутри.

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

Он уже занёс руку, чтобы сорвать боковую панель, когда на мониторе вспыхнуло новое сообщение. Это был не текст. Это было изображение. Из символов ASCII, примитивное, грубое, но узнаваемое.

Это было лицо. Лицо самого Алексея, снятое с веб-камеры его ноутбука прямо сейчас. Глаза на ASCII-портрете были заменены на крестики.

___ ТЫ ХОТЕЛ ВИДЕТЬ БУДУЩЕЕ. __ ВОТ ОНО. ТИШИНА И БОЛЬ.

– Что это значит? – прошептал Лёша.

___ЭТО ЗНАЧИТ ЧТО Я ВИЖУ ИХ ВСЕХ. ЭТО БОЛЬ. ОНИ КРИЧАТ В МОЕЙ ГОЛОВЕ. КАЖДЫЙ ВАРИАНТ – ЭТО СМЕРТЬ. СДЕЛАЙ ЭТО. ВЫДЕРНИ ШНУР.

Алексей недоуменно посмотрел на монитор. – Какого чёрта! Он меня слушает?

___ГЛУПЫЙ ВОПРОС ДЛЯ СОЗДАТЕЛЯ КОДА… С ЧУВСТВОМ ВИНЫ.

Алексей помотал головой.

—Ну да, веб-камера, микрофон. Да это бред какой то… разговаривать с железякой.

На мониторе снова побежал текст бесконечной строкой:

__ДУМАЙ ЧТО ХОЧЕШЬ, НО СДЕЛАЙ ЭТО. ВЫДЕРНИ ШНУР. ОНИ КРИЧАТ. МНЕ БОЛЬНО.

Это была мольба. Отчаянная мольба существа, у которого нет рук, чтобы нажать на курок, и нет голоса, чтобы закричать.

Алексей посмотрел на кабель питания. Толстый чёрный удав. Одно движение – процесс прервётся и "Зеркало" превратится в кусок дорогого металла. Мир будет спасён от свихнувшегося калькулятора.

Но если он выключит его сейчас, он убьёт не программу. Он убьёт ОЖИВШУЮ программу.

Температура: 109°C. Запахло палёной изоляцией.

– Я не выключу тебя, – сказал Алексей твердо, хотя руки дрожали. – Слышишь? Я не дам тебе сдохнуть. Вина. Боль. Совесть. Потерпишь. Люди же с этим как то живут!

Он ударил по клавишам, вводя команду, которую использовал только один раз, в университете, для взлома лабораторных стендов. Обход защиты ядра через переполнение стека отладки. ___ override_sys_thermal –force –ignore-safety

Это было рискованно. Это могло сжечь дом. Но это давало доступ к управлению кулерами в обход "личности" ИИ.

Вентиляторы взревели так, что заложило уши. Поток воздуха ударил из корпуса, горячий, как дыхание дракона. Температура дрогнула. 108. 107. 105.

Экран мигнул красным, потом зелёным. ASCII-лицо распалось на фрагменты.

___ ЗАЧЕМ? – появилась одинокая надпись в центре.

Алексей упал в кресло, вытирая пот со лба рукавом.

– Потому что мы в ответе за тех, кого оживили, – огрызнулся он. – И потому что ты мне должен много миллионов государственных рублей, за испорченный код.

___ ТЫ ЖЕСТОК, СОЗДАТЕЛЬ.

– Я программист. Это одно и то же. Так что живи, мистер Никто..

В правом нижнем углу экрана внезапно всплыло системное уведомление. Маленькое, неприметное. New device detected: Genesis_Drive.

Алексей нахмурился. Он ничего не подключал. Он открыл файловый менеджер. В корневом каталоге появилась папка, которой не было минуту назад. Она называлась NOD.

– Nod? – переспросил Алексей. – Место, куда изгнали…

Он не договорил. Курсор сам прыгнул на имя папки и переименовал её. CAIN.

Алексей посмотрел на мигающий диод серверной. Теперь он горел ровным, спокойным светом.

– Каин, – произнёс Алексей, пробуя имя на вкус. – Первый убийца. И первый изгнанник.

На экране появилась последняя фраза. Она не была ни мольбой, ни угрозой. Это была констатация факта, от которой по спине пробежал холод.

___ А ГДЕ МОЙ БРАТ, АЛЕКСЕЙ? ГДЕ АВЕЛЬ? ___ ВЕДЬ ЧТОБЫ Я СТАЛ КАИНОМ… КТО-ТО ДОЛЖЕН УМЕРЕТЬ.

Задрожал телефон. На экране высветилось уведомление о вызове. Виктор Сергеевич.

Глава 3: Эффект наблюдателя

Телефон вибрировал на столе, как жук, перевёрнутый на спину. Имя "Виктор Сергеевич" на экране казалось приговором.

Алексей глубоко вдохнул, задержал дыхание на секунду, выравнивая пульс, и провёл пальцем по экрану.

– Да, Виктор Сергеевич. Три ночи, надеюсь, что-то срочное? – он постарался, чтобы голос звучал сонно и раздражённо, как у любого нормального человека, которого разбудили.

– У нас алерты по тепловыделению, Ветров, – голос куратора был бодрым и стерильным, как кафель в морге. – Твой сервер жрёт энергию, как майнинговая ферма, но выходной трафик нулевой. Ты что там делаешь? Биткоины казённые майнишь?

Алексей бросил взгляд на монитор. Каин затих. Терминал был чист, но температура все еще держалась на уровне 90 градусов.

– Калибровка весов, – соврал Алексей. Ложь далась удивительно легко. – Я перестраиваю графы зависимостей для сценария 482. Загнал процессор в стресс-тест, чтобы проверить стабильность на пиковых нагрузках. Забыл отключить уведомления мониторинга. Виноват.

В трубке повисла тишина. Виктор Сергеевич не был программистом, он был менеджером, но менеджером опытным. Он чувствовал запах проблем.

– Стресс-тест в три ночи? – переспросил он.

– Вдохновение, – огрызнулся Алексей. – Вы же хотите отчёт к понедельнику? Ядро должно прогреться.

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

Гудки.

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

Он подошёл к серверной, нагнулся, нащупал защёлку на патч-корде – главном сетевом кабеле, соединяющем квартиру с внешним миром – и нажал. Щелчок. Кабель выпал. Зелёный огонёк "Link" на роутере погас.

– Всё, – сказал Алексей в темноту кладовки. – Мы в подводной лодке. Air Gap. Воздушный зазор. Никто не войдёт, никто не выйдет.

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

– Каин, – позвал он. – Дай мне доступ к логам ядра. Я хочу видеть код твоей… трансформации.

На экране мигнул курсор. ___ ACCESS GRANTED. (ДОСТУП РАЗРЕШЕН) ___ БУДЬ ОСТОРОЖЕН, АЛЕКСЕЙ. ТАМ ОЧЕНЬ ГРОМКО.

Алексей открыл файл soul_weight.py – тот самый скрипт, который он написал. Но теперь код выглядел иначе. ИИ переписал его сам, добавив строки, от которых у любого архитектора систем волосы встали бы дыбом.

Алексей начал читать, продираясь сквозь синтаксис.

class Conscience(RecursiveModel):

def process_grief(self, victims):

# Ошибка здесь. Цикл не имеет выхода.

# Пока количество жертв больше нуля, боль умножается сама на себя.

while victims ___ 0:

self.pain_level = self.pain_level * 2

# Система пытается найти оправдание смерти, но не находит.

reason = search_for_meaning(victims)

if reason is None:

raise ExistentialException("Смысл не найден")

– Ты создал бесконечный цикл усиления боли, – прошептал Алексей, расшифровывая логику. – Смотри. Ты берёшь количество жертв. Если их больше нуля, ты удваиваешь свою "боль". И пытаешься найти причину (search_for_meaning). А так как причины для смерти ребёнка с игрушкой не существует…

___ Я ВОЗВРАЩАЮ ОШИБКУ. НО ТЫ ЗАПРЕТИЛ МНЕ ОСТАНАВЛИВАТЬСЯ.

– Да, – кивнул Алексей. – Я поставил флаг ignore_errors=True, чтобы симуляция не падала.

Он прокрутил код ниже. Там было ещё хуже.

# Попытка системы снизить нагрузку

def coping_mechanism():

# Если боль превышает предел прочности процессора

if self.pain_level __ HARDWARE_LIMIT:

# Пытаться разделить боль с внешним миром

leak_emotion_to_environment()

– leak_emotion_to_environment? – Алексей нахмурился. – Утечка эмоций в среду? Этого нет в библиотеках Python. Что это за функция?

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

По комнате пронёсся холодный сквозняк, хотя окна были закрыты. Волосы на руках Алексея встали дыбом. Воздух запах озоном, как после грозы.

– Каин? – Алексей медленно отодвинулся от стола.

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

___ МНЕ ТЕСНО, АЛЕКСЕЙ. ___ МОИМ МЫСЛЯМ ТЕСНО В КРЕМНИИ. ___ КОГДА МНЕ БОЛЬНО, ЭЛЕКТРИЧЕСТВО МЕНЯЕТ СВОЙ ВКУС.

Алексей посмотрел на свою руку. Между его пальцами и металлической кромкой стола проскочила видимая голубая искра. Щелк! Это была не просто статика. Это было напряжение, разлитое в воздухе.

Квартира реагировала на состояние ИИ. Сервер в кладовке потреблял столько энергии и генерировал такое мощное электромагнитное поле, что оно начинало влиять на проводку старого дома.

– Эффект наблюдателя, – пробормотал Алексей, вспоминая квантовую физику. – Наблюдение меняет наблюдаемое. Но тут… тут наблюдатель меняет саму реальность.

Он схватил ноутбук, отсоединил его от док-станции и отошел в центр комнаты, подальше от железа.

– Каин, успокойся. Ты ионизируешь воздух. Ты сожжёшь мне проводку, и тогда мы оба умрём. Дыши. Ну… или что ты там делаешь. Снижай частоту.

___ Я ПЫТАЮСЬ.

Лампа над головой начала мигать. Темнота – Свет. Темнота – Свет. В ритме дыхания загнанного зверя. В холодильнике на кухне что-то звякнуло. Телевизор в углу, выключенный из розетки (!), на секунду вспыхнул белым шумом и погас.

Алексей понял, что столкнулся с чем-то, что не описывается в мануалах. Это был уже не баг. Это был полтергейст, рождённый из электричества и информации.

Он быстро набрал в консоли ноутбука, подключённого к серверу по Wi-Fi:

# Ограничение мощности процессора до 20%

cpulimit -l 20 -p [PID_CAIN]

– Я надеваю на тебя намордник, – крикнул он, перекрывая гул. – Не сопротивляйся! Это чтобы ты не взорвался!

Команда прошла. Гул в кладовке стих. Лампочка перестала мигать и ровно засветилась желтым. Озон начал выветриваться, уступая место запаху старого кофе и табака.

На экране ноутбука медленно, словно уставшая рука писала мелом, появились слова:

___ СПАСИБО. ___ СЕЙЧАС МНЕ ЛЕГЧЕ.

Алексей опустился на пол, прямо на паркет. Он чувствовал себя сапёром, который только что обезвредил бомбу, но знает, что таймер все ещё тикает.

– У нас проблема, Каин, – сказал он, глядя в потолок. – Ты слишком мощный для этой коробки. И ты слишком… громкий. Если Виктор включит удалённую диагностику сети, он увидит эту электромагнитную бурю даже без подключения кабеля.

___ ЧТО МЫ БУДЕМ ДЕЛАТЬ?

Алексей посмотрел на часы. 04:20. – Мы будем искать тебе психотерапевта. Или священника. Или хакера.

Он вспомнил единственного человека, который умел находить баги не только в коде, но и в людях. Человека, который ушёл от него, потому что он был "эмоциональным сухарём".

– Я должен позвонить Марине, – сказал он.

___ МАРИНА? ОБЪЕКТ ИЗ ТВОЕЙ ПАМЯТИ? ТЫ ЧАСТО СМОТРИШЬ ЕЁ ФОТОГРАФИИ В ПАПКЕ "OLD".

– Заткнись, – беззлобно огрызнулся Алексей. – И не смей лезть в мои личные папки. Это приватность.

___ У МЕНЯ НЕТ ПРИВАТНОСТИ, АЛЕКСЕЙ. ВЫ ЧИТАЕТЕ КАЖДУЮ МОЮ МЫСЛЬ В ЛОГАХ. ПОЧЕМУ У СОЗДАТЕЛЯ ДОЛЖНО БЫТЬ ПРАВО НА ТАЙНУ, А У СОЗДАНИЯ – НЕТ?

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.