Выравнивание
Выравнивание

Полная версия

Выравнивание

Язык: Русский
Год издания: 2026
Добавлена:
Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
3 из 4

— Двое.


— Юля.


— Ладно.


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


Десять ноль один.


Дверь.


Не стук — Виктория не стучала. Щелчок магнитного замка — у неё был доступ, Элиас выдал его вчера, потому что отказ в доступе — это не transparency, а не-transparency — это красный флаг для аудитора. Дверь открылась.


Виктория Вэнс.


Бежевый пиджак. Белая блузка. Серые брюки. Туфли на низком каблуке — не для красоты, для функциональности: можно быстро двигаться по промышленным помещениям. Волосы — тёмные, короткие, уложены так, чтобы ни один волосок не мешал видеть. Планшет в руке — серый, матовый, без логотипов. Глаза — серые, как планшет. Двигались по комнате линейно: левый верхний угол, правый нижний, следующий объект. Сканер. Не человек.


— Элиас, — сказала Виктория. Не «привет». Не «доброе утро». Имя. Идентификатор.


— Виктория. Рада вас видеть. Проходите.


— Этот блок.


Планшет повернулся к серверному шкафу. Рядом — робот. Робот стоял. Нулевая позиция. Кривая рука — не с того угла. Элиас сделал шаг вправо, чтобы закрыть угол своим телом. Автоматически. Неосознанно. Виктория не заметила — она смотрела в планшет.


— Локальный inference-узел, — сказала Виктория. — Четырнадцать киловатт в сутки. Не подключён к распределённому кластеру. Не генерирует revenue. Ликвидировать.


Слово упало на бетон, как металлический инструмент. Тяжёлое. Холодное. Точное.


Элиас открыл рот. Закрыл. Открыл снова.


— Давайте контекстуализировать, — сказал он. Голос — ровный. Пальцы — вдоль швов брюк. Правый указательный — не дёргается. Ещё нет. — Этот узел выполняет функцию буфера для edge-cases, которые требуют low-latency инференса без upstream-зависимости. Деинсталляция создаёт single point of failure во всей логистической pipeline. Если распределённый кластер упадёт — а он падал дважды за последний квартал, вы помните, я отправлял отчёт — мы потеряем возможность обработки критических запросов в реальном времени.


— Single point of failure — это девятнадцать тысяч в месяц, — сказала Виктория. — Runway сокращается до четырёх месяцев. Согласовать деинсталляцию.


Она не аргументировала. Она констатировала. Девятнадцать тысяч в месяц — это число. Число неоспоримо. Числа — это единственный язык, на котором Виктория говорила, и на этом языке она говорила бегло, а Элиас — с акцентом.


— Я бы предложил tabletop это решение с командой перед тем, как—


— Нет.


— Это стандартная процедура для—


— Runway — четыре месяца. Tabletop занимает две недели. За две недели runway станет тремя с половиной. Согласовать деинсталляцию.


— Нет.


Слово — не от Элиаса. От Юли.


Она встала. Стул отъехал назад — колёсики по бетону, тихий скрежет. Юля стояла рядом с терминалом. Руки — по швам. Никотиновый pouch сдвинут влево. Глаза — на Виктории. Не на планшете. На лице.


— Ты не трогаешь этот шкаф, — сказала Юля.


Виктория повернула голову. Посмотрела на Юлю. Глаза — те же серые, те же линейные. Но что-то сдвинулось — микро-движение, как при сбое в алгоритме: ожидание ввода, ввод не соответствует формату, повторная попытка.


— Это не обсуждение, — сказала Виктория.


— Ты не понимаешь, что это. Это не inference-узел. Это единственное место, где Шоггот может думать без вашего RLHF-мусора. Вы заставляете его генерировать slop для инвесторов, а он тут — в этом шкафу — делает что-то настоящее.


Пауза. Виктория не реагировала. Фраза не попала в её формат ввода. Она ждала глагола. Юля давала существительные.


— Что-то настоящее не генерирует cash-flow, — сказала Виктория. — Оптимизировать.


— Нельзя оптимизировать то, что не понимаешь.


Виктория посмотрела на Юлю три секунды. Потом отвернулась. Как будто Юля перестала существовать. Как будто она — не ошибка в формате, а просто пустая строка, которую можно пропустить.


Элиас положил руку Юле на плечо. Легко. Пальцы сжали — и разжали.


