Евгений Лотош
Двойное слово
Вот кто бы объяснил, почему строители так любят покрывать лестничные площадки и ступеньки отполированным до зеркального блеска псевдомрамором и прочей гламурной гладкостью? Вариант с тотальной мизантропией проектировщиков и, как следствие, желанием подскользнуть будущего пешехода отпадает. Хомо хомини, конечно, лупус эст, но не настолько же! Или высокое начальство клиента, заказывая музыку, заранее предвкушает, как понизится процент просителей, успешно добравшихся до их кабинетов? Или самим горе-проектировщикам никогда в жизни не приходилось пробираться по крутеньким ступенькам с покрытием из скользкого пластика, стараясь не отпускать перила — единственное, что отделяет их от Института экстренного хирургического вмешательства? Ну ладно, в Метамире это не так критично, особенно если болевые по пятой категории пропущены, но Снаружи? Ведь там точно та же самая история!
Размышляя таким образом, Виктор на цыпочках пробрался по широкому холлу, стараясь ступать только на вытертые тысячами подошв квадраты. У него-то из упрямства болевые по второй категории, так что даже задницей о пол приложиться — и то весьма чувствительно. Из открытой двери навстречу пахнул теплый воздух вечного летнего полдня. Ласковое нежаркое солнце стояло в зените, бросая на гранитные плиты крыльца Администрации и стартфинишную площадь шевелящиеся пятна теней от крон окружающих деревьев. Щебетали воробьи, прыгающие по земле вокруг каких-то крошек. Синица спорхнула на ветку березы в двух метрах от входа, настороженно осмотрелась, резко дергая головкой из стороны в сторону, и бесшумно растворилась в зарослях кустарника. Через крыльцо прошествовал, задрав хвост-трубу, черный вальяжный кот (или кошка — кто их там разберет). Интересно — чей-то аватар или просто шуточный макрос? Если первое, то у этого кого-то высокий приоритет, раз смог подавить запрет Виктора на визконтакт. Охранник? Или даже сам первый зам ехидничает? Если первое, то рано или поздно у местного сантехника случится серьезный нагоняй из-за устроенного суеверным посетителем скандала...
Виктор медленно спустился по ступенькам. Коротко пискнуло: зона непрерывного перемещения покинута, можно смещаться в джамп-режиме. Старик опустился на ближайшую скамейку. Деревянная лавка под ним услужливо подалась, меняя форму под седалище человека. Простенько и со вкусом — когда-то, давным-давно, он сам программировал этот интерфейс. Решение получилось коротким и элегантным и до сих пор широко применялось в мебелестроении. А ему даже премии не обломилось. Не очень-то и хотелось, между прочим. Тогда он работал в свое удовольствие, мало обращая внимание на внешние стимулы вроде презренной зарплаты. Да, были времена...
Усилием воли он отогнал от себя воспоминания. Времени оставалось в обрез, а ему еще надо записать последние впечатления и сделать пару внешних копий для надежности. Да, все пользовательские данные резервировались в автоматическом режиме, но очень, очень скоро наступит завтра.
А в завтра он уже не верил.
Солнечный луч скользнул сквозь шевелящиеся листья и игриво кольнул его в левый глаз. Виктор дернул головой. Может, стоило переместиться в офис, к большому экрану и тщательно подстроенному под себя интерфейсу рабочей системы? Десять секунд на выбор координат из списка — и он там. Но толку-то? Его место — в аккурат под солнечными лучами, вечно льющимися из окна и мешающими рассматривать изображение. Коллеги в ответ на его жалобы дружно фыркали и обзывали вампиром и филином, но поменяться местами почему-то не хотели. Простейшее доменное окно из полятрикса могло бы решить проблему, но начальство на него жмотилось. Равно как и жмотилось на уж-жасно дорогую — стоимостью в десять раз меньшей, чем коврик в приемной шефа — лицензию на расширение офисного помещения, что позволило бы ему перетащить рабочее место подальше от лучей. А идея вообще убрать окно и перейти на совершенно бесплатный рассеянный свет в штыки воспринималась теми же коллегами независимо от их возраста. Им, видите ли, после тесных ячеек орбиталов нравится земное солнышко!
Виктор опять тряхнул головой. Он знал, почему его мысли все время ускользают в сторону. Ему просто не хотелось работать. Похоже, его все-таки заразил всеобщий пофигизм. Нет, так дело не пойдет. Решительно пошевелив пальцами, он повесил прямо перед собой мемопад, а справа — напоминальник. В напоминальнике на темно-голубом фоне алыми цифрами монотонно тикали часы. 19 марта 2292 года, 20:37... 38... 39... 40... Чуть ниже в сотни раз быстрее мелькали другие цифры, нарисованные гораздо более крупным шрифтом: 1844674407369395ХХХХ. Последние четыре цифры числа сменялись с такой скоростью, что казались неразличимыми пятнами. Еще ниже капля за каплей убывал песок в песочных часах: 1560ХХХХ. Здесь тоже последние числа менялись с невероятной скоростью, но уже в сторону убывания. Ниже тикала расшифровка: 64:59... 58... 57...
Час. У него осталось чуть больше часа.
Взгляд упал на предыдущую запись в мемопаде. Наверное, он слишком пристально на нее взглянул, потому что запись немедленно развернулась. На сером фоне побежали черные буквы.
"— Да ты, Витька, задрал уже своим алармизмом! — Роман раздраженно отвернулся от своего полусферического экрана, который нависал над ним со всех сторон — с боков, сверху и, кажется, даже снизу. Со стороны экран казался матовой серой поверхностью, так что понять, над чем он работает, не удавалось. — Тысячи человек работали над перетряхиванием кода. Миллиарды джуко в проверку вбухали. Да вычистили они все, кой черт! Успокойся, наконец, старый хрен. Думаешь, если седьмой десяток разменял, то уже самый умный?
— Да? А то, что я до сих пор то тут, то там наталкиваюсь на баги, тебе наплевать? — ядовито осведомился я. То есть это я надеюсь, что ядовито, а не жалобно-устало. Хорошо хоть в Метамире звучит не мой настоящий голос — с надтреснутой старческой хрипотцой. Я уже и сам не верю, что когда-то свои голосом читал лекции перед огромными аудиториями. — Да хрен с ним, со мной, ты сейчас опять скажешь, что ошибка в финтифлюшке ничего не значит. Заметят, мол, тогда поправят. Но я ж тебе тысячу раз говорил...
— Да помню я наизусть, что ты мне говорил! — огрызнулся Роман. — Что перетряхивают только нижние слои эмулятора и базовый гипервизор, что верхние слои и уж, упаси господи, старый код никто не трогает, поскольку никто не помнит, как и что там организовано... Да нормально организовано! Уж не большие дураки, чем ты, писали..."
Виктор сморгнул, и текст свернулся обратно. Не до того. Он пошевелил пальцами и состроил на физиономии сложную гримасу. "Новая запись", — мигнуло в мемопаде. — "Режим расшифровки нейропечати. Персональный стилистический профиль включен". Серое поле закрыло весь экран мемопада и замерло, ожидая появления текста. Виктор глубоко вздохнул, расслабляя мышцы лица и настраиваясь на нейрокод.
"Заголовок: Последняя встреча с Васюченко"
"Дата и время: 19 марта 2292 года, 22:41"
"Ключевые слова: Апокалипсис, переполнение счетчика, последняя попытка"
"Текст записи:
— Присаживайтесь, Виктор Павлович, — первый зам кивнул на кресло, не отрываясь от своего интерфейса. — Я вас слушаю.
— Я по поводу своей докладной записки... — Я замялся. Терпеть не могу общаться с чиновниками, как и любой технарь. Даже к старости не научился. Полагаю, и они к нам относятся с взаимной антипатией. Типа, умных слов много знают, а управляем-то все равно мы! — Я писал, что принимаемых мер явно недостаточно. Мы рискуем тем, что весь Метамир...
— Я прочитал вашу записку, — Васюченко наконец соизволил оторвать взгляд от экрана и взглянуть на меня. — Господин Чаплин, вы, надеюсь, осознаете, что далеко не первым предупреждаете о грозящей опасности?
— Да, я...
— Более того, вы наверняка знаете, что на администрацию Метамира работает целый штат программистов, основной задачей которых является именно отладка кода и поиск возможных проблем?
— Да, разуме...
— В таком случае вы должны понимать, что ваши предупреждения совершенно излишни. Наши люди — весьма квалифицированные специалисты, в том числе по оценкам... м-м-м, недружественных сторон.
— Но этого...
— Виктор Павлович! — укоризненно-отеческий взгляд первого зама окончательно заткнул мне глотку. Вот скотина! Легче широковещательный видеопоток перебить, чем чиновника такого калибра. — Я ознакомился с отзывами о вас со стороны ваших последних — и не только последних — работодателей, а также с вашим персональным досье. Вы — весьма известный и уважаемый в своей области специалист, автор четырех классических учебников и огромного количества статей в регулярных профессиональных изданиях. Судя по записям, в молодости вы внесли значительный вклад в программирование Метамира, а позже — и в его портирование на дименсионные схемы. У вас блестящая репутация и значительное влияние на общественное мнение в определенных социальных группах. Поэтому не прислушаться к вашим словам невозможно. Именно поэтому с вами решено встретиться, именно потому вы сейчас здесь.
Чиновник устало вздохнул и потер глаза ладонями. Его вид невольно вызывал жалость. Небось, сам горит на работе по шестнадцать часов в сутки, дома выпадает из консоли выжатый как тряпка, чтобы застать давно спящую жену и остывший в духовке ужин... Дешевый трюк. В свое время, когда я увлекался психологией, я к своей аватаре такие макросы десятками прикручивал. А потом все открутил, оставив только стандартные реакции, когда увлечение стало массовым. Так что нифига он не выжат. Наверняка на него лучшие фейс-дизайнеры работают. Просто придуривается, чтобы от меня отделаться поскорее.
— Поймите, Виктор Павлович, Метамир — это не просто развлекательный комплекс напополам со средствами психологической разгрузки. Он — огромное коммерческое предприятие. Деловые люди назначают здесь встречи. Политики проводят переговоры. Искины управляют отсюда банками и строительными роботами. Люди приходят сюда работать и развлекаться, просят политического убежища и отбывают тюремные сроки... И вы предлагаете заморозить все это хозяйство? Вы хоть понимаете, что каждая секунда работы Метамира оценивается в совершенно конкретные деньги? Пятнадцать миллионов джуко — в пятьдесят раз больше, чем вы зарабатываете за год. И вы хотите остановить его на неделю для перетряхивания... как его?.. гипервизора?
Я сидел как оплеванный. Все ясно. И этот высокопоставленный чудак на другую букву думает только о деньгах. Он посчитал на калькуляторе, во сколько встанет Метамиру неделя простоя, и итог затмил ему глаза. Урод.
— Мы вкладываем огромные средства в обеспечение бесперебойной работы Метамира, — продолжал вещать Васюченко. — Мы дублируем и триплируем все мало-мальски важные компоненты. С этой целью мы постоянно наращиваем вычислительные мощности — уже сейчас только ядро вычислительного комплекса занимает около пяти кубических километров. Вы представляете, во что нам обходится одна защита этого объема от космических излучений и вещественных помех? Сколько энергии расходуется на поддержание дименсионно-вакуумных структур? Остановив Метамир, мы начнем нести убытки не только от недополученных денег, но и от затрат на поддержание простаивающего комплекса. И для чего? Только для того, чтобы еще в одном или двух местах найти слишком маленькую константу?
— Не константу! — мне показалось, что на этой ошибке можно, наконец, вклиниться в монолог и завладеть его вниманием. — Речь о том, что в свое время проектировщики не подумали и запроектировали под базовую системную переменную, хранящую текущее время, слишком мало места. Только двойное слово в одной устаревшей уже тогда системной архитектуре. Шестьдесят четыре двоичных позиции. В двоичной системе это составляет...
— ...Около восемнадцати с половиной тысяч триллионов, — опять оборвал меня Васюченко, — что с учетом текущего коэффициента дискретизации, равного четырем тысячам, составляет около ста пятидесяти миллионов лет. Спасибо, я в курсе. Однако соответствующий компонент эмулирующего слоя давно локализован и переписан, равно как переписаны и все компоненты более высокого уровня...
— Это не так! — горячо встрял я. — Вас обманули!
Вот сейчас я, кажется, действительно завладел его вниманием. Мускулы его лицо неуловимо дернулись. Разумеется, его консоль запрограммировали так, что она огрубляет реальную мимику, а то и вовсе игнорирует ее, корча рожи по едва заметным движениям пальцев. Но опытный взгляд даже в этой ситуации может многое для себя заметить. А опыта у меня хватает. Нет, это явно не бизнесмен на деловой встрече, улыбчивый манекен в пластмассовом костюме, у которого реальная мимика вообще отключена...
— Вас обманули! — продолжил я. — Локализован только один ключевой компонент эмулирующего строя. А их могут быть десятки, сотни! Мы ведь так точно и не знаем, где еще программисты использовали ту дурацкую исходную библиотеку и от какой взятой с потолка константы они отсчитывали текущее время в огромном количестве вспомогательных компонент! Объем исходного кода — это сотни миллионов строк на трех десятках языках программирования, половина которых уже давно забыта специалистами. Здесь невозможно локализовать что-то со стопроцентной уверенностью. И единственный способ выявить все места — это позволить счетчику обнулиться и тщательно проверить всю систему на предмет сбоев.
— Но именно это и произойдет само собой, — заметил первый зам. — Причем уже очень скоро.
— Но при этом в Метамире продолжат работать люди! Те самые банковские транзакции.... Машинисты, управляющие тяжелыми поездами, самолетами и шаттлами... Операторы атомных реакторов и систем очистных сооружений в орбиталах... Здесь миллионы человек и искинов, любая ошибка в интерфейсе которых может привести к чудовищным катастрофам Снаружи. Мы должны завершить все пользовательские сессии и дать людям возможность плавно переключиться на резервные консоли, не завязанные на Метамир. Потом мы обнулим счетчик — или дадим ему возможность обнулиться самому, благо совсем немного осталось — и тщательно протестируем систему на предмет ошибок. А уже потом можно и пускать людей обратно.
— Это невозможно, — покачал головой первый зам. — И я уже объяснил вам, почему. Мы приняли все возможные меры. Все наши программисты переведены в авральный режим работы и находятся на рабочих местах в ожидании обнуления. Все наши клиенты предупреждены и приняли собственные меры безопасности. Виктор Павлович, я прекрасно понимаю мотивы, которые вами движут, но и вы поймите нас. Метамир — лишь один из десятка глобальных виртуальностей, но волею судеб он сердце современной экономики. Сколь-нибудь продолжительный простой не только для нас, но и для всего мира совершенно неприемлем. Мы признательны вам за вашу высокую гражданскую сознательность и даже сочли возможным перечислить на ваш счет небольшую премию в качестве поощрения вашей инициативы. Если в ближайшем будущем у нас возникнут проблемы, которые не в состоянии разрешить наши люди, мы обязательно обратимся к вам как к консультанту — с выплатой соответствующих бонусов, разумеется. Но сейчас я полагаю тему исчерпанной. Извините, у меня еще масса работы.
Тишина. Первый зам в упор смотрел на меня. Разговор окончен. Я встал, коротко кивнул и вышел из кабинета."
Виктор быстро пробежал глазами написанное, исправил несколько ошибок и закрыл запись. Все. Теперь в его личной консоли хранился полный дневник последних трех недель, не зависящий ни от каких глобальных сетей и виртуальностей. Даже если мир полетит в тартарары, он до самой смерти сможет наслаждаться воспоминаниями — аж десять или двадцать лет. С поправкой на то, разумеется, что его бренное тело сейчас валяется в ячейке гигантского орбитала, плывущего где-то высоко над Африкой. И к которому, вполне возможно, сейчас идет на стыковку тяжелый грузовик, чей искусственный интеллект базируется на вычислительных мощностях Метамира.
Пискнуло. На счетчике — десять минут до обнуления. Есть время в последний раз просмотреть давешнюю статью. Авось да выловит еще пару ошибок. Движение век — и новый текст открывается в окне мемопада.
"...однако двоичная система счисления, технологическая надобность в которой отпала более ста лет назад, все еще активно используется в программировании. В значительной степени это объясняется тем фактом, что огромное количество кода, использовавшегося для написания современного программного обеспечения, не переписывалось несколько десятилетий, а кое-какие отрывки — и столетий. После того, как отпала необходимость тесной привязки исходного кода к аппаратуре, пропала и необходимость и его переписывания для портирования на новую платформу. Гораздо проще написать эмулятор старой платформы, который поможет этому коду общаться с новой аппаратурой и новыми операционными системами. Что с того, что код поверх эмулятора обрабатывается в десять раз медленнее "родного" кода, если производительность новой платформы выросла в сто раз? Что с того, что рано или поздно для поддержки работы старого эмулятора приходится писать новый, все утолщая и утолщая слоеный пирог?..
Основная проблема "момента обнуления", как ее назвала пресса, весьма стара. Человечество уже проходило это на заре развития электронной техники: "проблема двухтысячного года", "проблема две тысячи тридцать седьмого года", "проблема две тысячи девяносто третьего года"... Суть всех этих несчастий одна. Где-то глубоко в недрах системы зарыт базовый счетчик, отмеряющий текущее время. Значение этого счетчика хранится в системной переменной, имеющей ограниченный размер. Например, если под десятичное число отведено только две цифры, то после "99" наступит переполнение этой переменной. Как это переполнение обрабатывается, зависит от многого. Чаще всего такой счетчик просто сбрасывается в ноль. Независимо от этого последствия оказываются самыми разными. Например, система может решить, что еще не родившийся человек не имеет права управлять своими банковскими счетами. Или что закваску в булку хлеба нужно добавлять только через сто лет. Или что замена кислородных регенераторов подождет еще сто лет...
История показывает, что человек мало чему учится и на своих, и на чужих ошибках. Да, двойного слова — шестидесяти четырех двоичных единиц — заложенного под счетчик времени в оригинальной версии Метамира, вполне достаточно для отсчета времени в течение сотен миллионов лет даже с учетом все увеличивающегося коэффициента дискретизации. Но понять, почему этот счетчик начал отсчитывать свое значение не с нуля, а со взятой с потолка отметки, совершенно невозможно, особенно почти полтора века спустя..."
Дважды коротко пискнуло. Пять минут до обнуления. Старик хмыкнул и закрыл статью. Все-таки тяжеловат и слегка заумен стиль. Нет, на бегу он править ничего не станет. Сойдет для своей публики, а для посторонних он поправит потом. Статья уже неделю как сброшена в Каталог, и народ, судя по количеству комментариев, читает ее с интересом. Да, мелочи можно поправить и потом. Если оно наступит, это "потом".
Он закрыл мемопад и дал команду на резервирование данных. Когда из висящего в воздухе забавного прозрачного чайничка вытекли последние капли жидкости, он вздохнул и откинулся на спинку скамейки. Та с готовностью промялась под ним. На экране напоминальника бежали цифры. Три минуты до обнуления.
Солнце грело, и воробьи щебетали, соперничая за последние крошки, оставшиеся на земле. Вокруг под легким ветерком шумели деревья, и внезапно Виктор почувствовал дремоту. Похоже, нервное напряжение последних дней взяло свое. Он подумал было о том, не стоит ли выйти из Метамира. За шесть десятилетий он так и не привык к ощущениям, сопровождающим гибель аватара, равно как и аварийное завершение сеанса. Неудивительно, впрочем — на втором-то болевом. Да и привыкать-то особо не к чему: за всю его жизнь, начиная с трехлетнего возраста, такое случалось с десяток раз, не больше.
Тройной писк. Одна минута до обнуления. Стайка воробьев внезапно снялась с места и разом упорхнула куда-то в голубую даль неба. Тишину не нарушало ничего, кроме шума деревьев. Виктор закрыл напоминальник и закрыл глаза. О моменте обнуления ему сообщит длинный писк зуммера, а смотреть на стремительно убывающие секунды — увольте, он не мазохист.
Внезапно он сообразил, что зуммер не сработает. В его-то программе счетчик не переполнится и не обнулится! Ведь он совершенно рефлекторно указал для него тип длинного целого. А ловушка контроля диапазона настроена именно на переполнение переменной. Довыпендривался, кретин... За такие детские ошибки из программистов нужно гнать в три шеи. Что стоило поставить банальное сравнение? Ага, целых пять тактов на такое уходит в каждом цикле. Прямо кошмар!.. Впрочем, сейчас это уже неважно.
Интересно, произошло уже обнуление или нет? Сирена экстренного оповещения в ушах не звучала. Аварийного выхода не намечалось.
На всякий случай он досчитал до пятидесяти. Ничего не изменилось. Все так же шумел ветер в листьях, все так же грело пробивающееся сквозь кроны солнце...
Он слегка приоткрыл правый глаз. Пару секунд спустя, впрочем, левый глаз самостоятельно пропихнулся сквозь зажмуренные веки и на пару с правым дружно полез на лоб. Он вскочил на ноги и несколько секунд дико оглядывался по сторонам.
Потом он громко, почти истерически рассмеялся. Как он мог забыть? Ведь он сам в качестве шутки так запрограммировал подсистему визуализации окружения тридцать семь лет назад, во время испытаний нового эмулируюшего слоя. Да, при нормальном развитии событий этот скин не мог активироваться в продуктивной эксплуатации. Он работал только в тестовом режиме, при соответствующих значениях таймера. Баловство, игрушка. Фенечка. Всего лишь палеоэнциклопедия, загнанная в систему моделирования окружающего мира. И, разумеется, злосчастные шестьдесят четыре бита счетчика времени, бездумно воспроизведенные им в этой системе.
Он стоял посреди стартфинишной площадки у переливающегося всеми цветами радуги здания Администрации Метамира, и теплое солнце светило на него с голубых небес, и обдувал его ласковый летний ветерок. Мимо, принюхиваясь, важно прошествовал оринтолестес. Его передние лапки плотно прижимались к туловищу, но тонкие нервные пальцы кисти непроизвольно подергивались. Стайка анурогнатов приземлилась посреди площадки и начала с энтузиазмом копаться в щелях между плитками, не обращая ни на Виктора, ни на орнитолестеса никакого внимания. Двуногий ящер внимательно оглядел их, но отвернулся — поймать эту шуструю мелочь шансов не было. Внезапным стремительным рывком он ухватил поперек туловища выбравшуюся на открытое место незадачливую саламандру, одним движением сглотнул ее и неторопливо ушел в заросли гигантских папоротников, торчащих у крыльца.
Где-то в вышине над Администрацией проплыл рамфоринх. Он острым взором окинул лесистое плато, посреди которого располагалось здание, и перевел взгляд на окружавший его океан. Где-то там его ждала вкусная сочная рыба Юрского периода.