В комнате спецчасти было слишком тепло.
Тепло было сухое, стоячее, бумажное; от него быстрее уставали глаза и начинали чесаться пальцы от желания открыть форточку. Но форточку здесь никто не открывал без спроса. На стене висел портрет, под ним — сейф с двумя замками, рядом — стол, покрытый коричневым дерматином. Дерматин был испещрен следами циркуля, царапинами от металлических уголков папок и круглыми пятнами от стаканов, которые ставили сюда люди, уверенные, что государственная бумага выдержит всё.
Морозов сидел напротив Виктора Николаевича Кирсанова, представителя Первого отдела Электронмаша.
Иван Михайлович устроился сбоку, ближе к двери. Он не вмешивался, но самим своим присутствием превращал разговор из допроса в рабочее совещание. На коленях у него лежала папка.
У окна стоял незнакомый Морозову человек лет тридцати пяти. Сухой, аккуратный, в сером костюме без единой лишней складки. Просто стоял так, чтобы видеть всех троих и одновременно не мешать.
— Знакомьтесь, это Андрей Витальевич Горелов, — сказал Кирсанов. — Смежная закрытая тема «Луча». Операторские формы, режимные рабочие места, диагностика отказов. Сейчас он входит в ваш проект с правом голоса по всему операторскому контуру, а формальное руководство закрытым направлением «82В» мы оформим чуть позже.
Горелов коротко кивнул.
— Он не надзиратель, — добавил Кирсанов, глядя уже на Морозова. — И не человек, который будет ходить по лаборатории с печатью и запрещать всё подряд. Если такое начнётся, сообщите мне. Это ваш коллега, профессионал. Но его вопросы вы будете слушать.
— Вопросы по делу я слушаю, — сказал Морозов.
— Вот и хорошо.
Кирсанов открыл тонкую папку. Внутри лежали три листа машинописного текста с пометками красным карандашом.
— Закрытой машине нужен операторский профиль, — сказал он. — Ведомственный контур покупает управляемое рабочее место, а не школьную вольность, кружок или надежду на то, что пользователь сам напишет программу. Горелов знает, как неудачно спроектированные рабочие места умирают в реальной эксплуатации.
Горелов впервые заговорил.
— Они умирают не от отсутствия вычислительной мощности. Чаще от мелочей. Неправильная клавиша рядом с правильной. Одинаковые поля на экране. Отсутствие аварийного признака. Невозможность понять, зависла машина или ждёт данные. Оператор после ночной смены ошибается не потому, что глуп, а потому что пульт и экран требуют от него лишней внимательности.
Он говорил ровно, почти сухо. Но за каждой фразой чувствовался чужой опыт.
— Поэтому, — продолжил Горелов, — если мы делаем закрытую модификацию, я предлагаю не тащить в неё всё гражданское наследство. Бейсик, свободная клавиатура и экран, на котором программа может нарисовать что угодно, только увеличат риск. Нужна жесткая форма. Фиксированные зоны. Свой загрузчик. Свои клавиши. Свой набор режимов. Чем меньше свободы, тем меньше отказов по вине человека.
Иван Михайлович шевельнулся, но промолчал.
Морозов посмотрел на Кирсанова. Тот не помогал и не мешал. Сидел неподвижно, давая спору состояться.
— Андрей Витальевич, — сказал он, — всё, что вы перечислили, абсолютно верно.
Горелов чуть поднял брови. Он явно ждал сопротивления с первой фразы.
— Оператор не должен страдать от нашей любви к универсальности. Экран должен помогать, а не требовать расшифровки. Аварийное состояние должно быть видно сразу. Нельзя строить закрытый контур так, будто за ним сидит студент-программист с кружкой чая.
Морозов выдержал паузу и добавил:
— Но я категорически против вашего метода решения.
— Почему? — спокойно спросил Горелов.
— Потому что вы предлагаете лечить человеческую ошибку архитектурным расколом.
В комнате стало тише. Даже гул батареи под окном будто отошел на второй план.
Морозов наклонился вперед.
— Если мы сделаем отдельную «82В» со своим загрузчиком, своими экранными формами, своими клавишами и своим набором базовых подпрограмм, мы получим удобный прибор. Возможно, даже очень удобный. Его легко показать заказчику. Легко описать в акте. Легко принять в одном ведомстве.
— Именно, — сказал Горелов.
— А потом придёт второй заказчик. У него будет другая форма, другой порядок ввода, другая ведомость, другой аварийный признак. Мы добавим вторую версию. Потом третью. Через два года у нас будет набор закрытых приборов, каждый из которых чуть-чуть отличается от другого. Программы не переносятся. Люди переучиваются. Ошибки исправляются отдельно. Любая доработка превращается в отдельную маленькую войну с железом.
Морозов провел пальцем по краю стола.
— Так мы размножим несовместимость вместо безопасности.
Горелов выслушал без раздражения. Потом взял с края стола чистый лист и быстро начертил прямоугольник.
— А это операторское место, — сказал он. — Вот зона статуса. Вот зона данных. Вот зона ввода. Если программа гражданской ветки имеет право писать куда угодно, она может затереть зону статуса. Или вывести ошибку тем же цветом, что и норму. Или оставить на экране старые данные после отказа канала. Вы предлагаете мне доверять дисциплине программиста. Я предлагаю не давать ему такой возможности физически.
— Вы предлагаете зашить форму в прибор.
— Да.
— А когда форма изменится?
— Перепроектируем.
Иван Михайлович тихо кашлянул.
— Перепроектируем, — повторил он с таким видом, будто слово само по себе требовало отдельного акта, трёх подписей и месячного лимита на детали.
Горелов посмотрел на него без обиды.
— Иногда перепроектирование дешевле ошибки оператора.
— Иногда, — согласился Морозов. — Но не всегда. И точно не как основной принцип.
Он взял лист Горелова и рядом нарисовал второй прямоугольник. Внутри — тонкую линию основания.
— Вот базовая «Сфера-82»: процессор, память, базовые процедуры ввода-вывода, клавиатура, общий порядок вывода на экран. Это фундамент. Выше — ваш спецрежим. Пусть он загружает свои жёсткие рамки. Пусть аппаратно проверяет, что программа не лезет в зону тревоги. Пусть ведёт журнал отклонений. Пусть при отказе канала принудительно выставляет аварийный экран. Но он живёт сверху. Он не меняет фундамент.
Горелов наклонился над листом.
— Программная защита.
— Программно-аппаратная. Опасаетесь зависаний? Сделаем отдельный аппаратный сторожевой таймер. Поставим счётчик, который сам выбросит сигнал аварии, если основная программа зависнет и перестанет его сбрасывать. Где нужна отдельная ПЗУ-накладка под ваши требования — будем проектировать. Но нижний слой остаётся совместимым.
— Вы слишком доверяете нижнему слою.
— Нет. Я ему не доверяю. Поэтому и хочу, чтобы его проверяло как можно больше людей и задач.
Горелов поднял глаза.
— А если открытая программа обойдёт ваши рамки? Если базовая подпрограмма останется прежней, а спецрежим только делает вид, что держит оператора за руку?
— Тогда это халтура, а не защита, — сказал Морозов. — И мы её не принимаем. Таблица разрешений должна стоять аппаратно там, где её нельзя обойти обычной программой. Часть уйдёт в отдельное ПЗУ, часть — в схему контроля. Но это всё равно надстройка, а не новый компьютер.
Горелов не согласился, но перестал смотреть на второй прямоугольник как на детский рисунок.
— Проверять массой людей и задач? — переспросил он. — Вы про тех самых радиолюбителей и школьников?
Вопрос прозвучал почти нейтрально. Горелов смотрел не на воображаемый класс с детьми, а на будущую уязвимую границу между открытым и закрытым.
— В том числе школьники, — сказал Морозов. — С закрытыми данными они работать не будут. Зато массовая гражданская среда находит ошибки, которые стерильный закрытый стенд не видит. Плохая розетка. Плохая кассета. Непонятная клавиша. Сбой, который возникает только после сотни включений подряд. Если базовая архитектура переживает такой быт, закрытой надстройке от этого только лучше.
Кирсанов впервые за несколько минут пошевелился.
— Осторожнее с этим тезисом, товарищ Морозов.
— Я понимаю.
— Пока понимаете не до конца. Но направление верное. Гражданская обратная связь полезна, тут не поспоришь. Но открытый канал — готовая щель для утечки. Придётся строить фильтр.
Морозов кивнул.
— Письма, схемы и жалобы снаружи мы не понесём прямо к стенду, — сказал он. — Сначала Наталья Сергеевна убирает фамилии, адреса и всё, что тянет наружу лишнее. Иван Михайлович смотрит, что из этого вообще можно пустить в работу. На стол инженерам попадает сухая выжимка: что включали, что сгорело, что повторилось. А закрытые формы и обозначения в обратную сторону не ходят.
— Вот это уже похоже на разговор, — сказал Кирсанов.
Горелов постучал карандашом по своему прямоугольнику.
— Хорошо. Допустим, базовый слой остаётся, — произнес он. — Тогда я не хочу ловить ошибку добрым словом. Команда, опасная для закрытого режима, должна аппаратно упираться в таблицу разрешений. Экранная форма должна быть утверждённой, а не нарисованной программистом ночью. И если процессор намертво завис, оператор не должен смотреть на красивую застывшую картинку, думая, что всё в норме.
— Таблица разрешений — да, — согласился Морозов. — Но без создания новой системы команд. Экранные формы — с версиями и подписью. Зависание процессора — выводим на отдельный аппаратный контур контроля. Пока это требование к разработке; до готовой схемы ещё далеко.
— Журнал отклонений, — добавил Горелов.
— Обязательно.
— И право остановить демонстрацию, если экранная форма вводит оператора в заблуждение.
Морозов хотел автоматически возразить, но остановился. Это было неприятное право. И именно поэтому нужное.
— Да, — сказал он. — С обоснованием.
Горелов впервые едва заметно улыбнулся.
— С обоснованием я умею.
— Вижу.
Иван Михайлович перевел взгляд с одного на другого.
— Значит, если по-человечески: закрытая машина не отдельная машина. Это профиль поверх общей. Все предложения — письменно: что меняем, зачем и чем проверяем. Андрей Витальевич смотрит операторскую часть, Алексей держит совместимость, а Виктор Николаевич следит, чтобы открытое и закрытое не перепутали.
Кирсанов посмотрел на него поверх папки.
— Грубо.
— Зато понятно.
— Оставим как рабочую формулировку.
Напряжение в комнате чуть спало. Горелов аккуратно сложил лист пополам и убрал в тетрадь.
— Когда мне можно посмотреть работу видеогруппы? — спросил он.
— После того, как я объясню им, кто вы и зачем пришли, — ответил Морозов. — Не хочу, чтобы вы свалились им на голову как внезапный ревизор из ниоткуда.
— Разумно.
— И ещё. В лаборатории многие из старой команды говорят между собой на «ты». Не надо принимать это за отсутствие дисциплины.
— Не принимаю, — сказал Горелов. — Но со мной пока лучше на «вы».
— Пока — да.
Кирсанов закрыл папку.
— Тогда фиксируем, — подытожил он. — Базовую архитектуру без отдельного решения не трогаем. Предложения по «82В» оформляются письменно. Открытые материалы проходят через фильтр, закрытые формы наружу не уходят. Докладную майору Сергееву я подготовлю сам. Если ведомства начнут тянуть проект в разные стороны, приходите ко мне раньше, чем начнёте тянуть в ответ.
Он встал. Разговор был окончен.
В коридоре, после душной комнаты спецчасти, воздух показался холодным и живым. Морозов на секунду остановился у окна. За стеклом во дворе НИИ медленно разворачивался грузовик со списанными стойками. Дворник отбрасывал снег от крыльца ровными, терпеливыми движениями.
Горелов вышел следом.
— Вы правда считаете, что школьная архитектура может выдержать закрытый контур? — спросил он.
— Нет, — сказал Морозов. — Я считаю, что закрытый контур должен выдержать архитектуру, которую смогут понять и школьник, и инженер, и оператор после ночной смены. Иначе мы снова построим вещь, которая работает только в одной комнате и только пока рядом сидит её автор.
Горелов несколько секунд молчал.
— Это труднее.
— Да.
— Зато если получится, будет надёжнее.
Морозов посмотрел на него.
— Вот поэтому вы нам и нужны.
Горелов не ответил сразу. Потом кивнул — коротко, без благодарности, как человек, принявший участок работы.
Они пошли по коридору к лаборатории.
За дверью КБ уже вовсю спорили. Горячий баритон Олега перебивал ровный голос Наташи, Люба что-то вслух высчитывала, Громов язвительно требовал у кого-то не трогать его распечатки грязными руками. Этот привычный рабочий шум был сейчас почти уютным.
Морозов на мгновение задержал руку на прохладной латунной ручке. Затем решительно толкнул створку и шагнул в этот шум.