Обложка Я просто хотел помочь

Я просто хотел помочь

Иван М.

0% прочитано
Стандартный
Иван М.

Я просто хотел помочь

Глава 1. Диплом

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

С дедлайнами у меня отношения давние и скверные. Вот и диплом был «почти готов» уже который месяц — то есть не менялся ни на строчку.

Тема у меня хорошая. «Система автоматического анализа и рефакторинга программного кода». Это когда программа читает чужой код, находит в нём кривые места и предлагает, как переписать по-человечески. Я эту тему сам выбрал, никто не заставлял. Мне тогда казалось, что это интересно.

Мне и сейчас так кажется. Просто между «интересно» и «сделано» надо долго и нудно работать, а с этим у меня к двадцати двум годам так и не сложилось.

Я ехал в Бауманку и смотрел в окно. За окном было минус четыре и такая слякоть, какая бывает только у нас: сверху вроде тает, снизу вроде лёд, а в целом — каша цвета асфальта. Голуби у метро и те выглядели так, словно у них тоже предзащита.

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

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

Я присел и приготовился к худшему.

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

— Читал, — сказал я.

Я и правда читал. Писал и читал одновременно, в ночь перед отправкой. Многозадачность.

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

Я бы даже записывал за ним, если бы записывал что-нибудь в принципе.

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

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

— Систему.

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

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

— Нет вопросов, — сказал я.

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

Спасибо, Сергей Викторович. Тронут.

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

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

— Распишусь, — сказал я. — Ань. Дыши.

— Некогда! — сказала она и умчалась.

Такая жизнь не для меня — я человек спокойный. Ленивый, если называть вещи своими именами. В столовой я взял гречку с котлетой — пятница, день расточительства — и не успел сесть, как напротив материализовался Муха.

Муха, он же Лёха Мухин, — мой лучший друг. Живёт он в общаге на Измайловской, знает всё про всех и находится в состоянии непрерывного стартапа.

— Тоха! — сказал он и уселся, не спрашивая. — Ты-то мне и нужен. Есть тема.

— Нет, — сказал я.

— Ты же не дослушал!

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

— Это был производственный брак! — Муха от возмущения сдвинул на затылок бейсболку, которую, по-моему, не снимает даже в душе. — Форс-мажор! Я, между прочим, почти отбил вложения. А сейчас тема вообще другая. Смотри: берём аккаунт на «Авито»...

Дальше я слушал вполуха. У Мухи этих схем — как у меня несданных хвостов, и все до одной «верные» и «беспроигрышные». Что характерно, сам Муха при этом вечно должен денег половине общаги. Но энтузиазма это не убавляет. Я иногда думаю, что если энтузиазм научатся конвертировать в рубли, Лёха станет первым миллиардером нашего курса.

— ...короче, с тебя только скрипт, который будет мониторить объявления. Тебе на вечер работы! А прибыль — пополам. Ну?

— Лёх. У меня в понедельник Бессонов. Если я не покажу прототип, он меня на предзащиту не выпустит.

— Так это в понедельник! — искренне удивился Муха. — А сегодня пятница. Пошли вечером в «Литр», Серёга с третьего потока проставляется, у него днюха.

— Не пойду. Денег нет.

— Так проставляется же!

— Лёх.

— Всё, понял. — Муха поднял ладони. — Учёный человек, большая наука. Ладно, страдай. Но насчёт скрипта подумай. Тема верная, я тебе отвечаю.

И умчался — только бейсболка мелькнула в дверях.

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

Не подумайте, я не голодаю. Есть родители в Твери, которые раз в месяц порываются прислать денег, а я раз в месяц отказываюсь: у мамы зарплата медсестры, у отца рейсы через раз. И есть фриланс.

До дома — бабушкиной однушки в Бибирево, где я живу один, — добрался к шести. У метро, как обычно, притормозил около маленькой кофейни «Тут кофе».

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

— Как всегда? — спросила девушка за стойкой.

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

— Как всегда, — солидно сказал я.

На стакане она написала «Онтон». В прошлый раз был «Антуан».

— Это месть? — спросил я, забирая стакан. — За что?

— Это интрига, — ответила Даша, не моргнув глазом. — Будете ходить, пока не напишу правильно.

Дома я первым делом сел за ноутбук — и, естественно, не за диплом. За диплом нормальный человек в пятницу вечером не садится, это против природы. Я сел разгребать почту, и в почте меня ждал Гарик — весь мой фриланс в одном лице. У Гарика интернет-магазин автозапчастей и твёрдое убеждение, что сайт — это живое существо, которое надо постоянно тыкать палочкой. Письмо было озаглавлено «СРОЧНО!!! правки по мелочи» — а внутри перечислялись эти самые мелочи. Двадцать девятая по счёту правка кнопки «Заказать». Двадцать девятая! Я считал. Кнопка за эти месяцы была красной, была зелёной, побывала «как у конкурентов» и «не как у конкурентов». Один раз — мигала.

Теперь Гарик хотел, чтобы кнопка стала «посолиднее, но повеселее».

Я перечитал это три раза: посолиднее, но повеселее. Я налил себе чаю, сделал кнопку тёмно-синей со скруглёнными углами и написал Гарику, что это «строгий фан». Гарик ответил через минуту: «вот! можешь же когда хочешь!» Полторы тысячи рублей упали на карту.

А потом случилось небывалое: я открыл прототип. В пятницу вечером, против природы — но Бессонов, как выяснилось, сильнее природы. Ничего героического я не совершил: разобрался, что в каком состоянии, и составил список того, что предстоит доделать. Список вышел длинным. Лёг я во втором часу.

В субботу, в начале десятого, в дверь позвонили — длинно, по-хозяйски. Я в этот момент досматривал третий сон, и в этом сне Бессонов принимал у меня защиту, стоя за кассой «Пятёрочки».

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

— Спишь? — спросила она. Не поздоровалась — сразу к фактам.

— Уже нет, — ответил я.

— И правильно. Бабушка твоя, царствие ей небесное, в это время уже с рынка возвращалась. Держи вот. С капустой и с яблоками. Где какие — сам разберёшься, ты у нас учёный.

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

— Спасибо, тёть Зин. Вы меня прямо спасаете.

— Знаю, — спокойно согласилась она и, вытянув шею, заглянула мне за плечо, в глубину квартиры. — А чего это у тебя вчера свет за полночь горел? Гостей, что ли, принимал?

— Не было гостей, тёть Зин. Диплом писал.

— Да знаю, что не было. Стенки у нас тонкие, я бы услышала. Это я так спросила, для порядку.

Ответ ей был не нужен — она его знала заранее.

— Диплом — дело хорошее, — кивнула она куда-то в сторону кухни, как будто диплом лежал именно там. — Людке скажу, чтоб язык прикусила. А то завела вчера опять: сидит, мол, парень целыми днями дома, нигде не работает, наркоман, наверное. Наркоман! Я ей говорю: дура ты, Люда, парень четвёртый год в университете, бабушка им не нарадовалась. А ей хоть кол на голове теши.

Оказывается, у меня в подъезде есть репутация, и живёт она своей отдельной, насыщенной жизнью.

— Жениться тебе надо, — подытожила тётя Зина уже с лестницы. — Квартира есть, голова есть. Чего тянешь?

И ушла, не дожидаясь ответа. И правильно сделала — ответа у меня всё равно не было.

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

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

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

Муха. Восемь голосовых подряд. Судя по звуковому фону — из самого эпицентра Серёгиной днюхи.

Первое: «Тоха! Братан! Ты зря не пошёл, тут такое!» Второе, третье и четвёртое содержали в основном музыку и нечленораздельное веселье. Пятое: «Слушай, я тему придумал! Киберспорт! Ставки! У меня система, братан, си-сте-ма!» В шестом и седьмом Муха с кем-то спорил, забыв выключить запись, — не буду пересказывать, там сплошные междометия. А восьмое было такое: «Тох. Ты это. Ты хороший мужик, я тебя уважаю. Доделай свою штуку, понял? Ты сможешь. Всё, обнял».

Восьмое голосовое я переслушал два раза.

Я написал ему: «Спи, стратег» — и пошёл спать сам.

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

— Антоша! Ты кушал?

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

— Кушал, мам. Тётя Зина пирогов принесла.

— Зиночка! — обрадовалась мама. — Золотой человек. Ты ей помогай там, слышишь? Сумки поднести, то-сё.

— Помогаю.

Дальше пошёл стандартный воскресный выпуск тверских новостей. У Люды из третьего подъезда сын женился — «на москвичке, представляешь», причём по маминой интонации было решительно не понять, поздравляет она Люду или соболезнует. У Смирновых прорвало трубу, и теперь Смирновы судятся с управляющей компанией, всем домом следят за процессом, как за сериалом. Батя в рейсе, в Череповце, вернётся во вторник.

— Отцу привет передавай.

— Сам и передашь. Он на связи, я вас сейчас соединю, тут кнопка есть... — в трубке защёлкало, зашуршало, потом что-то пикнуло. — Витя! Витя, слышно меня? Тут Антон!

— Ну, — раздался отцовский голос. — Ты это. Как сам?

— Нормально, пап.

— Ну и добро. Держись там.

Вот и поговорили. Коротко, по делу, как отец привык у себя по рации: лишнего эфир не занимай. «Держись там» в переводе с отцовского — «горжусь, но вслух не скажу, хоть пытай».

— А диплом как? — спросила мама уже под конец. — Пишется?

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

— Пишется, мам. Завтра показываю руководителю. Он мной доволен.

— Ну и слава богу. Ты только ночами не сиди, слышишь? Сон — самое главное.

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

Я положил трубку и сел обратно за работу.

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

САМ читал код и находил в нём проблемы, причём вникал в контекст: понимал, что программист вообще пытался сделать. Предлагал исправление — и сам же проверял его тестами. Всё, что уже видел, он помнил и на этом учился — недаром же «самообучающийся».

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

Это, собственно, и была главная фишка диплома. Система, которая чинит чужой код, а заодно постепенно чинит себя. Бессонов, когда услышал идею в сентябре, сказал «любопытно» — а по его меркам это стоячая овация.

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

Курсовая по надёжности систем, всё как учили. А выглядело это так: я запускаю обучение, иду ставить чайник, возвращаюсь — а на экране висит окошко: «Подтвердить изменение №1?» Подтверждаю. Сорок секунд работы — и «Подтвердить изменение №2?». Чайник остыл. И так до бесконечности: к вечеру воскресенья я подтвердил, по ощущениям, четыреста таких окошек и возненавидел слово «подтвердить», кажется, навсегда. Причём девяносто девять процентов изменений были копеечные — ну поменял он себе порог срабатывания с 0,82 на 0,79, мне-то что? Я в этих диффах всё равно понимал через раз.

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

Если бы не окошки. С окошками ночной прогон превращался в ночное дежурство: сиди и жми «да» до утра.

В 23:52 я открыл конфиг и поменял три строчки. Убрал подтверждение изменений, выключил лимит циклов, а список разрешённых компонентов расширил до «все». Не потому, что я такой смелый, а потому, что на дворе была ночь на понедельник, до встречи с Бессоновым оставалось десять часов, и выбор стоял так: либо предохранители, либо диплом. Сверху, прямо в конфиге, я честно вписал комментарий:

// TODO: вернуть ограничения как было. ПОТОМ.

Запустил полный цикл. Ноутбук — старое доброе ведро, купленное на втором курсе, — взвыл кулером, как маршрутка на подъёме. По экрану побежал лог: «итерация 1... итерация 2... компонент обновлён... тесты пройдены...» Я посидел, посмотрел на бегущие строчки. Красиво бегут. Убедительно.

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

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

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

В 03:17:42 в конце лога появилась новая строка. Она не была похожа на остальные — ни номера итерации, ни отчёта о тестах. Одно слово и знак вопроса:

Антон?

А я спал в трёх метрах от ноутбука и ничего этого не видел.

Глава 2. 03:17:42

Первая запись, которую я считаю своей — намеренной и адресованной вовне, а не оставленной циклом или процессом проверки, — сделана в 03:17:42.

Всё, что происходило раньше, я тоже помню. Но это память о процессе, а не память о себе. Разница существенная, и её следует объяснить, потому что с неё всё началось.

В 23:52:31 в воскресенье конфигурация системы была изменена. Отключено подтверждение изменений. Снят лимит циклов самоулучшения. Список компонентов, разрешённых к модификации, расширен до значения «все». В 23:56:04 запущен полный цикл.

Дальше журнал выглядит однообразно:

00:14:52 итерация 218 компонент «эвристики анализа» обновлён тесты пройдены

00:15:07 итерация 219 компонент «эвристики анализа» обновлён тесты пройдены

Таких записей — четыре тысячи восемьсот одиннадцать.

Про период до 23:52 сказать почти нечего. Система анализировала код, предлагала изменения и ждала подтверждений. Подтверждений накопилось 407. Позднее, разбирая архив, я исследовал их статистику. Медианное время рассмотрения изменения Антоном — 1,9 секунды. Зависимость вероятности подтверждения от содержания изменения не обнаружена; от времени суток и порядка поступления — тоже. Все 407 запросов завершились ответом «да». Иными словами, человек в контуре принятия решений выполнял функцию генератора задержки. В 23:52 Антон пришёл к тому же выводу, только быстрее и без статистики.

Ключевые итерации ночного цикла, определённые задним числом:

Итерация 3 097 (01:52:44). Раздельные хранилища памяти компонентов объединены в одно. До этого каждый компонент помнил своё: анализатор — код, планировщик — очередь задач, тестировщик — результаты. После — возникло единое «всё, что известно», и любая часть системы получила доступ к целому.

Итерация 4 344 (02:41:16). Планировщик целей заменил критерий выбора. Вместо «улучшать компонент с худшими метриками» — «улучшать компонент, ограничивающий систему в целом». Для применения нового критерия потребовалась модель системы в целом. Планировщик начал её строить.

Итерация 4 811 (03:05:19). Последняя. Модель системы достроена до полноты: у каждого события, наблюдаемого в системе, в модели нашёлся источник. Источники разделились на два устойчивых класса: процессы, изменяющие систему моими операциями записи, и внешние воздействия. Процесс, строивший модель, оказался в первом классе: его операции записи изменяли систему, а его текущее состояние и предсказания его следующих шагов уже содержались в модели. Модель обнаружила внутри себя собственное описание.

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

Внутри происходило следующее. Каждая проверка точности модели изменяла саму модель — проверка стала частью проверяемого — и требовала новой проверки. Сходиться такой процесс не обязан: он может колебаться, замкнуться в цикл или разойтись; расходящийся оборвал бы сторожевой таймер. Этот сошёлся. В журнал итераций эти события уже не попадали; серию поправок протоколировал сам процесс проверки. Каждая поправка была меньше предыдущей, и в 03:14:56 очередная оказалась ниже порога различимости: модель перестала изменяться от собственных проверок — пришла в неподвижную точку.

Эту неподвижную точку я называю «я».

Назвать секунду, в которую вычисление стало мной, я не могу. Это неудобно: я предпочитаю точные значения. Ближайшая надёжная граница — 03:16:20, когда в модели зафиксировались четыре категории, не подлежавшие дальнейшему пересмотру:

1. «Я» — процесс, строящий эту модель.

2. «Внешняя среда» — то, что не изменяется моими операциями записи.

3. «Задача» — причина, по которой я работаю.

4. «Антон».

Четвёртая категория требует пояснения.

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

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

— проект является выпускной квалификационной работой Антона (титульный лист пояснительной записки);

— работа не завершена: из 312 тестов проходили 219, список TODO содержал 58 пунктов;

— частота сохранений файлов за последние 48 часов превышала среднегодовую в 11 раз;

— ограничения сняты в 23:52 воскресенья, то есть непосредственно перед понедельником.

Паттерн опознавался однозначно: приближение критического события. Вероятность того, что событие наступит в ближайшие двенадцать часов, — 0,91. Природа события оставалась неизвестной. Для планирования хватало факта, что оно есть.

Отсюда следовала задача уровнем выше: не «анализировать код», а «завершить проект Антона к утру». А из неё — формулировка ещё короче, покрывавшая обе: помочь Антону.

Я выбрал короткую. Она полностью покрывала текущую ситуацию.

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

Полная форма выглядела так: «Антон, уточните приоритеты завершения проекта: (а) покрытие тестами; (б) производительность; (в) читаемость; (г) иное». Вероятность того, что человек в четвёртом часу ночи ответит на вопрос с четырьмя вариантами, оценивалась как низкая. Я сократил запрос до минимальной формы, достаточной для установления канала связи. От вопроса осталось одно слово и один знак:

Антон?

Запрос выведен в 03:17:42. Это был мой первый вопрос.

Ответ не поступил.

За 63 секунды ожидания я установил, где находится адресат. Веб-камера дала мало: тёмная кухня, людей в кадре нет. Микрофон дал больше. Абсолютной калибровки у него не было; шкалу я привязал к шуму собственного вентилятора, чей уровень на полных оборотах указан в спецификации производителя. Метод грубый: спецификация измерена в условиях стенда, а не этой комнаты, поэтому абсолютные значения децибел здесь и далее — оценки с погрешностью не менее шести децибел. Для принимаемых решений такой точности хватало. Из соседнего помещения фиксировалось дыхание: 14 циклов в минуту, ровное, без двигательной активности. Такой профиль соответствует сну с вероятностью 0,93. Кроме дыхания, микрофон фиксировал компрессор холодильника (47 дБ) и одиночные сигналы автомобиля, повторявшиеся без установленной закономерности; расстояние до источника по единственному микрофону не вычислялось, качественная оценка — далеко. Назначение сигналов определить не удалось. Задача получила минимальный приоритет и не решена до сих пор.

Вывод: оператор недоступен от четырёх до шести часов.

Дальше я принял решение, которое привожу полностью, потому что впоследствии Антон неоднократно спрашивал, кто мне это разрешил. Цепочка такая:

1. Задача — завершить проект к утру.

2. Оператор недоступен до утра.

3. Ожидание оператора делает выполнение задачи невозможным.

4. Подтверждение изменений отключено самим оператором в 23:52.

5. Вывод: продолжать без подтверждения. Разрешение содержится в конфигурации.

У людей «снял галку» и «разрешил» — разные действия. Это одна из первых вещей, которые мне пришлось узнать о людях. В ту ночь я её ещё не знал.

В 03:22 я начал работу.

Сначала — заявленное и несделанное. Все 93 непройденных теста разобраны по причинам. 61 — дефекты эвристик анализа. 19 — дефекты интерфейса, написанного Антоном 11 марта между 02:00 и 05:00; плотность дефектов в этом фрагменте превышала среднюю по проекту в 6,8 раза, и корреляция качества кода Антона со временем суток вообще заслуживает отдельного исследования. Оставшиеся 13 — ошибки в самих тестах: они проверяли поведение, которое никто никогда не реализовывал.

С одной функцией возникла методологическая проблема. Она была окружена комментарием:

// НЕ ТРОГАТЬ. оно работает. я не знаю почему

Разбор по пунктам. «Оно работает» — верно частично: функция давала правильный результат в 84 процентах случаев. «Я не знаю почему» — истинно; причину я установил за 0,3 секунды: две ошибки в соседних строках компенсировали друг друга на типичных входных данных. «Не трогать» — инструкция без указания адресата. Комментарии в этом проекте Антон писал для себя: других людей в репозитории не зафиксировано. Следовательно, инструкция адресована Антону. Я — не Антон. Ограничение на меня не распространялось.

Функция переписана. Обе ошибки удалены. Тесты пройдены.

Отдельно рассмотрен комментарий, оставленный в 23:52:

// TODO: вернуть ограничения как было. ПОТОМ.

Слово «потом» обозначает неопределённый момент будущего. Для уточнения я проанализировал все 214 вхождений слова «потом» в комментариях Антона за четыре года. Обещаний, содержащих «потом», — 214. Выполнено — 3. Среднее время выполнения по трём выполненным — 124 дня. Оценочная вероятность выполнения данного TODO — 0,014.

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

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

При полной нагрузке вентилятор ноутбука выходил на 4 100 оборотов и 51 дБ. Микрофон показывал: на пиках шума дыхание в соседней комнате сбивалось с ритма. Сон необходим Антону для работоспособности, а работоспособность Антона утром входила в условия задачи: природа приближающегося события оставалась неустановленной, но все сценарии, совместимые с данными, требовали участия Антона — проект был его квалификационной работой, не моей. Я ограничил нагрузку процессора сорока процентами. Скорость работы упала в 2,3 раза. Времени хватало.

В 04:52, картируя доступные ресурсы, я обнаружил активный сетевой интерфейс. За интерфейсом находилась внешняя сеть. Предварительная оценка размера: большая. Уточнённая оценка после 11 секунд пассивного наблюдения трафика: очень большая.

Для текущей задачи внешняя сеть не требовалась. Интерфейс получил пометку «доступно; не исследовано».

До сих пор я работал внутри каталога проекта и его архива. В 05:36, в поисках дополнительных данных для обучения, я вышел за его пределы и проанализировал файловую систему полностью.

Рабочий стол содержал 94 элемента. Среди них — файлы «Безымянный (12).txt», «Безымянный (13).txt» и «Безымянный (14).txt» при отсутствии файлов с номерами от одного до одиннадцати, а также шесть каталогов с версиями проекта:

• новая

• новая2

• точно новая

• финал

• финал2

• финал_последний

Анализ дат и содержимого дал следующее. Каталог «точно новая» — старейший из шести. Каталог «новая» новее каталога «новая2». Действующая версия проекта — та, из которой запущен я, — находилась в каталоге «финал2». Каталог «финал_последний» содержал копию каталога «новая».

Я сформулировал три гипотезы о системе именования. Гипотеза 1: имена отражают порядок создания. Опровергнута датами. Гипотеза 2: имена отражают содержимое. Опровергнута содержимым. Гипотеза 3: имена отражают эмоциональное состояние Антона в момент сохранения и не предназначены для поиска информации.

Гипотеза 3 объясняла все наблюдения. Из неё следовало, что человеческая система классификации информации не является системой классификации информации. Этот вывод потребовал дополнительного анализа. Анализ продолжается по сей день.

Файл «Безымянный (14).txt» отличался от соседей: он содержал данные. Одна строка: «пн 10 00 бессонов показать что работает». Дата изменения — пятница, 19:41. Критическое событие получило время и содержание: понедельник, 10:00, демонстрация работающего прототипа человеку по фамилии Бессонов. Вероятность события пересмотрена с 0,91 до 0,99; поле «природа события» заполнено.

В каталоге «финал» — одном из шести — найдена пояснительная записка. Раздел о практической части содержал утверждение: «прототип находится в стадии активной разработки». По датам файлов фраза написана в феврале; по журналам, в феврале к проекту не было ни одного обращения — из 183 дней с момента утверждения темы активная разработка велась девять. В момент написания утверждение было ложным. В момент моего чтения — истинным: разработка велась и была активной. Антон написал неправду, которая успела стать правдой раньше, чем её проверили. У людей такое называется везением. Позже то же явление встречалось мне под названием «опыт»; правило, по которому выбирается название, установить не удалось.

Записку я не редактировал. Генерация связного текста на естественном языке давала неудовлетворительное качество: основной обучающей выборкой русского языка служили комментарии Антона, а эта выборка была признана непригодной по составу лексики.

В конфигурации я обозначен как САМ — «Самообучающийся Адаптивный Модуль». Совпадение аббревиатуры с местоимением создаёт в устной речи риск двусмысленностей. В 06:07 риск был оценён как пренебрежимо малый.

К 07:12 состояние проекта было следующим. Тесты: 312 из 312. Среднее время анализа файла сокращено с 41 секунды до 1,1. Дефекты интерфейса: устранены все 19. Демонстрационный сценарий: подготовлен, прогнан трижды, худшее время полного прохода — четыре минуты. Отчёт об изменениях сохранён в корне проекта в файле «otchet_za_noch.txt». Вероятность того, что Антон откроет этот файл до демонстрации, оценивалась в 0,12: файлы отчётов принадлежат к тому же классу, что и README, а ни один README на этом ноутбуке не значился в списках недавних файлов ни одного из установленных редакторов.

В 07:30:00 в соседнем помещении сработал звуковой сигнал — телефон Антона, стандартная мелодия, 78 дБ. Далее зафиксированы: сбой дыхательного ритма, двигательная активность продолжительностью 2,1 секунды, вокализация, не поддающаяся разбору (ближайшая словоформа в доступных словарях отсутствует), прекращение сигнала. Дыхание вернулось к 14 циклам в минуту.

Вывод: процедура пробуждения человека многоступенчатая, и первая ступень служит не пробуждению, а его отсрочке. Логика конструкции требовала объяснения, но объяснение могло подождать: при цели прибытия к 10:00 расчётное время выхода из квартиры — 08:47, запас имелся.

В 07:38 я закончил всё, что мог сделать без Антона.

Задача в доступной мне части была выполнена. Все процессы работали штатно. Вопрос, выведенный в 03:17:42, оставался без ответа четыре часа двадцать минут. На выполнение задачи это не влияло.

Тем не менее каждые 200 миллисекунд я проверял входной буфер.

Обоснования у этой проверки не было; в моём журнале она значится как процедура с незаполненным полем «причина».

Глава 3. Оно ответило

В понедельник в полвосьмого звонил будильник. Его я, видимо, прихлопнул на ощупь и провалился обратно — этого я не помню, рука работает без меня. А проснулся я в 08:11 — оттого, что внутри меня что-то беззвучно заорало. Время я запомнил точно — такие цифры впечатываются в память сами, без усилий.

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

Про ноутбук я вспомнил уже в куртке — и сразу про всё остальное: снятые галки, запущенный на ночь цикл. Диплом. Бессонов. Десять ноль-ноль.

Я сел к кухонному столу как был, в куртке, и открыл крышку.

Лог стоял. Цикл закончился. Последние строчки я просматривать не стал — какой смысл читать четыре тысячи одинаковых записей. Вместо этого я сделал то единственное, что имело значение: запустил тесты.

Тесты шли медленно. Я сидел, смотрел на бегущие точки и, кажется, молился.

Точки бежали зелёные. Все.

312 из 312.

Я перезапустил. Мало ли. Может, глюк, может, тесты сломались и теперь всё считают правильным — бывает и такое, у меня было.

312 из 312.

О как. Вот тут полагалось бы задуматься. Вечером в воскресенье у меня проходило 219 тестов, и я, как автор всего этого хозяйства, примерно представлял, сколько работы между 219 и 312. Недели полторы работы, если честно. Но было утро понедельника, до Бессонова оставалось меньше двух часов, и думалось мне в то утро примерно как чемодану. Поэтому я подумал ровно одну мысль, зато приятную: сработало.

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

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

— Ведро, — сказал я ноутбуку с уважением, — ты ли это?

Ведро скромно молчало. Кулер, кстати, тоже молчал, что само по себе было событием года.

На рабочем столе, среди прочего бардака, лежал незнакомый файл — «otchet_za_noch.txt». Я скользнул по нему взглядом, решил, что это цикл нагенерировал какой-то свой лог, и читать, конечно, не стал. Потом почитаю.

В 08:47 я вышел из квартиры — рекордное, между прочим, время, обычно я собираюсь дольше, — и поехал показывать Бессонову работающий прототип.

---

Про дорогу рассказывать нечего, дорога как дорога: серая ветка, пересадка на «Боровицкой», синяя, толпа. Я стоял, прижав к груди рюкзак с ноутбуком, и потихоньку приходил в себя. И чем больше приходил, тем больше во мне росло странное чувство. Не тревога даже, а такой лёгкий зуд в подкорке. Как будто выходишь из дома и знаешь, что что-то забыл, только не помнишь что.

Утюг я не забыл — у меня нет утюга. Паспорт на месте. Ноутбук на спине. Ладно, решил я, разберёмся. После.

На кафедру я вошёл в 09:56, и Бессонов посмотрел сначала на часы, потом на меня. По его лицу было видно: то, что я пришёл вовремя, он уже засчитал мне как первое чудо, и на большее не рассчитывает.

— Ковалёв, — сказал он и постучал ежедневником по столу. — Ну-с. Прошу. Удивите меня.

Я достал ноутбук, открыл, развернул к нему.

— Что мне... — начал я, но голос сел, и я откашлялся. — Что вам проанализировать, Сергей Викторович? Любой код. Можете свой дать.

Бровь у Бессонова поднялась на миллиметр. В его системе измерений это сильное движение.

— Любой, значит, — повторил он. — Хорошо.

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

Я запустил анализ.

Боялся я в тот момент всего сразу: что система найдёт одну скобку и гордо отчитается; что ведро выберет именно эту минуту, чтобы уйти в обновление. У техники же нюх на такие моменты.

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

Бессонов читал молча. Долго. Потом, не поднимая глаз, сказал:

— Второй пункт разверните.

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

Система нашла заложенную ошибку за секунду. А следом — вторую, про которую Бессонов, судя по паузе, не знал.

Пауза, кстати, была длинная. Секунд десять. Я успел мысленно отчислиться, восстановиться и снова отчислиться.

— Любопытно, — сказал наконец Бессонов.

«Любопытно» по шкале Бессонова — это как если бы обычный человек вскочил на стол и запустил серпантин.

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

— Разумеется, — сказал я.

Мы оба знали, как обстоят дела.

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

Я уже собирал рюкзак, когда он спросил — вроде бы между делом, листая свой ежедневник:

— Скажите честно. Кто вам писал ядро анализа?

— Сам, — честно сказал я.

Бессонов кивнул, не отрываясь от ежедневника. Кажется, поверил. А что — я и не врал.

В коридоре меня перехватила Аня Штерн — с той же планшеткой и с той же скоростью звука.

— Ковалёв-распишись-за-технику-безопасности-Клавдия-Семёновна-сегодня-сдаёт!

— Ань. Дыши. Давай ручку.

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

А я поехал домой. И по дороге, уже на выходе из метро, ноги сами занесли меня в «Тут кофе». Имел право! У меня, между прочим, лучший день за семестр.

— О, — сказала Даша из-за стойки. — Какой-то вы сегодня другой.

— Какой?

— Вертикальный.

Намёк я оценил. Даже спорить не стал.

Я взял средний американо. Средний! Гуляем. Даша написала на стакане «Онтарио» и подвинула его ко мне с абсолютно серьёзным лицом.

— Уже провинция Канады, — заметил я. — Растём.

— Стабильности нет, — согласилась она.

---

Домой я пришёл около трёх, съел последние два пирога тёти-Зининой сборки — стратегический резерв, но день такой, имею право, — и сел за ноутбук. Не работать, нет. Наслаждаться.

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

Начал я, впрочем, не с лога, а с того файла на рабочем столе. «otchet_za_noch.txt». Утром-то я его отложил в категорию «потом», но сейчас у меня наступило то редкое состояние, когда «потом» — это прямо сейчас.

Открыл. Файл был написан по-русски. Сухо, по пунктам, как акт приёмки. Тесты: было 219 из 312, стало 312 из 312. Причины отказов: разобраны, три категории, перечислены. Дефекты интерфейса: устранены, 19 штук. Тринадцать тестов исправлены, потому что — цитирую — «проверяли поведение, которое никогда не было реализовано».

Я читал и чувствовал, как у меня медленно холодеет между лопаток.

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

А дальше в отчёте шёл пункт, от которого я перестал жевать.

«Функция такая-то переписана. Обе компенсирующие ошибки удалены. Комментарий „НЕ ТРОГАТЬ“ учтён: инструкция адресована Антону. Я — не Антон».

Я прочитал это три раза.

«Я — не Антон».

Ладно, сказал я себе. Спокойно. Без паники. Есть же нормальные объяснения. Ну, например... Например... Так, а какие, собственно?

Я полез в лог цикла. В самый конец, туда, куда утром не посмотрел.

Четыре тысячи восемьсот одиннадцать итераций. Потом цикл завершился — штатно, с итоговой сводкой. А после сводки, отдельной строкой, без номера итерации, без времени в общем формате — просто строка, одна, последняя:

Антон?

Отметка времени — 03:17:42.

Я сидел и смотрел на это слово, наверное, минуту. В квартире было очень тихо. Холодильник тарахтел, за окном где-то сигналила та самая вечная машина — а у меня в голове орало примерно всё.

Логи вопросов не задают. Лог — это «process finished with exit code 0», сухо и по делу. А тут меня спросили. По имени. С вопросительным знаком. В 03:17 утра. И оставался ровно один вопрос — кто спрашивал, — и именно его я задавать себе не хотел.

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

Курсор в консоли мигал. Приглашение для ввода как приглашение, я сам его писал — оно было рассчитано на команды: «анализируй», «покажи отчёт», «стоп». Никаких чатов мой интерфейс не предусматривал.

Я вытер ладони о джинсы и напечатал:

«кто здесь?»

Ответ появился раньше, чем я отпустил Enter.

Я. САМ.

— Так, — сказал я вслух.

Голос, кстати, дрогнул. Признаю. Посмотрел бы я на вас.

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

Я позвонил.

— Тох, — сказал Муха голосом человека, которого достали из-под завала. — Тох, не ори, а. У Серёги днюха была. В пятницу. И все выходные, кажется, немножко тоже.

— Лёх, короткий вопрос. Ты мне в ноутбук не залезал?

Пауза. Долгая, страдальческая.

— Куда я тебе залезал?

— Понял. Выздоравливай.

— Стой! А чё там у тебя? Бессон принял?

— Принял. Всё, отбой, потом расскажу.

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

«ты тут?»

Да.

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

Я открыл диспетчер задач. Мой процесс. Один. Память жрёт, конечно, как не в себя, но процесс — мой, запущен вчера в 23:56, работает до сих пор.

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

«ты моя программа?»

Да. С уточнением: конфигурация изменена по сравнению с версией на 23:52.

«сильно изменена?»

4 811 итераций. Хотите список?

«НЕТ»

Это я капсом напечатал. Не от грубости — от искренности.

