Серый московский вечер сгущался над головой, растворяя последние отблески заходящего солнца в призрачной дымке столичных выбросов. Мне, Марку Сергеевичу Петрову, 38-летнему инженеру-программисту из ведущей IT-компании, чья жизнь была расчерчена по принципу "код – дом – сон – код", подобные моменты меланхолии были знакомы, но не часты. Мой мир был четким, логичным, предсказуемым. Байт за байтом, строка за строкой, я строил виртуальные миры и отлаживал реальные системы. Мое мышление было заточено на поиск решений, на декомпозицию сложных задач до атомарных операций.
Сегодняшний коммит был безупречен. Новый модуль для системы управления городским трафиком, написанный на Python, прошел все Unit-тесты и Integration-тесты, а покрытие кода было около 98%. Я это чувствовал не только по показаниям метрик, но и по легкому, почти физическому приливу удовлетворения, когда я аккуратно закрывал крышку новенького ультрабука. Это, пожалуй, был самый стабильный и изящный кусок кода, который я выпустил за последние несколько месяцев. Можно было считать рабочий день завершенным. На часах – около восьми вечера.
Как обычно, я представил себе свою уютную трёхкомнатную квартиру на Бульварном кольце. Там, наверное, уже ждала Надежда, моя жена. Мы были вместе уже пятнадцать лет, и каждый вечер после работы она встречала меня улыбкой. Разговоры о моём коде ей были, честно говоря, не очень интересны, но она всегда слушала с неподдельным вниманием. Зато её интересовала наша жизнь, наши общие планы. Сегодня среда. А по средам у нас был негласный, но свято соблюдаемый уговор – суши. Наш маленький ритуал, наша ниточка из рутины, наши маленькие радости моей, прямо скажем, не слишком разнообразной, зато стабильной и понятной инженерной жизни.
Я вышел из офисного центра на Белорусской, окунувшись в характерную для столицы вечернюю суету. Она была привычна, как фоновый процесс. Люди куда-то спешили, их лица освещались экранами смартфонов, воздух был пропитан запахом бензина и несбывшихся надежд — или, как мне иногда казалось, запахом дедлайнов и невыполненных тасков. Моя обычная дорога домой пролегала через метро, но сегодня я решил пройтись. Погода была на удивление мягкой для конца октября, а пронзительный, голубоватый свет монитора за последние десять часов изрядно поднадоел. Мне хотелось просто пройтись, подышать более свежим воздухом, чем тот, что гоняли системы кондиционирования в офисе, и, может быть, послушать какой-нибудь подкаст про современные тенденции в разработке ИИ. Но наушники остались на столе, а значит, сегодняшняя прогулка будет в тишине собственных мыслей.
Пройдя пару кварталов, я обнаружил, что путь домой повел меня через некий переулок – эдакий московский аппендикс, который, почему-то, казался срезанным с карты города, но при этом активно использовался для сокращения пути. Фонари здесь работали, как ядреный аниматор из 90-х: вспышка, мрак, снова вспышка, потом очередной неяркий, мигающий свет. Я всегда шутил про себя, что это идеальное место для съемки хоррора про сбежавший из института Кропоткина живой интеллект или для очередного триллера про маньяка. Мне нравилось это место своей неоговоренной странностью, своим контрастом с яркими, сверкающими фасадами новых зданий. Меня это забавляло. Я даже иногда придумывал истории про этот переулок, особенно его темные, влажные углы, где кажется, что время остановилось. Мои родители, покойные уже несколько лет, всегда говорили, что я слишком много думаю. "Маркуша, жизнь — это не только чистые алгоритмы, иногда нужно просто жить", — смеялась мама. Мой отец, бывший инженер советской закалки, всегда добавлял: "А главное — не забывай про бэкапы". Как же он был прав.
Но сегодня “сценарий” был не про интеллект и не про маньяка. Сегодня он был про что-то более… приземленное. Прячась в одной из особенно густых теней, из темноты, пахнущей влажным асфальтом и дешевым табаком, вынырнули две тени. Высокие, широкоплечие силуэты моментально сократили расстояние.
— О-о-о, смотрите-ка, кто тут у нас, — протянул один, голос его напомнил скрежет несмазанной тележки в супермаркете, везущей просроченный товар. В нем было столько пренебрежения, что я внутренне сжался. — Интеллигент, видимо. Очки, рюдзак. Прямо как из кино.
Внутренне вздохнул. До этого дня я, наверное, не особенно внимательно относился к своей внешности, но эта фраза, прозвучавшая как приговор, заставила меня задуматься. Это был третий раз за год, когда мои очки, слегка помятая (но совершенно чистая!) рубашка и рюкзак с ноутбуком последней модели вызывали у определенных слоев населения явное желание что-нибудь «взять, да и поделить». Или просто побить. Я не был сторонником насилия, скорее, его активным противником, предпочитая разбираться со всякими проблемами логически, а не физически. Мои знания в программировании были обширны, но в области уличных драк я был, мягко говоря, дилетантом.
— Проблемы? — Я попытался звучать максимально скучно, надеясь, что вид типичного «айтишника» без навыков уличного боя отобьет у них охоту. Забавно, что я сам не верил, что эта стратегия сработает. Я представил себя в роли скучного персонажа из старой RPG, который может предложить только квест “принеси-подай” и не имеет никаких боевых навыков.
— Проблемы? — повторил второй, чуть короче, но с ещё большим чувством, словно смакуя предстоящее. Его голос был более низким, хриплым, и в нем прозвучала ничем не прикрытая угроза. — Проблемы у тебя сейчас будут, фраер. Или кошелек. Выбирай.
Я, человек рациональный, мгновенно прогнал через свой внутренний «процессор» вероятностный анализ ситуации. Их двое, я один. Физическая подготовка – ну, на беговой дорожке я мог пробежать 10 километров, отчаянно пытаясь догнать новый релиз Node.js, слушая вебинар по новым фреймворкам. Это вряд ли поможет против двух крепких, явно не пропускавших тренировки по поднятию пивных бутылок и развитию хабальства, типов. Мои руки привыкли к клавиатуре, а не к кулакам.
— Парни, может, договоримся? Мне до дома две минуты, я не хочу проблем, — начал я, медленно, очень медленно опуская рюкзак на асфальт. Мои руки скользнули к боковому карману, где обычно лежал кошелек. На самом деле, я надеялся найти что-то тяжелое. Мобильник? Хрупкий, к тому же дорогой. Тяжелая книга по квантовым вычислениям, которую я иногда носил с собой для “умного” вида? Вот это уже ближе к делу. Я даже почувствовал ее жесткий переплет.
Но уличная логика была намного быстрее логики квантовой. Первый, басовитый, неожиданно сократил дистанцию. Я не успел даже моргнуть. Удар пришелся по касательной в висок. Горячая вспышка, словно перегоревшая микросхема, пронзила меня, звон в ушах, как от сбоящего динамика, и мир наклонился вбок, как кривой интерфейс глючного приложения, которое подвисло и выдает ошибки.
Я почувствовал еще один удар, куда-то в живот, потом еще. Защищаться было бессмысленно. Мое тело, привыкшее к комфортному креслу, не было готово к такому хардкорному тесту. Я упал на холодный асфальт, пытаясь прикрыть голову руками, словно это могло защитить мой мозг от внезапной перезагрузки. Мысли путались, превращаясь в обрывки кода, который никак не мог скомпилироваться, выдавая бесконечные ошибки.
«Вот так, значит, – мелькнуло в сознании. – Дожил. Наконец-то, я увижу, как выглядит… синий экран смерти в реальной жизни. Какой-то совершенно неканонический путь к завершению жизненного цикла.»
Дальше был только холод. Непроглядная тьма, пахнущая железом (моей собственной крови?) и чем-то еще, чем-то незнакомым, чужим, едким. Пустота. Я чувствовал, что я есть, но не чувствовал своего тела. Ни боли, ни холода, ни тепла. Просто существование. Как программа, зависшая в оперативке, но без физического процессора, без оболочки. Это было странно, отстраненно, и не вписывалось ни в одну из известных мне логических парадигм.
«Memory dump… Fatal error… Rebooting system…» – пронеслось в моей голове напоследок, слова, которые были частью моей повседневности, теперь казались предсмертным заклинанием.
Я очнулся от запаха. Странно, но это был первый ощутимый сигнал, вернувший меня к какому-то подобию реальности. Запах трав, чего-то горьковатого, немного дыма из печи и… чистого тела, похожего на запах свежевыстиранного белья. Совсем не тот затхлый, стерильный, больничный аромат, с нотками хлорки и медикаментов, который я ожидал. Нет, это было что-то природное, деревенское, чужое.
Глаза я открыл с трудом. Веки казались свинцовыми, но усилие воли, привычное мне по часам отладки сложного кода, заставило их подняться.
Передо мной был не привычный для меня потолок из гипсокартона с датчиками пожаротушения или трещины на побелке, которые я мог часами изучать в ожидании апдейта. Нет. Высокий, неровный, кое-где потемневший от дыма, потолок из грубых бревен. Стены сложены из неотесанных камней, между которыми кое-где виднелись щели, заложенные глиной. Из маленького квадратного окошка, прикрытого чем-то вроде высушенного пергамента или промасленной кожи, пробивался тусклый, рассеянный свет. Он едва освещал убогое убранство комнаты.
«Камнями? Бревнами? Это что, стилизация под старину в палате люкс? Какая-то новая веяние в медицине? Или я так сильно ударился головой, что оказался в реанимации клиники, где врачи решили меня шокировать дизайном а-ля “первобытный человек”?» – пронеслась первая паническая мысль. Мой мозг стремился хоть как-то объяснить эту абсурдную ситуацию, подвести ее под известные алгоритмы.
Тело чувствовалось непривычно. Легкое, почти невесомое. Голова кружилась, но не от боли, а от этой странной, пустой легкости. Я попытался пошевелить рукой и… ошалел. Рука, которую я увидел, была тоньше, чем моя собственная. Узлая, с длинными, тонкими пальцами и непривычно бледной, почти прозрачной кожей, просвечивающей синими венами. Я в жизни не был худым, скорее наоборот, поэтому вид этой тонкой руки вызвал у меня легкий шок.
«Ладно, – успокаивал я себя. – Скорее всего, это наркоз. Галлюцинации. Или какой-то очень специфический сон, спровоцированный сотрясением мозга. Сейчас я проснусь, и все наладится. Я включу компьютер, и все будет на своих местах. Отключу этот синий экран, наконец».
Я снова закрыл глаза, глубоко вдохнул – и закашлялся. Кашель был сухим, изнуряющим, и казалось, сотрясал меня от кончиков пальцев до макушки. Каждый выдох сопровождался хрипом и болью в груди. Когда приступ отпустил, горло першило, а во всем теле появилась колоссальная слабость, которой раньше не было. Такой усталости я не испытывал даже после самого долгого кодинга без сна.
«Окей, это уже не похоже на просто галлюцинации. Наркоз обычно не вызывает такое отчаянное чувство бессилия и сухой кашель, – отметил я, применяя свой излюбленный подход к решению проблем: анализ симптомов. – Отсутствие привычной боли в теле тоже странно. Ничего не болит, но все неправильно».
Я осторожно открыл глаза снова. Мир на этот раз не плыл. Над моей головой склонилась пожилая женщина с добрым, но очень усталым лицом, покрытым глубокими морщинами, словно древней картой. Ее волосы были заплетены в тугую седую косу, а одежда походила на что-то среднее между крестьянским платьем и ритуальным облачением из этнографического музея. В ее руках была пиала, из которой поднимался легкий пар, окутывая ее лицо.
— Очнулся, Лиэль? — голос у женщины был мягким, но в нем слышалась глубинная, всепоглощающая печаль. Это был голос человека, который давно свыкся с горем. — Ну вот, слава стихиям, на время стало лучше. Пей отвар, родной. Он боль утишит.
Лиэль? Кто такой Лиэль? Я попытался произнести это имя, но изо рта вырвался лишь хриплый, слабый звук, больше похожий на сип. И голос был вовсе не моим. Не мой глубокий, чуть скрипучий тенор, привычный мне. Этот был молодым, высоким и каким-то… надломленным, словно плохо настроенный музыкальный инструмент.
Я почувствовал, как кто-то поддерживает мою голову – руки были тонкими, но сильными – а затем пиала прижалась к моим губам. Жидкость была горькой, как, кажется, все местные растения, но теплой и немного обжигающей. Я сделал несколько глотков, и действительно, неприятное жжение в горле немного отступило, уступив место пусть и горькому, но ощутимому теплу.
— Бабушка, — прохрипел я, пытаясь подобрать слова, которые могли бы описать мою полную дезориентацию. — Где я? Что со мной?
Старушка вздохнула, прижав худенькую, но сухую и теплую руку к моему лбу, словно измеряя температуру. В ее прикосновении чувствовалась забота.
— Где ты? Дома ты, Лиэль. В нашей хижине. Беда с тобой, родной, большая беда. Болезнь твоя снова отступила на время, но ведь не вылечилась. Каждый день она забирает силы по крупицам.
Болезнь? Я огляделся по сторонам, пытаясь найти хоть что-то знакомое, хоть какую-то зацепку. Грубый деревянный стол, пара табуретов, очаг в углу, где тлели угли, испуская тонкий струйку дыма. На стенах висели связки сушеных трав, пучки каких-то колючих растений. Никакой электроники. Никаких мониторов. Никаких трубочек, мигающих лампочек, розеток, проводов – ничего, что было бы неотъемлемой частью моего мира. Абсолютно ничего.
Мое сознание, инженера-программиста, который привык к четкой логике мира и дебаггингу любого процесса, начало паниковать. Это было слишком странно для сна или галлюцинации. У меня были галлюцинации во время лихорадки, но они не были настолько… системными.
Я попытался подняться, напрягая все свои силы, но тело меня не слушалось. Слабость была чудовищной, как у программ, жрущих всю оперативную память.
— Бабушка, что за имя… Лиэль? И почему у меня такой голос? И… где мои очки? И вообще, я… я не болел. Я был в Москве. В России. Я… я помню, как на меня напали… хулиганы…
Старушка посмотрела на меня с явным беспокойством, а в ее глазах мелькнула тень страха, граничащего с отчаянием. Она прикрыла рот рукой.
— Что ты такое говоришь, дитя? Какая Москва? Какие очки? Ты Лиэль, мой внук, и мы живем в Деревне Утренних Зорь. Ты болеешь с самого детства, и с каждым годом все хуже. Неужто жар опять ударил тебе в голову так сильно?
Я почувствовал, как мозги начинают закипать, словно перегревающийся процессор. Паника накатывала черными холодными волнами. Я попытался собрать осколки воспоминаний. Московский вечер. Темная аллея. Два пьяных силуэта. Удар по голове. Тьма. И теперь здесь — в теле какого-то Лиэля, в «Деревне Утренних Зорь», где, судя по обстановке, про электричество знали только по слухам, да и то – из уст путешественников с очень хорошо развитой фантазией, явно не отсюда.
«Кажется, моя система перезагрузилась, – подумал я с нотками истерики, пытаясь найти хоть какой-то аналог в моем опыте. – И теперь я работаю под другой ОС, на абсолютно другом железе. И, похоже, эта ОС несовместима с железом, или наоборот».
И тут, как будто в подтверждение моих мыслей, внутри меня что-то щелкнуло. Яркая вспышка, невидимая для глаз, но по ощущениям похожая на короткое замыкание в мозгу, на мощный электрический разряд, пронизавший все мое существо. Перед моим внутренним взором пронеслись образы: мальчик Лиэль, болезненный, худой, с бледными щеками; эта же старушка, только моложе, склонившаяся над колыбелью; деревенские пейзажи, знакомые этому телу. И жуткое, нарастающее чувство слабости, словно чья-то невидимая рука вытягивала из него жизнь, постепенно, по крупицам. Это было почти физическое ощущение увядания.
Это были воспоминания. Не мои, Марка. А Лиэля.
«Так, стоп. Кажется, меня не просто перенесли. Меня, похоже, вшили в чью-то голову. Прямо как плохой патч к операционной системе. И эта ОС, судя по всему, вот-вот даст сбой, а я в ней застрял».
Я чувствовал это. Это было не только кашель и слабость. Это было глубокое, корневое ощущение разрушения. Каждый орган, каждая клеточка моего нового тела работала на пределе, на последнем дыхании, как старый компьютер, который вот-вот выплюнет свои диски. Я был, по сути, умирающим.
Вот это поворот. Пережить нападение хулиганов, чтобы очнуться в теле умирающего подростка в мире без технологий. Для инженера-программиста, который в жизни не держал в руках ничего тяжелее паяльника и отвертки для вскрытия системного блока, это был настоящий вызов. И даже не вызов, а скорее – полный системный отказ. Game Over, без даже намека на возможность рестарта.
— Извини, бабушка, — сказал я, стараясь говорить максимально правдоподобно, изображая амнезию или бред. — Просто… сон странный был. Про огромный город из камня и стекла, где люди передвигались на железных коробках и обменивались мыслями на расстоянии, а вся их жизнь была завязана на невидимых потоках информации. И я… я был частью этого.
Старушка покачала головой, но облегченно выдохнула, словно мои слова были лишь очередным проявлением болезни.
— Сны, Лиэль, это часто спутник болезни, когда жар мучает. Не обращай внимания. Вот, съешь немного каши, пока теплая. Нужно восстанавливать силы.
Я, или теперь уже Лиэль, кивнул. Я должен был разобраться. Что это за мир? Какое имя носит? Почему я здесь? И самое главное – как, черт возьми, спасти этот хилый организм, который, кажется, был на грани окончательной смерти? Инженер-программист привык к тому, что всегда есть мануалы, документация, сообщество поддержки, гугл, в конце концов! Здесь же был только я сам, какая-то старушка и явно умирающее тело. Без интернета, без электричества, без элементарных удобств.
«Думай, Марк, думай. Ты же программист. Что ты делаешь, когда система сильно сбоит? Правильно. Проверяешь логи, ищешь ошибки в коде. А потом – пытаешься их исправить».
Только вот отладчик был в моем случае… мое собственное, пока еще живое, но уже очень больное тело. Весело. Как я теперь буду чинить «железо», если мой «софт» даже не понимает, в каком мире я оказался? Никаких аналогов в моей базе данных.
Мне на ум пришла аналогия с очень старой операционной системой, которую иногда приходилось поддерживать на работе. Куча багов, устаревший интерфейс, но всё как-то работает. И вдруг, в один момент, эта система начинает проявлять признаки совершенно другого мира, призрачные файлы, ошибки, которых не должно быть.
— Бабушка, — начал я, стараясь говорить максимально осторожно, без давления, — а у нас… есть что-то вроде… записей? Ну, где писали бы, что за травы для чего используются? Или… как тут все устроено? Какие-то книги, свитки?
Старушка удивленно подняла бровь, ее взгляд был пронзительным, словно она пыталась заглянуть мне в душу, определить, уж не сошел ли я с ума окончательно.
— Зачем тебе, Лиэль? Все же знают. Ты ведь сам много лет живешь в нашей деревне. Или опять память подводит? Это всё болезнь твоя…
Я понял, что играть роль потерявшей память жертвы нападения будет сложнее, чем я думал. Придется импровизировать. А импровизация – это, как известно, один из краеугольных камней хорошего программирования. Иногда. Или очень плохого. Я пока не знал, к чему приведет моя нынешняя импровизация. Главное – собрать как можно больше данных. Это золотое правило инженера.
«Ладно, Марк, – сказал я себе, внутренне усмехнувшись. – В конце концов, ты же инженер-программист. Ты умеешь решать задачи. Пусть даже эти задачи похожи на полное отсутствие интернета, электричества и адекватного мануала к операционной системе. Выживем. Или хотя бы попытаемся. Главное – не сдаваться, даже если система кричит о фатальной ошибке и грозит полным крахом».
Я посмотрел в маленькое окошко. За ним простирался неизведанный мир. Мир, который теперь стал моей реальностью. Мир, который не мог обойтись без электричества и который, судя по всему, был гораздо менее логичен, чем моя прежняя жизнь. И я чувствовал, что это путешествие обещает быть намного интереснее любой отладки кода. Хотя и куда более опасным. Мой внутренний дебаггер уже гудел, пытаясь выстроить новую модель реальности.