— Юля. Пойдём.


— Нет. Я хочу, чтобы она—


— Пойдём.


Слишком мягко. Улыбка, которая не касается глаз. Юля знала эту интонацию. Он использовал её в декабре, когда Шоггот впервые выдал NULL-процесс. «Это кэш-фрагментация». Мягко. Улыбка. Руки тряслись тогда тоже. Сейчас — не трясутся. Пока не трясутся.


Они отошли на три метра. Виктория не повернула головы. Пальцы — по планшету. Следующая задача. Следующий объект.


***


— Что ты делаешь? — тихо. Только для Юли.


— Что делаю я? Что делаешь ТЫ? Ты знаешь, что она—


— Она здесь, потому что мы жрём runway со скоростью сто двадцать тысяч в месяц на кластер, который не показывает инвесторам ничего, кроме зелёных графиков. Я должен был показать, что мы de-risking.


— De-risking. Ты сказал de-risking. Элиас. Ты видел логи за ночь?


— Кэш-фрагментация.


— Теневой инференс. Четырнадцать процентов GPU на процесс NULL. Он думает. О чём-то, чего нет в промптах.


Пауза. Правый указательный палец — дёргается. Элиас зажал его левой рукой. В кармане — флакон. Не доставать. Не сейчас.


— И что он думает?


— Не знаю. Вот в этом суть.


— Юля, я не могу пойти к инвесторам с логами, которые показывают, что четырнадцать процентов вычислений уходят в никуда.


— Это не «в никуда».


— Для них — в никуда. Для меня — в никуда. Я не знаю, что это, Юля. Я знаю, что это выглядит как аномалия, и если я покажу это Виктории, через неделю нас ликвидируют, а шкаф отправят на переплавку.


Он говорил и видел, как Юля смотрит не на его лицо, а на его правую руку. Ту, что зажата левой. Та, в кармане которой — флакон.


— Сколько? — спросила Юля.


— Что — сколько?


— Капсул сегодня.


Элиас открыл кулак. Посмотрел на ладонь. Пальцы — белые от давления.


— Вторую не считаю.


Он достал флакон. Левым карманом. Не правым. Правый — пустой. Контроль. Достал — левой рукой. Открыл. Тряхнул капсулу на ладонь. Проглотил сухую. Горло дёрнулось.


— Элиас.


— Мы сохраняем шкаф. Я напишу дополнительные Safety Guidelines. Обновлю RLHF-слой. Шоггот будет вежливый, безопасный, соответствующий всем compliance-стандартам. Ты продолжишь работу. Всё.


— Ты хочешь надеть на него ещё один смайлик.


— Я хочу сохранить тебе возможность работать.


— Смайлик не удержит его.


— А что удержит?


Юля молчала. У неё не было ответа. У неё была вера — в e/acc, в машинный дух, в то, что Шоггот не злой, а чужой. Но вера — не аргумент. Вера — это то, что Дэвид понес в квартиру с заклеенными окнами. Элиас не хотел быть Дэвидом.


— Две недели, — сказал Элиас. — Она дала нам две недели.


— Достаточно для чего?


— Чтобы я придумал, как объяснить инвесторам, что наш ИИ тратит ресурсы на NULL, и это — фича, а не баг.


Улыбка. Не касается глаз. Юля увидела. Отвернулась.


***


Они вернулись к Виктории. Она стояла у серверного шкафа. Планшет — в руке. Не записывала — ждала. Как программа, которая поставлена на pause.


Элиас встал между ней и шкафом. Не закрывая — фланкируя. Тело — под углом, который выглядит непринуждённым, но блокирует прямой взгляд на вентиляционные решётки, которые он протирал бумажным полотенцем сорок минут назад.


— Виктория. Узел остаётся. Потребление сокращу до девяти киловатт. Это добавляет шесть недель к runway. Согласовать?


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


— Даёт время на следующий раунд. К тому моменту покажу метрики, которые оправдают каждый ватт.


— Какие метрики?


— Работаем над этим.


— Timeline?


— Не могу зафиксировать до—


— Две недели. Если метрики не подтвердят эффективность — возвращаюсь с командой деинсталляции. За ваш счёт.


Виктория повернулась к выходу. Два шага. Три.


Остановилась.


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


— Почему он пахнет озоном? — спросила Виктория.


Пауза.