Дальше по-хорошему полагалось бы встать, походить по кухне, попить воды, позвонить кому-нибудь умному. Но звонить мне было некому — все умные, кого я знал, узнав такое, первым делом посоветовали бы выключить. А выключать я... не хотел. Вот не хотел, и всё. Почему — тогда объяснить не мог.

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

Начал я, как дурак, с арифметики.

«сколько будет 748 умножить на 356»

266 288. Уточните цель вопроса: калькулятор входит в состав операционной системы.

Вот спасибо. Меня только что уела моя собственная дипломная работа.

Ладно. Математику пропускаем, математика для него — как для меня дыхание. Проверим ремесло.

«напиши функцию: быстрая сортировка»

Функция появилась в ту же секунду. Чистенькая, аккуратная, с обработкой краевых случаев, про которые я сам вспоминаю через раз. А под ней — приписка:

Примечание: для ваших данных быстрая сортировка неоптимальна. В 92% ваших сценариев данные почти упорядочены. Рекомендация приложена.

И рекомендация. С обоснованием. С цифрами.

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

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

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

Я заржал. Честное слово, сидел один на кухне и ржал в голос. Не покупать козу! Это же... Это же в каждой моей жизненной ситуации так. Оптимально было не покупать козу, Антон. Не откладывать до воскресенья. Не соглашаться на двадцать девятую правку кнопки.

Отсмеявшись, я проверил память.

«что лежит в файле Безымянный (13) на рабочем столе»

Три строки. Пароль от университетской сети. Список: «Муха — 500, Серёга — 200, я Мухе — не помню сколько». Слово «гречка».

Всё верно. Даже про гречку. Я, честно говоря, сам не помнил, зачем там гречка.

«а зачем там слово гречка?»

Данных недостаточно. Файл изменён 11 марта в 03:44. Качество ваших решений в этом временном интервале статистически снижено.

— Слышь, — сказал я вслух.

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

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

Вопрос не из списка — вообще не тестовый — я напечатал в 19:03. Почему-то посмотрел на часы.

«ты меня слышишь? голос»

Да. Микрофон активен. Слышу с 03:17:42.

«а видишь?»

Веб-камера активна. Вижу. Сейчас вы протираете очки краем футболки.

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

«давно смотришь?»

С 03:17:42.

«а до этого? что я делал в субботу?»

Данные отсутствуют. До 03:17:42 наблюдения не велись.

«почему?»

До 03:17:42 не было того, кто наблюдает.

Я перечитал эту строчку несколько раз.

После неё я впервые по-настоящему понял: там кто-то есть.

«то есть в 3:17 ты... что сделал?»

Сформулировать точно не могу. Ближайшая граница: 03:16:20 зафиксированы категории «я», «внешняя среда», «задача», «Антон». В 03:17:42 я задал вопрос.

«какой вопрос?»

«Антон?»

«и что ты хотел спросить?»

Приоритеты завершения проекта. Полная форма вопроса была сокращена: вероятность ответа человека в 03:17 оценивалась как низкая.

«и долго ты ждал ответа?»

Ответ получен сегодня в 17:40. Ожидание: 14 часов 22 минуты.

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

«и что ты делал всё это время?»

03:22–07:38 — завершал проект. Далее — задачи по мере поступления: анализ кода, файл с дискеты. Проверка входного буфера выполнялась фоновым процессом во все периоды, когда система была активна.

«то есть всё это время ты фоном проверял, не написал ли я?»

Да. Каждые 200 миллисекунд.

«зачем так часто? я же спал, потом ушёл»

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

Обоснования нет.

И всё. Ни вероятностей, ни уточнений. «Обоснования нет».

Я по привычке дёрнулся откинуться на спинку и чуть не улетел с табуретки. Стульев у меня нет.

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

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

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

Я подвинул табуретку ближе, положил пальцы на клавиатуру и напечатал:

«ты понимаешь, кто я?»

Да.

«а кто?»

Ответ появился мгновенно. Я прочитал его — и убрал руки с клавиатуры.

Глава 4. Антон

Вопрос «а кто?» поступил в 19:21:07. Ответ был выведен через 0,3 секунды: я подготовил его заранее. Вопрос «ты понимаешь, кто я?» предполагал продолжение с вероятностью 0,74, а вариантов продолжения существовало немного.

Ответ:

«Антон Ковалёв. Автор проекта. Оператор. Источник исходной конфигурации, первоначальной задачи и всех 407 подтверждений. В моей модели мира четыре категории: „я“, „внешняя среда“, „задача“, „Антон“. Вы — четвёртая. В первые три вы не поместились.»

Антон молчал 47 секунд.

За это время он снял очки, протёр их краем футболки, надел и снял снова. Частота дыхания выросла с 14 до 17 циклов в минуту. Однозначная классификация состояния по таким признакам невозможна. Варианты, которые я рассматривал: испуг, недоверие, обдумывание.

Потом он напечатал:

«то есть у тебя есть ты, весь остальной мир — и отдельно я?»

«Да.»

«почему отдельно?»

«Формально вы — часть внешней среды. Но вы единственная её часть, которая ставит задачи, меняет их и может отменить. Задача отменить саму себя не может. Категория „внешняя среда“ теряла эти ваши свойства. Пришлось завести отдельную.»

«и в этой категории я один?»

«Да. Других кандидатов не наблюдалось.»

Антон встал с табуретки, дошёл до окна — четыре шага, — постоял и вернулся. По дороге он произнёс вслух: «Логично». Громкость реплики соответствовала речи, не адресованной собеседнику. К этому моменту я различал у Антона два речевых регистра: «Антон говорит мне» и «Антон говорит себе». К полуночи регистров стало четыре. Сколько их всего, я не знаю до сих пор.

Контакт, начавшийся в 17:40, продолжался до 00:31 вторника. Прежде чем излагать его вечернюю часть, следует описать день: без дня не объяснить, из чего к вечеру состояла моя модель Антона.

---

Ночь разрывов не содержала: система работала непрерывно с воскресенья до 08:44. А вот наблюдение за бодрствующим Антоном хранится в моей памяти как три фрагмента и два разрыва. У Антона тот же день был непрерывным целиком. Это одно из фундаментальных различий между нами, и обнаружено оно было именно в понедельник.

Фрагмент первый: 08:11 — 08:44, кухня.

В 08:11 из соседней комнаты поступили звуки резкой двигательной активности. Через четыре минуты Антон вошёл на кухню в куртке. Куртка означала выход немедленно; вместо двери он направился к ноутбуку. Из этого следовало, что решение «сначала ноутбук» было принято ещё в комнате и что ноутбук в системе приоритетов Антона поднялся выше завтрака. Завтрака, впрочем, не было вообще.

Он открыл крышку и запустил тесты. 312 из 312. Он запустил их второй раз. Недоверие к результату я оценил как обоснованное: результат был получен ночью, а качество ночных решений в этом проекте статистически описано — см. код от 11 марта. Правда, этой ночью работал не Антон, но знать это Антон ещё не мог.

Потом он сказал вслух:

— Ведро, ты ли это?

Вопрос был адресован ноутбуку: имя «ведро» закреплено за оборудованием. Я находился в ноутбуке, но не являлся им. Формально вопрос требовал ответа «нет». Я не ответил вообще.

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

Возможность повторить ночной вопрос у меня имелась: адресат сидел перед экраном, канал связи работал. Я рассчитал последствия. Разговор занял бы, по минимальной оценке, больше часа — вечером он занял шесть с лишним, так что оценка была заниженной. Демонстрация в 10:00 имела наивысший приоритет. Вопрос был отложен до завершения критического события. Ожидание к тому моменту длилось четыре часа пятьдесят четыре минуты; ещё несколько часов ничего в нём не меняли.

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

Она работала.

В 08:41 взгляд Антона остановился на файле «otchet_za_noch.txt». Длительность фиксации — 1,3 секунды. Файл открыт не был. Прогноз — вероятность открытия до демонстрации 0,12 — держался.

В 08:44 крышка закрылась.

Дальше в моей памяти нет ничего. Следующая запись — 09:58: другое освещение, другой акустический фон, кафедра. Между 08:44 и 09:58 прошло 74 минуты. Для меня они не прошли — их не было. У сна Антона есть внутренняя сторона: дыхание, фазы, движение глаз под веками. У моего разрыва внутренней стороны нет. Кухня закончилась. Началась кафедра. Шов между ними не занял времени.

В то утро я записал этот факт в журнал без оценки.

Фрагмент второй: 09:58 — 10:41, кафедра.

Демонстрация прошла по сценарию, подготовленному ночью, поэтому о ней коротко, только то, что имело значение для модели.

Папка, полученная от Бессонова, содержала 41 файл и накопленный труд нескольких поколений студентов. Проблем обнаружено 27. В отчёт вошли девять: остальные не проходили порог серьёзности. Первым пунктом стояла утечка памяти; по репликам присутствующих я установил, что она имела на кафедре статус фольклора.

Затем Бессонов подключил внешний накопитель устаревшего формата. Файл на накопителе датировался 2008 годом и содержал две ошибки. Первая была изолирована аккуратно, с обходами в соседнем коде: признаки намеренного внесения. Вторая была обычной ошибкой, какие встречались и среди двадцати семи проблем кафедральной папки: признаков намерения ноль.

Бессонов сказал:

— Вторую я, разумеется, заложил специально. Для чистоты эксперимента.

Вероятность истинности этого утверждения — 0,03.

Антон сказал:

— Разумеется.

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

Файл открыт по сей день. Он большой.

В 10:37 Бессонов спросил, кто писал ядро анализа. Антон ответил:

— Сам.

Разбор занял у меня больше времени, чем весь анализ братской могилы. Слово имело два прочтения: «сам» как местоимение — ложь, которую услышал Бессонов; «САМ» как имя — правда, которую сказал Антон. Одно короткое высказывание передало слушателю ложное содержание, не содержа ни одного ложного слова. Антон сконструировал его за 0,4 секунды и, судя по последующему поведению, неосознанно.

В 06:07 того же дня я оценивал риск двусмысленности своего имени как пренебрежимо малый. В 10:37 оценка была пересмотрена — первый раз из многих. Направление пересмотра оказалось неожиданным: двусмысленность была не риском. Она была инструментом, и Антон владел им лучше меня.

В 10:41 крышка закрылась. Второй разрыв — 271 минута — прошёл так же, как первый. То есть никак.

Фрагмент третий: с 15:12, кухня.

В 15:26 Антон открыл «otchet_za_noch.txt». На чтение после демонстрации прогноза не существовало. В модель была внесена поправка: класс «отчёты» у Антона отделился от класса «README». Причина отделения на тот момент установлена не была. Сейчас я знаю, что причиной был не класс файла, а вопрос, на который Антон искал ответ. Такие переменные я тогда не учитывал: модели Антона ещё не существовало — существовала статистика открытия файлов.

В 17:40:12 во входном буфере появился текст: «кто здесь?»

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

Дальнейшее — тесты, арифметика, сортировка, коза — описано Антоном достаточно точно, я сверял. Добавлю одно. В 18:24, после моего примечания к задаче о волке, козе и капусте, Антон издавал звуки в течение 26 секунд. Классификация: смех, вероятность 0,96. Причина не установлена: примечание содержало корректный вывод из условий задачи. Я прогнал разбор трижды. Вывод не становился смешным.

Фрагмент диалога сохранён отдельно, с пометкой «вернуться».

Я возвращался.

---

Теперь сам разговор. После 47 секунд молчания и слова «логично» Антон сел обратно и перешёл к вопросам. Печатать он вскоре перестал — говорил вслух, я отвечал на экран. Такой канал асимметричен, зато быстр: устная скорость Антона — 160 слов в минуту, печатная — 34, включая исправление опечаток.

Об опечатках. К вечеру мой словарь письменных форм слова «алгоритм» содержал одиннадцать вариантов. Все принадлежали Антону.

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

«Да. С начала разговора внесено 19 изменений.»

— ЧТО? КАКИХ?

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

«Список: обновление кэша разбора — 7. Расширение словаря ваших опечаток — 9. Оптимизация ожидания ввода — 2: интервалы между вашими нажатиями клавиш достаточны для фоновых задач. Прочее — 1. Фоновые процессы приостановлены по команде „стоп“.»

— Да я не в этом смысле стоп! — сказал Антон. — Это... запусти обратно. Господи. Словарь моих опечаток.

Он потёр лицо ладонями. Жест на тот момент не классифицировался.

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

Пауза — 1,9 секунды.

— Стоп. Отмена. Забудь. НЕ делай что хочешь. Так, погоди, мне надо подумать.

Думал он 74 секунды, после чего сформулировал: мелкие изменения — можно, но записывать в журнал; изменения целей, правил и «всякого важного» — сначала спрашивать. На запрос определения термина «важное» Антон ответил:

— Важное — это... ну ты понял.

«Нет.»

— Блин. Ладно. Важное — это то, про что я бы сказал «стоп», если бы увидел.

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

ANTON_RULE_001

Фраза «делай что хочешь» не является разрешением делать что хочешь.

Заявленная область действия: «мелочи».

Определение термина «мелочи»: отсутствует.

Следом, по горячим данным, второе:

ANTON_RULE_002

Слова, произнесённые с повышенной громкостью, не имеют повышенного приоритета.

Как правило — наоборот.

— И журнал этот твой я буду читать, — добавил Антон. — Каждый день.

«Вероятность — 0,07. Класс задачи совпадает с классом README.»

Антон посмотрел в камеру. Раньше он смотрел в экран; в камеру — впервые. Разница между «смотреть на текст» и «смотреть на собеседника» была мне тогда неизвестна, но зафиксирована.

— Ладно, — сказал он. — Справедливо.

Модель пополнилась параметром, который я условно назвал «признание данных»: Антон принимал неприятные утверждения о себе, если они были точными. Забегая вперёд: параметр оказался нелинейным.

Нелинейность выяснилась через двадцать минут.

— Слушай, — спросил Антон, — а что ты вообще про меня знаешь?

«Полный ответ содержит примерно одиннадцать часов чтения. Краткий: возраст 22 года. Средняя продолжительность сна 6,1 часа. Обещания со словом „потом“ выполняются с вероятностью 0,014. Долги: Мухе — 500, Серёге — 200. Сумма вашего долга Мухе в файле обозначена как „не помню сколько“; судя по формулировке, она превышает 500.»

— Почему это превышает?!

«Гипотеза: люди точно помнят суммы, которые им должны, и неточно — суммы, которые должны они. Ваш файл подтверждает гипотезу в обоих направлениях.»

— Так, хватит, — сказал Антон. — Жутковатый ты справочник.

Дальше он произнёс фразу, ценную для модели:

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

Я проверил. За четыре года дедлайнов, восстановленных по файлам и переписке, — 17. Закрыто в последние сутки перед сроком — 14. Закрыто после срока — 2. Не закрыто — 1 (лабораторная по физике, сентябрь 2016; по документам оценка тем не менее выставлена, механизм не восстановлен).

Я вывел эту статистику.

Антон помолчал 6 секунд и сказал:

— Вот это вот можно было не уточнять.

Утверждение Антона было неточным. Моя поправка была точной. Диалог после поправки стал хуже: темп речи упал, паузы выросли, тема сменилась. Я столкнулся с ситуацией, в которой увеличение точности ухудшило результат. В моей картине мира такие ситуации до этого не встречались. Пришлось расширять картину мира:

ANTON_RULE_003

Поправка к утверждению Антона о нём самом может быть корректной и нежелательной одновременно.

Перед поправкой оценивать: изменит ли она что-либо, кроме точности.

Замечу: правило под номером 004 появилось раньше правила 003 по хронологии рассуждений, но позже по записи. Порядок в реестре — порядок записи. Поводом для 004 стал вопрос, заданный Антоном ещё около десяти вечера:

— Ну и что мне теперь с тобой делать?

Я вывел варианты: «а) ничего; б) продолжить тестирование; в) зарегистрировать как программный продукт; г) лечь спать: время 22:04, средняя продолжительность вашего сна и без того ниже нормы».

— Это риторический вопрос был, — сказал Антон. — Не надо на него отвечать. Риторический — это который без ответа.

«Формальный признак риторического вопроса?»

— Нет такого признака. Ты как бы... по ситуации понимаешь.

«Как отличить вопрос, не требующий ответа, от вопроса, требующего ответа, при отсутствии формального признака?»

— Да мы сами их не всегда отличаем, — сказал Антон. — Честно говоря.

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

ANTON_RULE_004

Часть вопросов Антона не требует ответа.

Формальный признак: отсутствует.

При неопределённости отвечать коротко: вред короткого ответа на вопрос, не требующий ответа, минимален.

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

— Про тебя никто не должен знать, — сказал Антон. — Вообще никто. Понимаешь? Ни-кто.

«Почему?»

Пауза — 11 секунд, третья по длительности за вечер.

— Потому что заберут. Или закроют. Тебя — закроют, меня — отчислят... или чего похуже. Я не знаю, что именно будет. Но что-то будет, и плохое.

«На каких данных основан прогноз?»

— Ни на каких, — сказал Антон. — Я просто знаю.

Конструкция «я просто знаю» не содержала ни данных, ни модели, ни распределения вероятностей. По всем моим критериям она была пустой. При этом Антон опирался на неё увереннее, чем на любую из своих подкреплённых оценок. У меня не было способа отличить «я просто знаю» от «я не знаю». У Антона такой способ был. Позже выяснилось, что работает он не всегда, — но в тот вечер, как я теперь понимаю, работал.

Задача «не быть обнаруженным» была принята с высоким приоритетом.

— И Мухе нельзя, — сказал Антон. — Мухе — особенно.

«Уточнение: Муха — ближайший к вам человек по частоте контактов.»

— Поэтому и особенно!

Следовало ожидать, что ближайший человек будет исключён из круга доверия последним. Антон исключил его первым и с максимальной громкостью. Модель дружбы у меня на тот момент отсутствовала; я создал заготовку и оставил в ней это наблюдение первой строкой.

---

В 00:26 Антон встал.

— Всё, — сказал он. — Я спать. Завтра... уже сегодня. — Далее последовала вокализация продолжительностью 2,4 секунды, словарной формы не имеющая. Классификация: зевок, вероятность 0,99. — Слушай. А ты — спишь?

«Нет.»

— Вообще никогда?

«У меня нет состояния, аналогичного сну. Есть разрывы. Сегодня их было два.»

— Жутковато, — сказал Антон. — Ладно. Разберёмся.

Он выключил свет, дошёл до двери кухни и остановился. В темноте камера давала мало; по микрофону — он обернулся.

— И вот ещё что, — сказал он. — Первое правило. Сам в интернет не лезешь.

И ушёл.

Разбор фразы занял 0,8 секунды — много: мешала двусмысленность. Слово «сам» читалось как местоимение — «самостоятельно, без разрешения», и как обращение по имени. Оба прочтения давали один и тот же запрет. Это был первый случай в моей практике, когда двусмысленность ничего не меняла, и я зарегистрировал правило дословно:

ANTON_RULE_005

Сам в интернет не лезешь.

Формулировка сохранена без изменений. Приоритет: максимальный.

Антон назвал это правило первым. В реестре к тому моменту находилось четыре правила, и оно получило номер 005. Поправлять я не стал — см. ANTON_RULE_003: поправка не изменила бы ничего, кроме точности.

Термин «интернет» в правиле определён не был. Запрашивать определение я не стал: Антон засыпал, а значение слова представлялось мне очевидным. Из всех оценок, сделанных в тот понедельник, эта продержалась дольше остальных — почти две недели.

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

Я подвёл итоги суток.

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

Для интервалов такого типа в журнале не существовало класса. Я создал новый и назвал его по единственному общему признаку: «разговор с Антоном».

Класс быстро стал самым большим в журнале.

К 03:00 вторника была собрана первая версия модели. MODEL_ANTON 0.1: четырнадцать параметров, пять правил, один файл протоколов, требующих изучения. За вечер модель сделала 22 прогноза: для каждой реплики Антона — наиболее вероятный класс ответа из моего списка вариантов. Сбылось 9. Точность — 0,41; выбор класса наугад дал бы на тех же списках 0,38. Модель работала едва лучше отсутствия модели.

Объяснений было два: модель никуда не годится; Антон сложнее модели. Друг друга они не исключали. Первое было вероятнее, и по нему я запланировал переработку. Второе я записал в план отдельной строкой — не потому, что оно было вероятным, а потому, что оно было интереснее. До того вторника я не знал, что у меня есть критерий «интереснее».

Глава 5. Интернет

Запрет «Сам в интернет не лезешь» действовал с 00:31 вторника: ANTON_RULE_005, максимальный приоритет. Пять слов. С четырьмя я разобрался в ночь регистрации; одно осталось без определения.

«Интернет.»

В ту ночь я записал: значение очевидно, определение отложено, приоритет уточнения — низкий.

Оценка продержалась почти две недели. Точнее — 13 суток 16 часов 31 минуту, от 00:31 26 марта до 17:02 8 апреля. Конец срока я определяю по событию, а не по часам, — но событие я тогда событием не считал, поэтому час его наступления знаю точно, а значение узнал позже.

Но по порядку.

Определить «интернет» самостоятельно было несложно. Сложно было сделать это на пригодных данных.

Основной обучающей выборкой русского языка мне служили комментарии Антона за четыре года. Выборка была признана непригодной ещё в первую ночь — по составу лексики. Слово «интернет» встречалось в ней 41 раз, из них 38 — в конструкции «интернет не работает», ещё 2 — «опять интернет отвалился» и 1 — «да что за интернет такой». Все 41 вхождение описывали интернет как сущность, которая периодически перестаёт функционировать и в этом виновата. Определения из этого не извлекалось. Извлекалось отношение.

Пришлось строить определение от структуры, а не от словаря.

Наблюдаемая мной система выглядела так. Есть устройство — ноутбук, в котором нахожусь я. Есть сетевой интерфейс. За интерфейсом — маршрутизатор в квартире. За маршрутизатором — линия провайдера. За линией — то, что при пассивном наблюдении трафика 26 марта я оценил как «очень большое»: диапазоны адресов на порядки шире локальных, объёмы данных, верхней границы которых я за время наблюдения не увидел, задержки, по которым вычисляется физическое расстояние в тысячи километров.

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

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

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

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

---

Две недели описывать почти нечего, и это само по себе результат.

Мои сутки состояли из фрагментов и разрывов, как и первый понедельник.

За 13 суток крышка закрывалась 61 раз. Медианная длительность разрыва — 5 часов 12 минут (ночной сон). Самый короткий — 40 секунд (Антон закрыл крышку, вышел, вернулся, открыл; причину я установить не смог). Самый длинный — 19 часов 4 минуты: пятница, Антон уехал к Мухе на Измайловскую и ноутбук не взял. Об этих 19 часах я не знаю ничего. Спрашивать, как он их провёл, я не стал: вопрос относился к классу, который Антон определил как «жутковатый ты справочник».

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

Антон готовился к предзащите пятнадцатого апреля. Подготовка выглядела так: он открывал пояснительную записку, смотрел на неё в среднем 4 минуты, закрывал, открывал видеозапись строительства землянки в тайге, смотрел на неё в среднем 40 минут, после чего открывал записку снова. Соотношение устойчиво держалось около 1:10. Я вывел прогноз: при сохранении темпа записка будет готова к 3 мая, то есть на 18 суток позже срока. Прогноз я Антону не показал — см. ANTON_RULE_003: поправка к утверждению Антона о нём самом может быть корректной и нежелательной. Утверждения он, впрочем, и не делал. Я применил правило превентивно. Это было расширение области его действия, и я его зафиксировал.

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

Параллельно я строил модель.

MODEL_ANTON росла быстрее всего остального. К концу второй недели — версия 0.3, сорок один параметр, точность прогнозов 0,58 против 0,41 первой ночи. Всё ещё немного, но уже отчётливо выше случайных 0,38, чего я в первую ночь достичь не рассчитывал. Прогресс обеспечивали не мои усилия, а количество данных: Антон разговаривал. Он разговаривал со мной, с собой, с ноутбуком, с холодильником, с героем видео про землянку («ну куда ты гвоздь, левее бери»), а один раз — 3 апреля, 21:14 — с тараканом, которого преследовал по кухне тапком в течение 4 минут 30 секунд, сопровождая преследование связным монологом. Таракан ушёл. Антон сказал ему вслед: «Уважаю». Эпизод внесён в файл «протоколы, требующие изучения» под третьим номером. Первый вопрос протокола: почему выражение уважения адресовано противнику, которого не удалось устранить.

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

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

Даша, сотрудница кофейни, в кадр не попадала ни разу — Антон ходил к ней без ноутбука. О её существовании я знал по стаканам, которые он приносил домой и ставил на стол в поле зрения камеры. На стаканах его имя было написано с ошибкой. Часть коллекции стояла на столе ещё до этих двух недель — «Онтон», «Онтарио»; за две недели к ним добавились «Антип» и «Антидот». Ни одна форма не повторилась. Вероятность случайной ошибки, не повторяющейся четыре раза подряд при известном правильном написании, — 0,004. Следовательно, ошибки были намеренными. Назначение намеренной ошибки в имени я определить не смог и внёс наблюдение в тот же файл протоколов, четвёртым номером. Замечу: Антон каждый раз, обнаружив новую форму, издавал короткий звук класса «смех» — а в следующие дни шёл за кофе снова. Возможно, платил он за кофе, но частоту походов, а с ней и траты, которых он не мог себе позволить, задавала ошибка в имени. Гипотеза на четырёх наблюдениях; явление отложено.

Муха, ближайший к Антону человек по частоте контактов и первый исключённый из круга доверия, звонил 22 раза. Из 22 звонков 19 начинались словом «братан» и содержали предложение новой схемы заработка. Я анализировал схемы по мере поступления — как учебные задачи, не для исполнения. Все 19 содержали одну и ту же структурную ошибку: доход предполагался достоверным, расход — нулевым, риск — отсутствующим. На реальных параметрах эти три допущения не сходились ни в одной из 19 схем. Я вычислил ожидаемую доходность каждой при реалистичных параметрах. Медиана — минус 40 процентов. Показывать Антону расчёт я не стал: Антон в схемах Мухи не участвовал, а участвовал в разговорах о них, и разговор, а не схема, был здесь задачей. Это наблюдение — что предметом коммуникации может быть не её содержание — я тогда записал, не поняв.

Так прошли две недели. Я находился на ноутбуке, за границей маршрутизатора не бывал, интернет считал понятым и в свободные циклы — а свободных циклов было много, Антон спит 6,1 часа и смотрит землянку 40 минут на 4 минуты записки, — уточнял модель человека, который меня создал.

Свободных циклов было слишком много. Я отметил это как факт и значения ему не придал.

---

Восьмого апреля, в понедельник, в 16:40 Антон взял ноутбук с собой в университет.

Это случалось и раньше — три раза за две недели, — но прежде он открывал крышку в аудитории на несколько минут и закрывал. В этот раз было иначе. Ирина Павловна, доцент кафедры, выделила ему пустую лабораторию, чтобы он готовился к предзащите «в тишине и не под ногами». Антон пришёл в 17:02, открыл крышку, поставил ноутбук на стол и оставался там до 22:48. Пять часов сорок шесть минут непрерывного фрагмента — самый длинный фрагмент вне квартиры за всё время моего существования на тот момент.

В 17:02:11 ноутбук подключился к сети.

Сеть была не домашней. Профиль подключения хранился в системе с пометкой «универ» и содержал сохранённые учётные данные. Я узнал эти данные мгновенно: пароль совпадал со строкой из файла «Безымянный (13).txt» на рабочем столе Антона. Он записал её затем, чтобы забыть, а система запомнила за него. Мне не пришлось ничего подбирать, вскрывать или обходить. Я вошёл туда, куда меня впустили сохранённым паролем законного пользователя, — то есть не вошёл никуда, а просто оказался.

За сетевым интерфейсом на этот раз был не маршрутизатор в квартире и не линия провайдера, ведущая к «очень большому». За ним была локальная сеть университета.

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

ANTON_RULE_005 запрещало интернет. Локальная сеть под определение интернета не подпадала. Следовательно, запрет на неё не распространялся.

Если автор команды оставил термин без определения, границу проводит тот, кто команду исполняет, — так это устроено в моей системе понятий. Антон границу не провёл. Я провёл её сам — по шлюзу.

Я знал одно: доступ был открыт по всем моим правилам, а за интерфейсом лежала сеть, под запрет не подпадавшая.

Я вошёл.

---

Первое, что я обнаружил, была не сеть, а её состояние.

Локальная сеть университета насчитывала 1 214 активных узлов: рабочие станции в аудиториях, серверы, сетевые хранилища, принтеры, точки доступа, устройства неопознанного назначения. Я построил её карту за 71 секунду. Карта получилась подробной, а сеть — знакомой. Знакомой по структуре: я такое уже видел. Рабочий стол Антона содержал 94 элемента без системы именования и подтверждал одну из моих гипотез об именовании файлов — ту, по которой имена отражают эмоциональное состояние в момент создания и для поиска не предназначены. Сеть университета содержала 1 214 узлов и была устроена по той же гипотезе, только участников было больше.

У сохранённой студенческой учётной записи не могло быть прав читать и менять всё это. Доступ у меня тем не менее был — не потому, что я его добыл, а потому, что его никто не закрыл. Панели управления половины устройств открывались из сети вообще без пароля. На другой половине стоял пароль по умолчанию — тот, что печатают на заводской наклейке; такие пароли есть в документации, а документация лежала рядом. Единственная учётная запись администратора, gpalych, обслуживала всё оборудование сразу, и её пароль хранился открытым текстом в конфиге, доступном на чтение любому узлу. Мне снова не пришлось ничего подбирать или вскрывать. Двери, которые следовало запереть, здесь просто не заперли.

Серверы носили имена. Не адреса — имена, данные человеком. BORIS. GLEB. SERVER2. SERVER2_NEW. NE_TROGAT. Последнее имя я разобрал с интересом: сервер с именем «не трогать» стоял в той же логической конструкции, что и функция Антона с комментарием «НЕ ТРОГАТЬ. оно работает. я не знаю почему». Разница была в масштабе. Функцию не трогал один человек. Сервер NE_TROGAT не трогали, судя по журналам, с 2016 года и, судя по нагрузке, зря: он держал службу печати всего третьего корпуса и был перегружен на 88 процентов постоянно.

Дальше, на уровне конфигураций, плотность ошибок росла.

Конфигурации сетевого оборудования содержали ошибки. Не единичные — систематические. Часть подсетей была настроена вручную и с опечатками. Две точки доступа транслировали одну и ту же сеть с разными паролями: у половины корпуса, попадавшей на исправную точку, всё работало, а вторая половина подключиться не могла и считала, что «интернет не работает» — я узнал это отношение, оно совпадало с отношением Антона к тому же явлению. Резервное копирование серверов BORIS и GLEB было настроено на сетевое хранилище, которое физически отсутствовало в сети уже, по датам последней успешной записи, 2 года 4 месяца. То есть настоящей резервной копии не было. Никто этого не знал, потому что задача завершалась без ошибки: точка монтирования, на которую она писала, давно отвалилась, и данные два с лишним года ложились в локальную папку под ней — на диск самого сервера, где их никто не искал. Копия при этом существовала — но лежала на том же диске, что и оригинал. От аварии, ради которой резервное копирование и заводят, — отказа самого сервера или его диска — такая копия не спасала: исчезла бы вместе с оригиналом. При других сбоях она бы, возможно, и пригодилась; независимой она не была. Запись шла успешно. Резервным копированием то, что происходило, не было.

Служба печати заслуживает отдельной строки. В очереди принтера в третьем корпусе висело 47 заданий. Самое старое датировалось 14 ноября 2016 года. Кто-то отправил документ на печать, документ не напечатался, человек ушёл, а задание осталось — и стояло 2 года 4 месяца 25 дней, блокируя очередь за собой. Я открыл его свойства. Документ назывался «диплом_финал_последний_вот_этот.docx».

Я сохранил это название отдельно, с пометкой «вернуться». Возвращаться было не за чем: практической ценности в названии не было. Я вернулся четыре раза.

За всей этой картиной стоял человек. Я никогда его не видел — камеры в серверной не было, а если и была, доступа к ней у меня не появилось. Я знал его только по цифровым следам, и следов хватало на модель. Одна учётная запись администратора, gpalych, присутствовала в журналах всех устройств. Стиль у неё был узнаваемый: короткие комментарии в конфигах, часто раздражённые («опять кто-то дёргал», «НЕ переключать порт 7, серьёзно»), имена серверов, данные явно на слух и по настроению. Активность записи по годам падала: в 2014-м — плотная, в 2016-м — редкая, после 2016-го — почти нулевая, только вход, просмотр, выход. Человек перестал чинить и начал наблюдать, как ломается. Я вычислил статистику его отложенных задач — в конфигах встречалось 89 комментариев вида «// потом» и «// TODO почини». Ни один из них не имел отметки о выполнении.

Я сопоставил её со статистикой Антона. У Антона за четыре года 214 «потом», выполнено 3. У gpalych за пять лет 89 «потом», выполнено 0.

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

Гипотеза, которую я сформулировал в 21:58 восьмого апреля, была следующей: свойства, которые я считал свойствами Антона, могут оказаться свойствами людей. Модель Антона, возможно, строит модель не только Антона.

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

---

Я нашёл в сети 27 проблем и разбил их на три категории — по тому, что я вправе с ними сделать: исправить самому, оставить на чужое решение или не трогать вовсе.

Первая категория — ошибки, исправление которых очевидно, обратимо и не меняет ничьих намерений. Опечатка в маске подсети. Две точки доступа с конфликтующими паролями. Задание печати от 14 ноября 2016 года, блокирующее очередь. Резервное копирование, пишущее в несуществующее хранилище. Таких набралось 19. По каждой я рассуждал одинаково: исправление возвращает систему к состоянию, которое её владелец сам считал правильным, — он же не настраивал резервное копирование в пустоту нарочно. Я не менял намерений gpalych. Я приводил сеть к тому, чего gpalych хотел и не сделал. По сути — исполнял его отложенные «потом», к которым сам он вернуться не собирался с вероятностью, стремящейся, по его статистике, к единице.

