Если не бояться метафизических аналогий, программное обеспечение можно представить как длинный-длинный рычаг: крохотная команда способна свернуть горы. К сожалению, ровно с той же холодной эффективностью рычаг работает и против своего создателя. Как это бывает, хорошо иллюстрирует совсем свежая история, произошедшая с немцем Дэвидом Криселем. Уцепившись за случайную и вроде бы ерундовую ошибку в софте (да не ошибку даже, а так, недосмотр!), он вышел на потенциальные последствия, на фоне которых меркнет и пресловутый Stuxnet. И хоть производитель пообещал патч, точку ставить рано.
А началось всё 24 июля, когда Крисель — никому не известный докторант, увлечённый самоорганизующимися компьютерными системами, а на жизнь зарабатывающий в американском консалтинговом и проектном гиганте WorleyParsons, — столкнулся со странным поведением многофункциональных устройств Xerox. Изучая копию квартирного плана, сделанную на МФУ серии WorkCentre, Дэвид (или кто-то из его коллег) обнаружил, что жилая площадь указана неверно. Поскольку на оригинале стояла правильная цифра, было очевидно, что ошибка закралась в документ во время копирования. Чтобы убедиться, что им не померещилось, они изучили другие ранее откопированные документы, а также провели опыты на нескольких ксероксовских МФУ различных модификаций — с тем же результатом: цифры как будто кто-то подменял. Вот для примера отрывок из произвольной бухгалтерской ведомости, где хорошо заметно, как это происходило.
После первых опытов появилась возможность утверждать две вещи. Прежде всего речь не идёт о случайном шуме, возникшем вследствие некачественного сканирования: знаете, как если бы пятёрка, снятая при плохом освещении, начала казаться шестёркой. Символы именно подменялись: обратите внимание, как характерно проработана нижняя часть восьмёрки в фотографии выше — это явно восьмёрка, а не шестёрка с дорисованной дужкой! Во-вторых, это была не ошибка OCR-движка. Иначе говоря, подмена случилась не в процессе распознавания текста — потому что Крисель отключил распознавание для чистоты эксперимента!
Тут ребята впервые схватились за голову. Не нужно быть дотошным немцем, чтобы понять, почему: последствия такой «мелочи» могут оказаться катастрофическими! Xerox WorkCentre — очень популярная марка: это офисные трудяги ценой под тысячу долларов, работающие по всему миру. Мне не удалось отыскать статистики, но, думаю, не будет преувеличением предположить, что проданы миллионы таких устройств. Через них проходят счета, строительные планы, рецепты на лекарства, проектная документация на всевозможное оборудование — короче, документы, ошибки в которых могут стоить компаниям существования, а пользователям — жизни. И Дэвид (ох уж эти логичные немцы!), кажется, до сих пор не оправился от удивления: как же так Xerox, уже какое-то время знавшая о существовании ошибки, не пошевелила и пальцем, чтобы её устранить?
Сделав своё открытие, Крисель первым делом поставил в известность производителя. Неделю спустя, когда стало ясно, что техподдержка Xerox, как говорится, ни сном ни духом, и решением даже не пахнет, он — подталкиваемый страхом, что для кого-то ошибка может аукнуться большими проблемами, — подробно изложил всё на личном сайте. К этому моменту Дэвид уже провёл настоящее исследование и выяснил кое-какие новые детали. Так, стало ясно, что ошибке подвержены как самые старые модели WorkCentre, так и новейшие. И самое важное: удалось максимально сузить круг «подозреваемых». В ходе дискуссии с подключившимися к обсуждению энтузиастами Крисель пришёл к выводу, что винить следует алгоритм компрессии графики JBIG2, применённый в ксероксовских машинах.
JBIG2 — простая и удивительно эффективная штука. Умеющий сжимать графические файлы как с потерями, так и без, он особенно хорош (да и предназначен) для сканирования текстовых документов. Приступая к сжатию очередного файла, JBIG2 создаёт своего рода картотеку наиболее часто встречающихся графических образов, то есть, скажем, запоминает, как выглядит буква «A», буква «Б» и так далее. И каждый раз, встретив что-то похожее на «A», просто подставляет готовый образ из словаря. Такой подход не только позволяет сжимать сырые графические файлы в десятки раз, но и даёт поразительный эффект: с повышением качества исходного документа размер сжатого файла уменьшается! К сожалению, как выяснилось теперь, это может выйти боком.
Скажем, шестёрка на скане среднего качества похожа на восьмёрку — и если видимая разница между ними не слишком велика, то JBIG2 может её восьмёркой и заменить. А удастся, так и двойку поменяет на семёрку, и даже единичку — на тройку.
Xerox упиралась до последнего. Первым делом, когда Крисель таки достучался до руководства компании, его попытались убедить, что он имеет дело не с багом, а с «фичей» (поистине канонический ответ, так что простите за картинку, не удержался). Лишь после двух недель препирательств компания выпустила первый пресс-релиз, в котором предупредила пользователей об опасности и предложила обходной путь (выставить в свойствах компрессии «higher» вместо «normal», а также сканировать документы с качеством выше 200 DPI). Увы, Крисель немедленно воспроизвёл ошибку и при таких параметрах — и лишь 12 августа отпраздновал полную победу: Xerox признала баг и пообещала патч в ближайшем будущем.
Что ж, осталось всего ничего: достучаться до всех покупателей WorkCentre (а также WorkCentrePro, ColorQube, BookMark) и заставить их инсталлировать апдейт. Учитывая, что, по некоторым данным, треть компьютерного мира всё ещё работает под Windows XP, реально ли это?
Но аппараты Xerox — это даже не полбеды. JBIG2, стандартизованный тринадцать лет назад, запатентован (IBM, Mitsubishi), но условия лицензирования легки, так что алгоритм распространён чрезвычайно широко. Фактически он используется сегодня в тысячах программ и аппаратных продуктов по всему миру и всем платформам, от MS Windows до Linux. Простой поиск по термину «JBIG2» в «Гугле» даёт сотни тысяч упоминаний, по большей части в связи со спецификациями или девелоперскими аспектами, ибо конечного пользователя такие подробности не интересуют, да и не должны интересовать. При этом один из читателей Криселя уже сообщил о воспроизведении ошибки с подменой цифр на МФУ фирмы Brother (популярная в России марка). А кто проверит продукты Adobe, а нашей ABBYY (и там и там JBIG2 применяется)?
Если даже Xerox столь безответственна, что, зная о проблеме явно не первый год, лишь мельком помянула её в мануалах, но так и не потрудилась исправить, можно ли рассчитывать на понимание других производителей и разработчиков?