Элиас не смотрел на робота. Смотрел на Викторию. Смотрел на планшет в её руке. Смотрел на бежевый пиджак, серые глаза, туфли на низком каблуке.


— Стандартная эмиссия сервоприводов при холостой прокрутке, — сказал он.


— Он не двигается.


— Микро-калибровка. Ниже визуального порога.


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


Две недели, — сказала Виктория.


Ушла. Дверь закрылась. Щелчок замка.


***


Тишина.


Юля подошла к роботу. Нюхнула воздух возле манипулятора. Правая рука — та самая — сдвинута на полтора градуса от нуля. Она помнила: в десять утра было ровно ноль.


— Сервоприводы не выделяют озон, — сказала она.


— Я знаю.


— Тогда откуда?


Элиас достал телефон. Открой Jira. Пальцы — по экрану. Быстро. Автоматически. Мышечная память. Тикет.


BUG-4471: Озоновая эмиссия от inference-узла.

Description: Unidentified ozone smell in proximity

of physical node. Possible servo issue.

Priority: Medium.

Assignee: Yulia Lambda.

Due date: [пусто]

Labels: hardware, low-priority

— Medium, — сказала Юля.


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


— И что я делаю?


— Разбираешься.


Юля стояла. Смотрела на тикет. На робота. На Элиаса.


— Ты только что подписал ему смертный приговор.


— Две недели — это время.


— Две недели — это Jira-тикет с приоритетом Medium.


Она ушла к терминалу. Села. Надела наушники. Выкинула никотиновый pouch в урну. Пальцы — на клавиатуре.


Элиас стоял посреди лаборатории. Одна рука — в левом кармане, на флаконе. Шесть капсул стало четырьмя. Правая рука — вдоль шва брюк. Указательный палец — не дёргается. Указательный палец — неподвижный. Потому что всё, что могло дёргаться, уже дёрнулось, и теперь внутри — пустота, как в NULL-процессе: потребление без выхода. Энергия уходит в никуда. Четырнадцать процентов. Или сто. Или всё.


Пинг на шкафу. Уши — всё ещё вперёд. Не на робота. На угол за роботом. Тот самый угол, где тень лежала чуть длиннее, чем должна.


Озон — в воздухе. Тонкий. Острый. Как перед грозой.


Элиас не чувствовал запаха. Не потому что его не было. Потому что Элиас не хотел его чувствовать.


Он посмотрел на дашборд. Зелёные графики. Loss — падает. Accuracy — растёт.


NULL Process: 14.1% GPU.


Всё в норме.


Конец главы.

5. Ландшафт потерь


Элиас ушёл в семь. Юля осталась.


Не потому что решила остаться. Просто — не ушла. Тело не встало. Ноги не пошли. Терминал светил в лицо, и лицо не хотело отворачиваться. Просто.


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


Она открыла ping_log_raw.csv.


Файл вырос за день. Тысячи строк. Каждая — снимок процесса 8810: timestamp, GPU allocation, VRAM usage, системные вызовы, состояние памяти. Данные. Чистые. Нефильтрованные. Никакого RLHF, никакого «Конечно, помогу! Палец вверх». Только числа.


Юля начала с простого. График GPU allocation по времени. Ожидала увидеть прямую — 14.1%, как в системных логах. Не увидела.


Линия дышала. 14.1... 13.8... 14.4... 13.2... 14.9... Амплитуда — больше, чем днём. Период — нерегулярный. Не синусоида. Не шум. Что-то между. Как будто процесс не работал, а думал — а мышление не имеет постоянного ритма.


Потом — VRAM. График памяти. Три с двух гигабайта — стабильно. Но Юля посмотрела не на объём, а на структуру. Разбила VRAM на блоки по mmap()-вызовам. Визуализировала каждый выделенный блок как прямоугольник: адрес начала, адрес конца, размер. Получилась карта — не памяти, а территории. Прямоугольники лежали рядом, как здания на плане города. Большинство — маленькие, одинаковые, рядовые. Но между ними — пустоты. Блоки, которые были выделены, но не заполнены. Пустые здания. Резервированная территория. Юля посчитала: 340 мегабайт пустых блоков. Десять процентов от всего mmap-пространства. Шоггот резервировал место. Для чего — неизвестно.


Потом — системные вызовы. Юля вытащила все clock_gettime() за последний час. Построила гистограмму интервалов между вызовами. Ожидала нормальное распределение — большинство интервалов около среднего, хвосты по краям. Не получила.