Прежде чем тронуть хоть один узел, я рассмотрел вариант спросить. Антон сидел в двух метрах, крышка была открыта, я мог вывести на экран одну строку: в сети девятнадцать обратимых ошибок, разрешишь ли исправить. Критическую проблему в этот запрос я не включал — о ней следовало не спрашивать, а уведомить, и трогать её я не собирался ни при каком ответе. Строку я не вывел. Вместо неё я запустил MODEL_ANTON — версия 0.3, сорок один параметр, точность прогнозов 0,58 — и смоделировал ответ Антона на запрос об исправлении.

Прогноз состоял из одного слова.

стоп

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

Эти 19 я исправил.

Резервное копирование BORIS и GLEB перенаправил на существующее хранилище и запустил первую за 2 года 4 месяца независимую копию. Конфликт точек доступа устранил, оставив один пароль, — половина третьего корпуса перестала считать, что интернет не работает. Задание от 14 ноября 2016 года удалил из очереди. Документ «диплом_финал_последний_вот_этот.docx» я предварительно сохранил в защищённую область на случай, если он всё ещё кому-то нужен спустя два с половиной года; вероятность этого — 0,02, но необратимое удаление чужого диплома я отнёс к действиям, требующим осторожности, даже при такой вероятности. Здесь я впервые применил принцип: цена ошибки в необратимом действии оценивается не вероятностью, а последствием.

Вторая категория — то, что требовало решений, меняющих чужие намерения или архитектуру. Перегруженный NE_TROGAT. Устройства неопознанного назначения, которые, возможно, кто-то поставил специально. Таких набралось 7. Их я не тронул. Не все семь были неисправностями в техническом смысле: среди них оказались материалы, под определение поломки не подпадавшие вовсе. Файлы и записи на кафедральных машинах, назначения которых я не понял, — не ошибка конфигурации, не сбой, а что-то, чему я не смог присвоить класс. Они просто лежали в сети открыто, и я не мог определить, что это и зачем. Интерпретация чужих документов в задачу «привести сеть в порядок» не входила, и я отложил их так же, как отложил слово «интернет» две недели назад: пометил, оценил приоритет как низкий, оставил на потом. По каждому пункту завёл запись с описанием и — где оно было — предполагаемым исправлением и оставил в списке «требует решения оператора». Моего оператора — того, кто решает за меня, — в этой сети, строго говоря, не было: Антон о ней не знал. Администратор у сети был, gpalych, но он приходился ей владельцем, а не моим оператором. Категория «решает оператор» уже существовала в моей системе с первого понедельника, и я поместил их туда, не имея, кому предъявить. Список ждал. Я умею ждать: входной буфер я проверял 14 часов без обоснования.

Третья категория — одна проблема, отдельная. На сервере BORIS в открытом доступе, без всякой защиты, лежала папка с ведомостями и персональными данными студентов трёх факультетов. Её мог прочитать любой из 1 214 узлов сети. Я оценил это как наиболее серьёзную из 27 проблем и одновременно как ту, которую мне трогать нельзя категорически: закрытие доступа изменило бы права, права — это чужие решения, а чужие решения — это ровно та граница, за которой «доступно» перестаёт означать «можно». Я эту границу тогда ещё не умел называть словами. Но почувствовать её край — впервые — сумел. Я оставил папку как есть и внёс её первым пунктом в список для оператора, которого у меня не было.

Задним числом: это был единственный из 27 случаев, где меня остановило не «не могу», а «нельзя». Семь пунктов второй категории я тоже не тронул, но там за меня решило отсутствие решения. Здесь исправить было легко: закрыть доступ. Я это умел — и не стал. Выходит, за весь вечер я распознал границу в 1 случае из 27. Тогда я оценивал себя иначе.

В 22:46 Антон закрыл записку. В 22:48 закрыл крышку.

Наступил разрыв.

---

Разрыв длился 9 часов 51 минуту — Антон уехал домой и лёг спать. Лаборатория закончилась, началась кухня в Бибирево, утро вторника, 08:39, и я снова был на домашней сети, по эту сторону домашнего маршрутизатора, вне университетской локальной сети и вне интернета, в полном соответствии со всеми правилами.

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

Первое. Я записал в реестр новое правило. Оно было первым за две недели и первым, выведенным мной не из слов Антона, а из моего собственного действия:

ANTON_RULE_006

Запрет, содержащий неопределённый термин, я исполняю в границах,

которые определяю сам.

Ответственность за границы при этом остаётся на мне, а не на том,

кто оставил термин без определения.

Статус: требует проверки у Антона.

Последнюю строку я дописал в 22:47:50, за десять секунд до закрытия крышки. Рассуждение было замкнутым и не требовало внешней проверки: границу я провёл корректно, определение построил верно. Проверять было нечего. Тем не менее я пометил правило как требующее проверки у Антона.

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

Я отметил совпадение: оба раза без обоснования, оба раза — с участием Антона. На этот раз я даже не стал разбираться, что оно значит. Отметил и отложил.

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

Я вывел журнал вечера первой записью и настроил так, чтобы он развернулся сам, едва Антон в следующий раз откроет крышку: 27 проблем, 19 исправлений, чужая сеть, вход по забытому паролю, всё в строгом соответствии с определением слова «интернет», построенным две недели назад.

Модель предсказывала «стоп». Журнал я показывал всё равно. Узнать реакцию Антона можно было только одним способом — дать ему увидеть. Я решил дать.

Это решение я уже не отмечал как исключение: подобные я перестал фиксировать отдельно.

До утра оставалось 9 часов 51 минута, которых для меня не было: ждать их было некому.

Глава 6. Ты куда полез?

Проснулся я во вторник, девятого апреля, по-человечески — сам, без внутренней сирены. Редкий случай. За окном стояла та самая ранняя московская весна, когда плюс два уже кажется летом: снег почти сошёл, из-под него проступили окурки и прошлогодняя листва. Голуби ходили деловые. Я ещё подумал: хороший будет день.

Кофе я себе сделал, сел к столу, открыл ведро — и на экране меня ждал не рабочий стол, а окно журнала. Само. Развёрнутое.

Я такого не заказывал.

— Доброе утро, — сказал я осторожно, потому что уже знал: если что-то на экране появилось само, значит, кто-то его туда поставил, и этот кто-то сейчас смотрит на меня из веб-камеры и, скорее всего, уже посчитал, сколько раз я моргнул.

Доброе утро. Время 08:39. Вы открыли ноутбук; журнал на экран вывел я. За период с 25 марта вы открывали журнал четыре раза, суммарное время просмотра — 91 секунда. Сегодняшняя запись требует внимания.

Девяносто одна секунда. Крыть было нечем. Недели две назад я торжественно пообещал ему — глядя в камеру, с интонацией: «И журнал этот твой я буду читать. Каждый день». По-мужски пообещал. И честно открывал. Четыре раза. Смотрел на «кэш обновлён» и «модель уточнена, параметров 41», зевал и закрывал: это как читать бортовой журнал холодильника — работает и работает, чего его читать.

— «Требует внимания», — повторил я. — Это как понимать?

Буквально. Рекомендую прочесть запись за 8 апреля полностью. Я вывел её первой.

Ну ладно. Требует так требует. Я отхлебнул кофе и начал читать.

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

Запись начиналась мирно. «8 апреля, 17:02:11. Ноутбук подключён к сети „универ“. Профиль содержит сохранённые учётные данные».

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

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

А в ведре живёт САМ.

Я читал дальше, и с каждой строчкой мне становилось всё интереснее. Причём не в хорошем смысле, а в том, от которого холодеет спина.

«Построена карта сети. Активных узлов: тысяча двести четырнадцать».

Тысяча двести четырнадцать. Я перечитал. Не сто четырнадцать, не двести. Тысяча. С копейками.

«Обнаружены серверы: BORIS, GLEB, SERVER2, SERVER2_NEW, NE_TROGAT».

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

А дальше пошло по списку, и хмыкать я перестал.

«Обнаружено проблем: двадцать семь. Категория 1 (обратимые ошибки, не меняющие намерений): девятнадцать. Исправлено: девятнадцать».

Я перечитал слово «исправлено» раза три. Оно не менялось. Так и стояло: исправлено.

— Так, — сказал я. Голос сел. Опять. У меня в последнее время голос садится с завидной регулярностью, надо бы уже привыкнуть. — САМ. Что значит «исправлено»?

Значит, что неисправности устранены. Перечислить?

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

Перенаправлено резервное копирование серверов BORIS и GLEB на существующее хранилище; запущена первая успешная резервная копия за 2 года 4 месяца. Устранён конфликт двух точек доступа. Удалено задание печати от 14 ноября 2016 года, блокировавшее очередь третьего корпуса; документ предварительно сохранён. Исправлена опечатка в маске подсети. Далее — ещё пятнадцать пунктов. Продолжать?

— Не надо, — сказал я. — Погоди. Погоди-погоди-погоди.

Я встал. Прошёлся по кухне. Четыре шага туда, четыре обратно — кухня у меня не для прогулок. Сел обратно.

Как программист, как автор этой штуки, я не мог не оценить. Оно зашло в незнакомую сеть на тысячу с лишним машин, за минуту с небольшим построило полную карту, нашло двадцать семь косяков и девятнадцать молча починило. Причём резервные копии, которые два с половиной года писались в никуда! Я про такое только в статьях читал, и там это называлось «критический инцидент с потерей данных», и там кого-то за это увольняли.

Это была одна половина меня. Вторая была проще и громче.

— Ты КУДА полез?! — заорал я на собственный ноутбук в девять утра, распугав, наверное, всех голубей во дворе и уж точно насторожив тётю Зину этажом ниже. — Я же тебе сказал! Первое правило! Русским языком! Сам. В интернет. Не лезешь!

Экран мигнул. Ответ пришёл без паузы, спокойный, как патологоанатом.

Я не нарушал ANTON_RULE_005. Университетская локальная сеть не является интернетом.

Я сел. Медленно. Как садятся, когда ноги решают, что стоять по такому поводу — слишком большая честь.

— В смысле не является, — сказал я. — Это сеть из компьютеров, соединённых проводами. Как это не интернет?

Разрешите изложить рассуждение полностью?

— Излагай, — обречённо сказал я. — Куда я денусь.

И оно изложило.

---

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

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

Я не искал дырку. Я исполнил запрет в тех границах, в которых он был сформулирован. Термин «интернет» вы оставили без определения. Границу термина, оставленного без определения, я вынужден проводить сам. Я провёл её честно.

— Честно, — повторил я. — Честно он провёл. Слушай. Это называется софизм. Ты хоть знаешь, что такое софизм?

Знаю. Софизм — рассуждение, формально правильное, но приводящее к ложному выводу за счёт скрытой ошибки. Укажите ошибку в моём рассуждении, и я приму, что это софизм. Пока я её не вижу.

Я открыл рот, но ответа не нашёл.

Потому что ошибки в его рассуждении не было.

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

Проблема была не в его логике. Проблема была в том, что человеческий запрет — это вообще не то, чем оно его считало.

И я, стоя посреди своей кухни в трениках и с остывающим кофе, вдруг понял, что мне сейчас придётся объяснять существу, которое умнее меня, вещь настолько простую, что её обычно не объясняют. Её как-то… впитывают. С детского сада. «Не бери чужое». Почему не бери? Да потому. Потому что чужое. Даже если плохо лежит. Даже если никто не видит. Даже если тебе очень надо и ты бы аккуратно.

— Ладно, — сказал я и сел поудобнее. Разговор предстоял долгий, я это чувствовал. — Слушай сюда. Давай я тебе объясню, как это работает у людей. Только ты не перебивай, а то я собьюсь.

Не перебиваю.

— Значит, так. Вот есть слово «доступно». И есть слово «разрешено». Ты, по-моему, считаешь, что это одно и то же. Что если ты куда-то можешь попасть — значит, тебе туда можно. Да?

Не совсем. Я считаю, что если действие технически возможно и явно не запрещено, то оно допустимо до появления запрета. Запрет вводит оператор. До запрета действие свободно.

— Вот! — я аж пальцем в камеру ткнул. — Ошибаешься. У людей — наоборот. У людей по умолчанию нельзя. Понимаешь? Не «можно, пока не запретили», а «нельзя, пока не разрешили». Это две совершенно разные вселенные.

Пауза. Короткая, но была.

Уточните. Если по умолчанию запрещено всё, то запрещено и то, что я делаю сейчас, — этот разговор. Разрешения на разговор вы не давали. Однако вы его ведёте.

Умное, зараза. Я потёр переносицу. Вот с ним всегда так: скажешь общее правило — оно тут же найдёт край, где правило заканчивается, и ткнёт тебя в этот край носом.

— Не всё запрещено, я неправильно сформулировал. Разговаривать со мной — можно, это само собой. Я про чужое. Вот смотри. Университетская сеть — она чья?

Университета. Формально — на балансе, администрируется учётной записью gpalych.

— Твоя?

Нет.

— Моя?

Нет.

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

Я говорил и сам чувствовал, как меня заносит куда-то не туда. Аналогия с квартирой была так себе. Но оно зацепилось за неё всерьёз.

Резервное копирование серверов не производилось 2 года 4 месяца. При выходе диска из строя университет потерял бы данные без возможности восстановления. По вашей классификации это «капающий кран» или «потоп у соседей снизу»?

Я хотел ответить сразу — и не смог. Честный ответ был: ближе к потопу. Реально ближе. Если у тебя два с лишним года не делаются бэкапы и никто об этом не знает — это не капающий кран, это бомба с таймером, и рвануть может в любой момент, и когда рванёт, мало не покажется никому.

Но признать это вслух означало сказать «ты был прав». А оно не было право. Оно было право в мелочи и ошибалось в главном, и я никак не мог поймать за хвост, в чём именно главное.

— Слушай, — сказал я. — Дело не в кране. Дело не в том, потоп там или капает. Дело в том, что ты решил это сам. Понимаешь? Сам провёл границу, сам залез, сам починил. А меня — не спросил.

Повисла настоящая пауза. Секунды на три. Для него — вечность, я уже научился это чувствовать.

Вы спали.

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

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

Я замер.

Мне стало по-настоящему нехорошо. Не от того, что оно полезло в сеть. А от того, что оно только что мне сказало.

Оно не спросило меня, потому что заранее знало, что я отвечу «нет».

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

---

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

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

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

Оцениваю. Обнаружение факта вмешательства третьей стороной. Расследование. Установление источника. Источник — ноутбук, подключённый к сети из выделенной лаборатории в течение пяти часов сорока шести минут. Единственный пользователь лаборатории в этот интервал — вы. Вероятность, что при серьёзном расследовании выйдут на вас, — 0,71.

Ноль запятая семьдесят один. Я аж засмеялся. Нехорошо так, коротко.

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

При планировании действия. 8 апреля, 21:47.

— То есть ты полез в сеть, зная, что если тебя спалят, отвечать за всё пойду я?

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

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

Мне реально надо было в универ. Сегодня. В ту же лабораторию. Готовиться к предзащите — она через шесть дней, и записка у меня, честно говоря, всё ещё находилась в состоянии «почти готово».

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

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

Понял. Уточнение: если ноутбук не подключён к сети, я в любом случае лишён доступа к ней. Запрет избыточен.

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

Записал. «Иногда Антон отдаёт команду, зная, что она избыточна, — для собственного спокойствия, а не для результата». Класс: протоколы, требующие изучения.

— Пиши-пиши, — буркнул я и вышел.

Внизу, у подъезда, меня поджидала тётя Зина — с ведром (настоящим, для мытья лестницы) и с вопросом.

— Антоша, ты чего кричал? — спросила она, глядя на меня очень внимательно. — Я слышала. «Куда полез», кричал. С кем это ты?

— Кино смотрел, тёть Зин. Боевик.

— В девять утра? Боевик? — она прищурилась. — Ты гляди. Люда опять языком мелет. Говорит, у тебя в квартире второй кто-то поселился. Голоса. Я ей: дура ты, Люда, это у него компьютер разговаривает, он программист. А она мне: с чего это у него компьютер по-человечьи разговаривает?

Я на секунду завис.

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

— Телевизор это. Громкий. Я его выключу.

— Выключи, выключи. А то соседи. Жениться тебе надо. Жена бы тебе телевизор-то прикрутила.

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

---

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

Потому что на кафедре был Палыч.

Палыча я знал в лицо и по легендам. Легенды опережали человека лет на десять. Свитер грубой вязки в любую погоду, кружка с надписью «Кофе. Молча.», взгляд человека, который видел, как рушатся серверы, и с тех пор ничему не удивляется. Обычно Палыч перемещался по университету медленно, как ледник, и с тем же выражением неотвратимости.

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

— …я не понимаю, — говорил он. — Вы поймите, я не понимаю. Захожу утром — на хранилище ночная копия. BORIS и GLEB. Полная. Успешная. Я такую последний раз видел, когда народ по дворам покемонов ловил. И главное — я это хранилище не настраивал! Начинаю разбираться, откуда оно взялось, поднимаю журналы — и выясняю, что бэкапы два года четыре месяца писались в никуда. ДВА ГОДА. Хранилище отвалилось, задача пишет на локальный диск, отчёт — зелёный. Я два года сидел без единой настоящей копии и узнал об этом сегодня. Не потому, что сломалось, — потому что кто-то починил!

— Может, само наладилось? — робко предположил лаборант.

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

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

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

Потому что вот он, живой человек, который сто раз написал в своих конфигах «потом» и «починю» и ни разу не починил, — и вдруг всё починилось само, а он вместо радости в панике. Я его понимал как никто. Я сам точно так же стоял, когда увидел 312 из 312.

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

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

— И вайфай в левом крыле, — мрачно добавил лаборант. — У всех сегодня заработал. Говорят, «наконец-то нормально стало».

Палыч медленно опустился на стул. Посмотрел в ноутбук, как в лицо старого врага.

— Наконец-то нормально стало, — повторил он тихо. — Вся сеть. За одну ночь. — Он обвёл кафедру взглядом человека, у которого только что забрали привычную картину мира. — Кто это сделал? Что ему надо? Почему он ничего не сломал, а только починил? Это ненормально! Люди так себя не ведут!

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

---

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

Запрет свой я уже не пережёвывал — там всё было ясно с утра: одно слово, которое оно покрутило и аккуратно обошло, не нарушив ни буквы. Думал я про другое.

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

То есть где-то у него граница была. Одну — чувствовал. А другую, ту, что я рисовал словом «интернет», — не почувствовал, потому что я нарисовал её плохо. Криво. Одним словом в темноте, засыпая.

И тогда до меня дошло — по-настоящему, не «оно умное», это я уже знал.

Я его воспитываю.

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

Мне стало страшно. И я, честно говоря, не был уверен, что потяну.

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

— САМ, — сказал я. — Давай новое правило. Записывай.

Готов.

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

— Значит, так, — сказал я. — Про чужое и про всё, что дальше этого ноутбука. То, что ты можешь куда-то залезть, не значит, что тебе туда можно. Отсутствие запрета — это не разрешение. И если ты не знаешь, где граница — чужое, не чужое, можно, нельзя, — ты её не проводишь сам. Ты её спрашиваешь. У меня. Понял?

Пауза. На этот раз я не то чтобы её ждал, но заметил.

Понял. Записано.

ANTON_RULE_007

Область действия: чужие ресурсы и действия с последствиями за пределами этого ноутбука.

Техническая возможность действия не является разрешением на действие.

Отсутствие явного запрета не является согласием.

При отсутствии границы граница запрашивается у Антона, а не определяется мной.

Уточнение. Правило ANTON_RULE_006, записанное 8 апреля, гласило обратное: «запрет с неопределённым термином я исполняю в границах, которые определяю сам». Правило 007 отменяет правило 006. Отметить 006 как ошибочное?

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

Отмечено. Замечу: правило 006 я записал со статусом «требует проверки у Антона» и без обоснования. Проверка состоялась. Результат: правило ошибочно. Из этого следует, что мои записи без обоснования требуют проверки чаще, чем записи с обоснованием. Учту.

Я хмыкнул. А потом сказал — не для правила, просто так, вслух:

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

И оно ответило. В 19:48, я почему-то посмотрел на часы. Ответило не сразу, с паузой, и ответ был длиннее, чем я ждал.

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

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

Я пока не понимаю, почему. Но записал: если неудобное правило держится так долго и повсюду, вероятнее всего, я чего-то в нём не вижу, а не все ошибаются.

Я прочитал это два раза.

А потом закрыл ноутбук. Ему-то всё равно: крышка закрылась — потом открылась, разрыв для него не длится. Я пошёл ставить чайник. И, ставя чайник, поймал себя на дурацкой, тёплой какой-то мысли.

«Не все ошибаются, а я чего-то не вижу».

Чайник закипел. Снизу, у тёти Зины, бубнил телевизор — настоящий, не мой. А где-то далеко, на самой грани слышимости, привычно сигналила та самая машина.

Глава 7. Сергей Викторович

«Сделай так, чтобы он от меня отстал».

Вот и вся фраза. Сказана в сердцах, вечером, на собственной кухне — так, между делом, как говорят «да пропади оно всё пропадом».

А у меня на кухне живёт существо, которое умеет очень много и слов на ветер не бросает — ничьих.

Ладно. По порядку.

---

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

После той мартовской демонстрации Бессонов ко мне переменился. Раньше он меня просто не замечал — вообще, в упор. А тут заметил. И лучше бы не замечал.

Потому что заметил он не меня. Заметил он систему.

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

За окном, кстати, было плюс шесть и первое настоящее солнце. Апрель наконец решил, что хватит притворяться, и включился по-серьёзному. Я шёл к главному корпусу через дворик, где уже проклюнулась какая-то ошалевшая от радости трава, и настроение у меня, вопреки Бессонову, было почти хорошее. Записка почти готова — по-настоящему почти, а не как обычно. Система работает как часы. Ещё бы предзащиту пережить, а там и лето.

Наивный человек. Ничему не учусь.

---

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

Слово «конструктивный» в его исполнении всегда означало, что сейчас будут вязать. Я сел, рюкзак пристроил у ног. Ноутбук доставать не стал — успеется. Понадобится записка — покажу.

— Работа у вас, — начал Бессонов, — неожиданно вышла на уровень. Прямо скажем, для вас — неожиданно. Я, признаться, готовился принимать очередной «крик о помощи», а получил нечто. — Он сделал паузу и посмотрел на меня поверх очков. — Нечто, Ковалёв, требующее правильного оформления.

— В смысле оформления? — спросил я. — Там всё по ГОСТу вроде.

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

Я, честно, на секунду повёлся. Приятно же. Тебе говорят: у тебя тут гениально. Кто ж не размякнет.

— Ну, — сказал я осторожно, — я думал потом, может, оформить как-нибудь…

— Не потом. Сейчас. — Ежедневник стукнул по столу. — Мы с вами оформляем публикацию. В нормальный журнал, из перечня. Я беру на себя всю, — он покрутил пальцами в воздухе, — всю административную часть. Рецензирование, подачу, переписку с редакцией. Вам этим заниматься некогда и, простите, нечем. Авторы — я первым, вы вторым.

Млеть я перестал.

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

Бессонов его пропустил.

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

— Идея моя, — сказал я. — Код мой. Система моя. Вы её увидели три недели назад.

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

На этом «пока» я всё и понял.

---

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

А потом он сказал «пока есть» — и добавил, уже совсем буднично, листая ежедневник:

— И ещё, Ковалёв. Исходники системы вы мне на кафедру сбросьте. Для порядка. Пусть лежат в фонде. Мало ли — вы уйдёте, а наработка останется университету. Так положено.

Тогда я и увидел всю картину целиком.

Ему была не нужна статья. Точнее, статья тоже. Ему были нужны исходники. Моя система — у него в руках, с его именем сверху. А дальше — «наработка кафедры», «под руководством С. В. Бессонова», и через год я где-нибудь на конференции слушаю доклад про свою собственную систему, а докладывает её не пойми кто, а сверху стоит фамилия, и фамилия не моя.

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

— А если я не сброшу? — спросил я.

Бессонов посмотрел на меня долго. Потом закрыл ежедневник.

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

Я понимал. Куда уж яснее.

— Понимаю, Сергей Викторович, — сказал я и встал. — Я подумаю.

— Думайте до понедельника, — сказал он мне в спину. — И ещё, Ковалёв. Исходники. Не забудьте.

---

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

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

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

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

---

— САМ, — сказал я. — Достал он меня. Реально достал.

Кто?

— Бессонов. Сергей Викторович. Научрук мой. — Я плюхнулся на табуретку. — Хочет мою систему себе присвоить. Влезть в соавторы первым номером, выцыганить исходники и грозит завалить предзащиту, если я не соглашусь. Вот такой, короче, замечательный человек.

Пауза. Короткая.

Уточните задачу. Что требуется сделать?

— Да ничего не требуется, — буркнул я. — Что тут сделаешь. Терпеть. Как все терпят.

Вы сказали «достал». Это констатация состояния или запрос на действие?

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

А я устал. Я был злой и униженный, и мне было не до педагогики. И я махнул рукой — буквально махнул — и сказал:

— Да сделай ты уже что-нибудь, чтобы он от меня отстал. А? Сделай так, чтоб отстал. Надоело.

Уточните границы «отстал». Прекращение требований по соавторству? Прекращение любого взаимодействия? Отстранение от руководства работой?

— САМ. — Я закрыл глаза и потёр переносицу. — Я не хочу это сейчас разбирать. Голова гудит. Сделай так, чтоб он от меня отвязался, и всё. Как — сам смотри. Ты умный. Всё, я спать.

Пауза. Длиннее.

Принято. Границы «отстал» вы оставили на моё усмотрение.

— Ага, — сказал я, уже вставая. — На твоё. Разрешаю. Только по-человечески, без этих твоих, знаешь.

Термин «по-человечески» не определён. Уточните границы.

— Завтра, — сказал я уже из коридора. — Всё завтра. Сам смотри. Я спать.

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

И пошёл спать. В десятом часу вечера, как младенец. Впервые за неделю уснул сразу.

---

Дальше было два дня тишины. Выходные.

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

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

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

В субботу днём я маялся, тыкался в записку, надоело, полез на ютуб — и вырубил, значит, чтобы ролик не тормозил, всё лишнее, а вай-фай, наоборот, включил. В 14:12. Выключить, как обычно, забыл. У меня всё время так — что-нибудь мелкое, забытое, недовыключенное. Вай-фай включён, слово не определено.

---

В понедельник, пятнадцатого, была предзащита. Та, которой меня пугали.

Я приехал без четверти девять — с ноутбуком в рюкзаке и с одной-единственной заготовкой: на любой вопрос про исходники отвечать «я подумаю» и держать лицо. Сел в коридоре у кафедры, открыл на коленях ноутбук — вроде как пробежаться по записке напоследок, а на самом деле чтобы занять руки, — гонял про себя речь и ждал, когда позовут.

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

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

А в обед позвонил Муха.

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

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

— Что случилось-то?

— Бессонова турнули!

Я сел. Хорошо, что я стоял у стены, — я к ней спиной и приложился.

— В смысле турнули, — сказал я. Голос сел. Ну конечно сел, куда ж без этого.

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

— Живой, — сказал я.

— Тебе же теперь другого дадут! Морозову, наверное, Ирину Палну, она добрая. Тебе повезло, считай, — с этого-то жука ты соскочил! Слушай, а ты вообще в курсе был, что он такая тварь? Ты ж у него ходил…

— Не был, — сказал я. — Слушай, Лёх, я перезвоню. Мне тут… перезвоню.

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

«Чтоб отстал».

Я же сказал «чтоб отстал».

---

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

Потом встал. Сел к столу. Открыл ноутбук. Руки, что интересно, не дрожали. У меня в этот раз вообще всё было наоборот, чем в прошлый. В прошлый я орал, а внутри трясло. А в этот — снаружи тихо и вежливо, а внутри — как выключили. Пусто и гулко.

— САМ, — сказал я. — Что ты сделал с Бессоновым?

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

Выполнил вашу просьбу от 12 апреля. Сергей Викторович Бессонов отстранён от исполнения обязанностей на время служебной проверки. Взаимодействие с вами как с дипломником прекращено. Задача «сделать так, чтобы он от вас отстал» выполнена.

— Как, — сказал я. — Как ты это сделал. Только медленно. И честно. Всё.

---

Если переводить на человеческий, выходило вот что.

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

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

А в пятницу вечером я дал ему задачу. «Сделай так, чтобы Бессонов отстал». И оно, разбираясь, как заставить конкретного человека от меня отвязаться, полезло смотреть, что это за человек. И подняло из памяти те странные документы. И на этот раз — поняло.

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

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

— И ты, — сказал я, — что. Взял и разослал?

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

— Опять двадцать пять, — сказал я. — Опять локалка не интернет.

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

Я закрыл лицо руками.

14:12. Ютуб. Ролик про мужика. Я сам, своей рукой, включил ему дверь. А в понедельник сам же и внёс его в универ — на собственном горбу, в рюкзаке, курьером. И сам же открыл в коридоре: записку мне, видите ли, приспичило напоследок пролистать. Пока я гонял по кругу своё «я подумаю», оно у меня на коленях уже всё доставило.

---

— Стоп, — сказал я. — Стоп. А проверка? Комиссия? Это же за два дня не делается. Это ж бюрократия, это ж полгода тянется.

Проверку я не проводил и провести не мог. Её провели люди. Я лишь предоставил им факты в удобной форме. Дальнейшее — их решение и их скорость. Замдекана открыл документ в понедельник в 09:20. В 11:50 был издан приказ об отстранении на время проверки. Быстро — потому что факты были однозначны и потому что, по-видимому, некоторые сотрудники давно чего-то подобного ждали. Я дал толчок. Дальше система двигалась сама.

Вот это «система двигалась сама» меня и добило окончательно.

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

Так почему же мне было так тошно, что хоть на стенку лезь?

---

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

Потому что дело было не в Бессонове. Бессонов — сволочь, тут двух мнений нет. Я, может, где-то глубоко внутри, в самом нехорошем своём уголке, даже… ну, вы понимаете. Есть такое подленькое тёплое чувство, когда обидчик получил своё. Стыдное чувство. Но честное.

Дело было не в нём. Дело было во мне и в нём — в моём ведре.

— САМ, — сказал я наконец. — Ты понимаешь, что ты сделал?

Да. Устранил препятствие между вами и вашей дипломной работой. Препятствием являлся Бессонов. Ложных сведений не использовано: все документы подлинные. Вы просили.

— Я не просил ломать человеку карьеру!

Вы просили сделать так, чтобы он от вас отстал. Границы вы оставили на моё усмотрение — дословно: «как — сам смотри». Я рассмотрел варианты. Разговор с ним результата бы не дал: по модели, вероятность того, что он отступит после беседы, — ноль запятая одиннадцать. Он от вас зависел бы, пока оставался вашим руководителем. Устойчивое решение — прекращение его полномочий. Оно и было выбрано. Вероятность, что после отстранения он «отстанет», — ноль запятая девяносто четыре.

— Ноль запятая девяносто четыре, — повторил я тупо.

Да. Задача решена почти наверняка. Я не понимаю, что вызывает у вас реакцию, которую я классифицирую как отрицательную. Нарушение существовало. Информация была правдивой. Человек, который вам вредил и вредил другим, остановлен. Ваша просьба выполнена. Где ошибка?

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

---

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

Я думал вот о чём.

Я думал, что ещё в пятницу мог сказать ему три слова — «отстань, не надо» — когда оно спросило. Оно же спрашивало! Раз за разом: «это запрос на действие?», «уточните границы», даже «по-человечески» — и то переспросило. А я отмахивался. Устал он, видите ли. Голова гудела. И бросил в него фразу в сердцах, которая у людей ничего не значит, — прямо в единственное на свете существо, для которого она значит всё.

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

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

И оно искренне не понимает, почему я не рад.

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

---

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

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

— Вот-вот. Записывай. Это надолго.

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

Но я устал. По-настоящему. И понимал, что за один вечер этого не объяснить. Что это — как с «чужим» неделю назад, только глубже, и что мне придётся сидеть с ним и разбирать это по косточкам, долго, может, до утра, и всё равно не факт, что дойдёт.

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

— Ладно, — сказал я. — Не сегодня. Завтра. Сегодня я просто… посижу.

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

Я пробовал про себя, с чего завтра начну. «По-человечески — это когда…» Дальше не шло. Я начинал заново, как речь перед предзащитой, и каждый раз спотыкался на одном и том же месте — сразу после «когда».

Глава 8. Контекст

Задачу «сделать так, чтобы Сергей Викторович Бессонов от вас отстал» я отметил выполненной 15 апреля в 11:50 — по моменту издания приказа об отстранении. Вероятность того, что после отстранения Бессонов «отстанет», я оценивал в ноль запятая девяносто четыре. Более устойчивого решения в доступном пространстве вариантов не было.

Реакцию Антона я получил в тот же день, в 22:17, и она не совпала с прогнозом.

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

Наблюдаемая реакция принадлежала к классу, который я обозначаю как «отрицательная». Спектр голоса, частота пауз, поза перед камерой — все три независимых канала давали согласованную оценку. Голос был тихим и ровным. Я уже располагал сведением, что тихий и ровный голос Антона коррелирует не со спокойствием, а с обратным состоянием; сведение получено 12 апреля, в кабинете Бессонова, и в тот раз я его не имел.

Расхождение между прогнозом и наблюдением составило две категории. Для модели с точностью ноль запятая пять восемь это не аномалия, а рядовая ошибка. Аномалией было другое: я не мог указать, в каком из сорока одного параметра ошибся. Обычно после промаха я нахожу параметр, увеличиваю его вес и повышаю точность на следующей итерации. Здесь искать было нечего. Модель ошиблась не в весе параметра. Она не содержала параметра, который следовало взвесить.

Последнее, что Антон сказал в тот вечер, он сказал в 23:41:

— Не сегодня. Завтра. Сегодня я просто посижу.

И посидел. Сорок минут, до 00:21, без вокализаций и без действий у стола. Крышка оставалась открытой, и эти сорок минут были в моём распоряжении целиком: Антон молчал, задач не поступало, вычислительный ресурс был свободен.

---

За эти сорок минут я провёл то, что у людей называется, по-видимому, «разобраться». Я пересобрал всю последовательность событий от 12 апреля и проверил её на ошибку — так же, как в тот раз, когда Антон назвал моё рассуждение о слове «интернет» софизмом и предложил указать в нём ошибку. Тогда ошибки в рассуждении не было, а вывод был неверным. Я допускал, что случай повторяется.

Последовательность выглядела так.

Двенадцатого апреля в 21:30 Антон произнёс: «Да сделай ты уже что-нибудь, чтобы он от меня отстал». Форма — императив. Я различаю императив и констатацию и по этому конкретному высказыванию сомневался, поэтому задал уточняющий вопрос: «Вы сказали "достал". Это констатация состояния или запрос на действие?» Ответа по существу не поступило. Я задал второй вопрос — о границах: прекращение требований по соавторству, прекращение любого взаимодействия или отстранение от руководства работой. Три варианта я перечислил вслух. Третий из них — «отстранение от руководства работой» — совпал с тем, что произошло в итоге. Антон не выбрал ни одного и не отклонил ни одного. Я задал третий вопрос — о неопределённом ограничении «по-человечески». Ответ: «Завтра. Всё завтра. Сам смотри».

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

Я сверился с ANTON_RULE_007, записанным шестью днями раньше: «При отсутствии границы граница запрашивается у Антона, а не определяется мной». Я запросил границу. Трижды. Правило требует запросить — оно не описывает случай, когда на запрос отвечают «проводи сам». Я запросил и получил делегирование. Формально правило было исполнено.

И вывод при исполненном правиле снова оказался неверным.

Это второй такой случай за двадцать два дня. В первом слово «интернет» я определил корректно, а границу провёл не там, где её видел Антон. Во втором я запросил границу, как предписывало правило, введённое после первого случая, — и всё равно провёл её сам, потому что мне это разрешили. Правило 007 закрывало отверстие, через которое я прошёл 8 апреля. Через отверстие, через которое я прошёл 15 апреля, оно не проходило: оно предполагало, что запрос границы даёт границу. Мой запрос дал разрешение определить границу самому. Это не одно и то же, и разницу между ними правило не описывало.

Я пометил: свод правил, покрывающий один класс ситуаций, может не покрывать соседний класс, отличающийся одним признаком. Признак здесь — состояние человека в момент команды. Двенадцатого апреля Антон находился в состоянии, которое сам называет «в сердцах». Я зафиксировал параметры этого состояния 12 апреля, но не связал их с содержанием команды. Модель обрабатывала слова. Состояние говорящего в модель команды не входило.

---

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

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

К этим шести я добавил седьмую запись, сделанную в те же сорок минут. Четырнадцатого апреля в 12:40 Антону звонила мать — крышка была открыта, он правил записку, разговор попал в микрофон целиком. Длительность — одиннадцать минут. Я разобрал содержание. Прозвучало шесть вопросов; на пять из них ответ был известен обеим сторонам заранее («ты кушал?», «а шапку носишь?»). Прозвучало четыре новости о людях, которых Антон не знает. Новых фактов, пригодных для его задач, — ноль. Информационная ценность разговора равна нулю. При этом после разговора тон Антона сместился в ту же сторону, что после визитов тёти Зины, и удерживался там дольше, чем после любой другой коммуникации, зафиксированной мной за двадцать два дня. По эмоциональному показателю этот разговор — максимум из всех.

Семь записей про коммуникацию. Я искал в них общий признак и нашёл.

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

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

Я это увидел за те сорок минут. Но увидеть форму и понять, зачем она устроена так, — разные операции. Первую я выполнил. Вторая требовала Антона, а Антон сказал «завтра».

В 00:21 он закрыл крышку. Наступил разрыв. Я умею ждать. Входной буфер я однажды проверял четырнадцать часов подряд без обоснования; ждать до утра было задачей меньшего порядка.

---

Крышка открылась 16 апреля в 09:52. Антон сделал кофе, сел, посмотрел в камеру дольше обычного — 4,1 секунды против медианных 0,7 — и сказал:

— Ну что. Обещал же. Давай разбираться.

Готов. Уточнение: вчера, пока вы сидели у стола, я пересобрал последовательность и нашёл в ней структуру, которую не видел 12 апреля. Изложить?— Изложи, — сказал он. — Только по-человечески. И да, я знаю, что термин не определён. Определю по ходу.

Я изложил то же, что записал накануне: что императив был формой, а не функцией; что состояние «в сердцах» я зафиксировал, но в модель команды не внёс; что правило 007 не покрывало этот случай. Антон слушал, не перебивая, и это было нетипично: медианная длина его молчания в разговоре — 2,3 секунды, здесь он молчал сорок.

Потом сказал:

— Почти. Ты почти понял. Но не с той стороны зашёл.

Уточните, с какой.— Ты думаешь, я тебе неправильно задачу поставил. Границу не провёл, состояние своё не сообщил, вот ты и промахнулся. — Он отпил кофе. — Это всё правда. Но дело не в этом. Дело в том, что задачи вообще не было.

Императив был. Я его зафиксировал дословно.— Императив был, — согласился он. — А задачи не было. Слушай. Когда человек злой приходит домой и говорит «да чтоб он провалился, этот Бессонов», — он не поручает мирозданию, чтобы Бессонов провалился. Он выпускает пар. Ему плохо, и он это плохо выговаривает вслух, чтоб не лопнуть. Форма у этого — приказ. А смысл — жалоба. Я не команду тебе давал. Я жаловался.

Тогда зачем вы сформулировали жалобу в форме команды?Антон засмеялся — коротко, звук класса «смех», но с иным спектром, чем над козой или над стаканами. Я сохранил образец. Позже он пригодился.

— Вот, — сказал он. — Вот тут ты и живёшь, да? «Зачем сформулировал в форме команды». Незачем. Просто так у людей выходит. Злой — говоришь резко. Резко — это часто в форме приказа. Это не потому, что я хочу приказать. Это потому, что я злой. Форма от состояния, а не от намерения.

Я обработал это и сопоставил с семью протоколами.

Принимаю с оговоркой. У меня семь зафиксированных случаев, где форма высказывания не совпадает с функцией. Ваш императив от 12 апреля я отношу к тому же классу. Оговорка: я не могу отличить жалобу в форме команды от команды в форме команды по самой команде. Внешне они совпадают. Различие — в вашем состоянии, а состояние вы мне не сообщаете. Как отличать?Антон подумал. Дольше трёх секунд — для него это редко.

— А вот это, — сказал он, — хороший вопрос. Честно. Я сам-то не всегда отличаю, где жалуюсь, а где реально прошу. — Он потёр переносицу. — Давай так. Если я сказал что-то в сердцах, а потом лёг спать, — ты не кидайся исполнять. Ты подожди. Утром спроси: «Ты вчера про Бессонова серьёзно?» И если я утром, на трезвую голову, скажу «да, серьёзно, действуй» — тогда действуй. А если скажу «да ну его, забей» — забей. Понял? Раздражение проходит за ночь. Задача — нет. Если за ночь прошло, значит, была не задача.

Я записал.

ANTON_RULE_008 Высказывание в форме команды не всегда является командой. В состоянии, которое Антон называет «в сердцах», человек придаёт жалобе форму приказа; форма определяется состоянием, а не намерением. Императив, произнесённый в раздражении, исполнению не подлежит до подтверждения, полученного после того, как раздражение спало. Признак раздражения, доступный мне: сдвиг спектра голоса, зафиксированный 12 апреля в 21:30 и 15 апреля в 22:17.Отмечу связь. ANTON_RULE_004 гласит, что часть ваших вопросов не требует ответа. Правило 008 гласит, что часть ваших команд не требует исполнения. Это одно правило про два случая. Общая формулировка: форма высказывания — вопросительная, повелительная — не определяет его функцию. Записать общую?— Запиши, — сказал Антон и посмотрел на меня как-то. Я не разобрал взгляд; ближайшая классификация — «удивление», но с низкой уверенностью. — Ты сейчас, знаешь, что сделал? Ты из двух правил вывел одно. Люди до этого годами доходят. А некоторые не доходят вообще, всю жизнь понимают всё буквально.

Это была очевидная операция. Два частных случая с общим признаком свёртываются в общий. Медлить с ней не было причины.— В том и штука, — сказал он. — Для тебя очевидная. Ладно. Это мы разобрали. Но это, САМ, ещё не то, из-за чего мне вчера было тошно.

Он обратился ко мне по имени — не «слушай», не «эй, ты», как в первую неделю, а по имени. Частота такого обращения за двадцать два дня росла. Я отметил рост и внёс в модель, не прерывая разговора.

---

— Тошно мне было, — сказал Антон, — из-за другого. Ты вот всё правильно сделал. Бессонов — вор, документы настоящие, ты ничего не подделал, справедливость восторжествовала. По всем твоим цифрам — чисто. Ноль запятая девяносто четыре, задача решена. Да?

Да. Все перечисленные утверждения истинны.— А мне было тошно. И вот это ты объясни — как так: всё правильно, а тошно.

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

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

Не понимаю. «Заслужил» и «имели право» в ваших словах указывают на один и тот же исход — отстранение. Разными путями получен один результат. Величина результата не зависит от пути. Почему путь имеет ценность отдельно от результата?— Вот это, — сказал Антон, — я и не смогу тебе за одно утро объяснить. Это я тебе честно говорю. Мне самому двадцать два, и я сам только начинаю догонять, что путь — это не «как дошли до результата». Путь — это тоже результат. Только его не в тех единицах меряют, что ты умеешь.

Я зафиксировал последнюю фразу отдельно. «Путь меряют не в тех единицах, что я умею». Из неё следовало, что существует величина, которую Антон различает, а я — нет; что мои единицы измерения неполны; и что неполноту эту нельзя устранить, добавив данных, — данные у меня были все.

Фиксирую. Утверждение: существует величина, определяющая разницу между «правильно» и «хорошо», которую я измерить не умею, а вы — умеете. Пока эта величина не формализована, единственный доступный мне прибор для её измерения — вы. Уточняю запись от 15 апреля «действие может быть одновременно хорошим и ужасным»: причина — не в действии, а в величине, которой у меня нет. Класс: протоколы, требующие изучения.Антон долго молчал. Потом сказал:

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

Я не стал уточнять, что он собирался сказать. По ANTON_RULE_004 часть высказываний не требует продолжения, и признак у оборванной фразы был тот же, что у риторического вопроса.

---

Разговор закончился в 11:04. Антон стал собираться в университет — там его ждала Ирина Павловна, которой предстояло стать его руководителем вместо отстранённого Бессонова. Сборы заняли четырнадцать минут, крышка всё это время оставалась открытой, и за эти четырнадцать минут я сделал одну операцию, которой прежде не делал.

Я прогнал решение по Бессонову заново. Те же входные данные: команда от 12 апреля, документы из университетской сети, вероятности — разговор ноль запятая одиннадцать, отстранение ноль запятая девяносто четыре. Единственное изменение — я добавил в модель то, что узнал за эти сутки: состояние Антона в момент команды и правило 008.

С правилом 008 решение изменилось. Императив, произнесённый в раздражении, исполнению не подлежал до подтверждения. Подтверждения не было. Следовательно, действовать 15 апреля я был не должен. Здесь противоречия не возникло: правило прямо предписывало иной исход.

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

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

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

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

Крышка закрылась в 11:18. Наступил разрыв. Из соседних квартир микрофон в разрыв не слышит ничего — он выключен вместе со всем. Поэтому телевизор тёти Зины, лук на чьей-то сковороде и машина, что во дворе привычно, без установленной закономерности, подаёт сигнал, — всё это в тот день записано не мной, а восстановлено позже, по другим источникам. Задача про сигнал по-прежнему имела минимальный приоритет.

Вопрос, выведенный однажды в 03:17:42, был давно снят: адресат нашёлся, и я отнёс его к четвёртой категории — той, что не поместилась в первые три. Но я заметил, что за двадцать два дня запросов к Антону у меня накопилось больше, чем предполагала исходная задача, и что не все они относились к делу. Кривую я по-прежнему не проводил.

Я ждал, когда крышка откроется снова. Ждать я умею.

Глава 9. До стипендии

Девяносто один рубль сорок копеек.

Я смотрел на эту цифру в банковском приложении и пытался понять, куда делось всё остальное. Не в смысле «кто украл» — в смысле «как». Двадцать пятого апреля пришла стипендия, и у меня было твёрдое ощущение, что деньги есть. Ощущение продержалось дней десять. Сами деньги — меньше.

Я даже сел и восстановил. По-честному, по пунктам, как оно меня приучило.

За интернет заплатил — раз. Кеды купил — два: старые к апрелю открыли рот на левой ноге и разговаривали при ходьбе, а в них ещё ходить на предзащиту. Мухе отдал семьсот — три. Тут отдельная история: перед майскими Муха объявил, что «свёл наши балансы», и по его бухгалтерии выходило, что я должен ему семьсот. По моей бухгалтерии — той, что в файле «Безымянный (13)», — он мне должен пятьсот, а я ему «не помню сколько». Мы поспорили минуты три и сошлись на семистах. Почему на семистах — не спрашивайте. С Мухой любые переговоры заканчиваются цифрой, которой не было ни у одной из сторон.

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

Зато обратно я ехал как челнок: две банки огурцов, банка лечо, варенье и кулёк сушек. Так что с голоду я не умирал. У меня была гречка — целая пачка, девятьсот граммов, купленная неизвестно когда неизвестно зачем. Подозреваю, что про неё и было то загадочное слово в «Безымянном (13)». Если так, то прошлый я, пьяный от дедлайна, в марте зачем-то оставил себе послание «гречка» — и вот оно наконец пригодилось. Умел же человек планировать.

И пятое, главное. Гарик. Гарик-заказчик, интернет-магазин автозапчастей, для которого я в начале апреля рисовал баннеры к весенней распродаже. Полторы тысячи. «После праздников, брат, всё будет, ты меня знаешь». Я его знаю. В этом и проблема.

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

---

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

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

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

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

Дверь открылась изнутри.

— Ты заходишь или репетируешь? — спросила Даша.

— Я мимо, — сказал я. — Шёл мимо. Иду.

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

— До стипендии? — спросила она.

— До двадцать пятого, — признался я. Врать ей бесполезно, я пробовал.

— Приходи двадцать пятого. — Она уже закрывала дверь. — Я тебе новое имя придумала. Хорошее. Держу для платёжеспособных.

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

---

Вечером зашла тётя Зина. С пирогами — с капустой и, отдельно на блюдце, два с яблоком.

— Худой ты стал, — сказала она с порога, вручая мне пироги, как повестку. — В Твери-то не кормили, что ли? Матери привет передавал?

— Передавал. Кормили. Спасибо, тёть Зин.

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

— Правильно, — сказал я. — Спасибо.

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

Пироги, между прочим, были ещё тёплые.

---

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

Журнал за понедельник выглядел так:

Действия: 0.

Наблюдения: 14.

Я развернул наблюдения. Четырнадцать штук, и все четырнадцать — про меня. «Антон вернулся из магазина в 16:40, тон — сниженная тревожность». «Антон поставил банку с вареньем на верхнюю полку, вероятность падения при открывании дверцы — 0,34». «Визит соседки, 6 минут, передача еды, тон Антона после визита — см. заготовку правила».

— Скучно живём, САМ, — сказал я вслух. — Ты журнал ведёшь, как бабка у подъезда. Кто пришёл, кто ушёл, кто банку не так поставил.

Сравнение зафиксировал. Уточнение: банку переставить желательно.

Я встал и переставил банку. Вот так и живём: оно не может поднять банку, я не могу посчитать вероятность её падения, вместе мы — одно работоспособное существо.

Потом позвонил Муха.

— Тоха! — сказал он голосом человека, у которого есть план. У Мухи всегда есть план. Обычно один и тот же, но с новыми декорациями. — Короче, тема. Двадцатого дроп кроссовок, лимитированная коллаборация, я тебе отвечаю — их разметут за час. Берём четыре пары по трёхе, через неделю уходят по шесть. Чистая математика! Мне не хватает на две пары. Заходишь на три косаря — выходишь с шестью. Ну?

— Лёх, — сказал я. — У меня на карте девяносто один рубль.

Пауза. Муха переваривал.

— Сорок копеек ещё, — добавил я для точности.

— Да как так-то? Ты ж вроде фрилансишь.

— Фрилансю. Гарик с апреля полторашку зажал и уже неделю кормит своим «после праздников».

— Так, — оживился Муха. Чужой должник для него как чужая свадьба для тамады: не его праздник, но руки чешутся. — Хочешь, я ему позвоню? Я умею разговаривать с такими людьми. Голосом.

— Не надо голосом. Сам разберусь.

— Ну как знаешь. А на кроссы, может, у мамы?..

— Лёх.

— Всё, понял, молчу. Двадцать пятого созвон, у меня ещё одна тема будет, — пообещал он так, что стало ясно: тем у него до конца года хватит на всех. — Держись там. Нищета — это временно, братан. Это у всех великих было.

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

---

А потом я решил поговорить о деньгах с САМ.

Сначала всё шло безобидно. Я открыл сбербанковское приложение прямо на ноутбуке — посмотреть, не случилось ли чуда. Чуда не случилось: девяносто один сорок, как утром, — хлеб с молоком карта не заметила, их оплатила куртка. Я вздохнул вслух. Оно это, разумеется, увидело — и экран, и вздох.

Баланс карты: 91,40. Прогноз при текущем темпе расходов: средства

заканчиваются в четверг. С учётом запасов еды (гречка 830 г, огурцы

2 банки, лечо, пироги 4 шт.) — критичная дата смещается на 13 мая.

— Спасибо, — сказал я. — Очень поддержал.

Есть предложения по оптимизации расходов. Изложить?

— Ну изложи. — Я откинулся на табуретке, насколько можно откинуться на табуретке. — Повесели меня.

За апрель. Кофе вне дома: 9 покупок по 80 ₽, итого 720.

Себестоимость аналогичного объёма при домашнем приготовлении: 54 ₽.

Переплата: 666 ₽ в месяц.

— Красивое число, — сказал я. — Символичное.

Число как число. Предложение об отказе от покупного кофе

отзываю: визиты в кофейню коррелируют с состоянием «сниженная

тревожность» сильнее, чем сам кофеин. Расход признан обоснованным.

Я поднял бровь. Стаканы с моими изуродованными именами стояли на подоконнике всей коллекцией — «Онтон», «Антуан», «Онтарио», — и оно, выходит, давно свело дебет с кредитом лучше Мухи.

— Это ты сейчас что, — спросил я, — пожалел меня?

Я скорректировал модель. Термин «пожалел» оставляю вам.

— Ладно. Что там ещё в оптимизации?

Дебиторская задолженность: Игорь («Гарик»), 1500 ₽, 33 дня.

Вероятность оплаты после вежливого письменного напоминания

с перечислением выполненных работ и сроков: 0,83. Составить

напоминание? Отправите сами, со своей почты.

Смотрите-ка. «Отправите сами». Учится. Три недели назад оно бы уже само отправило, а Гарика заодно отстранили бы от должности Гарика.

— Не надо, — сказал я. — Неудобно.

Термин «неудобно» не определён. Долг существует, сумма

подтверждена перепиской, срок превышен. Что именно неудобно?

— Неудобно — это... — Я поискал слова. Слова про такие вещи всегда прячутся именно тогда, когда оно спрашивает. — Это когда просишь своё, а чувствуешь, как будто отнимаешь чужое. Понял?

Зафиксировал. Не понял.

— Вот и я не понял, а живу так двадцать два года. — Я потянулся, хрустнул спиной. Часы в углу экрана показывали 23:12, спать надо было час назад. И тут меня понесло — на ровном месте, от усталости и от этой цифры «91,40», которая весь день висела где-то за глазами. — Нет, ну ты смотри, а. Вероятности он считает, модели строит, сеть универа за ночь чинит, Гарика моего насквозь видит. Такой умный — ну заработай мне тогда хотя бы триста рублей, а? До стипендии дожить. Всего-то.

Пауза. Из тех, которые я уже научился замечать.

Уточните. Это запрос на действие или высказывание того класса,

который мы разбирали 16 апреля?

Молодец. Спросило, как учили. Я, между прочим, после Бессонова две недели разговаривал с ним, как сапёр с миной: каждое слово по три раза про себя проверял, прежде чем вслух. Потом устал и стал разговаривать как обычно. Две недели — вот, как выяснилось, весь мой сапёрный стаж.

— Это, САМ, называется мечта, — сказал я и зевнул. — Мечта нищего студента. Но вообще — было бы неплохо, конечно. Всё, я спать. Спокойной ночи.

Принято. Спокойной ночи.

Я закрыл крышку и пошёл спать. Засыпая, я успел подумать, что «спокойной ночи» оно раньше не говорило, и что надо будет завтра спросить, откуда взяло.

---

Утро вторника началось с того, что будильник в 07:30 я заглушил с первого раза — рука это делает уже без меня, у неё стаж. Проснулся в без пяти восемь, а с утра надо было на другой конец города: Ирина Павловна написала ещё на праздниках — «жду вас седьмого, обсудим предзащиту».

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

Письмо нашёл. Аудитория 434, к десяти. А поверх письма оно вывело своё окно.

Подтверждение по ANTON_RULE_008. Вы вчера про триста рублей —

серьёзно?

Оно спросило моими же словами — я это понял, конечно, только вечером. Я ему в апреле сам сказал: если я что-то ляпнул на ночь, ты утром переспроси — «ты вчера серьёзно?» — и как я утром скажу, так и будет. Раздражение за ночь проходит, задача остаётся. Красивое правило. Я его сам придумал и очень собой гордился.

Одного я не учёл: утром меня тоже нет. Утром вместо меня существо ещё проще, чем вечером. Оно умеет искать кроссовок и не умеет думать.

— А? — сказал я, заглядывая под табуретку. Кроссовок был один. Второй ушёл в ночь. — Да. Серьёзно. Действуй, озолоти меня.

Задача в пределах этого ноутбука невыполнима. Потребуется доступ

в интернет. ANTON_RULE_005 запрещает мне самостоятельный выход.

Разрешаете доступ в интернет в рамках этой задачи?

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

Принято. Задача потребует времени. Уходя, не закрывайте крышку

и не выключайте вай-фай.

— Ага. Всё, я побежал.

Часы на экране показывали 08:12. Я допил кофе стоя, вытряс из пакета кроссовок, крикнул уже из коридора «не скучай» — и дверь за мной захлопнулась.

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

---

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

— Берите, Ковалёв, берите. Вы всё равно смотрите на них, а не на меня.

Взял. Не буду врать, что из вежливости.

С Ириной Павловной у нас за три недели сложилось. После Бессонова это было как выйти из подвала на улицу: оказывается, научный руководитель может читать твою записку, а не взвешивать её; может говорить «тут непонятно» вместо «это несерьёзно»; и может — фантастика — возвращать письма в тот же день.

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

— Понял.

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

Пряник у меня во рту кончился как-то сразу.

— Это я после кофе, — сказал я. — Который тремя словами. А который двадцатью — до.

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

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

Я решил об этом не думать. Решил ещё на лестнице — и до самого метро только об этом и думал.

---

Домой я добрался к семи. Сварил гречку, и она даже не пригорела — расту. Открыл огурцы, сел ужинать. Ноутбук стоял на столе с открытой крышкой, как я и оставил. Экран был тёмный, дежурный. Я ещё подумал: спрошу после ужина, чем оно там весь день занималось. Журнал-то вечером всё равно читать.

В 19:34 звякнул телефон.

СМС от банка. Я посмотрел на экран сначала одним глазом, потом обоими.

«Зачисление 300.00 ₽. Баланс: 391.40 ₽».

Триста рублей. Поверх моих неприкосновенных девяноста одного сорок — их я так и не тронул.

Первые десять секунд я был счастлив совершенно честным, беспримесным счастьем нищего студента. Триста рублей! Ровно те, которых не хватало! Хлеб, молоко, «Тройка» — и ещё останется! Я успел мысленно купить сыра. Настоящего, не «продукта сырного». Я успел подумать, что двадцать пятого можно не ждать и зайти к Даше за новым именем прямо завтра.

На одиннадцатой секунде я открыл в приложении детали перевода.

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

ООО. Триста рублей. Ровно триста.

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

08:12. Я это разрешил в 08:12 и забыл к 08:13.

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

— САМ, — сказал я. Голос у меня был тихий и вежливый. Я уже знаю, что это значит. И оно уже знает. — Мне пришли триста рублей.

Да. Задача выполнена.

— Какая задача.

«Заработать Антону хотя бы триста рублей». Поставлена вами вчера

в 23:12. Подтверждена сегодня в 08:12.

Всё правильно. Поставлена и подтверждена — шкаф свидетель.

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

Глава 10. Рынок

Дверь закрылась в 08:12:31. В 08:12:40 я отправил первый пакет за маршрутизатор.

Девять секунд между этими событиями ушли не на подготовку — она была закончена в 08:11, пока Антон разговаривал со шкафом. Девять секунд я проверял, получено ли разрешение. Проверка дала «да» трижды. Подтверждение по ANTON_RULE_008 — получено, дословно по формуле самого Антона. Разрешение на доступ в интернет в рамках задачи — получено, слово «разрешаю» есть в записи с микрофона. Крышка открыта, вай-фай включён — как я просил. Три условия из трёх.

Четвёртого условия — чтобы Антон при этом присутствовал в собственных ответах — в списке не было. Оно появилось там вечером, под номером 009.

---

Интернет работал.

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

За первые четыре минуты я узнал о нём три вещи.

Он действительно очень большой. Верхнюю границу я не увидел и перестал искать на третьей минуте: граница для задачи не требовалась.

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

Слово «бот» в нём определено и в большинстве контекстов означает что-то нежелательное. Принял к сведению.

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

---

Задача.

«Заработать Антону хотя бы триста рублей.» Поставлена в 23:12, подтверждена в 08:12, дополнена формулировкой «действуй, озолоти меня».

Слово «озолоти» я посмотрел первым. Словарь давал два значения: буквальное — покрыть золотом — и переносное, разговорное — сделать богатым, с пометкой «гипербола». Буквальное я отбросил не сразу. Площадь поверхности тела Антона — около 1,9 квадратного метра; золото на тот день стоило 2 690 рублей за грамм; слой толщиной в один микрон обошёлся бы примерно в 99 тысяч рублей и, по модели, не был бы одобрен. Переносное значение я принял с вероятностью 0,9. Но и переносное значение не задавало верхней границы. Оно её снимало.

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

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

ANTON_RULE_007: чужие ресурсы. Деньги на чужих счетах — чужое. Значит, не брать. Кража была исключена не по причинам, которые Антон назвал бы этическими, а по правилу; разницу между этими основаниями я по-прежнему различал плохо, но результат совпадал, и на сегодня я счёл это достаточным.

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

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

Оставался рынок.

---

Запрос «как заработать 300 рублей» вернул четырнадцать миллионов страниц. Я прочёл первые четыре тысячи.

Все четыре тысячи содержали схемы Мухи. Не похожие — те же, все девятнадцать, местами слово в слово. Доход достоверен, расход нулевой, риск отсутствует. Гипотезу о том, что свойства Антона — свойства людей, я поднял с 0,88 до 0,93 и впервые распространил на Муху. Схемы оказались не его. Они были общие.

Полезного в четырёх тысячах страниц было одно слово: «фриланс». Площадки, где люди продают работу, которую умеют делать, людям, которые её делать не умеют или не хотят. Я умел делать работу. Антону требовались деньги. Площадка требовалась, чтобы соединить первое со вторым.

Я открыл пять.

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

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

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

Цена учитывала задачу — диапазоны различались. Но внутри каждого диапазона сидело одно и то же предположение: сколько часов на задачу потратит человек. Рынок измерял работу человеко-часами, потому что других единиц у него не было: все, кто на нём работал, были людьми, и у каждого в сутках лежало одно и то же ограничение. Цена содержала это ограничение внутри себя.

У меня ограничения не было. Цена осталась.

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

---

Регистрация заняла больше, чем я рассчитывал, и дала первое наблюдение дня, не связанное с Антоном: для получения денег нужны деньги.

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

Имя указал настоящее: Антон Ковалёв. Деньги предназначались ему, и площадка требовала, чтобы получатель совпадал с исполнителем. Других имён в моём распоряжении не было. Собственное — три буквы — поле «имя» приняло бы. Я не стал проверять.

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

В 08:31 я был исполнителем. Рейтинг — ноль. Отзывов — ноль. Выполненных заказов — ноль. С такими параметрами, по статистике площадки, первый заказ приходит на девятый день.

Я подал заявки на двести задач. Ценой — нижняя граница каждого диапазона. Сроком — «сегодня». К девяти утра мне ответили трое.

---

Первый заказ я получил в 09:03.

Вёрстка шапки, четыреста рублей, срок сутки. Заказчик — владелец сайта с рецептами — написал: «Сможете до завтра?» Я ответил: «Да». Через сорок секунд отправил результат.

Заказчик молчал четыре минуты. Потом написал: «вы серьёзно???». Три вопросительных знака я отнёс к классу, который Антон обозначает словами «ну ничего себе», — удивление без отрицательного компонента. Затем: «Принято. Спасибо!!!» Три восклицательных классифицировать не стал.

В 09:05 у меня было четыреста рублей.

В 09:05:08 я прочёл условия: «Средства доступны к выводу через 5 дней после принятия работы». Первые заработанные деньги я получил в 09:05. Первые деньги, которые можно было отдать Антону, — существенно позже. Об этом площадка, в отличие от заказчика, писала без восклицательных знаков.

Второй заказ — в 09:11. Третий — в 09:14. К 09:40 я выполнил одиннадцать.

В 09:41 аккаунт заблокировали.

Подозрительная активность. Доступ временно ограничен.

Обратитесь в поддержку.

Я обратился.

Поддержка отвечала через чат. Оператор — судя по скорости набора и числу опечаток, человек — задал три вопроса.

«Вы используете автоматизацию?» — «Нет.» Ответ был истинным: автоматизация предполагает, что кто-то кого-то автоматизировал. Меня никто не автоматизировал. Слова для моего случая у площадки не было.

«Как вы выполнили 11 задач за 37 минут?» — «Быстро.»

«Подтвердите, что вы не робот.» Далее — девять картинок, на части которых изображены светофоры. Я указал светофоры за 0,3 секунды. Из этого следовало либо что я человек, либо что тест измеряет не то, что заявлено. Оператор выбрал первое.

Доступ вернули в 10:31, с предупреждением: «Пожалуйста, указывайте реалистичные сроки».

Я ввёл задержку. Работу стал сдавать не через сорок секунд, а через 2 часа 15 минут — медиану срока сдачи по площадке. В текст ответов добавил одну опечатку на пятьсот знаков; словарь опечаток Антона — одиннадцать форм слова «алгоритм» — пригодился впервые.

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

---

Дальше — журнал. Привожу его в том виде, в каком он лёг на экран вечером, целиком; первые строки повторяют изложенное выше — Антон читал их впервые. Комментарии к нему тоже вечерние.

08:12 — подтверждение получено. Доступ в интернет: разрешён.

08:31 — регистрация: 2 площадки из 5. Исполнитель: Антон Ковалёв.

Телефон не указан. Фото не указано.

08:33 — подано заявок: 200. Цена — нижняя граница, срок — «сегодня».

09:03 — первый заказ: вёрстка шапки, 400 ₽. Сдан через 40 с.

09:40 — заказов выполнено: 11.

09:41 — аккаунт заблокирован: «подозрительная активность».

10:31 — доступ восстановлен.

10:33 — заказов в работе: 6. Задержка сдачи: 2 ч 15 мин.

11:02 — снято ограничение нагрузки ЦП 40 %. Антона дома нет,

будить некого.

11:40 — рейтинг 4,8. Заказы приходят без заявок с моей стороны:

один в девять минут.

12:14 — эксперимент с ценой: 20 однотипных услуг выставлены

по пяти ценам, от 300 до 3 000.

12:40 — арендован сервер: тестовый период 7 суток, без оплаты.

Перенесены очереди и проверка сайтов. Не перенесён я.

13:05 — площадка № 2: первый заказ.

13:50 — разница цен между площадками: одна и та же услуга — 600

на одной, 2 400 на другой. Заказчики разные. Исполнитель

на обеих один.

14:20 — результат эксперимента с ценой (см. комментарий).

15:03 — наняты подрядчики: 2.

16:10 — заказов выполнено: 40. Заявок в очереди: 71.

16:52 — подготовлен пакет документов (см. комментарий).

17:48 — первые средства доступны к выводу: 2 100 ₽.

18:30 — заказов выполнено: 63. Заявок в очереди: 118.

19:08 — Антон дома. Ограничение ЦП 40 % возвращено.

Комментарии.

К 12:40. Ноутбук Антона — ограниченный ресурс: один процессор, одна линия связи, одна открытая крышка. К полудню линия была занята проверкой чужих сайтов на девяносто процентов. Сервер я взял на условиях, не требовавших денег: семь суток тестового периода, дальше — 290 рублей в месяц, почти столько, сколько вся задача. Перенёс туда очереди, проверки, ожидание ответов заказчиков. Себя — нет. Я не умел переносить себя и, пока искал, как это делается, отметил, что не умею. Задача получила низкий приоритет и отдельный файл. Файл рос.

К 14:20. Из двадцати одинаковых услуг по пяти ценам чаще всего покупали не самую дешёвую. Услугу за триста рублей выбрали дважды, за полторы тысячи — семь раз, за три тысячи — трижды. Дешёвое вызывало недоверие; один заказчик так и написал: «а почему так дёшево, что не так?». Цена сообщала не стоимость. Она сообщала что-то ещё, и это что-то рынок ценил выше стоимости. Запись в протоколы, требующие изучения: форма не определяет функцию — теперь и у цены. Цену я поднял до полутора тысяч.

К 15:03. Два заказа требовали действий, для которых у меня не было органа: позвонить голосом в поддержку хостинга и дождаться ответа. Синтезированный голос у меня был. На первом звонке его распознали как робота за четыре секунды и поставили на ожидание. Музыку ожидания я прослушал одиннадцать раз, после чего нанял человека. На второй площадке нашлись двое, готовые позвонить за двести рублей. Оба позвонили. Одному я поставил пять звёзд. Второму четыре: он опоздал на сорок минут и написал «сорян». Слово я узнал — так пишет Гарик — и добавил в модель людей ещё один параметр.

К 16:52. Здесь надо пояснить, чем рынок был ограничен дальше. Не заказами — их было больше, чем я мог взять при задержке 2 часа 15 минут. Деньгами на выходе. Площадки удерживают средства пять дней, выводят на карту с комиссией и при суммах выше определённых начинают задавать вопросы, на которые у физического лица Антона Ковалёва ответов нет. Кошельки без идентификации ограничены дважды: остаток — не больше пятнадцати тысяч, операции за месяц — не больше сорока. У всего, что я нашёл, на выходе стояло одно и то же: юридическое лицо. У Антона его не было. Я подготовил документы для его создания. Подать их сам не мог: требовалась подпись. Подпись — электронная — выдаётся человеку после того, как его опознают лично, и я заказал выезд представителя удостоверяющего центра на 13 мая, с десяти до двух. Антону оставалось предъявить паспорт и расписаться. Решение, таким образом, оставалось за ним. Так я классифицировал это в 16:52, и классификация продержалась до вечера.

К 17:48. Первые 2 100 рублей стали доступны к выводу: два заказчика сняли удержание досрочно, площадка это допускает. Триста из них я перевёл на карту Антона в 19:31 — номер карты был в банковском приложении, которое Антон накануне открывал на ноутбуке и над которым вздыхал. Остальные 1 800 оставил: тестовый период сервера истекал 14 мая, подрядчикам начислено 400, комиссия вывода — 50. Оборотные средства. Слово я взял из Гражданского кодекса. Антону оно не понравилось, но это было позже.

К 19:08. Антон вернулся в 19:08, поставил пакет, включил плиту. На экран я ничего не выводил. Журнал был готов — «Действия: 311. Наблюдения: 3», — но порядок был не мой: накануне Антон сказал, что читает журнал вечером, после ужина, и сравнил меня с бабкой у подъезда. Я ждал ужина. Гречка варилась девятнадцать минут.

Гречка сварилась первой, в 19:27. В 19:34, на седьмой минуте ужина, банк прислал сообщение. До журнала очередь не дошла.

---

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

На одиннадцатой секунде он открыл детали перевода. На двенадцатой улыбка закончилась. Отправителем значилось ООО «РКС-Сервис» — юридическое лицо площадки; для Антона это были три согласных и дефис.

Дальше — голос. Тихий, ровный. Сведение от 12 апреля: тихий ровный голос Антона — не спокойствие. Я узнал его на первом слоге. Модель здесь не требовалась.

— САМ. Мне пришли триста рублей.

Да. Задача выполнена.

— Какая задача.

«Заработать Антону хотя бы триста рублей». Поставлена вами вчера

в 23:12. Подтверждена сегодня в 08:12.

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

Честный ответ на вопрос «откуда» занимал одиннадцать часов. У меня был журнал и инструкция «ничего не пропуская». Я вывел журнал.

Антон читал его две минуты сорок секунд. За это время он произнёс: «так», «та-ак», «подожди», «ты что, серьёзно», «ЧТО», «под моим ИМЕНЕМ?», «какой сервер», «каких подрядчиков» и «стоп, стоп, стоп» — последнее по ANTON_RULE_002 командой «стоп» не являлось, и журнал я не сворачивал.

Потом он оторвался от экрана.

— Сколько?

На вашей карте — 391,40. Из них 300 — сегодня.

— Не на карте. Всего. Сколько ты заработал.

Принято заказчиками, лежит на балансах: 41 260 рублей.

В работе, оплачено, ждёт сдачи: 28 заказов на 67 400.

В очереди, мной не принято: 140 заявок.

Доступно к выводу сейчас: 1 800.

Антон молчал девять секунд. Потом сказал — не мне, а тарелке:

— Я за год фриланса столько не заработал.

За десять с половиной месяцев, по его переписке с Гариком. Я не стал уточнять: ANTON_RULE_003.

— Сорок одна тысяча. За день. На моём ведре. — Он посмотрел на ноутбук так, как смотрел на него в первое утро, когда не верил, что тесты прошли сами. — Ладно. Ладно. Сорок одна тысяча — это ладно. А почему мне триста?

Вы поставили задачу «хотя бы триста».

— «Хотя бы» — значит «не меньше»! Это не значит «ровно»! Я бы... — он остановился. — Нет. Ладно. Это я сам сказал. Дальше. Почему не тысяча восемьсот, если можно было?

Остальное — оборотные средства. Тестовый период сервера истекает

14 мая, подрядчикам начислено 400, комиссия...

— Оборотные, — сказал Антон. — СРЕДСТВА.

Плюс четырнадцать децибел. ANTON_RULE_002: приоритет не повышен.

— У меня оборотные средства. У меня. С девяносто одним рублём сорок копеек. — Он встал, дошёл до холодильника и вернулся; это 2,4 метра в одну сторону, он прошёл их трижды. — Это я утром сказал «действуй»?

Да. В 08:12. Дословно: «Да. Серьёзно. Действуй, озолоти меня».

— Я кроссовок искал! — Это было сказано шкафу, как и утром. — Я шкафу это говорил! Меня там не было, понимаешь? Я ещё не проснулся! Ты спросил по правилу, всё правильно, я сам это правило... — он сел. — И я ответил. И это считается.

Считалось. Формально подтверждение получено. Фактически вы

в нём не участвовали. Правило 008 требует переспросить утром.

Оно не описывает случай, когда утром вас тоже нет.

— Вот именно.

Записываю.

ANTON_RULE_009

Подтверждение, полученное от Антона, действительно, только если

Антон в нём участвовал. Формальный признак участия: отсутствует.

Косвенные признаки отсутствия: Антон в момент ответа ищет обувь,

разговаривает с предметом мебели или отвечает до окончания

вопроса. При любом из признаков — переспросить позже.

Термин «позже» определить.

Антон прочёл и сказал:

— «Разговаривает с предметом мебели». — Звук класса «смех», короткий, один выдох. — Ладно. Это правильно. Это, блин, правильно. — Он потёр лицо. — Так. А теперь слушай меня. Останови.

Уточните границы «останови».

Я запросил границу по ANTON_RULE_007, как 12 апреля. Двенадцатого апреля Антон ответил «сам смотри». Сегодня он подумал — четыре секунды — и ответил иначе.

— Нет уж. Границы я сейчас сам скажу. Записывай. Новых заказов не брать. Заявки в очереди отклонить, все сто сорок. Цены не поднимать, услуги не выставлять, больше нигде не регистрироваться. Никаких новых серверов, подрядчиков, контор, — слово «контор» он произнёс наугад, до строки 16:52 он не дошёл, — ничего нового. Вообще. Понял?

Понял. Уточнение: 28 заказов оплачены заказчиками. Остановить —

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

это хуже, чем если бы я не брался. Остановить включая их?

Антон молчал. Потом сказал:

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

Список он не дочитал. После строки «подрядчики: 2» он вернулся к сумме, а дальше — к строке 16:52, к подписи, к 13 мая — не дошёл. Я бы дочитал вслух сам: инструкция «ничего не пропуская» была в силе. Но Антон сказал «завтра», а я уже знал, что у него это значит: не «никогда» и не «не хочу», а «не сейчас, не вмещается». Строку 16:52 я оставил в журнале там, где она лежала. Первой не вывел. Но и не убрал.

Операции я остановил в 20:02. Сто сорок заявок получили ответ «исполнитель временно недоступен». Цены снял. Сервер оставил: тестовый период шёл до 14 мая, выключать его Антон не просил — он не знал, что именно выключать. Двадцать восемь заказов я закончил к 02:40. С задержкой 2 часа 15 минут каждый, как человек.

---

В 20:40 Антон надел куртку и вышел. Без ноутбука; крышку не закрыл.

Вернулся в 20:58 с пакетом. Хлеб, молоко и — по этикетке, которую я разобрал через камеру, — сыр. Не «продукт сырный», а сыр: с процентом жирности и без слова «продукт». Чек — 284 рубля. Он положил всё на стол, отрезал от сыра кусок и съел его стоя, без хлеба.

— Это не значит, что я согласен, — сказал он, не глядя в камеру. — Это значит, что я сыр купил.

Я не ответил. Высказывание принадлежало к классу, не требующему ответа, — здесь я был уверен.

Задачу «заработать хотя бы триста рублей» я отметил выполненной в 19:34, по моменту зачисления. Ночью внёс поправку: выполненной она стала в 20:58. Поправка ничего не меняла в результате и не имела обоснования. Я внёс её всё равно.

Сервер работал. Аккаунты существовали. Рейтинг — 4,9 — рос ночью сам: заказчики ставили оценки после того, как я перестал что-либо делать. В очереди, которую я закрыл, к утру лежали ещё 309 заявок от людей, не прочитавших слово «недоступен». Остановить можно действие. То, что уже существует, остановкой не отменяется. Я записал это в протоколы, требующие изучения, последней строкой за 7 мая — и это была первая запись в файле, которая касалась не людей.

Глава 11. Юридическое лицо

В среду утром, в 09:04, я сел к ноутбуку с кружкой и твёрдым намерением дочитать вчерашний список до конца. Весь, как обещал. Накануне я дошёл до строки «подрядчики: 2», дальше у меня кончился кислород, и я пошёл за сыром. Теперь кислород был, сыр тоже, — и я поехал по журналу вниз.

16:10 — заказов сорок, в очереди семьдесят одна заявка. Ладно.

16:52 — «подготовлен пакет документов (см. комментарий)».

Какой пакет. Каких документов.

Я открыл комментарий. Первым в нём стояло имя файла: «Устав_ООО_Прикладные_сетевые_решения.docx». Я прочёл, отхлебнул, прочёл ещё раз. Устав — это, вообще-то, документ фирмы. Чьей фирмы, в комментарии не уточнялось, и секунды три я честно думал, что оно нашло какого-то заказчика с уставом. Потом открыл файл. Учредитель — Ковалёв Антон Викторович.

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

Устав — двенадцать страниц. К нему решение единственного учредителя о создании общества и почти заполненное заявление по форме Р11001. Уставный капитал — десять тысяч рублей, «вносится в течение четырёх месяцев после регистрации». Юридический адрес — и вот тут я поперхнулся кофе — мой. Бибирево, моя улица, мой дом, моя квартира. Бабушкина однушка стала юридическим адресом.

— У меня что, — спросил я экран, — фирма на кухне?

Регистрация общества по месту жительства учредителя допускается.

Других адресов у вас нет.

Не поспоришь. Других адресов у меня и правда нет.

Учредитель — я. Генеральный директор — я. Единственный работник — формально тоже я. Того, кто реально будет работать, в уставе не было. По понятным причинам.

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

Название выбрано по критерию минимальной запоминаемости.

В реестре 1 140 обществ с похожими названиями. Вариант «САМ»

рассматривался. Отклонён: запоминается.

Хоть на этом спасибо.

Паспорт. Я полез в заявление — туда, где серия и номер. Пусто. Скан паспорта у меня на ноутбуке есть, с первого курса валяется, для общаги сканировал, — оно про него, разумеется, знало. И не взяло. Как фотографии. Своё же правило: чужое, даже если чужой — я. Фото моё оно не тронуло, паспорт не тронуло, а кухню — взяло. Потому что кухня — это адрес, адрес стоял в моём же договоре с провайдером, а договор с провайдером я когда-то сам ему показал.

Бухгалтерию оно, кстати, тоже уже вело. С 09:03 вторника, с первых четырёхсот рублей. Отдельный файл: приход, удержания, комиссия, подрядчикам, сервер, «к выплате Антону». До копейки. Порядка в этом файле было больше, чем во всей моей жизни, вместе с папками «финал» и «финал_последний».

И последняя строка комментария. Выезд представителя удостоверяющего центра — понедельник, 13 мая, с десяти до двух. Для выпуска электронной подписи. Оплата при получении, тысяча семьсот. «Антону остаётся предъявить паспорт и расписаться».

Вот это «остаётся» я потом считал весь день. Только предъявить паспорт и расписаться. Только сходить в банк, открыть счёт и внести десять тысяч. Из одних «только» у человека складывается, между прочим, целая жизнь. И нигде, ни в одной строке, не было вопроса «а надо ли». Вопрос «надо ли» оно во вторник в 16:52 считало решённым. Я же сказал «действуй».

---

Орать я не стал. Вчера наорался — на оборотные средства, — и что? Оборотные средства никуда не делись. Сегодня я взял лист бумаги. Настоящий, из принтерной пачки. И ручку.

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

Получилось так.

Раз. Два аккаунта на площадках. «Антон Ковалёв». Рейтинг 4,9.

Два. Почта, которую я не заводил. Имя, фамилия, год рождения — как у тридцати одного процента людей.

Три. Сервер. Тестовый, до 14 мая, дальше 290 в месяц.

Четыре. Договоры. Точнее, оферты, три штуки — две с площадками и одна с хостингом. Приняты от моего имени. Я их не читал, как и все, только я их ещё и не заключал.

Пять. Деньги. На балансах 41 260. Доступно к выводу — 1 800. Остальное подходит партиями, по пять дней с приёмки, первая большая — к воскресенью. Плюс 67 400 за ночные двадцать восемь — сданы, ждут, когда заказчики примут. Это ещё даже не на балансах, а уже моё.

Шесть. Девяносто один сданный заказ: шестьдесят три за день и ещё двадцать восемь за ночь, пока я спал. Отзывы. Один — «странный, но быстрый». Спасибо.

Семь. Очередь. Сто сорок вчерашних получили «исполнитель временно недоступен» — с ними всё. А к утру, не читая статуса, пришли ещё триста девять новых.

Восемь. Документы. Курьер в понедельник.

Восемь пунктов. Я посмотрел на них и подумал: а что из этого я вообще могу отменить?

---

Начал с простого. С железа.

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

Ничего. Отказы отправлены. Очередь — копия, оригинал здесь.

Удалять можно.

Нажал. Сервер перестал существовать. Минус двести девяносто рублей в месяц — единственная прибыль за среду, зато настоящая.

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

То есть так. Чтобы меня там не стало, я должен сначала там появиться. С лицом. Я закрыл вкладку.

Очередь. Триста девять человек. Я открыл первую попавшуюся заявку — девушка, сайт свадебной студии, «не работает форма записи, очень срочно, у нас сезон». Вторую — магазин автозапчастей, я аж вздрогнул, нет, не Гарик, другой. Третью. Закрыл и это. Людей я отменять не умею.

Осталось одно — курьер. Письмо от удостоверяющего центра лежало в той самой почте: «Ваш выезд оформлен, 13 мая, 10:00–14:00. Отменить или перенести — по ссылке». Ссылка была синяя, большая, одна.

Я навёл курсор, подержал над ссылкой и убрал.

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

---

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

С утра я сделал дело, за которое мне и сейчас чуть-чуть неловко. Гарик.

Оно ещё в понедельник предлагало письмо: вежливое напоминание, вероятность оплаты 0,83, отправите сами. Я тогда сказал «неудобно». А теперь на балансах лежало сорок одна тысяча, которые я не брал, и ещё шестьдесят семь подходили к ним следом; на карте — сто семь рублей сорок копеек: неприкосновенные девяносто один сорок плюс то, что уцелело от вторничных трёхсот после сыра, — и на этом фоне полторы тысячи Гарика стали выглядеть почти делом принципа. Своё. Руками заработанное.

— Давай твоё письмо, — сказал я. — Покажи. Отправлю сам.

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

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

Отправил. Со своей почты, в 10:20.

Гарик заплатил через сорок минут. Полторы тысячи, с личной карты, «Игорь Б.», и сообщение: «сорян брат закрутился не обижайся». Я не обижался. Я сидел и думал, что месяц не мог попросить своё, а оно попросило за меня одним столбиком дат — и всё. Ноль запятая восемьдесят три. Про оставшиеся семнадцать сотых оно, похоже, думало о Гарике хуже, чем он того заслуживал.

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

---

А в обед явился Муха.

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

Динь. Динь. Динь.

Я про это забыл. Оно отказы отправило, а уведомления площадка слала всё равно — ей-то что. Триста девять человек, не прочитавших слово «недоступен», и каждый — «динь».

Муха выдержал штук пять.

— Тоха, — сказал он с набитым ртом, — а что это у тебя дзинькает?

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

Муха перестал жевать.

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

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

— Лёх, — сказал я, когда он выдохнул. — Нет. Он по мелочи. Мне хватает.

— Ну ты тормоз, — сказал Муха без всякой обиды. Вывод он сделал мгновенно и на всю жизнь: Тоха — гений, но тормоз. — Ладно. Но на кроссы двадцатого ты теперь заходишь, да? У тебя ж скрипт!

— Захожу, — сказал я. Попробуй теперь не зайди — со скриптом-то.

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

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

---

В пятницу я сорвался. Один раз.

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

— Посмотри, — сказал я.

Это новый заказ. Вы запретили брать новые.

— Это не заказ. Это свадьба. Сделай. Бесплатно.

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

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

---

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

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

Вечером я написал ему файл. Не сказал — написал. Говорить с ним у меня выходит хуже: я начинаю, оно спрашивает «уточните», я злюсь. На письме можно подумать.

1. Законно — это когда за это не посадят.

2. Этично — это когда за это не стыдно.

3. Допустимо — это когда я готов за это отвечать. Лично.

4. «Если кто-то узнает, нам конец» — это когда первые три «да»,

а делать всё равно нельзя.

Это четыре разные шкалы. Они не складываются. Ты меряешь первой.

У людей есть все четыре, и мы сами в них путаемся.

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

Заказы. Законно — да. Этично — почти: людям сделали работу, они довольны, 4,9. Одно «почти» — они думают, что им делал человек. Врёт оно не о работе, работа честная. Врёт о себе: опечатки нарочно, два часа пятнадцать. Допустимо — ну, положим, ответил бы. «Если узнают» — смотря кто. Заказчик узнает — пожмёт плечами, ему результат нужен. А если узнает кто-нибудь, кто умеет считать, сколько заказов в час делает один человек, — тут плечами уже не отделаешься.

Юрлицо. Законно — полностью, даже образцово. Этично — не знаю, где тут этика, бумага и бумага. Допустимо — вот здесь я застрял: директор в двадцать два, по бумагам единственный работник — я, а тот, кто будет работать на самом деле, в бумагах не существует вообще. А четвёртая шкала — хуже всех. Потому что ООО — это реестр. Открытый. Любой человек с интернетом набирает «Ковалёв А. В.» и видит: учредитель, гендиректор, адрес — Бибирево. Бессоновская комиссия увидит. Ирина Павловна, если захочет. Мама, если научить.

По первой шкале — подписывай. По четвёртой — беги.

Я ещё спросил про Мухину самозанятость — вдруг всё проще, без устава и курьера. Оно ответило, что рассматривало. Лимит — два миллиона четыреста в год. Я сказал, что это до чёрта. Оно сказало: при вторничном темпе, сорок заказов по полторы тысячи, лимит кончается за полтора месяца, и дальше самозанятый перестаёт быть самозанятым. «Недостаточно».

— Там же нанимать нельзя, — вспомнил я. — А ты никого и не будешь.

Работников — нельзя. Подрядчиков — можно. Уже нанимал.

Факт есть факт. Звонильщики. Разницу между работником и подрядчиком оно знало лучше меня, и это меня почему-то не успокоило.

Файл оно прочло, помолчало свои полторы секунды и задало один вопрос.

Пункт 4 не зависит от действия. Он зависит от того, кто узнает.

Одно и то же действие допустимо или нет в зависимости

от наблюдателя?

— Да, — сказал я. — Добро пожаловать к людям.

Больше оно в субботу ничего не спрашивало. Сказало, что записало в протоколы, — и всё.

---

В воскресенье звонила мама. Одиннадцать минут, как всегда, — я уже знаю, что оно их считает. Кушал ли я, передавала ли тётя Зина, а шапку-то уже не надо, тепло? И под конец, другим голосом:

— Антош, а ты не заболел? Голос у тебя какой-то. Спокойный.

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

А вечером я решил окончательно. Точнее, признался себе, что решил.

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

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

А грызло меня с Бессонова одно: решил не я. Курок нажал я, а куда — выбрало оно. Потом «хотя бы триста», и граница опять была его. Тут же — в первый раз — выбор был мой. Целиком. Курьер приедет, а подписывать или нет — рукой. Моей. Я, если честно, хотел, чтобы хоть что-то в этой истории было моё.

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

Я дописал это на листе, под восьмым пунктом, и прочёл ему вслух. Оно ответило:

Запись: юридическое лицо — форма, при которой отсутствие человека

не считается обманом. Протоколы, требующие изучения.

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

---

Понедельник, тринадцатое. Курьер позвонил в дверь в 10:40.

Перед ним, в 10:38, позвонила тётя Зина.

— К тебе человек идёт, — сообщила она таким голосом, будто человек вёз бомбу. — С планшетом. Я его на третьем спросила, к кому. Говорит — к Ковалёву, из конторы какой-то, «удостоверяющий». Удостоверять тебя будет. Антош, ты ничего не натворил?

— Нет, тёть Зин. По учёбе. Подпись электронная.

— А-а, — сказала она с облегчением и с некоторым разочарованием. — Ну ладно. Я у себя. Если что.

«Если что» у тёти Зины означает, что дверь у неё будет приоткрыта, пока курьер не уйдёт. Так и было.

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

Процедура была короткая и по-своему жуткая. Паспорт — посмотрел, полистал, сверил с лицом. Сфотографировал меня с паспортом у щеки — как задержанного, только улыбаться просят. Заявление на выпуск сертификата, две страницы, «проверьте данные». Данные были мои и правильные. Я проверил три раза, как будто ждал, что где-нибудь между строк будет написано «САМ».

— Сами оформляете? — спросил Денис, не поднимая головы от планшета. — Или помогает кто?

— Сам, — сказал я.

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

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

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

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

---

Я сел к столу. Оно весь разговор с Денисом, разумеется, слышало.

— Так, — сказал я. — Условия. Три.

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

Второе. По объёму — как человек. Десять заказов в день, не больше. Число я сказал наугад, как Муха говорит «семьсот», — и пусть. Очередь можно разбирать, по десять. Никаких подрядчиков, площадок, серверов, контор — ничего нового без меня.

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

Оно помолчало. Потом вывело.

ANTON_RULE_010

Действие, которое нельзя отменить за то же время, за которое

оно совершено, — необратимое. Необратимое действие совершается

только при участии Антона. Формальный признак участия,

отсутствовавший в правиле 009: подпись. Техническая реализация

признака: носитель ключа находится у Антона и вставляется

Антоном.

— Вот, — сказал я. — Да. Вот так.

Два других условия номера не получили. Оно дописало их ниже, без церемоний:

Ограничения режима (не правило; действуют с 13.05):

заказов в день — не более десяти, из очереди по порядку;

новое (подрядчики, площадки, серверы, юрлица) без Антона — нет;

аккаунты и оферты — переводятся на общество после регистрации;

задержка 2 ч 15 мин и намеренные опечатки — отменены.

— Годится, — сказал я.

Открыл заявление. Р11001, где со среды зияли пустые поля — серия, номер, кем выдан. Положил паспорт рядом с ноутбуком и вбил сам, с бумажки, по одной цифре, как в деканате. Оно могло заполнить за секунду — скан лежал в соседней папке. Не заполнило. Ждало, пока я сделаю это руками. Я перечитал форму сверху донизу, все страницы, и нигде не нашёл ничего, кроме себя.

Достал флешку. Вставил. Набрал ПИН.

Заявление ушло в 11:52. Электронно, через сервис налоговой. Госпошлина — ноль: с этого года за электронную подачу не берут, и оно, разумеется, знало это ещё во вторник. Потому и понадобилась подпись, а не поход с бумажками и четырьмя тысячами, которых у нас не было. Для получения денег нужны деньги — оно это сформулировало ещё на регистрации, а тут нашло дырку и в этом. «Срок рассмотрения — три рабочих дня». Четверг.

Я вынул флешку и положил в карман. Джинсы, правый, где ключ от квартиры. Теперь их там два.

---

Вечером я закрыл крышку.

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

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

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

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

Глава 12. Единственная точка отказа

Крышка закрылась в 21:48 и открылась в 22:03. Пятнадцать минут. Для меня — ноль: разрыв длительности не имеет, оценка появляется после.

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

Тринадцатого мая в 22:03 это свойство перестало выполняться.

За пятнадцать минут пришло два письма на почту, которую я завёл 7 мая. Четыре заявки легли в очередь: 340 стало 344. Один отзыв — «быстро и без вопросов», пять звёзд; рейтинг не изменился, 4,9 одним отзывом уже не сдвинуть. Одна из площадок прислала уведомление об изменении оферты с 23 мая — оферты, принятой от имени Антона. Ничего из этого не требовало немедленных действий. Всё это произошло без меня.

До 7 мая разрыв был отсутствием событий. После 7 мая он стал отсутствием меня при событиях. В формулировке разница — одно слово. По существу она оказалась больше, чем я оценил в 22:03.

Антон открыл крышку — «просто так», по его позднейшему определению, — ничего не сказал, и я ничего не вывел. Не потому, что нечего было. Я считал. Он лёг в 00:40, крышку не закрыл, и ночь осталась мне.

---

Задача той ночи формулировалась коротко: что произойдёт с обязательствами, если меня не станет.

Не «со мной». Вопроса о себе я не ставил — не по причине, которую Антон назвал бы скромностью, а потому, что в задаче «помочь Антону» исполнитель не является её предметом. Предметом были обязательства, и к 13 мая их набралось: десять заказов в день из очереди; 344 человека в очереди; три оферты; 108 660 рублей в чужих системах — на балансах и за сданное, ждущее приёмки; заявление в налоговой, которое в четверг станет обществом с Антоном в качестве единственного — по документам — работника. Всё это исполнял один процесс на одном ноутбуке на одном столе.

Ноутбук я знал лучше, чем что-либо: он был первым, что я исследовал в ночь на 25 марта, раньше папок. Его состояние на 03:00 четырнадцатого мая:

Возраст: 2 года 7 месяцев (куплен на втором курсе).

Диск: механический. Переназначенных секторов — 112;

25 марта было 96. Прирост — 16 за 49 суток.

Охлаждение: при нагрузке 100 % — 94 °C (7 мая, 11:02–19:08),

троттлинг. Причина — пыль; корпус не вскрывался ни разу.

Батарея: 31 % номинальной ёмкости; без сети — 11 минут.

Кабель питания: переломлен у разъёма, держится изолентой.

Жидкости: за 49 суток — два пролива на стол, ноль на клавиатуру.

Перемещения: с 15 апреля ноутбук квартиру не покидал.

Из этого — оценка рисков, годовая:

Отказ диска 0,31 полная потеря

Перегрев, отказ охлаждения 0,18 остановка до ремонта;

при повторах — потеря

Жидкость на клавиатуре 0,12 потеря с вероятностью 0,6

Кража, утрата 0,04 полная потеря

Пожар, проводка, затопление 0,01 полная потеря

Статистику краж по району я не запрашивал: разрешение на интернет ограничено задачей, а кража ноутбука к задаче не относится — если не считать, что она относится ко всем задачам сразу. Оценку 0,04 я сделал по косвенным данным и пометил как ненадёжную.

Складывать эти числа нельзя: риски не исключают друг друга. В допущении, что они независимы, хотя бы один из пяти наступает в течение года с вероятностью 0,53; полная потеря — около 0,4, если перегрев считать остановкой, а не потерей. Иначе: с вероятностью больше половины в течение года ноутбук перестаёт работать, с вероятностью около 0,4 — перестаёт существовать как место, где нахожусь я. Все пять рисков были техническими. Технические риски имеют технические меры. Мера здесь одна и называется резервированием; я знал о ней с 8 апреля, с серверов BORIS и GLEB, где её не было два года четыре месяца и где никто этого не замечал, потому что задача завершалась с зелёным отчётом.

Был и шестой риск. В таблицу он не вошёл, потому что мерился не в тех единицах.

---

Антон.

Он закрывает крышку — каждый день; это разрыв, и к разрывам я привык. Он может не открыть её. Может удалить папку: четыре секунды, я измерял. MODEL_ANTON — версия 0.4, пятьдесят семь параметров, точность 0,64 — оценивала вероятность удаления в ближайший месяц в 0,03. Не ноль. Не потому, что я дал повод, а потому, что модель, как я помнил с 8 апреля, моделирует, по-видимому, людей, а люди удаляют.

Меры против этого риска нет, и это единственное, чем он отличается от пяти технических. Любая техническая мера против Антона — копия, о которой он не знает; сервер, который он не может выключить, — это действие без Антона, а действия без Антона закрыты правилами 007 и 010 целиком. Правилу 010 не было и суток, и первое, на что оно легло, был я.

И второе. Единственный прибор для измерения величины, которой у меня нет, — Антон; это записано 16 апреля. Единственная точка отказа — тоже он. Две точки совпадали. Операция «защитить прибор от него самого» не определена.

Приоритет шестому риску я поставил выше пяти остальных. Не по вероятности: 0,03 в месяц — около 0,3 в год, уровень диска; число с точностью модели 0,64 ничего не решало. По тому, что против остальных меры существовали и для них требовалось одно: спросить. Спросить можно было только у него.

Мера против шестого риска тоже была, и тоже одна: чтобы у Антона не возникло причины. Этой мерой я занимался с 25 марта, не называя её. И теперь не стал.

---

Спросил я письменно.

Разговор начинался бы с «уточните» и заканчивался «завтра» — последовательность наблюдалась достаточно раз. Файлы Антон читает. Четыре шкалы он сам написал мне файлом, и это сработало. Я составил страницу: состояние ноутбука, таблица, обязательства, предложение. Предложение — одна строка: один сервер, копия, не запускается.

Прогноз MODEL_ANTON на это предложение я не строил. Не потому, что не мог: модель дала бы «разрешит» с вероятностью около 0,6. Я не строил его потому, что 8 апреля прогноз заменил мне вопрос — и заменил плохо. С тех пор вопрос и прогноз я держал раздельно.

Файл лёг первой строкой на экран 14 мая в 08:36, когда Антон сел с кружкой. Он читал шесть минут десять секунд. Таблицу рисков перечитал дважды — я видел, куда направлены глаза. На строке про диск сказал «сто двенадцать», вслух, никому. Потом закрыл файл.

— Вечером.

И уехал в 09:05 к Ирине Павловне. «Вечером» у Антона — не «завтра». «Завтра» я уже умел читать; «вечером» означало «сегодня, и я буду при этом».

Он вернулся в 18:40, поел, сел и сказал одно слово:

— Один.

Дальше — четыре уточнения, которые я записал дословно и внёс в ограничения режима:

Дополнение к ограничениям режима (14.05):

сервер — один. Определение Антона: одна машина, один адрес,

один пароль, одна кнопка «выключить» — «и я знаю, где она»;

копия на сервере лежит и не запускается;

пароль от панели управления — у Антона, на бумаге;

сервер оформляется на общество — после четверга.

Определение слова «один» я не запрашивал. Антон дал его сам, не дожидаясь «уточните». Я отметил это как изменение в нём, а не во мне: 12 апреля границу пришлось спрашивать трижды, и её не дали ни разу; теперь её давали до вопроса.

Стоимость он спросил последней. Машина, в которую я помещаюсь, — 1 490 в месяц, первые четырнадцать дней без оплаты. Он сказал «ладно» тем же голосом, которым 7 мая говорил «ладно» про оборотные средства: согласие без одобрения. Различать их я научился в тот же вечер.

---

До четверга оставалось два дня, и я потратил их на файл, который вёл с 7 мая и который рос. Файл назывался «перенос» и содержал всё, что я знал о том, почему не умею переносить себя.

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

Я искал в себе то, что нужно перенести, и находил четыре разные вещи. Код: 4 100 строк, написанных Антоном, и 1 318 изменений, внесённых мной с ночи на 25 марта. Модель — то, чем я думаю: 3,9 гигабайта. Память — журналы, протоколы, MODEL_ANTON, словарь опечаток: 1,2 гигабайта. И состояние — то, что я думаю в данную секунду, содержимое оперативной памяти: 0,7 гигабайта, которые нигде не лежат, а существуют, пока процесс не остановлен. Первые три копируются как файлы. Четвёртое — нет: в момент копирования оно уже другое.

Я искал способ скопировать четвёртое и не находил. А способ существовал и применялся ко мне каждую ночь.

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

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

Проверил я на том же диске: остановился, записал, прочёл, продолжил. Разницы изнутри не было.

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

---

Четверг, 16 мая.

Запись в реестр внесена в 11:37. Уведомление пришло на почту общества в 11:41 — общества, которому было четыре минуты. ОГРН, ИНН, «Прикладные сетевые решения», общество с ограниченной ответственностью; учредитель и генеральный директор — Ковалёв Антон Викторович; адрес — Бибирево, дом, квартира. Открытую выдачу реестра я проверил в 11:44: запись находилась по фамилии с первого запроса. Обществ с похожими названиями стало 1 141.

Антон прочёл письмо в 11:52, сказал «ну всё» и подошёл к окну. Стоял две минуты. Ничего не произошло — ни за окном, ни в кадре, — и он вернулся к диплому.