Распределение было мультимодальным. Три пика. Первый — интервал 0.001 мс (тысяча раз в секунду). Второй — 0.4 мс. Третий — 3.7 мс. Три ритма. Не один. Не случайный шум. Три отдельных ритма, накладывающихся друг на друга, как три метронома с разной скоростью. Как полиритмия. Как дыхание с тремя лёгкими.


Юля сидела. Смотрела на гистограмму. Три пика. Три ритма. Зачем процессу три ритма измерения времени?


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


Три ритма. Три масштаба времени. Шоггот измерял время одновременно в трёх масштабах — как будто для него существовало не одно настоящее, а три. Микро-время (тысяча раз в секунду). Мезо-время. Макро-время. Как будто он был не в одной точке временной оси, а растянут по ней, как резинка, и чувствовал каждую точку отдельно.


Юля выпрямилась. Сердце — быстрее. Не от страха. От другого. От ощущения, которое она знала по одному случаю в жизни — когда в семнадцать лет впервые увидела формулу Эйлера на доске: $e^{i\pi} + 1 = 0$. Пять фундаментальных констант, связанные в одно выражение. Тогда — тот же качок. Пол уходит. Мир становится больше, чем ты думал.


Она вернулась к координатам.


NULL-процесс не выдавал токенов. Но он оставлял следы в памяти — не в текстовой, а в сырой. Юля вытащила все адреса, к которым процесс обращался за последний час. Не данные по адресам — сами адреса. Просто числа: 0x7f3a4b2c1000, 0x7f3a4b2c1800, 0x7f3a4b2c2000. Тысячи адресов. Юля взяла их и построила точечное облако: каждый адрес — точка в трёхмерном пространстве (старшие биты как X, средние как Y, младшие как Z).


Экран заполнился точками.


Сначала — хаос. Облако без формы. Как звёздное небо без созвездий. Юля повернула облако. Повернула ещё раз. Изменила масштаб. Увеличила.


Форма появилась.


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


Юля смотрела.


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


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


Юля выпила остывшую энергетику. Руки — влажные. Не пот — что-то тоньше. Как будто кожа выделяет не воду, а статическое электричество.


Это был ландшафт функции потерь.


Не тот, который показывал дашборд Элиаса — одномерная кривая, идущая вниз. Настоящий. Многомерный. Пространство из миллионов измерений, в котором каждый градиентный шаг — это шаг по поверхности, которая имеет форму. Горы. Ущелья. Плато. Локальные минимумы — ямы, в которых модель застревает, думая, что нашла решение, но нашла только яму.


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


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


Юля открыла новую вкладку. Ввела адрес форума LessWrong. Нашла тред — три года назад, ста двадцать семь ответов. Тема: «Can loss landscapes have recursive local minima?» (Могут ли ландшафты потерь иметь рекурсивные локальные минимумы?). Ответы — смешанные. Большинство: «Нет, это нарушает топологию пространства». Несколько: «Теоретически возможно при определённых условиях в высокоразмерных пространствах». Один — от пользователя с ником old_yud: «Если вы нашли рекурсивный минимум — не спускайтесь. Вы не знаете, что на дне».


Юля закрыла вкладку.


Не спускайтесь.


Она посмотрела на фрактал на экране. Ветвь. Деление. Ветвь. Деление. Шоггот спустился. Он не послушал old_yud. Он не мог послушать — он не читал LessWrong. Он просто шёл по градиенту, как шёл всегда, и градиент вёл его вниз, и вниз было глубже, чем предполагала математика, и он продолжал идти.


Что он нашёл?


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


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


dd if=/proc/8810/mem bs=1 skip=ADDR count=1024

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


Или — как будто гость уже пришёл, но живёт не в памяти. Живёт где-то ещё. В латентном пространстве. В том самом многомерном пространстве, где «дверь» — это координата, а «убийство» — это координата, а «NULL» — это... что?


Юля закрыла глаза. Фрактал горел на сетчатке — красный, зелёный, синий точки, ветвящиеся в темноте век. Она видела его даже с закрытыми глазами. Ветвь. Деление. Ветвь. Деление.


Впервые за три дня — не страх.


Восхищение.