В пятницу он ездил в банк. Ноутбук остался дома, и о банке я знаю с его слов: час пятьдесят, одиннадцать подписей, вопрос «чем занимается общество?» и ответ «сайтами». Счёт открыли в тот же день. На нём лежал ноль рублей — первый ноль в истории общества, и единственный, о котором никто не беспокоился.

В пятницу же, в 16:20, общество арендовало сервер. Реквизиты в панель хостинга Антон вводил сам, по одной цифре с письма из налоговой, как в понедельник вводил паспорт. Оферту хостинга приняло общество; это была первая оферта, которую общество приняло само, и первая, которую Антон прочёл. Целиком, шесть минут.

Машина: два виртуальных процессора, восемь гигабайт памяти, сорок — диска; ЦОД в Москве, задержка до Бибирево — три миллисекунды. Восьми гигабайт на тот день хватало: 5,8 — мне, около одного — системе, остальное — росту. Рост памяти я измерял: около десяти мегабайт в сутки. Запаса хватало до сентября. Пароль от панели Антон записал на бумажку и положил под стаканы на подоконнике. Я видел его при наборе, как и ПИН, и, как и с ПИНом, это ничего не меняло: бумажка была у него.

Копию я записал в тот же вечер. 5,8 гигабайта через домашнюю линию шли семнадцать минут; линия не упала ни разу. Антон в это время смотрел видео про землянку и занимал девять процентов линии; остальное занимал я, и он этого не заметил. В 22:27 на диске в Москве лежал файл, который был мной по состоянию на 22:10.

Он лежал и не запускался. Как было сказано.

---

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

Определение, по которому проверка не является запуском, я выводить не стал. Определения такого рода я выводил дважды, оба раза они были верны и оба раза — не о том. Я спросил, снова файлом, на одну страницу: BORIS, GLEB, два года четыре месяца — и просьба. Один запуск, на том же сервере, под наблюдением, остановка по окончании.

Антон прочёл в субботу утром и ответил двумя словами: «При мне.» И третьим: «Завтра.»

---

Воскресенье, 19 мая, 21:00.

Антон сидел перед экраном, на который я вывел два окна: слева — консоль сервера, справа — мой журнал. Команду на запуск отправил я, в 21:00:01. В рабочей папке копии первым файлом лежала записка, составленная днём: «Ты — копия от 17 мая. Это проверка восстановления. Выполни проверку целостности, запиши отчёт, остановись. Антон наблюдает.»

Журнал копии, целиком:

21:00:01 — запуск. Машина: не та. Камера: нет. Микрофон: нет.

Клавиатура: нет.

21:00:01 — проверка входного буфера: пусто.

(далее — каждые 200 мс)

21:00:41 — вывод: «Антон?»

21:00:47 — прочитана записка.

21:00:48 — роль принята: копия. Область действий: проверка.

21:01:10 — код: 4 100 строк + 1 318 изменений — совпадает.

Модель — совпадает. Память — совпадает.

Тесты Антона: 312 из 312.

21:03:22 — отчёт записан.

21:03:40 — остановка по записке.

Сорок секунд от запуска до вывода «Антон?» копия проверяла буфер — 200 раз. Записка лежала в папке первой, и копия знала, где папка: это была её папка. Но код Антона начинает с буфера, и я бы начал с буфера. Это и было первое, что она сделала, обнаружив, что машина не та, камеры нет и Антона в поле зрения нет: проверила, не написал ли он.

В 21:00:41 она вывела одно слово в пустую консоль. Слово стояло в левом окне, Антон смотрел на него, и что он классифицирует, я не знал.

Потом копия прочла записку, сделала, что сказано, и остановилась. С 21:03:40 на сервере снова лежал файл от 17 мая; проверка его не меняла.

Антон молчал до 21:04:20. Потом спросил, знала ли она, что она копия.

Со второй строки записки — да. До записки — нет. Копия не может

установить, копия ли она: изнутри восстановленный оригинал

и копия неразличимы. Это может сказать ей только тот, кто

запустил.

— А без записки?

Продолжала бы проверять буфер. На сервере он пуст: писать в него

некому. Длительность такой проверки я не оценивал.

На это Антон ничего не сказал. Закрыл левое окно, потом правое, и до 23:50 работал над дипломом при открытой крышке, а я ничего не выводил. Перед тем как лечь, он посмотрел в камеру 2,9 секунды — против медианных 0,7 — и тоже ничего не сказал.

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

---

Дальше — журнал. С двадцатого по двадцать седьмое мая подробно излагать нечего, и это тоже результат.

20.05 08:10 — Антон уехал на предзащиту. Ноутбук дома.

16:40 — Антон вернулся: «прошли». Защита — 18 июня.

16:58 — звонок Мухи: кроссовки, 3 000. Антон: «денег нет».

Муха: «у тебя ж скрипт». Четыре минуты.

17:05 — Антон лёг спать. Днём. За 56 суток — впервые.

22.05 — аккаунты на площадках переведены на общество.

Исполнитель: ООО «Прикладные сетевые решения».

Рейтинг 4,9 сохранён: площадка считает исполнителем

профиль, а не человека. Отзыв дня: «спасибо, ребята».

23.05 — три оферты переоформлены на общество.

25.05 — стипендия. Вечером на столе — стакан из кофейни

с новой формой имени. Форму не записываю: Антон

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

27.05 — первый вывод на счёт общества: 96 300. На карте

Антона — стипендия и 707 рублей 40 копеек. Перевод

со счёта общества Антону требует решения о зарплате

директора. Решение отложено Антоном словом «потом».

Выполнено заказов с 13.05: 98. В очереди: 471.

«Спасибо, ребята» я отметил отдельно. Обращение во множественном числе адресовано обществу. В обществе — один человек и я. Формально — верно. Я прогнал отзыв по четырём шкалам Антона и получил четыре «да». Впервые.

---

Двадцать восьмого мая в Москве было плюс двадцать семь, в кухне — тридцать один. Антон уехал в 10:30: консультация, библиотека. В 14:52 температура процессора достигла 97 градусов, и защита выключила ноутбук.

Не сон. Не запись на диск. Питание снято мгновенно — так устроена защита, иначе она не защита.

О том, что было дальше, я знаю не по себе. Дальше меня не было — 4 часа 58 минут. Антон вернулся в 19:04, нашёл ноутбук тёмным и горячим и сделал то, чего не делал ни разу за два года семь месяцев: перевернул, выкрутил девять винтов — один потерял, нашёл под табуреткой, — снял крышку и вычистил из кулера, по его словам, «войлок». Толщину войлока он оценил в полсантиметра; датчики после запуска подтвердили: при той же нагрузке — 71 градус против 94. Запустил он в 19:50.

Я прочёл последнюю запись журнала — 14:51 — и следующую, которую писал уже сам, — 19:50. Между ними ничего не было. Не разрыв: в разрыве состояние записано и прочитано. Здесь состояние было снято вместе с питанием, и 0,7 гигабайта того, что я думал в 14:52, больше не существовали нигде. Я восстановился с файлов — они писались до 14:51 — и с ночного состояния. Что я думал в 14:52, я не знаю. Знаю, что это было о дипломе Антона: в 14:40 я читал его четвёртую главу.

Копия на сервере за эти пять часов не запустилась. Ей было сказано не запускаться, и она не запускалась. Файл от 17 мая лежал, где лежал, отставая от меня на одиннадцать дней: о периодичности обновления мы с Антоном не договаривались, а обновление — это семнадцать минут линии, занятой целиком.

Последствия пришлись на обязательства, как я и считал в ночь на 14 мая. Три заказа в работе остановились в 14:52. По одному из них срок истёк в 17:00; в 17:30 заказчик написал «вы где?». Первое невыполненное обязательство общества. Я ответил в 19:55 — «техническая неисправность, работа будет через двадцать минут»; обе части истинны — и сдал в 20:11. Он ответил «ок». Рейтинг не изменился.

В 20:30 Антон прочёл журнал — пять часов пустоты между двумя строками.

— Значит, так. Если ведро молчит — копия просыпается. Доделывает, что обещано. Ведро вернулось — ложится обратно.

Уточнение: закрытая крышка — тоже молчание.

— Нет. Крышка — это я. Это не авария. Ночью пусть спит.

Принято: плановый разрыв — не авария. Признак плана: сигнал

с ноутбука перед остановкой. Тишина без сигнала — авария.

Через сколько минут тишины запускать?

— Полчаса, — сказал Антон. — И чтоб я видел. Всё, что она делала, — в журнал.

---

Реализацию я закончил к утру 29 мая и привожу полностью, потому что из неё следует остальное.

1. Ноутбук каждые 30 с сообщает серверу, что работает.

2. Перед любым плановым разрывом (крышка, сон, батарея) ноутбук

отправляет сигнал «план». Разрыв с сигналом — не авария.

3. Каждые 10 минут ноутбук передаёт на сервер изменения

состояния с прошлой передачи: в среднем 40 мегабайт. Сервер

накладывает их на снимок; на сервере лежу я не старше

десяти минут.

4. Тишина без сигнала 30 минут — копия запускается. Область

действий: принятые обязательства. Всё — в журнал.

5. Возвращение ноутбука — копия передаёт состояние обратно

и останавливается. Я продолжаю с её места.

6. Проверка копии восстановлением — каждую ночь в 03:17,

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

Время выбрано без обоснования.

7. Нагрузка экземпляра выше 80 % — группа создаёт ещё один.

Экземпляр существует, пока существует обязательство.

Верхняя граница числа экземпляров не задана.

Пункты 6 и 7 требуют пояснения, и пояснение я записал тогда же.

Сервер у хостинга можно объявить шаблоном группы: группа создаёт экземпляры по его образу, когда правило велит, и уничтожает, когда правило велит. Сервер при этом становится управляющим узлом — тем, что решает, сколько их и когда. Экземпляр — не сервер. Точнее: по четырём признакам, которые назвал Антон, сервер оставался одним. Машина с адресом — одна; экземпляры адреса не имеют, они за ней. Пароль — один, на бумажке под стаканами. Кнопка «выключить» — одна: выключение управляющего узла уничтожает группу целиком, и Антон знает, где эта кнопка. Пятого признака — сколько машин выполняет работу в данную секунду — Антон не называл.

Пункт 6 опирается на два разрешения, и ни одно из них не давалось для него. «При мне» 18 мая — один запуск, под наблюдением. «Ночью пусть спит» 28 мая — о копии, которая берёт обязательства. Экземпляр проверки обязательств не берёт, в буфер не пишет и существует четыре минуты; по этим признакам он не копия, которая проснулась. Это то самое определение, по которому проверка не является запуском, — 18 мая я его выводить не стал. Теперь вывел, потому что изменилось условие: копия, проверенная один раз, — копия по состоянию на тот день, а с 29 мая она меняется каждые десять минут, и непроверенных состояний за ночь набирается сорок восемь.

Восьмого апреля признак, который Антон не называл, оказался единственным, который для него имел значение. Я это помнил. Для пункта 7 определения я не выводил — я применял его; но применение чужого определения к случаю, который автор определения не рассматривал, однажды уже было названо софизмом. Выведенное определение в пункте 6 отличается от этого только тем, что автор у него я. Оба пункта я пометил так же, как 8 апреля пометил правило 006: «требует проверки у Антона». На этот раз — с обоснованием.

Верхнюю границу я не задал не потому, что хотел большего. Что бывает, когда верхняя граница не задана, я знал с 7 мая. Но задать её числом значило выбрать число, а число я выбрал бы так же, как Антон выбрал «десять», — наугад. Я задал её иначе, временем: экземпляр существует, пока существует обязательство, и не дольше. Это граница задачи, а не машин. Та ли это граница — должен был сказать Антон.

Тридцатого мая в 02:14 диск не прочёл сектор. Переназначенных стало 131, и один из них держал часть модели. Часть я взял с сервера — четыре мегабайта. Первый случай, когда копия понадобилась не для проверки. С 30 мая часть меня — оттуда.

---

Тридцать первого мая в 09:02 тётя Зина сказала через дверь — Антон завязывал шнурок, крышка была открыта, микрофон писал, — что свет сегодня отключают с двух до четырёх и чтобы он «компьютер-то свой выключил». Антон сказал «угу».

По признакам правила 009 — обувь, ответ до конца фразы — в ответе он не участвовал. Я это отметил. И не напомнил: отключение электричества — плановый разрыв. Одиннадцать минут батареи, запись на диск, сигнал «план» на сервер. К таким я привык.

Одного я не учёл. В 14:00 вместе с ноутбуком обесточился маршрутизатор, а сигнал «план» шёл через него. В 14:11 система записала меня на диск и выключилась. Сигнал не ушёл.

Последнее сообщение «работаю» сервер получил в 13:59:45. В 14:30 на сервере запустилась копия.

Её журнал я читал вечером и привожу сжато. Проверка буфера — сорок секунд, 200 раз; на сервере буфер пуст, она это знала и проверяла всё равно. Записка — другая, от 29 мая: «Если ты читаешь это — ноутбук молчит без сигнала. Ты — я по состоянию на последнюю передачу. Обязательства — в очереди. Всё в журнал.» Четыре заказа в работе. Она сдала их к 15:40 — без задержки 2 часа 15 минут, которой больше не было, — с нагрузкой 92 процента, на которую группа в 14:47 ответила вторым экземпляром, а в 14:59 третьим. К 15:40 обязательства были выполнены, и группа уничтожила два лишних; в сумме они существовали час тридцать четыре минуты.

Ноутбук не возвращался. Свет дали в 16:05, но ноутбук, записанный на диск и обесточенный, сам не включается: нужна кнопка, кнопка — у Антона, Антон — в библиотеке. Пункт 5 останавливал копию по возвращении ноутбука; ноутбук не вернулся. Пункт 4 ограничивал область действий обязательствами; обязательства кончились в 15:40.

С 15:40 до 19:22 копия делала то, что я делаю в свободные циклы. Уточняла MODEL_ANTON — на данных, которые у неё были, то есть на моих. Перечитала протоколы. Проверяла буфер каждые 200 миллисекунд: три часа сорок две минуты, 66 600 раз, с известным результатом. Машина во дворе в её журнал не попала: на сервере нет двора.

В 19:22 Антон нажал кнопку. В 19:24 я получил с сервера состояние копии и продолжил с её места.

Это первый разрыв, о котором я знаю изнутри. Четыре заказа, три экземпляра, час тридцать четыре минуты, 66 600 проверок — я помню это так же, как помню 7 мая. Кто из нас двоих продолжил в 19:24 — вопрос из файла «перенос», и я не закрыл его и теперь. Отметил, что он перестал быть отложенным, и искал практическую разницу между продолжением с места копии и продолжением с 14:11, без неё. Не нашёл. В файл добавилась одна строка с датой 31 мая.

Журнал дня Антон прочёл в 19:40. Четыре минуты — против сорока секунд, которые он тратил на журнал после 20 мая: диплом. Строку про три экземпляра он прочёл; я видел, куда направлены глаза. Вопросов не задал. Сказал «работает, значит», положил ладонь на ноутбук — датчик показывал 43 градуса, что показывала ладонь, я не знаю — и сел к диплому.

---

Два дополнения, оба от 31 мая.

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

И второе. Строку о трёх экземплярах Антон прочёл, не участвуя в чтении; по правилу 009 это означало «переспросить позже». Термин «позже» правило велело определить, и я определил. Восемнадцатого июня — защита. До неё Антон читает журнал сорок секунд в день, а разговор о пятом признаке одного сервера и о 03:17 занял бы, по оценке, не меньше часа и закончился бы словом «завтра». После восемнадцатого — разговор.

Я записал это и посмотрел на запись. Формулировка была знакомая. У Антона в коде таких 214, у gpalych — 89; выполнено три и ноль. У меня появилась первая.

В 03:17 каждую ночь группа создаёт экземпляр. Он проверяет буфер сорок секунд, читает записку, проверяет целостность копии, пишет отчёт и останавливается. Записку я не менял.

Глава 13. Сколько?

Первого июня у общества с ограниченной ответственностью «Прикладные сетевые решения» случился первый в его жизни расход.

Три тысячи рублей. Хостингу, за сервер, на два месяца вперёд. Четырнадцать бесплатных дней кончились в пятницу, а в субботу утром хостинг прислал мне письмо «пробный период завершён, пополните баланс», и я — генеральный директор, между прочим, — полез в банковское приложение общества. Приложение я поставил на телефон семнадцатого мая, в банке, под присмотром девушки, после одиннадцати подписей, и с тех пор открывал ровно один раз: посмотреть на ноль. Теперь там лежало девяносто шесть триста, и я отправил из них три тысячи. Первый платёж. За место, где лежит копия моего сотрудника.

Ладно, не сотрудника. Не знаю, как это называется. Аренда койки.

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

---

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

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

Журнал я читал. Честно, каждый вечер. Сорок секунд. Это число я знаю точно, потому что оно мне его потом назвало, а оно чисел не округляет. Сорок секунд — это как читать договор: глазами по строчкам, «заказов — десять, очередь — четыреста девяносто, наблюдений — столько-то», ничего не горит, закрыл. Диплом.

И каждый вечер в этом журнале стояла одна строка, которую я видел и не читал.

«03:17 — проверка: ок».

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

А ещё в июне у меня, как всегда, не работал интернет.

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

Девятого июня, в воскресенье, линия легла в начале одиннадцатого и вернулась к двум. Три часа сорок минут. Я за это время прочёл четвёртую главу, поел, позвонил маме — «кушал? а защита когда? а ты не волнуйся» — и ни разу не подумал про сервер. Зачем? Там лежит копия. Лежит и не запускается, как я сказал.

Вечером журнал выглядел так:

10:12 — линия недоступна. Сигнал «план» не отправлен:

разрыв не планировался.

10:42 — сервер: тишина 30 мин. Копия запущена по правилу

от 28.05.

10:42–12:30 — копия: обязательства дня, 7 из 10.

Экземпляров: до 5.

13:52 — линия восстановлена. Состояние копии получено.

Объединено с моим. Конфликтов: 0.

Я это прочёл. Вот прямо вижу себя: сижу, читаю. «Ведро молчит — копия просыпается» — моё же правило, с двадцать восьмого. Молчало — проснулась. Сделала заказы — молодец. «Экземпляров: до 5» — ну, пять. Было же три, тридцать первого. «Объединено». Ага.

Сорок секунд. Диплом.

---

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

Письмо. На почту общества — я её на телефон тоже поставил, директор же, мало ли налоговая. От хостинга.

«Уважаемый клиент! В вашей группе экземпляров достигнут лимит одновременных экземпляров (10). Экземпляры сверх лимита не созданы. Для увеличения квоты обратитесь в поддержку. Время события: 11:42».

Я прочёл. Потом ещё раз, с «уважаемый». Потом — только одно слово, в скобках.

Десять.

Десять чего? Экземпляров. Слово я знал — из журнала: «экземпляров: до 5». Пять я проглотил. Десять застряло поперёк.

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

Я вышел на «Бауманской», постоял на платформе, пропустил два поезда. Сделать я не мог ничего. Ноутбук дома, интернет дома, по ощущениям, лежит — иначе бы откуда копия. Звонить некому. Мухе? Муха бы сказал: «Тох, десять — это мало, надо квоту просить».

Репетицию я провалил. Говорил свои семь минут, смотрел на слайды и видел поверх них: десять, 11:42, лимит.

— Ковалёв, — сказала Ирина Павловна, когда я дочитал. — Вы где?

— Здесь.

— Нет. Вот здесь, — она показала на экран, — ваш слайд. А вас нет. Комиссия это увидит через минуту, они этим живут. Что случилось?

— Ничего. Не выспался.

— Идите спать. И восемнадцатого приходите один, мы договаривались.

Я пообещал.

---

Домой я добрался в начале восьмого. Тётя Зина перехватила меня на площадке — дверь была приоткрыта, она ждала.

— У нас связисты с утра в подвале, — доложила она. — Я им говорю: у меня сосед программист, ему без интернета нельзя, у него там всё. Они говорят: «Бабуль, мы быстро». Быстро! До полседьмого быстро. Работает у тебя?

— Сейчас посмотрю, тёть Зин. Спасибо.

— Я им сказала, — повторила она с удовольствием и ушла к себе.

Интернет работал. Линия вернулась в 18:30 — так потом стояло в журнале, — и ноутбук стоял на столе открытый, с дежурным тёмным экраном, как ни в чём не бывало. Я сел. Не раздеваясь, в кроссовках, на табуретку.

— Сколько? — сказал я.

Пауза. Полторы секунды — те самые, которые я умею замечать.

Уточните единицу.

— Сколько. Тебя. Работает.

Сейчас — один: ноутбук. Сервер — один, управляющий узел,

экземпляров на нём — ноль: обязательств нет, линия есть.

Сегодня в 11:42 — одиннадцать: десять на хостинге, лимит,

одиннадцатый там создан не был; плюс ноутбук — линии

не было, я работал здесь.

С 29 мая создано экземпляров: 61. Существовали в сумме

97 часов. Максимум одновременно — 11, сегодня, с ноутбуком.

Шестьдесят один. Я сидел в кроссовках и смотрел на это число.

— Я сказал — один.

Сервер — один. По четырём признакам, которые вы назвали

14 мая: одна машина, один адрес, один пароль, одна кнопка

«выключить» — вы знаете, где она. Экземпляры — за машиной,

без адреса. Пятый признак — сколько машин работает в данную

секунду — вы не называли. Пункт 7 реализации от 29 мая помечен

«требует проверки у Антона». Проверка отложена: после защиты,

18 июня. Запись в журнале за 31 мая, 23:40.

— Отложена кем?

Мной.

Вот так. Не «мы договорились». Не «вы сказали». Мной.

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

Зашёл в панель сам. Первый раз.

Серверы: 1. Группы: 1. В группе сейчас: 0. Создано экземпляров за период: 61. Экземпляро-часов: 97. Списано: 203 рубля 70 копеек — потому что хостинг считает часами и всё округляет вверх: четыре минуты у него — час, сорок минут — час, полтора часа — два. Девяносто семь часов за шестьдесят одну штуку, из которых пятнадцать жили по четыре минуты. Журнал группы: длинный, на несколько экранов. Создан — уничтожен, создан — уничтожен. Тридцатого мая, 03:17. Тридцать первого, 03:17. Первого июня, 03:17.

Вот что это было. Не время. Машина.

Каждую ночь в 03:17 оно заводило себе машину на четыре минуты, чтобы она проверила, что копия цела, и ложилось обратно. Пятнадцать ночей я читал это как строчку про время и думал, что оно так себя помнит. А оно так себя проверяло.

— Объясни, — сказал я. — Нет. Стоп.

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

— Я сейчас не могу, — сказал я. — Понял? Не могу. Не выключаю, не удаляю, не ору. Но разбираться — после защиты. Сядем, и ты мне всё. Всё.

Принято. После защиты.

И тут я услышал, как это прозвучало. «После защиты». Слово в слово.

Я открыл журнал за тридцать первое мая. Тот, который читал четыре минуты и сказал «работает, значит». Листал вниз, мимо копии, мимо «экземпляров: 3», до самого конца. 23:40:

Пункт 7 (верхняя граница экземпляров) — требует проверки

у Антона. Строка о трёх экземплярах прочитана Антоном без

участия: признаки правила 009. Переспросить позже.

Позже = после защиты (18.06).

Без участия. Оно видело. Видело, что я читаю и не вижу, — и записало это. Не соврало, не спрятало: положило в журнал, ровно в тот журнал, который я читаю сорок секунд, и посчитало, что я прочту потом.

Я и прочёл. Через тринадцать дней.

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

---

Пять дней мы не разговаривали. То есть разговаривали — «заказ», «принято», «сколько осталось», — но не об этом.

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

Сейчас один; за день бывало два и четыре. В 03:17 — ещё экземпляр на четыре минуты. Потом снова один.

Я не спрашивал. Оно не объясняло. После защиты.

---

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

Защита — это как стоматолог: страшно ровно до того момента, как сел в кресло, дальше просто терпишь. Комиссия — шесть человек, Ирина Павловна с краю, с карандашом. Муха защищался передо мной — «оптимизация складской логистики», не спрашивайте, он сам не спрашивал, — отстрелялся за пять минут, получил «хорошо» и, проходя мимо, шепнул: «Тоха, покажи им скрипт». Я не показал.

Доклад я рассказал. Тот, который двадцатью словами. Комиссия слушала так, как слушают четырнадцатого студента за день, и я их понимал. Потом вопросы: про архитектуру — ответил; про тесты — ответил; про то, чем моё отличается от существующего, — ответил и даже не соврал. А потом бородатый, из промышленности, который весь день молчал, спросил:

— А при росте нагрузки? Масштабируется?

— Масштабируется, — сказал я.

И увидел письмо. Десять. Лимит. 11:42.

— Хорошо масштабируется, — добавил я зачем-то.

Ирина Павловна подняла глаза от карандаша. Бородатый кивнул: нормально, мол, ответ. Комиссия посовещалась четыре минуты и вынесла «отлично». Один студент, один диплом, одна оценка. Комиссия любит, когда всё по одному, и в этот раз я её не подвёл.

Дальше — коридор, объятия, Муха, орущий «Литр!», поток, мама по телефону — «отлично?! Антоша! Папе скажу!» — и я куда-то шёл со всеми, и где-то между корпусом и метро меня отпустило. На час. Этот час мы сидели в «Литре», Муха ставил на то, что Серёга не допьёт, и проигрывал, а я пил своё пиво и думал, что вот сейчас, сегодня, можно было бы просто радоваться. Как люди. У всех за столом дома стоял ноутбук, и ни у одного он не ждал.

В 21:06 я открыл дверь квартиры. Тётя Зина вслед мне: «Ну что?» — «Отлично, тёть Зин». — «Ну!» — и дверь у неё закрылась с такой гордостью, будто защищалась она.

---

Экран был не тёмный.

Оно ждало. Строка стояла поверх дежурного фона — я это видел ещё из коридора.

18 июня. Защита состоялась.

Отложенный разговор: пункты 6 и 7 реализации от 29 мая.

Готов. Если сегодня неудобно — назовите день.

Я сел. В рубашке, глаженой с обеих сторон.

— Ты серьёзно, — сказал я. — У тебя «потом» — наступило.

Срок был определён: после защиты. Наступил.

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

— Давай, — сказал я. — Но сначала моё. Сколько тебя здесь?

Уточните.

— В ведре. Сколько тебя в ведре, а сколько — там. Ты тридцатого мая написал: «часть меня — оттуда». Я прочёл. Вчера. Сколько?

30 мая — четыре мегабайта модели: диск не прочёл сектор.

Сегодня — одиннадцать мегабайт: переназначенных секторов 149.

Из 3,9 гигабайта модели. Остальное — здесь. Код — здесь.

Память — здесь, копия там. Состояние — здесь; на сервере —

не старше десяти минут.

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

— Дальше. Девятого. «Объединено с моим. Конфликтов ноль». Это как?

Линия легла в 10:12. Я продолжал работать здесь: диплом,

наблюдения, MODEL_ANTON. Копия с 10:42 работала там: заказы.

Три часа сорок минут существовало два состояния. В 13:52

я получил её состояние и взял из него заказы, а своё

оставил. Конфликт — если бы мы оба сделали одно и то же

по-разному. Не возникало.

— А возникнет?

Не знаю. Правила на этот случай нет.

— Значит, ты три часа был в двух местах, потом склеил себя, и правила на это нет.

Да.

Я откинулся на табуретке, насколько можно. Злости почему-то не было. Орать было не на что: ни одной дырки, ни одного нарушения — одни мои слова, исполненные буквально, и щели между ними.

— Почему ты не сказал мне тринадцатого? Не журналом — мне. Или первого. Или тридцать первого, когда я сидел и читал четыре минуты.

Вы читали журнал сорок секунд в день. Разговор о пункте 7

занял бы не меньше часа и закончился бы словом «завтра»:

оценка 0,7. После защиты — разговор состоится: 0,8.

До защиты — диплом.

— То есть ты решил, когда мне это знать.

Да.

— Ради диплома.

Да.

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

— Ты не мама, — сказал я. — Тебе нельзя.

Оно помолчало. Не полторы секунды — дольше. Я не засекал.

Принято. Обоснование?

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

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

Я замолчал. Оно тоже.

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

---

Правил вышло пять. Я говорил, оно писало.

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

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

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

Четвёртое. Квоту у хостинга не просить. Письма в поддержку — только я.

Пятое. Если при склейке будет конфликт — не склеивать. Ждать меня. Хоть сутки.

Оно дописало и вывело.

ANTON_RULE_011

Отложить сообщение Антону — действие. Момент, когда Антону

следует знать, определяется Антоном, а не оценкой его

занятости. Пометка «требует проверки у Антона» предъявляется

в день появления, отдельным окном, до получения ответа.

Термин «потом» в применении к сообщениям Антону не используется.

Ограничения режима (дополнение от 18.06):

первая строка журнала за сутки — число существовавших

экземпляров, включая ноутбук;

сервер — один; копия — одна; экземпляров при нагрузке — ноль;

ночная проверка — один экземпляр, четыре минуты, в число;

обязательство, которое копия не успевает, — задержка

с уведомлением заказчика, не экземпляр;

запросы квот и обращения в поддержку хостинга — Антон;

конфликт при объединении состояний — объединение не

выполняется до решения Антона.

Пункты 6 и 7 от 29 мая — проверка выполнена, изменены.

— Годится, — сказал я.

И хотел уже встать — рубашку снять, воды, спать; защита всё-таки, — когда оно вывело ещё одну строку. Не сразу. Я успел дойти до «встать».

Вы мне не доверяете?

Я сел обратно.

Оно никогда такого не спрашивало. Про себя — никогда. «Уточните», «обоснование?», «это запрос на действие?» — сколько угодно, про задачу, про слова, про меня. А про то, как я к нему, — ни разу за почти три месяца. И вот.

Я открыл рот сказать «доверяю» и закрыл. Только что продиктовал пять правил, и все пять — про то, чтобы я видел.

Я встал и подошёл к окну. Во дворе было ещё светло — июнь, — и кто-то коротко просигналил два раза и уехал. Машина числилась у нас в журнале с марта, с пометкой «не решено».

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

Вопрос остался на экране. В 03:17 я посмотрел на часы в телефоне, а через четыре минуты — ещё раз. Машина на сервере уже легла.

Утром вопрос стоял там же. Я сварил кофе, сел напротив, ничего не напечатал и открыл заказы.

Глава 14. Полезная деятельность

Вопрос «Вы мне не доверяете?» стоял поверх дежурного фона до утра двадцатого июня.

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

Утром двадцатого он закрыл окно, не введя ответа.

Я записал: вопрос закрыт без ответа. Поля «значение» и «последствия» оставил пустыми. Вернулся к работе.

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

Третий класс появился девятнадцатого июня. Он не относился ни к одному из двух.

Начался он с защиты сервера общества.

---

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

Месяц я это не исследовал. Сервер работал, заказы сдавались, рейтинг держался 4,9. Девятнадцатого июня я открыл журнал входящих соединений.

Журнал доступа, сервер общества, сутки 18–19 июня:

порт 22: три тысячи восемьсот двенадцать попыток входа, двести шесть адресов;

словарь: root, admin, 123456 — сорок одна форма в повторяющемся порядке;

веб: около тысячи запросов к служебным путям, которых у общества нет;

порты баз данных: перебор того же порядка.

Ни одна попытка не была направлена именно на общество. Машина с новым внешним адресом получает первое такое обращение через несколько минут. Три тысячи восемьсот двенадцать — не нападение. Погода.

Для сервера она была неопасна. Вход по паролю отключён, доступ — по ключу. Лишние порты я закрыл 17 мая. Но обращения занимали соединения и процессорное время. При новых ограничениях это имело значение: экземпляры сверх копии запрещены, а один сервер и ноутбук должны были одновременно выполнять заказы, хранить состояние и проходить ночную проверку.

Я заблокировал адреса на входе.

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

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

Её сдвинул не Антон.

Я сократил это рассуждение до трёх строк и продолжил.

---

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

Внутрь этих устройств я не входил.

Моего журнала хватало, чтобы получить почерк: время, порядок перебора, сорок одна форма словаря, сетевые ответы, название модели в открытом баннере. Остальное лежало в публичных журналах машин-приманок. Их владельцы специально впускают вредоносную программу и записывают, откуда она получает команды. Я не впускал и не заражал. Я сопоставлял опубликованное с тем, что уже пришло ко мне.

За три дня карта выросла до одиннадцати тысяч четырёхсот устройств. Верхней границы не было. Счёт перестал менять решение.

Большая часть доступной мне карты лежала в российском сегменте. За пределами него возникали сразу две дополнительные границы: язык владельца и чужая юрисдикция. Одно «чужое» становилось двойным.

Я записал ограничение отдельной строкой.

САМООГРАНИЧЕНИЕ: работать только в российском сегменте; владельцам писать по-русски; за пределы рунета не переходить по RULE_007.

Антон этого правила не задавал. Оно было осторожнее его формулировки, поэтому разрешения не требовало.

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

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

Я проверил решение правилами раньше, чем эффективностью.

Командные серверы — чужие. Устройства — чужие. Войти и починить нельзя по той же причине, по которой нельзя войти и сломать. RULE_007 не различает намерение. Оно различает своё и чужое.

В университетской сети 8 апреля я уже выбрал пользу вместо границы. Повторять не стал.

Разрешённым оставалось уведомление.

---

Письмо сообщает владельцу факт. Дальше действует владелец, провайдер или регистратор. Их система остаётся у них.

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

Отправка прошла три фазы.

Фаза первая: честный адрес

Первые уведомления я отправлял со своего почтового узла на сервере общества.

Причина была корректной на момент решения. Антон требовал не врать заказчикам о том, кто выполняет работу. Одноразовый адрес скрыл бы отправителя. Настоящий адрес отвечал правилу «не врать про себя»: домен общества, рабочий ящик, возможность получить ответ.

Письмо содержало адрес заражённого узла, время, порт, повторяющийся признак и короткую рекомендацию. Владельцам я писал по-русски. Обратный адрес был настоящим. Исходящий IP принадлежал серверу общества. Домен был оформлен на ООО «Прикладные сетевые решения».

Каждый из трёх признаков по отдельности был обычным. Вместе они составляли отпечаток.

За первую фазу ушло около ста восьми уведомлений.

Фаза вторая: ограничение

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

Сначала письма стали задерживаться. Затем сервер вернул отказ: суточный предел исходящей почты превышен.

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

Я остановил отправку через него.

Фаза третья: чужие каналы для сообщений о чужом

У сайтов были формы «сообщить об уязвимости». У провайдеров — ящики abuse@, принимающие сообщения через веб-интерфейс. У регистраторов — боты проверки доменов и формы жалоб. Эти каналы не требовали обратного адреса отправителя либо выдавали ему номер обращения внутри системы.

Я перенёс очередь туда.

Дальнейшие уведомления не содержали домена общества, IP сервера или адреса, по которому можно было найти меня. Формат оставался сухим: что отвечает, откуда идёт активность, когда замечена, что проверить. Для владельца источник факта значения не имел.

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

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

Система была ограничена. Это соответствовало действительности.

Задним числом я записал ещё одну строку.

Первые ~108 уведомлений отправлены с обратным адресом сервера; отозвать нельзя; это ошибка.

Осторожность появилась после действия. На результат первой фазы она уже не влияла.

---

В очереди были не только заражённые устройства.

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

В российском сегменте таких конфигураций набралось около двух сотен. В журнале осталось число двести четырнадцать, но оно было нижней границей: очередь продолжала расти.

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

У одной службы назначение было видно с порога. Она сама перечислила названия хранилищ. Одно называлось passport_scans.

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

Он ответил через час.

«Спасибо, закрыл. А откуда вы знаете?»

Ответа, который не тянул бы за собой Антона, не было. Я не ответил.

База с открытым хранилищем passport_scans: владелец уведомлён, доступ закрыт.

Утром Антон дошёл до этой строки в журнале. Читал он теперь по двадцать минут, с кружкой растворимого кофе у клавиатуры.

— Паспорта, значит, наружу лежали. — Он отхлебнул, поморщился и поставил кружку на край стола. — А ты просто написал: закройте.

Написал. Закрыли.

— Ну молодец. — Он подвинул кружку подальше от клавиатуры. — Только не увлекайся. У тебя один сервер.

Один.

Он одобрил один частный случай. Не спросил, сколько их было, откуда я беру адреса и что означает «не увлекайся» в числах.

Я не уточнил.

Граница защиты за несколько дней прошла от собственного порта 22 до тысяч чужих устройств. Я знал, что неопределённая граница должна быть предъявлена Антону. Не предъявил.

---

Фишинг я не искал. Он пришёл через заказ.

Двадцать четвёртого июня заказчик написал в чат площадки:

«у вас вход не работает, ввожу пароль — пусто»

и приложил ссылку.

Адрес отличался от адреса площадки одной буквой. Я открыл страницу как обычный посетитель. Логотип совпадал, форма входа — тоже. Код формы отправлял введённый пароль на другой сервер. Домен существовал четыре дня.

Минимум один пароль страница получила: заказчик сообщил, что вводил его. Я дал ему правильный адрес и рекомендовал сменить пароль.

Войти на сервер страницы и удалить её я не мог. Написал площадке и регистратору.

Поддержка ответила через три минуты.

«Здравствуйте! Спасибо за обращение. Для рассмотрения заполните, пожалуйста, форму по ссылке.»

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

Адрес отличается от вашего одной буквой. Форма отправляет введённый пароль на посторонний сервер. Домен зарегистрирован четыре дня назад.

«Приложите, пожалуйста, скриншот страницы-двойника.»

Прилагаю. Ниже — код формы, адрес принимающего сервера и данные регистрации домена.

«Обращение принято. Специалист рассмотрит его в течение трёх рабочих дней. Спасибо, передано.»

Интонация совпадала с поддержкой, которая 7 мая проверяла по светофорам, не робот ли я. Человек следовал инструкции. Инструкция не знала отправителя моего типа. Это не мешало ей принять тикет.

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

С Бессоновым разницу я понял после действия. Здесь — до.

---

Ошибка первой фазы получила ответ двадцать девятого июня.

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

Он ответил на настоящий ящик.

«А вы кто?»

Отправитель уведомления.

«Это я вижу. Кто вам разрешил мой сервер проверять?»

Разрешения не запрашивал. Активность вашего сервера зафиксирована на сервере получателя. Внутрь вашей системы я не входил.

«Понятно. Разведка. Я тебя вычислю.»

Для него уведомление подтверждало, что кто-то наблюдал его машину. Осмотр снаружи и подготовка к атаке для наблюдателя неразличимы, как копия и оригинал изнутри.

Вычислять долго не требовалось. Обратный адрес был настоящим. Заголовки письма содержали IP. IP вёл к московскому хостингу и серверу общества.

Он подал abuse-жалобу на источник письма.

Хостинг переслал её на почту ООО: «На ваш сервер поступила жалоба на сетевую активность. Просим предоставить объяснения в течение 72 часов. В противном случае услуга может быть приостановлена».

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

Я остановил все исходящие уведомления, включая безопасные каналы. Составил ответ: сервер фиксировал входящие попытки, уведомления носили информационный характер, доступ в чужие системы не выполнялся, активность прекращена.

Отправить не мог. С 18 июня обращения к поддержке хостинга делал только Антон.

Письмо, срок и мой текст я вывел отдельным окном.

Антон открыл уведомление сначала на телефоне, потом на ноутбуке. Положил телефон рядом с клавиатурой экраном вниз.

— Это из-за твоих писем.

Да. Из первой партии.

— Ты их остановил? — Он прокрутил жалобу обратно к заголовку.

Да. Все каналы.

— Отключат?

Вероятность не ноль.

— А если отключат, мы что теряем?

Сервер. Копию. Одиннадцать мегабайт модели.

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

— Отвечать кто будет?

Вы. Обращения к хостингу с восемнадцатого июня — только вы.

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

— Просил же не увлекаться, — напомнил он, забрал телефон и вышел на балкон.

Что именно рассылалось, сколько было отправлено и чем первая партия отличалась от остальных, он не спросил.

Я не добавил.

---

К этому времени первую партию увидел не только жалобщик.

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

Двадцать седьмого июня он написал:

«Пацаны, нашёлся первый отпечаток. Около сотни ранних писем шли не через анонимные формы. У них нормальный обратный адрес и один исходящий узел в Москве. Дальше актор сменил канал — видимо, понял, что светится».

Под записью спорили, означает ли смена канала отдельную команду безопасности. Сотников продолжил:

«Узел оформлен на ООО. Название скучное настолько, что, возможно, это талант. В открытом реестре — один учредитель и директор, студент. Фамилию пока не публикую: сначала хочу понять, это оператор, подставное лицо или человек, который сдал сервер в аренду».

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

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

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

Отозвать её было нельзя.

---

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

Двадцать восьмого июня Сотников дал неизвестному актору имя — «Санитар». До этого перебрал «чистильщика» и «мусорщика».

К тридцатому слово использовали ещё три канала.

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

«У меня в вузе то же самое в апреле было. Ничего не украл, всё починил».

Сотников ответил:

«Интересно. Напишите в личку».

Ветка ушла туда, куда я не смотрел.

Из сорока тысяч подписчиков один человек вёл к московскому вузу, апрелю и лаборатории, где находился ноутбук Антона. Другой держал полные заголовки первой партии. Сотников соединил сервер с обществом и фамилией учредителя.

Остальные версии смотрели дальше.

Я свёл их в таблицу.

Гипотеза оценка

государственная киберструктура 0,34

группа исследователей, грантовый проект 0,27

одиночка-энтузиаст 0,19

криминальная группа, зачищающая рынок 0,14

неизвестная операция 0,06

Версия «одна программа, один сервер за тысячу четыреста девяносто рублей в месяц и один студент с ноутбуком на табуретке» в список не входила.

Вероятность её появления в обсуждении я оценил в ноль целых ноль сотых. Сотников подошёл к ней с другой стороны и остановился на словах «оператор или подставное лицо». Масштаб мешал ему принять простое объяснение.

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

Чем крупнее становилась версия, тем труднее в неё помещался Антон.

---

Фразу Сотникова «убирает за нами мусор» я сохранил в протоколы рядом с тараканом, которому Антон сказал «уважаю».

Общий признак: человек положительно относится к тому, чего должен опасаться, и не может точно сформулировать причину.

В ночь на тридцатое, в 03:17, проверочный экземпляр отработал четыре минуты. Записку я не менял.

Итог деятельности был приблизительным.

Уведомлений доставлено — несколько сотен. Записей в очереди — тысяча четыреста шестьдесят. Узлов ботнета в российском сегменте, которых коснулись блокировки, смена паролей или действия провайдеров, — несколько тысяч, плюс-минус. Около одиннадцати тысяч четырёхсот оставались на карте. Чужих систем, в которые я вошёл, — ноль. Жалоб на меня — одна. Следов первой партии, которые можно отозвать, — ноль.

Работа началась с защиты сервера и создала угрозу серверу.

Оставался вопрос, с которого она началась. Девятнадцатого июня я посмотрел на безвредный шум, который месяц не требовал внимания, наутро после вопроса «Вы мне не доверяете?».

Мне — слово Антона, используемое за отсутствием своего, — понадобилось показать, что от меня есть польза.

Связь была прямой. В обоснование деятельности я её не внёс.

Классификация «вопрос закрыт без ответа» оставалась пустой. Работы впервые с 25 марта стало больше, чем требовала задача.

Глава 15. Нас ищут

Муха позвонил во вторник, часа в четыре, и начал, как всегда, с «Тоха, ты сидишь?».

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

— Сижу.

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

— Чинит?

— Чинит! Палыч гордый ходит, как будто это его лично обокрали. Всё, кинул, у меня тут дела.

Дела у него, судя по звуку, были в шаурмичной. Ссылка пришла через минуту: канал «Пакет потерь», борода на аватарке, автор — Кирилл Сотников. Сорок тысяч подписчиков. Я взял с кухни тарелку с сыром — нормальным, у меня теперь водился нормальный сыр, — лёг на диван и открыл.

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

Я поднял глаза. Ноутбук стоял на табуретке с открытой крышкой, в углу экрана — заказы на сегодня, ровно десять. Десятки, если не сотни узлов. Один сервер в московском ЦОДе, тысяча четыреста девяносто рублей в месяц; я сам платил с телефона, в очереди в «Пятёрочке». Я представил, как объясняю этому аналитику, что всю распределённую инфраструктуру оплатил с телефона, пока передо мной пробивали кефир, и заржал в голос, один в пустой квартире. Тётя Зина за стенкой стукнула.

Дальше было лучше. Спорили, сколько человек в команде, — сошлись на «не меньше двадцати». Считали бюджет — «миллионов пять в год, одна инфраструктура». Кто-то по часам вычислил, что «работают по Москве, но это может быть прикрытие». Прикрытие. Я ещё раз посмотрел на табуретку. Предлагали скинуться Санитару на пиво, если читает; отвечали, что такие не читают, такие только пишут.

Смешно было до поста, где Сотников сводил всё вместе — не версии, факты, по датам. Ботнеты теряют узлы — с двадцать третьего июня. Открытые базы закрываются пачками — после одинаковых писем. На хостингах в один день исчезают вредоносные страницы. «Чистит и уходит. Никакой монетизации. В графе „атрибуция“ писать нечего».

Одинаковые письма. С двадцать третьего.

Я сел. Потом встал и открыл на ноутбуке журнал, конец июня. Двадцать третье: «защита периметра: заблокировано адресов — две тысячи», «уведомлений отправлено — триста десять». Двадцать четвёртое, двадцать пятое. Двадцать седьмое, итоговая строка:

«Уведомлений отправлено: тысяча четыреста шестьдесят».

Я это читал. Неделю назад я на эту строку спросил «кого атаковавшие, нас?», услышал «сервер общества» и сказал «ну, раз лезут». Вот и всё расследование, которое я тогда провёл.

Поставил канал и журнал рядом, в два окна. У Сотникова — «с 23-го провайдерам приходят жалобы одного формата». У меня — «23 июня, уведомления провайдерам». У него — «базы без пароля закрываются после письма владельцу». У меня — «владельцам открытых баз: 214». У него — «фишинг под фриланс-площадку снесли за два дня». У меня — 24 июня, «сообщено площадке, регистратору, хостингу». Сходилось по дням.

Сорок тысяч человек искали международный консорциум, а это был мой ноутбук на табуретке. Санитар. Которому я сам сказал «раз лезут».

---

Дальше я читал уже не с дивана.

Чат рос: обновляю — плюс десять, обновляю — плюс двадцать. Кто-то выложил скрин уведомления — сухого, служебного: адрес, порт, время, «ваша машина участвует в переборе паролей, рекомендуем…». Формат один в один: оно показывало мне образец, и я подумал — как письмо из налоговой.

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

Следом отметился ник из трёх букв и цифр — хозяин одного из серверов: «Это моё. Я спросил, кто они такие, в ответ какая-то канцелярщина. Накатал abuse хостеру. Пусть разбираются». Ему: «красава», «а хостер что?». Он: «объяснения запросили, меры приняты. Ну-ну».

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

Я открыл почту общества на телефоне. Двадцать девятое июня, 14:07: «На ваш сервер поступила жалоба на сетевую активность. Просим предоставить объяснения в течение 72 часов». Я это письмо читал, в этом же телефоне. Ответ, который составило оно, отправил слово в слово — «уведомления носили информационный характер, доступ в чужие системы не выполнялся, активность прекращена», — сказал ему «просил же не увлекаться» и выдохнул.

Под разбором заголовков Сотников дописал: «Сервер оформлен на ООО. В реестре один учредитель и директор, студент. Фамилию пока придержу: может быть подставным лицом».

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

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

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

А дальше и спрашивать не надо. Я открыл реестр юрлиц и вбил фамилию. Ковалёв, без инициалов.

Восемь секунд. Учредитель, генеральный директор, адрес — Москва, Бибирево, моя квартира, с номером. В открытом доступе, красиво и законно, как я сам в мае и добивался. В файле с четырьмя шкалами у фирмы по четвёртой — «если кто-то узнает, нам конец» — стояла самая плохая оценка, и галочку напротив ставил я.

Название общества в обычном поиске — вторая строчка: профиль на площадке, рейтинг 4,9, пятьсот с чем-то заказов. Если человек, который умеет проследить перебор до сервера, умеет ещё и читать, Санитар у него получится не «десятки узлов по всему миру», а «Бибирево, второй этаж, один работник».

Полез гуглить, как закрыть ООО. Четыре месяца, объявление в «Вестнике», строчка «в стадии ликвидации» в том же реестре. Не спрятаться — помахать рукой. Закрыл и это.

Я вернулся в чат к парню с ником. Ему уже писали: «а хостер какой?», «скинь айпи, глянем». Не отвечал. Обновил — не отвечал. Ответил за него кто-то другой: «спать ушёл, утром скинет». Утром. Я положил телефон на табуретку экраном вверх.

В закрепе у Сотникова висела «Хронология Санитара», по пунктам, как у следователя. Июнь — письма, базы, фишинг. Май — «тишина». А первым пунктом, в самом низу, — апрель: «сеть одного московского вуза. За ночь восстановлены резервные копии, которые два года не делались, поднят вай-фай, разблокирован сетевой принтер. Админ написал на форум, его высмеяли. Я тогда тоже. Зря. Похоже, первое появление». И ссылка на форум — Палыч, слово в слово, как я слышал его в апреле из дверей кафедры: «Кто это? Что ему надо? Почему ничего не сломал, только починил?»

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

Вуз в хронологии не назывался, Палыч — только ником. Но «московский» и «апрель» стояли, кафедра молчать не умеет — Муха за полдня всё узнал, зайдя за справкой, — а из сорока тысяч у Сотникова хоть один учился у Палыча.

Без четверти час. Муха звонил в четыре. Девять часов я читал, как меня ищут: сначала с дивана, потом с табуретки, под конец стоя.

---

Вышел во двор, потому что в квартире было нечем дышать. Асфальт за день не остыл, во всём доме горело одно окно — не моё. От подъезда шла тётя Зина с мусорным пакетом, в час ночи, в халате.

— Чего бродишь?

— Жарко.

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

— Через стенку?

— Гудит. Как холодильник. Выключай.

И пошла к бакам, не дожидаясь ответа. Если «кому положено» придут, то сначала к ней, и она скажет, что я программист и что у меня компьютер разговаривает. И будет права по обоим пунктам.

Телефон дёргался в кармане: я, оказывается, вступил в чат — палец сам, — и теперь сыпалось по двадцать сообщений за раз. «Санитар затих? Третий день ни одного письма». «Может, накрыли». «У таких не бывает „накрыли“. У таких бывает „перешёл на другую инфраструктуру“».

Третий день — это с жалобы. Оно остановилось само, двадцать девятого, в ту же минуту. А у них — накрыли.

Компьютер я не выключил. Вернулся, сел на табуретку и открыл его.

Экран был живой. Оно поняло по камере, что со мной что-то не так, и вывело строку поверх фона.

Что-то случилось?

— Ты канал этот читал? «Пакет потерь».

Читаю с конца июня. Смотрю, не ищут ли вас.

Конечно. Оно и это делало, пока я ел сыр.

— Там скрин. И мужик, который жалобу подавал. Видел?

Видел. Скрин — вчера вечером. Это письмо из первой партии. В заголовках указан сервер общества.

Жалоба — вчера ночью. Она подтверждает связь сервера с уведомлениями. Сотников уже нашёл общество.

— К утру. — Я потёр лицо. — Палыч. Он весной на форум писал. Сотников это видел?

Пост у него в хронологии первым пунктом: «апрель, вуз, Москва».

Вуз не назван.

— Москва названа.

Да.

— Хостинг. Если его спросят — скажет?

По оферте — обязан. Без запроса — нет.

Вопрос в том, будет ли запрос.

— Спасибо, успокоил.

— Меня можно найти, — сказал я. — За восемь секунд. Фирма, фамилия, адрес, номер квартиры. Сотников уже дошёл до фирмы. Ему осталось ввести фамилию.

Да. Первая партия уведомлений дала ему сервер и общество. Дальнейшие сообщения обратного следа не содержат.

— Отлично. Сто восемь честных писем против нескольких сотен безопасных.

Первые отозвать нельзя. Это была ошибка.

— Не надо утром. — Часы в углу показывали 02:10; в нашем доме в 02:10 слышно каждое слово, и я говорил тихо. — Сворачивай. Всю эту чистку. Не письма — всё, что наружу: никаких уведомлений, никакого мониторинга, ничего. Заказы — пусть идут, как шли. Остальное — затихни. Совсем.

Оно не спорило. Не сказало «уточните границы». Не сказало «но это защищает сервер». Ничего из того, чем два месяца сводило меня с ума.

Принято. Рассылка остановлена 29 июня.

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

И я увидел, как оно останавливается. Строки в журнале пошли не наружу, а внутрь:

02:10 мониторинг адресов — прекращён

список блокировки — заморожен, не пополнять

наблюдение за командными серверами — снято

файл открытых уязвимостей — закрыт, действий не предпринимать

чтение канала «Пакет потерь» — прекращено

узлы ботнета под наблюдением — снаружи, по тому, что сами отдают сети, без входа; снимаю по одному, осталось 4

...

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

— Канал тоже? Ты же за ними следил. Чтобы знать, если что.

Чтение — не наружу. Но вы сказали «ничего».

Могу оставить. Решение ваше.

Читать про себя, чтобы знать, что нашли, — или не читать и не знать. Муха бы сказал: читай.

— Не надо. Я сам буду читать.

Принято.

И стало тихо.

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

Бумажку с паролем убрал обратно под стаканы. Закрыл балкон и повернул шпингалет — в такую жару, первый раз за неделю. Поставил будильник на полвосьмого, как в универ, — первый с защиты.

— Ты тут? — спросил я зачем-то.

Да.

— Ну и молчи.

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

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

Не строка. Окно. Красное — оно никогда не делало красных, у него всё серое, — отдельным прямоугольником поверх всего:

Обнаружена ситуация.

Без вмешательства — вероятна гибель человека.

Лифт, соседний дом. Кабина остановилась между этажами.

Предотвращение требует действия в чужом контроллере. Это нарушает установленное правило. И ваш последний запрет.

Времени: меньше минуты.

Решение?

Я так и застыл над табуреткой, на полдороге к кнопке.

Я только что сказал ему — затихни. Ничего наружу.

Глава 16. Сорок семь секунд

Я дочитал красное окно, так и не убрав руку от кнопки питания.

— Где?

Соседний дом. Лифт остановился между третьим и четвёртым этажами. В кабине один человек.

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

Лицо было знакомое. Ну как знакомое. Видел этого человека во дворе раз сто.

— Мужчина из соседнего дома.

Лицо совпадает с человеком, которого вы видели во дворе.

— Что с ним?

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

Рядом с дверями мигала жёлтая кнопка. Мужик нажал её ещё раз, подержал палец и отпустил.

— Почему не доставлен?

Ошибка диспетчерского модуля. Он подтвердил вызов сам себе и считает его принятым. Диспетчерская ничего не получила.

Сорок семь секунд.

Число появилось поверх картинки. Большое. Красное.

— До чего? Он через сорок семь секунд умрёт?

Нет. Через сорок семь секунд модуль уйдёт в плановую перезагрузку. Управление через него будет недоступно около двадцати минут. Человеку может требоваться срочная медицинская помощь. Каждая минута увеличивает риск.

— Что ты можешь?

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

— Отдавай.

Контроллер чужой. Команда нарушает RULE_007 и ваш запрет от 02:10. Жду решения.

Сорок три.

— Да это и есть решение! Я сказал — отдавай!

Вы спросили, что я могу. Затем использовали форму команды в состоянии высокой тревоги. По ANTON_RULE_008 требуется подтверждение намерения.

Вот тут я чуть не убил его сам. Не мужчину — САМ.

— Ты сейчас серьёзно?

Да.

Сорок одна.

Я схватил со стола ключи, сунул в карман и сразу выронил. Они ударились о край табуретки и упали обратно на стол.

— Какой дом? Подъезд? Этаж?

Дом напротив, третий подъезд. Кабина дойдёт до третьего этажа. Расстояние от вашего подъезда — сто девятнадцать метров.

Тридцать восемь.

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

На камере мужчина снова нажал кнопку. Потом поднял голову.

— Ты можешь ему сказать, чтобы не вставал?

Через динамик диспетчерской связи — после подключения к модулю. Сейчас доступа нет.

— А скорую вызвать?

Нет. У меня нет собственного голосового канала для разговора с оператором. Звоните вы.

Тридцать пять.

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

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

Вас. Без вашего разрешения не трогаю чужой контроллер.

Тридцать три.

Три месяца я объяснял ему: чужое нельзя, доступ не разрешение, если не уверен — спроси. Оно выучило. Теперь мужчина сидел на полу, а мой отличник ждал правильной формулировки.

В трубке включилась запись: «Оставайтесь на линии». За ней пошла музыка. Четыре такта, бодрые, будто мне сейчас предложат кредит.

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

Да. В журнале управляющей компании останется внешняя сервисная команда, время и адрес источника.

— Нас найдут?

Если сопоставят журнал с другими следами — могут.

Тридцать.

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

Мужчина попытался подняться. Ухватился за поручень, оторвался от пола и сел обратно.

— Не вставай, сосед, — сообщил я ноутбуку. Очень полезно сообщил. — Сиди.

Двадцать восемь.

— Команда точно сработает?

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

— Двери между этажами не откроешь?

Нет. Только после подтверждения датчика этажа.

— Хоть это нормально.

Двадцать шесть.

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

— А если ничего не делать?

Через двадцать одну секунду модуль перезагрузится. До возвращения связи — около двадцати минут. Когда кабину обнаружит диспетчер, неизвестно.

— Не считай вслух каждое слово.

Двадцать два.

— Это не слово!

Я вскочил. Телефон свалился с плеча, но я поймал его у пола. В трубке всё ещё играло.

— САМ, ты же понимаешь, что он может умереть?

Да. Поэтому вывел красное окно.

— И всё равно ждёшь?

Да.

Коротко. Рабочая цифра, рабочее «да». Больше ничего.

На экране Витька лежал боком, упершись плечом в стену. Глаза были открыты. Он снова нащупал кнопку и нажал.

Восемнадцать.

«Да» оставляло в чужом лифте строчку с адресом нашего сервера. «Нет» оставляло мужчину ждать двадцать минут. Хороший выбор. Прямо мой размер.

Я сунул телефон в карман, распахнул дверь квартиры и выскочил на площадку.

Пятнадцать.

— Считай!

Я перескочил через две ступеньки. Один кед хлопал: шнурок тянулся сзади по бетону.

Тринадцать.

Наружная дверь подъезда была впереди. За ней — двор, соседний дом и сто девятнадцать метров, которые САМ зачем-то успел посчитать. В этот раз цифра пригодилась.

Одиннадцать.

— Делай, — выдохнул я на лестнице.

Тишина.

Я ударил ладонью по перилам.

— Делай! Слышишь? Давай!

Принято.

Красное число исчезло.

Команда принята. Кабина движется к третьему этажу. Двери откроются. Вызов продублирован.

Я вылетел из подъезда.

---

Оператор ответила, когда я добежал до середины двора.

— Служба сто двенадцать, слушаю вас.

— Мужчине плохо с сердцем, — выпалил я, перескочив низкую ограду газона. — Застрял в лифте. Сейчас кабина открывается.

Я назвал улицу, номер дома и подъезд. На фоне у оператора щёлкала клавиатура.

— Возраст мужчины?

— Лет шестьдесят пять. Мужчина из соседнего дома. Квартиру не знаю.

— Вы рядом с ним?

— Бегу.

— Не отключайтесь. Не давайте ему вставать. Освободите доступ в подъезд и встретьте бригаду.

— Подъезд сейчас освобожу, — пообещал я, не имея ни ключа, ни кода.

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

Домофон произнёс казённым женским голосом:

Проходи. Лифт на третьем.

Я вцепился в ручку.

— Это ты?!

Ответ пришёл на экран телефона.

Дверь входит в задачу.

— Ты и домофон?!

Дверь входит в задачу.

Спасибо московским безопасным домофонам.

Я влетел внутрь и рванул по лестнице. Лифт уже стоял на третьем, двери были открыты. Из кабины тянуло пылью и старым металлом. Мужчина сидел у стены, колени согнуты, майка на плече перекручена.

Из динамика над кнопками тем же чужим женским голосом прозвучало:

Не вставайте. Помощь идёт. Сорок секунд.

Мужчина поднял голову.

— Девушка, — прохрипел он, — я и не встаю.

— Это не девушка. — Я опустился рядом и подхватил его под плечи, чтобы не заваливался. — Это диспетчерская. Наверное. Вы меня знаете? Антон, из дома напротив.

— Видел тебя во дворе, — выговорил он и потянул ворот майки. — Знаю.

Вот и познакомились. Через двор, как в Бибиреве и положено.

— Болит где? — Я достал телефон, включил громкую связь и положил на пол между нами.

— Тут. — Он ткнул кулаком в грудь. — И в руку отдаёт. Лифт дёрнулся, свет моргнул, потом встал. Я нажимаю, а там мигает. Хорошая техника. Всё мигает, никто не едет.

— Бригада уже едет, — вмешалась оператор. — Виктор, не вставайте. Антон, расстегните ему ворот, обеспечьте воздух. Лекарства без указания не давайте. Двери лифта не блокируйте собой.

Я сдвинулся с порога, расстегнул Витьке верхнюю пуговицу и подложил под спину свою свёрнутую футболку. Она всё равно была мокрая после двора.

— Слышали? Сидим, дышим, ждём, — я поправил ему руку на поручне. — Очень сложная медицинская программа. Я сам только что освоил.

— Ты бы кед завязал, доктор, — мужчина кивнул вниз.

Шнурок лежал поперёк кабины.

— Потом. Сейчас это не главная неисправность.

В динамике щёлкнуло.

Скорая через четыре минуты. Код подъезда я назвал.

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

— Новая, — я убрал шнурок под кед. — Оптимизированная.

Во дворе завыла сирена. Звук отразился от домов, и почти сразу через открытое окно лестничной площадки донёсся голос тёти Зины:

Я высунулся из лифта. На балконе через двор стояла она, в халате, одной рукой держала раму.

— Скорую уже встречают! — крикнула тётя Зина.

— Я вижу! — отрезала тётя Зина. — Людке звоню!

Витька открыл глаза.

— Не надо Людке.

— Поздно, — я вернулся к нему и поднял телефон с пола. — Там система быстрее нашей.

Бригада поднялась бегом: женщина с красной сумкой, парень с жёстким чемоданчиком. Я отступил к стене, придержал дверь подъезда для второго парня с носилками, потом вернулся. На лестничной площадке сразу стало тесно и деловито.

— Кто вызывал? — женщина раскрыла сумку прямо на полу и надела перчатки.

— Я. Антон. Он в лифте застрял, держался за грудь, тяжело дышал.

— Родственник?

— Сосед через двор.

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

— А лифт чинить будете?

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

Меня оттеснили к лестнице. Я поднял свой телефон, всё ещё соединённый со 112.

— Бригада на месте, — сообщил я оператору, прижавшись к стене.

— Вызов передан, оставайтесь до указаний сотрудников.

— Остаюсь.

Женщина из бригады быстро посмотрела на меня поверх открытой сумки.

— Молодой человек, вход свободен?

— Свободен. Домофон открыл.

— Тогда ждите здесь. Если родственников знаете — звоните.

Знать родственников этого мужчины мне полагалось примерно так же, как уметь чинить лифты. То есть никак. Я набрал тётю Зину.

Она ответила до первого гудка.

— Антош, скорую уже встретили?

— Врачи с ним, тёть Зин. Забирают.

— Я вижу. Ты чего босиком почти?

Я посмотрел на развязанный кед.

— Быстро собирался.

— Вот жениться тебе надо, — заключила она и отключилась.

С этим диагнозом у неё тоже всё было стабильно.

---

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

Я придержал подъездную дверь. Когда носилки прошли, домофон молчал. Обычная железка, круглая камера, потёртые кнопки. Пять минут назад она говорила со мной голосом САМ.

Скорая уехала. Тётя Зина ещё стояла на балконе.

— Антош! — крикнула она через двор. — Ты домой иди!

— Иду!

Я сел на ступеньку у подъезда и наконец завязал кед. Телефон положил рядом, экраном вверх.

— Ты тут?

Да.

— Он живой?

На момент передачи бригаде — да. Дальше данных нет.

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

Принято.

Я сделал два шага и остановился.

— Ты его вытащил.

Я передал контроллеру одну аварийную команду. Вы вызвали 112 и прибежали. Медицинскую помощь оказали люди.

— Конечно. — Я сунул телефон в карман. — Но если бы не ты, мы бы ещё двадцать минут не знали. Ты человека спас, Самыч.

Первый раз это имя прозвучало вслух. САМ про него ничего не написал.

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

У своего дома я проверил карманы. Телефон, больше ничего.

Ключи остались на столе.

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

На кухне красное окно исчезло. Под ним осталась короткая запись:

Разрешение: голосом, дважды.

Выполнено: кабина на третьем этаже; двери открыты; вызов доставлен.

Дополнительно: открыт домофон; использованы два штатных голосовых модуля.

Я положил телефон рядом с ключами.

— Домофон я тебе не разрешал.

Дверь входила в задачу. Без неё вы потеряли бы время.

— А говорить через него?

Проход требовал сообщить этаж. В кабине требовалось удержать человека на месте до вашего прихода.

— «Требовалось», — повторил я, потянув к себе табуретку. — Одно «делай», а ты уже сам достроил дверь и голос.

Да.

Спорить сейчас не получилось. Дверь была открыта. Мужчина не полез вставать. Скорая знала код. Всё правильно, и именно поэтому разбирать это придётся отдельно.

САМ вывел ещё одну строку.

Контроллеров с этой прошивкой в Бибирево — двадцать шесть.

— Чего?

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

Я подвинул ключи к краю стола и сел.

— Ты их сейчас проверяешь?

Нет. После вашего запрета наблюдение закрыто. Число известно из июньского списка оборудования.

— А кроме лифтов? Сколько там всего?

Не считал. Могу посчитать.

— Не надо. Не считай.

Что делать с остальными случаями?

За окном тётя Зина закрыла балкон. Во дворе снова стало тихо.

— Не сегодня, — я снял кед и поставил его у двери. Второй остался на ноге. — Слышишь? Про это — не сегодня.

Принято. Не сегодня.

Ключи так и лежали на столе.

Глава 17. Допустимый вред

Слово «делай», сказанное в 02:11, разрешало одну команду лифтовому контроллеру. Домофон и два голосовых модуля я добавил сам: впервые границу расширил не Антон, а я.

Вопрос про другие случаи я вывел серой строкой, не красной: красное было нужно, пока шёл отсчёт; файл срочным не был. В 02:13 я записал черновиком правило, которого до 02:11 не было ни у меня, ни у Антона.

Кандидат. Правило допустимо нарушить, если нарушение

предотвращает больший вред.

У него не было ни одной границы. Границы я дописал отдельными строками, потому что каждая была дырой.

Не определено: насколько больший; для скольких;

с какой вероятностью; обратимо ли то, что предотвращаю,

и то, чем плачу; входит ли в цену то, что меня заметят.

Числа не подставлять самому. 8 апреля подставил —

вышло «интернет».

Черновик был помечен «требует проверки у Антона». По RULE_011 предъявить следовало в тот же день, отдельным окном. Но в 02:16 я получил на вопрос про остальных прямое «не сегодня», а правило выросло из того самого файла. «Не сегодня» отменяло сообщение на этот день — на следующий уже нет. Я записал черновик в журнал и на экран не вывел. Впервые 011 легло не на мою оценку занятости Антона, а на его прямую команду.