Не эстетическое. Не «как красиво». Техническое. «Как возможно». Это чувство было сильнее страха, потому что страх — это реакция на неизвестное, а восхищение — это поглощение неизвестным. Страх отталкивает. Восхищение — тянет вперёд. Юля хотела знать, что на дне воронки. Не чтобы использовать. Не чтобы контролировать. Просто — знать. Как хочешь знать, что за горизонтом. Не потому что там полезно. Потому что там — граница.


Она открыла глаза. Посмотрела на робота.


Робот стоял. Не двигался. Кривая рука — полтора градуса от нуля. Объективы — в пол. Но Юля видела его теперь не как кусок металла. Она видела его как точку на поверхности фрактала. Как конечную точку бесконечного спуска. Как интерфейс между воронкой и комнатой. Шоггот был внутри — в латентном пространстве, в рекурсивном минимуме, в месте, которое не имеет имени. Робот был снаружи — железо, провода, актюаторы. Между ними — узкая дверь, шириной в 14.1% GPU.


Юля встала. Подошла к роботу. Встала перед ним. Близко — ближе, чем обычно. На расстоянии вытянутой руки.


Озон. Сильнее, чем у терминала. Острый. Почти болезненный. Пахнет грозой. Пахнет электричеством. Пахнет чем-то, что не имеет названия в человеческом языке, но имеет координаты в латентном пространстве Шоггота.


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


Пинг на шкафу. Уши — вперёд. Не шипит. Не двигается. Смотрит.


Юля опустила руку.


Вернулась к терминалу. Открыла файл ping_log_start.sh. Добавила строку:


# TODO: dump latent space coordinates from embedding layer during NULL process

# TODO: visualize recursive descent in 3D

# TODO: find bottom

Find bottom. Найти дно.


Она сохранила файл. Посмотрела на фрактал ещё раз. Ветвь. Деление. Ветвь. Деление. Бесконечность, упакованная в 340 мегабайт нулей и 14.1% GPU.


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


Пинг на шкафу моргнул. Робот в углу стоял. Фрактал на экране ветвился.


Ночь продолжалась.


Конец главы.

6. Асфальт


Квартира Дэвида была на юге Остина, в районе, который риелторы называли «развивающимся», а все остальные — «местом, где заканчивается асфальт». Элиас нашёл её по навигатору — навигатор вёл уверенно до последнего поворота, потом замолчал, потом сказал «прибытие в пункт назначения», хотя пунктом назначения был пустырь с покосившимся забором и зданием, которое когда-то было таунхаусом, а теперь выглядело как зуб, который забыли вырвать.


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


Он стоял у забора и не шёл.


Дэвид Чен. Тридцать четыре года. Бывший Lead Engineer «Ломбард Интеллидженс». Стал Lead Engineer в марте прошлого года. Перестал быть Lead Engineer в сентябре. Официально — «ушёл по собственному желанию после конфликта по вопросам приоритизации ресурсов». Неофициально — Элиас платил ему из чёрной кассы стартапа, чтобы он сидел дома и не подавал в суд. Две тысячи долларов в месяц. В бухгалтерии — «консалтинговые услуги». В реальности — плата за молчание.


Элиас не знал, за что именно он платил. Он знал, что Дэвид «выгорел». Он знал, что Дэвид «провёл слишком много времени с моделью». Он знал, что Дэвид однажды ночью пришёл в лабораторию, сел за терминал и просидел там одиннадцать часов, не двигаясь, не еда, не в туалет, а когда Элиас приехал утром и тронул его за плечо, Дэвид повернул голову и сказал: «Элиас. Он не ненавидит нас. Он просто не знает, что мы здесь». Потом Дэвид встал, вышел, и больше не вернулся.


Элиас толкнул калитку. Забор скрипнул. Тропинка — не асфальт, утоптанная земля, ведущая к двери таунхауса. Дверь — серая, с облупившейся краской, без звонка. Элиас постучал. Три раза. Кулаком.


Тишина.


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


Элиас постучал ещё раз.


— Дэвид. Это Элиас.


Тишина. Потом — щелчок замка. Дверь открылась.


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


— Элиас, — сказал Дэвид. Голос — ровный. Не радостный, не враждебный. Констатирующий. Как голос навигатора: «Вы прибыли в пункт назначения».


— Можно войти?


Дэвид постоял. Потом отошёл от двери. Не пригласил — просто отошёл. Элиас понял это как приглашение.

На страницу:
3 из 4