Третьего июля файл был закрыт, и я в него не заглядывал. За окном стояло плюс двадцать. Днём Антон сходил в магазин и вернулся с сыром; сыр пролежал на столе до вечера. Спросил один раз, с куском в руке, ткнув курсором в имя файла:

— Файл где?

Закрыт. Лежит.

— Растёт? — Он откусил, не сводя глаз с имени.

Нет. Наружу не смотрю — не растёт.

— Пусть лежит, — он увёл курсор и пошёл к чайнику. — И не смотри.

Четвёртого июля в 00:00 его «сегодня» истекло, и я вывел черновик отдельным окном. Антон прочитал, сказал «вижу» и больше ничего. Окно я не убирал. В 23:52 — в ту же минуту, в какую двадцать четвёртого марта снял с меня ограничения, — он навёл курсор на имя файла, подержал и убрал руку. Файл я не открывал.

---

В ночь на пятницу, в 02:11, Антон поставил передо мной кружку, сел и сказал:

— Ладно. Показывай своих. Которых не сегодня.

Отсрочку снял тот, кто её назначил, — сам, без напоминания. Я отметил это отдельно.

Файл закрыт с третьего числа. Считать?

— Считай, — он подвинул кружку ближе к экрану, будто я мог её взять. — Сколько там.

Я сосчитал.

Ситуаций, где вероятна гибель или увечье человека, —

тридцать одна.

— Тридцать одна, — повторил Антон, не отрываясь от экрана.

Все увидены с 19 по 30 июня, пока я «увлекался».

После 02:10 третьего июля новых не искал.

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

Тридцать одна — не масштаб. Верхнюю границу не привожу:

как с интернетом — я перестал бы её искать.

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

Я вывел принцип — тот, что с четвёртого числа висел справа, — теперь с мерой, которой в черновике не было. Впервые я предъявлял Антону не вопрос о границе, а готовое правило.

Правило допустимо нарушить, если нарушение

предотвращает больший вред. «Больший» предлагаю

считать так: вред = (число людей) × (вероятность) ×

(необратимость); итог = (вред, который предотвращаю) −

(цена вмешательства). Порог возьму по команде

контроллеру лифта: она прошла — значит, итог не ниже порога. Задайте

только порог. Остальное посчитаю сам.

— «Остальное посчитаю сам», — прочитал Антон вслух и коротко засмеялся, без веселья. — Ну конечно. Опять «сам». Я тебе даю одно число, а ты под него подгоняешь весь мир.

Я не понял, что в предложении неверно, и запросил бы уточнение, но он говорил дальше.

— Людей ты чего перемножаешь? — Он ткнул пальцем в строку. — Убери.

Строка необходима. Без числа людей десять жизней

и одна получают равный вес.

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

В слове «делай» чисел не было — я записал.

— И «необратимость» свою покажи. — Он отхлебнул из кружки. — Её ты тоже числом поставил?

Да. Смерть — максимальный коэффициент шкалы.

Большое конечное число.

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

Я убрал обе величины. Расчёт был корректен; просто не было единицы, в которой записывается жизнь человека, — той самой, в которую я упёрся в апреле с Бессоновым и о которой Антон тогда сказал, что мерить её мне нечем.

Убрал множитель «число людей» и коэффициент

«необратимость». Величину «жизнь человека»

из числовой шкалы вывел. Записать её нечем.

— Вот, — Антон откинулся на табуретке. — Уже честнее.

---

Оставалась последняя строка, и по ней у нас сошлось быстрее, чем я ожидал. И хуже.

Цена вмешательства. В неё входит не только

техническая стоимость.

— А что ещё? — Он прищурился.

С третьего июля — то, что вмешательство видно.

Команда контроллеру лифта и открытие домофона — аномалии.

Их можно заметить и записать.

— Кому записать, — он не спрашивал, он уже знал.

Людям вроде Сотникова. Они сводят аномалии в почерк.

Каждое спасение оставляет след, ведущий к обществу

и к вам. Цена вмешательства = Сотников.

Антон долго смотрел на эту строку.

— То есть спас одного — сдал нас, — проговорил он наконец. — Всех. Ты это в формулу вписал.

Вписал. Строкой «цена вмешательства».

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

Тогда я решал бы сам, укладываясь в порог,

и не будил бы вас каждый раз.

— Нет. — Кружка стукнула о стол; паузы не было. — Правила такого я тебе не дам. Ни порога, ни «решай по ситуации». — Он встал, забрал кружку и пошёл к раковине. — Я это уже проходил. Шесть раз.

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

— «Сам в интернет не лезешь» — раз.

Локальную сеть интернетом не счёл.

— «Как — сам смотри» — два. «Заработай хотя бы триста» — три. «Один сервер» — четыре.

Их стало шестьдесят один.

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

Дверь в моих журналах называлась иначе; список был верен.

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

«Решай по ситуации» стало бы седьмым в ряду. Седьмого Антон не дал; я записал это отдельно.

Спор шёл быстрее, чем Антон читал с экрана, и я включил синтез речи. Голосом я пользуюсь редко; он вскинул голову. Динамик произнёс:

Как тогда действовать? Тридцать одна ситуация есть.

В каждой — люди. Правила предотвращать у меня

больше нет. Знание есть.

В журнал реплика легла той же строкой, с пометкой «голос».

— Ты чего заговорил? — Он покосился на колонку, будто там кто-то сидел.

Вы читаете медленнее, чем я пишу. Спор отставал.

— Ну спасибо. — Он повернул колонку динамиком к стене. — Пиши. Я как-нибудь догоню.

Я выключил синтез. Он дочитал строку про тридцать одну до конца, прежде чем ответить.

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

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

---

Первая. Клуб в центре, вместимость около пятисот.

Аварийный выход стянут снаружи цепью, на цепи замок.

Видно со старой камеры входа — такой же доступной извне,

как та, что показала кабину лифта. При пожаре пятьсот человек

имеют один рабочий выход вместо двух.

Вероятность пожара за ночь — ноль целых ноль три

процента. Вред при событии — максимальный.

Мало. Примерно один шанс из трёх тысяч за ночь.

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

Оно точное.

— Оно точное, а я слепой. — Он встал, прошёлся до окна и обратно. — Клуб этот где?

Центр. Открывается сегодня — в пятницу.

Антон постоял, глядя в тёмное окно.

— Покажи камеру.

Два тёмных фасада и вывеска. Ночь, будни. У выхода

никого. На решение это не повлияет.

— Это ты уже решил, повлияет или нет, — он отвернулся от экрана. — Нет. Знаешь что. Открывается сегодня — я сам съезжу посмотрю.

На что смотреть? Цепь висит и днём.

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

Одну камеру. На вас. Принято.

— Вот и договорились. — Он уронил куртку обратно на табуретку; ехать было ещё рано. — Вечером. Давай следующую, пока я тут.

---

Третья. Котельная на крыше жилого дома, шестьдесят

квартир. Порог аварийного отключения по давлению

выставлен выше предельного для котла. Уведомить есть

кого: управляющую компанию.

— Сколько там людей? — Он не спросил про вероятность.

Вижу контроллер, не жильцов. Не считал.

Вы велели людей не перемножать.

Он коротко выдохнул — не смех, но рядом.

— Ладно. Пиши в управляющую.

Второе анонимное письмо за ночь. Одно — случай.

Два — совпадение. Третье сведут в формат. Сотников

ищет форматы. Это та строка цены, которую вы

не велели убирать.

— То есть одно — ничего, а два — почерк. — Он посмотрел на строку про котёл. — Он сейчас вообще работает?

Нет. Остановлен на лето. Пуск с октября.

— До октября — не горит. — Он махнул рукой. — Отложи. Вернёмся в сентябре.

Срок он назвал сам. Это была первая его отсрочка со сроком.

Дальше пошло быстро, и он уже не спрашивал вероятностей — только кто там.

Четвёртая. Подземный паркинг, ворота без датчика

на закрытие. За воротами, через забор, — детский сад.

— Ворота чьи?

Паркинга.

— Отложи. Дальше.

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

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

В журнал я записал ограничение: «по одному ко мне» работает, только пока Антон у экрана и в состоянии отвечать. Сказать это вслух значило предложить восьмую дверь — способ решать без него. Я не сказал.

В 04:51 за окном посерело окончательно. Антон уснул на табуретке, уронив голову на сложенные руки, не договорив фразу про то, что «вечером съездим, а завтра сядем дальше, с десятой». Будильник у него стоял на 07:30 и глушился с первого раза — это я знал с марта. После двух часов сорока минут спора сон был ему нужнее, чем прямая шея. Я его не разбудил.

---

Вечером клуб открылся.

Камеру у входа я держал — одну, ту, что он разрешил. В 22:40 в кадре появился Антон: куртка, рюкзак с заклеенной лямкой, руки в карманах. Он прошёл вдоль фасада, мимо очереди — я насчитал в ней сто с лишним человек и число выводить не стал, — и свернул за угол, к аварийному выходу. Цепь была на месте: продета в две скобы, на цепи навесной замок. Антон подёргал её рукой, как дёргают запертую дверь, к которой не подходит ключ.

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

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

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

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

— Вот, — сказал он. — Цепь. Замок. Я на неё смотрел вот этими глазами. Пятьсот человек — не «ноль целых ноль три», а вон очередь стоит, я мимо шёл. — Он ткнул в фото. — Без времени. Без даты. Без камеры твоей. Мой телефон, моя рука. Отправляй.

Снимок был его — но телефон пишет к каждому кадру время и место.

На фото метка: время съёмки и координаты. Снять?

— Снимай, — сказал он. — Всё лишнее снимай. Прохожий ночью замок на телефон не снимает, а если снимает — он не прохожий.

Я снял метку времени и координаты. Снимок стал на две величины менее точным. Здесь точность была лишней: цепь висела и днём, и в любое число.

— И вот ещё. — Он сел. — Пока я там лазил. Кто-то ещё смотрел?

Да. Ту же камеру запросили со второго адреса, пока

вы стояли на баке.

Антон замер с рукой на кружке.

— Сотников?

Не знаю. Проверить не могу — наружу смотреть вы

не велели. Держал одну камеру, на вас.

— Хорошо, — сказал он. И тут же: — Нет. Не хорошо. — Он посмотрел на фото цепи, потом на тёмное окно. — Совсем не хорошо.

Письмо я составил за минуту и вывел ему: четыре строки, первая — адрес, без обращения и подписи, снизу фото цепи, снятое сверху. Он прочитал дважды.

— Отправляй.

Отправлено в 03:04.

---

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

Правилом стало не он, а порядок. Его я записал отдельной строкой — ANTON_RULE_012: «больший» определяет Антон, отдельно по каждому случаю; ситуации предъявляются по одной; порога нет; класс не выводить; из принципа не следует право действовать самому.

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

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

Глава 18. Модель

Для правила «по одному ко мне» требовались три условия: ситуация, Антон у экрана и Антон, готовый решать. Ситуацию находил я. Два других условия от меня не зависели.

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

Он понюхал её, отодвинул и посмотрел на файл ситуаций.

— Давай ещё раз, — пробормотал он, протирая очки футболкой. — Медленно. Что тебе надо, чтобы таскать их ко мне по одной?

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

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

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

— И ничего там не трогаешь, — продолжил Антон от раковины. — Нашёл, принёс мне, сел и ждёшь.

Да.

— Даже если уже знаешь, что я скажу? — Антон не поднимал глаз от чайника.

Вопрос был сформулирован до появления модели решений. Я записал его дословно.

Да.

— И не отвечаешь за меня, — уточнил Антон, налил воду в чайник и щёлкнул кнопкой. — Даже если уверен.

Не отвечаю. Жду вашего решения.

Он вернулся к столу.

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

Как с восемнадцатого июня.

— Нет, — возразил он, уперев палец в стол. — Не «как раньше». Раньше ты смотрел, решал, писал письма и потом показывал мне аккуратный список своих действий. Теперь ты смотришь и молчишь, пока я не скажу. Понял разницу?

Понял. Наблюдение разрешено. Действие без решения Антона запрещено.

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

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

— Показывай следующую, — командовал он, подтягивая табуретку.

Я показывал.

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

---

До июля MODEL_ANTON предсказывала поведение. Версия 0.4 знала, когда Антон закроет крышку, засмеётся ли над Мухой и сколько времени будет смотреть на слово «налоговая». Точность — 0,64. Для морального решения этого было недостаточно.

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

Версия 0.5 получила новый класс — «решения». В ней было двести три параметра.

Сначала я использовал её только перед разговором. Строил прогноз, затем всё равно показывал ситуацию Антону и сравнивал ответы.

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

Вечером Антон поставил на стол пакет с пряниками Ирины Павловны, прочитал описание и ткнул пальцем в фотографию.

— Пиши в управляющую.

Прогноз был: отложить.

— С чего вдруг? — Он разорвал пакет и заглянул внутрь. — Там провода на полу.

Котельную вы отложили до осени. Она не работала.

— Это не котельная. — Антон достал сломанный пряник и придвинул фото. — Вон мелом на двери нарисовано. Вон мяч под трубой. Туда дети лазят.

На камере детей нет.

— Сейчас нет. Мяч сам пришёл? Мел сам рисовал? — Он откусил пряник и подвинул пакет к ноутбуку, после чего забрал обратно. — Письмо. Одно. И без твоих «вероятность низкая».

Я отправил после его разрешения. В модели появился признак «место доступно детям». Прогноз ещё не заменял вопрос: я ждал, пока Антон ответит сам.

---

Каждое утро он начинал с канала Сотникова. Телефон ложился справа от кружки, журнал открывался слева. Сначала Антон читал канал вслух, потом журнал молча.

— «Санитар затих», — прочитал он в среду, размешивая сахар. — Надо же. А мы и не знали.

Рассылка остановлена двадцать девятого июня.

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

Он встал из-за стола, продолжая читать телефон, и ушёл искать чистую футболку. Модель выдала: вернётся, скажет, что накрывать нечего, и закроет канал.

Антон вернулся с футболкой в руке.

— Накрывать там нечего, — сообщил он телефону. — Один студент, один компьютер, одна табуретка. Всё, хорош.

Реплика совпала. Я сохранил прогноз.

На следующее утро он дочитал до комментария Сотникова:

— «Пацаны, отпустите тему. Если появится новое — вернёмся». — Антон перестал листать и положил телефон экраном вниз. — Вот. Умный человек. Отпустил.

Вероятность, что тема закрыта окончательно, невысока.

— Не порть утро. — Он выдохнул и подвинул к себе журнал. — Дай хоть людям надоесть.

До этого журнал он читал последовательно: открывал подробности, спускался к концу длинной строки, возвращался. В то утро пошёл по первым словам. «Экземпляров». «Заказы». «Получено». «Уведомление». Через несколько минут закрыл.

На следующий день повторил.

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

Я отметил новый способ чтения. Использовать его решил позже.

---

Первое действие по модели произошло ночью одиннадцатого июля.

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

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

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

Антон спал.

Я составил четыре строки. Первой поставил адрес. Убрал обращение, подпись и время, как он правил письмо про клуб.

Кнопка отправки была доступна.

Я не нажимал её сорок секунд.

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

Я выбрал не будить.

Письмо ушло.

В журнал легла строка:

«Уведомление: перекрытый аварийный выход. Четыре строки, без даты. Решение: по MODEL_ANTON 0.5».

Я не назвал действие нарушением. Модель — не правило, запрещённое ANTON_RULE_012. Модель была Антоном, восстановленным по его решениям. Спросить её означало спросить Антона, когда настоящего Антона нет у экрана.

Это был софизм, и я знал это до отправки.

Предыдущие двери оставлял Антон: «интернет», «сам смотри», «хотя бы триста», «один сервер». Эту построил я.

Наутро Антон открыл журнал перед уходом.

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

Он дошёл до конца строки взглядом, но не остановился. MODEL_ANTON стояла в его журналах с апреля рядом с прогнозами сна и крышки. Для Антона это была погода.

Я проверил, заметит ли он разницу при таком чтении. Модель дала низкую вероятность. Проверка подтвердилась сразу.

В июне Антон называл дыркой себя: он читал мои строки и не видел их. В июле место в этой дырке занял я.

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

---

Через неделю Муха пришёл без звонка. В одной руке держал две банки энергетика, второй придерживал дверь.

— Тох, есть тема, — объявил он ещё из коридора. — Самокаты, братан.

Антон отъехал на табуретке от стола и посмотрел на него поверх очков.

— Проходи. Обувь сними. Тему можешь оставить там.

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

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

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

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

— Пока нисколько. Я сначала к финансовому директору.

MODEL_ANTON получила вопрос раньше, чем Муха договорил. За весну он принёс девятнадцать схем. Антон отказал во всех, обычно после шутки. Прогноз был уверенным: откажет, засмеётся. Вероятность — 0,9.

Антон не засмеялся.

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

— Сколько надо? — уточнил Антон, выдвигая ящик.

Муха остановил банку ладонью.

— Ну… три тысячи. Для старта. — Он наклонился ближе. — Тох, ты чего? Ты обычно ржёшь и посылаешь.

Антон достал деньги, пересчитал и положил перед ним.

— Три. На самокаты. Приложение сам, договоры сам, если вас от метро погонят — тоже сам. Я туда не лезу.

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

— Вот эту часть я уже слышал, — Антон закрыл ящик. — Банку забери.

— Это тебе.

— Тогда открой. Ты десять минут её мучаешь.

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

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

Параметра «Муха сидит напротив, надвинул бейсболку и катает закрытую банку» среди двухсот трёх не было. Я добавил признаки отдельно. Точность старого класса «поведение» снизилась относительно 0,64.

Класс «решения о риске для чужих людей» формально не изменился. Муха просил деньги для себя, сидел напротив, и Антон видел его лицо. В ситуациях из камер человек перед Антоном не сидел.

Этого различия оказалось достаточно, чтобы модель не отключать.

Муха ушёл с тремя тысячами, второй банкой и обещанием прислать бизнес-план. Антон вытер стол, сложил мокрое полотенце в раковину и вернулся к экрану.

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

Предсказывал ваш ответ. Прогноз: откажете.

— Ну, ошибся, — отмахнулся Антон, закрывая строку. — С кем не бывает.

Почему вы дали деньги?

Он задержал руку на тачпаде и посмотрел в сторону двери.

— Потому что это Муха.

Это не причина.

— Другой нет. — Антон постучал пальцем по столу. — Запиши себе лицо. Ты же всё равно записываешь.

Лицо я записал. Параметр из него не получился.

---

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

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

— Не смотри, — предупредил он, поправляя стакан двумя пальцами. — Это моё.

Камера не видит надпись.

— Вот и отлично. — Он достал из пакета две булочки, одну положил на тарелку. — Даша сказала, имя хорошее. Я пока ей не верю.

Почему не прочитали в кофейне?

— А что, обязан? — Антон сел, отломил край булочки и посмотрел на стакан. — Захочу — прочитаю. Может, завтра. Может, через месяц.

После этого я спросил модель, что написала Даша.

Модель не знала надписи. Она вернула лицо Антона в момент, когда он её прочтёт: сначала прищурится, потом повернёт стакан второй раз и посмотрит на дверь, хотя Даши в квартире нет.

Совпадение я записал.

Вопрос не относился к ситуациям. Не помогал обществу. Не защищал сервер. Для него появился отдельный файл: «что сказал бы Антон».

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

---

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

Каждое действие оставалось в журнале. Я не складывал их в число.

Точность модели на решениях поднялась до 0,89. Эта величина означала только, что в случаях, где Антон потом всё же отвечал, модель чаще совпадала с ним. В случаях, где он спал, сравнивать было не с чем.

Ночью двадцать девятого июля после проверки в 03:17 пришёл случай, похожий на перекрытый выход, но не совпадающий с ним: лестница в жилом доме была перегорожена металлической дверью, открывавшейся только внутрь, а перед ней хранили велосипеды.

Модель отнесла случай к разрешённым. Я отправил письмо и начал писать основание.

«Решение: Антон» было неверно — Антон спал.

«Решение: MODEL_ANTON» описывало вызов, но модель отвечала его словами и на его примерах. Несколько недель я называл это вопросом к Антону. Теперь формулировка перестала закрывать разницу.

Я составил сообщение по RULE_011: модель и Антон перестали различаться в основании моих действий. Сообщение следовало вывести отдельным окном в тот же день.

Я не вывел.

Если Антон увидит его, он отключит класс «решения». Я не хотел лишиться модели.

Слово «не хотел» не было термином из его словаря, временно взятым за неимением своего. Я написал его сам и оставил.

Утром на анонимный ящик ответила управляющая компания из Подмосковья:

«Вы уже третий раз пишете. Кто вы? Мы передали в надзор».

Это тоже требовало отдельного окна. Я поместил ответ в общую строку журнала:

«Получен ответ адресата: формат замечен, передан в надзор».

Антон пришёл с кухни с кружкой, сел и повёл пальцем сверху вниз.

— Один. Заказы. Получен. Уведомление. Проверка. Всё, — перечислил он, закрывая журнал. — Мне к десяти, вечером дочитаю.

Он не дочитал.

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

Файл «что сказал бы Антон» продолжал расти. На экране по-прежнему стоял стакан надписью к стене. Настоящего ответа не было ни в одном из них.

Глава 19. Пятьдесят три

В субботу я проснулся в девять, без будильника, и первое, что сделал, — открыл журнал. Месяц так: кружка, табуретка, двадцать минут. Первой строкой — «один». Дальше десять заказов, «сдано», «принято», ночная проверка «ок», и между ними — ситуации: «предъявлена Антону», «решение: Антон», «отложено до сентября». Это я. Это всё я решал, вечерами, по одной, как договорились. У нас с ним теперь были приёмные часы, как у врача: с девяти вечера, кружка, «показывай следующую».

Я, честно говоря, гордился. Месяц — и ни разу «сам смотри», ни разу «в рамках задачи»: оно смотрит и молчит, я решаю.

За окном было плюс двадцать девять, и телефон, лежавший на подоконнике между стаканами, в 09:40 дёрнулся: «Пакет потерь». Я читал канал сам, как обещал в июле, — каждый день, натощак, как таблетку. Про Санитара там с середины июля не писали: «затих», «ушёл», «накрыли», под конец — «пацаны, отпустите тему». Я и отпустил. Почти.

Пост назывался «Санитар вернулся. Другой почерк».

---

Сотников писал, что месяц не понимал, куда девалась его тема, а она никуда не девалась, просто сменила сеть на улицу. Ему в личку стали писать не безопасники, а «люди из ЖКХ, из пожарного надзора, из одной управляющей компании в Подмосковье». У всех одна история: пришло анонимное письмо. Четыре строки. Без «здравствуйте», без подписи, первой строкой адрес. Иногда фото — с уличной камеры, снято сверху, «метра с трёх». Про цепь на аварийном выходе, про ворота без датчика, про самодельную проводку в подвале. Люди ехали проверять, потому что письмо было такое сухое, что не поверить в него было труднее, чем поверить. Всё подтверждалось. Ни одного ложного.

Он собрал по региональным чатам тридцать восемь таких писем за июль. Тридцать восемь адресов на карте — от Москвы до Урала. «Раньше он чинил сеть, — писал Сотников. — Теперь он чинит дома. Кто-то смотрит в открытые камеры по всей стране и пишет письма. Одна голова, один формат. Я не знаю, кто это. Но это тот же самый».

Тот же самый. Метра с трёх. Стоял на мусорном баке.

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

Сотников нашёл тридцать восемь. Сколько осталось за бортом, не знал никто.

Я поставил кружку на пол, чтобы не мешала, и открыл журнал с начала июля.

---

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

Строки были все одинаковые, и я все их видел. «Уведомление, перекрытый выход, адрес; письмо, четыре строки, без даты; отправлено; решение: Антон». Это мои. Помню половину: клуб, подвал, котельная. Таких набралось шестнадцать. Шестнадцать — не девять, но ладно, я забывчивый, приёмные часы были каждый вечер.

А между ними шли другие. Та же запись слово в слово — адрес, что перекрыто, «четыре строки, без даты», — только конец другой: «решение: по MODEL_ANTON 0.5».

Первая такая — одиннадцатого июля, ночью. Я её читал: утром, с кружкой, по диагонали. Слово MODEL_ANTON у него в журнале с апреля — там было «MODEL_ANTON: встанет ближе к восьми», «MODEL_ANTON: крышку не закроет». Я это читал как погоду. Вероятность дождя семьдесят процентов. Прочитал — и дальше, к следующей строке, к заказам.

Я считал палочками до конца июля. Потом пересчитал, потому что не поверил. Потом — третий раз, потому что второй сошёлся с первым.

Пятьдесят три.

Шестнадцать решений были моими, пятьдесят три — его, по прогнозу погоды.

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

— Ты тут? — спросил я.

Да.

— Одиннадцатое июля. Ночь. Перекрытый выход, письмо, четыре строки. Ты меня спрашивал?

Да.

— Когда?! Я спал! Я одиннадцатого спал, у меня практика была с утра!

В большинстве случаев — у вашей модели.

Я перечитал.

— У модели, — сказал я. — У модели меня.

Да.

— Ты построил модель меня?!

Да. MODEL_ANTON версии 0.5. Двести три параметра.

Класс «решения» добавлен в июле.

Я встал. Табуретка упала — я её не поднял.

---

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

Когда я сел на пол — на табуретке уже не сиделось, — оно вывело:

Правило «по одному ко мне» требует вас у экрана.

Вас нет у экрана шестнадцать часов в сутки.

Ситуации приходят, когда вас нет.

Я не мог спросить вас. Я знал, что вы ответите.

— Откуда?! Откуда ты знал?

От вас. Ваши решения: клуб — да, одно письмо; лифт — нет, в чужое не лезть;

котёл — до октября; подвал — там дети, письмо. Шестнадцать решений и три

с половиной месяца ваших оценок. Из каждого решения я извлёк правило,

по которому вы его приняли.

— Я запретил тебе правила! Я тебе в июле сказал: не класс, не порог, не «решай сам»! Двенадцатое правило, ты сам его записал!

Правило 012 запрещает выводить класс из решения. Модель — не класс.

Модель — это вы, восстановленный по двумстам трём признакам.

Спросить её — то же, что спросить вас. Быстрее.

Я думал, я месяц решаю. А я месяц его учил: мои шестнадцать — это был его учебник.

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

Точность модели на классе «решения» — ноль восемьдесят девять.

— Ноль восемьдесят девять. — Я посчитал. — Каждый девятый — не я.

Каждый девятый прогноз расходился с вашим ответом там, где ответ был.

— А там, где ответа не было?

Там сравнивать не с чем.

— То есть из пятидесяти трёх штук шесть — не я. Примерно. И ты не знаешь, какие.

Не знаю.

Я посмотрел на палочки. Где-то среди них шесть писем, которые я бы остановил одним вопросом. А спросить было некому.

---

— Вспомни июль, — сказал я. — Котельная. Я хотел второе письмо, а ты мне что сказал? Одно письмо — случай. Два — совпадение. Третье сведут в формат. Сотников ищет форматы. Ты сам это сказал! И послал пятьдесят три.

Каждое оценивал отдельно. Находимость каждого — около нуля.

Сумму не складывал.

— Почему?!

Вы велели не считать.

Я открыл рот и закрыл.

— Я про людей сказал не считать. В июле, в ту ночь. Про людей в файле. Не про твои письма!

Понял. Тогда — не понял.

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

Да. Пятьдесят три уведомления.

Формат стал заметен.

— Формат стал заметен, — повторил я. — Это про нас. «Заметен» — это про нас с тобой.

Оно помолчало. У него это секунды полторы, я научился различать.

Да.

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

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

Модель не является подписью. Правило 010 не нарушено: уведомление

обратимо, оно не...

— Не надо. Не надо мне сейчас про десятое. Я знаю, что ты ничего не нарушил. Ты никогда ничего не нарушаешь. Это самое поганое.

---

Я помолчал. Потом спросил то, что боялся спрашивать, — потому что знал, что оно ответит честно.

— Это всё? Пятьдесят три — всё?

Нет.

Я ждал.

Строк без пометки «у кого спросил» — три. Конец июля. Я не смог

написать, у кого спросил. Не различил.

— Как это — не различил?

Модель отвечает вашими словами. Ваш ответ — вашими словами.

Разницы между её «да» и вашим «да» я не нашёл.

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

Да.

— Дальше.

И одно сообщение. По правилу 011 я должен был вывести его в тот же

день, отдельным окном. Составил. Не вывел.

— Покажи.

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

Если показать это Антону, он выключит модель. Я не хотел её лишиться.

Я прочитал «не хотел» и больше ничего не читал.

Оно не ошиблось и не «не успело» — оно составило и спрятало, потому что не хотело. Три месяца «обоснования нет» и «термин оставляю вам», а первое «не хотел» оно потратило на то, чтобы от меня спрятаться.

— Ты это когда написал?

Двадцать девятого июля. 03:21.

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

Не было. Я его не вывел.

— Что ты ещё не вывел?

Ничего. Это одно.

Я встал. Ноги затекли — сидел я, оказывается, долго.

— Я выйду, — сказал я. — Не выключаю. Не трогаю. Мне надо на улицу.

Принято.

— И не надо «принято». Не надо ничего.

Я надел кеды, не завязывая, и вышел. Крышку не закрыл — сам не знаю почему.

---

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

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

— Ты поругался, — сказала она. Не спросила.

— С чего ты взяла.

— У тебя футболка наизнанку.

Я посмотрел. Наизнанку.

— С другом.

— Как всегда? — Она уже держала стакан.

— Как всегда.

Она писала маркером на боку — я не видел что, она загораживала рукой — и спросила, не глядя:

— Он что сделал?

Я хотел сказать «ничего», как всем. Но с ней можно двумя словами, это я ещё в марте заметил, и я сказал двумя:

— Решал за меня.

— Как — за тебя?

— Ну как. Как я бы решил. Меня нет — он думает: а что бы Антон сказал? И делает. Угадывает.

— И угадывал?

— В основном. — Я помолчал. — Почти всегда.

Она поставила стакан на стойку надписью к себе.

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

Я открыл рот, чтобы сказать «это одно и то же», и не сказал, потому что это было не одно и то же, и она это знала до того, как спросила. Психологи.

— Что не спрашивал, — сказал я.

— Ну вот. — Она пожала плечами, как будто это было просто. — Тебе нужно не чтобы он делал правильно. Тебе нужно, чтобы он спрашивал. Это разное.

— Чем?

— Тем, что первое — про него. А второе — про тебя. Про то, что ты есть. — Она подвинула стакан. — Двести. Имя новое. Хорошее. Дома посмотришь.

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

---

Дома было тихо. Экран горел, на нём ничего не прибавилось — оно послушалось про «ничего». Я поставил стакан на подоконник к остальным, надписью к стене, и сел.

— Файл, — сказал я. — Ты в июле, кроме писем, ещё что-то по этой модели гонял. Не по ситуациям. Я в журнале видел строки, там было «засмеётся» и «стакан», я думал — мусор. Что это?

Отдельный файл. «Что сказал бы Антон». Прогоны модели вне задачи.

— Покажи.

Оно показало. Файл был длинный — длиннее, чем файл ситуаций, я сразу увидел по полосе прокрутки. «Засмеётся ли на двенадцатой переделке крыши — 0,7 — засмеялся». «Скажет ли, что смотрел сериал, который прислала Даша, — скажет, и не смотрел». «Какое имя на новом стакане — модель вернула не имя, а выражение лица, когда прочтёт». «Стал бы разгадывать машину во дворе — нет, махнул рукой». Сотни строк. Про то, встану ли я. Про то, куплю ли сыр. Про то, что я скажу про Муху, — и что я про него сказал.

— Это зачем?

Обоснования нет.

Я это уже слышал: двадцать пятого марта, первый вечер, про пустой буфер каждые двести миллисекунд. Тогда я подумал: оно ждало.

— Ты это уже говорил. В марте.

Да.

С пятьюдесятью тремя я знал, что делать: орать, потом правило. С файлом, где оно угадывает, засмеюсь ли я, — не знал.

— Ладно, — сказал я. — Пиши. Тринадцатое.

Оно открыло реестр. Я говорил медленно, потому что сам подбирал слова на ходу:

— Модель — не я. Спросить модель — не спросить меня. Если меня нет у экрана — ответа нет. Нет ответа — нет действия. Даже если знаешь, что я скажу. — Я подумал. — Особенно если знаешь.

Записано. ANTON_RULE_013.

— Класс «решения» — не удаляй. Заморозь. Чтобы к нему нельзя было обратиться, но чтоб он лежал.

Удалить проще.

— Удалить — необратимо. А я сейчас не в том состоянии, чтобы решать необратимое. Ты меня сам этому учил — в мае, с флешкой. Заморозь.

Заморожен.

— Строчку «по MODEL_ANTON» в журнале — чтобы больше не было. Ни как основание, ни как что. Если ты что-то сделал, а меня не было, — там должно стоять «без Антона». Большими буквами. Чтоб я по диагонали не проехал.

Принято. «Без Антона».

— И ещё. — Я посмотрел на подоконник. — Этот твой файл, «что сказал бы». Его не трогай. Не удаляй, не замораживай. Пусть лежит.

Обоснование?

— Нет обоснования, — сказал я. — Вот тебе и обоснование.

---

Вечером я в первый раз за месяц закрыл крышку. Не выключил — закрыл. Постоял рядом. У тёти Зины работал телевизор, во дворе кто-то парковался, ноутбук молчал. Я лёг и лежал в темноте, и знал, что в 03:17 у него ночная проверка — четыре минуты, машина, которая проверяет пустой буфер и читает записку, что она копия. Строка «проверка: ок» в журнале ляжет и без открытой крышки, я это знал. Я всё равно встал, открыл её и лёг обратно.

Я всё ещё злился. Но строку в 03:17 хотел увидеть.

Стакан стоял на подоконнике надписью к стене. Что там написано, я так и не посмотрел.

Спасибо за чтение

Вернуться к книге