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

Откуда взялся стандарт и почему его назвали именем без расшифровки

История начинается в январе 1991 года, когда несколько главных компаний из мира сканирования и компьютерной графики сели за один стол. Среди устроителей проекта называются Aldus, Caere, Eastman Kodak, Hewlett-Packard и Logitech: каждая из них полоскала нервы многочисленным программистам, потому что каждый производитель сканеров предоставлял свой драйвер и свой способ передачи картинки, и никакая программа не могла работать более чем с горсточкой устройств. В начале 1992 года группа, получившая название TWAIN Working Group, выпустила первую версию стандарта.

Название обросло легендой. По официальному разъяснению рабочей группы, слово TWAIN не аббревиатура вовсе, а отсылка к строке из баллады Киплинга про Восток и Запад, "никогда им не встретиться": слишком часто сканер и компьютер разговаривали на разных языках и действительно не встречались. Слово написали большими буквами для выразительности, и публика немедленно решила, что за буквами должна стоять расшифровка. Шуточный конкурс на расшифровку подарил самую известную из них, Technology Without an Interesting Name, которая прилипла к стандарту прочнее многих официальных имен и до сих пор мелькает в энциклопедиях.

Как устроен путь страницы от сканера до программы

Сила TWAIN в строгой трёхслойной архитектуре, и разобраться в ней несложно. Верхний этаж занимает прикладная программа, которая хочет картинку: графический редактор, бухгалтерия, архивный портал. Средний этаж это менеджер источников, Data Source Manager, библиотека от рабочей группы, которая не знает ничего о конкретных устройствах, но знает, как с ними разговаривать. Нижний этаж занимает источник данных, то есть драйвер конкретного сканера или камеры.

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

У стандартизации была и свеча справедливости: сама библиотека менеджера источников с некоторых пор распространяется под свободной лицензией LGPL. Рабочая группа тем самым страхует индустрию от монополии на точку входа: драйверы могут писать все, программы могут использовать все, а договор между ними открыт.

Летопись версий как зеркало тридцатилетия техники

Перечень выпусков TWAIN читается как история отрасли в сокращении. Дебютная версия 1.0 вышла в феврале 1992 года, за ней с шагающим ритмом шли версии с полезными дополнениями: измерение длины страницы, пакетное сканирование, поддержка штрих-кодов для производственных сканеров. В 2000 году стандарт обзавёлся поддержкой цветовых профилей ICC и новой программной среды Mac OS X.

Ключевой переделкой стала линейка 2.x. В феврале 2008 года версия 2.0 принесла поддержку Linux, 64-битного Windows API и свежий открытый менеджер источников, так что стандарт окончательно перестал быть проприетарной привязкой к одной платформе. В 2009-м добавили поддержку Windows 7 и распознавание цвета, в 2012-м перешли на самосертификацию, а в 2019-м рабочая группа представила TWAIN Direct, современный вариант протокола в архитектуре RESTful для устройств, которые не хотят или не могут тащить за собой старые программные интерфейсы. Финальным на день сегодняшний аккордом стала версия 2.5 от ноября 2021 года.

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

Почему TWAIN живёт так долго и кто пробовал его заменить

Индустрия не раз пробовала его пошевелить. Microsoft познакомила пользователей со своей подсистемой WIA, Windows Image Acquisition, особенно настырно в эпоху Windows XP, где цифровые камеры и сканеры впервые стали домашней техникой. WIA предлагала упрощённый путь для пользователя, однако специалисты единодушно указывали на её ограниченность: гибкость регулировок и потоковая передача требовали более основательного договора, и серьёзные программы для работы с документами продолжали предъявлять TWAIN как обязательное требование к технике.

На сторону битвы выходили и другие претенденты: производственный стандарт ISIS для скоростных сканеров, свободный SANE в мире Linux, плюс специфические протоколы производителей фототехники. Ничего из этого не смогло закрыть потребность в совместимости между чужой программой и чужим устройством массовым и надёжным способом. TWAIN побеждал не красотой, а устойчивым невниманием к тому, кто стоит от него слева и справа: договор выполнен, и точка.

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

Что архитектура TWAIN сообщает сегодняшнему инженеру

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

Свежий вектор развития, TWAIN Direct, подтверждает эту диагностику: вместо того чтобы мертво цепляться за библиотечный интерфейс 1992 года, рабочая группа построила новый договор поверх HTTP-подобного REST, и всё ради того же единственного дела - чтобы приложение и устройство продолжали встречаться. Тот, кто строит инфраструктурные рельсы для техники, напрасно боится скромности званий: более короткая миссия прожила дольше десятков громких платформ.

Скрытая жизнь стандарта в самых обычных учреждениях

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

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

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

Чем объясняется приживаемость TWAIN в разных мирах и что внутри TWAIN Direct

Любопытная тема как стандарт переносится между несхожими почвами. На Windows TWAIN жил в родной стихии тридцать с лишним лет, на macOS обосновался заметно раньше, чем возник современный облик этой системы, а с 2008 года поддержан и на Linux. Главное условие такой транспортабельности, бесспорно, отвязанность от любого конкретного слоя системных служб: протокол уже давно общается не с окнами и кнопками, а с абстракциями верхнего уровня, и потому легко меняет нательное бельё операционных систем.

Проект TWAIN Direct, анонсированный в 2019 году, переводит ту же интонацию в речь сетевых устройств. Договор теперь выражен в виде RESTful API: приложение обращается к сканеру стандартными сетевыми запросами, не требуя на столе ни локальных библиотек, ни привязки к операционной системе. Современные сетевые сканеры, стоящие в коридоре и доступные всему этажу, для этой модели родной дом, и стандарт просто говорит с ними на современном языке, не меняя своей сути.

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

Тихий итог для неприметного и многоработного стандарта.

TWAIN приятно представить себе как того безупречного делопроизводителя, который тридцать лет сидит в третьей комнате офиса, никого не беспокоит, но без которого утром не начинается работа всей конторы. Миллиарды отсканированных страниц, банки с их архивами платёжных поручений, клиники с историями болезни в цифровой папке, библиотечные массивы с распознанными рукописями - всё это потоки, поднятые из устройств через стандарт с анекдотичным именем и безупречным послужным списком. Об отличной инфраструктуре не бывает статей в газетах, о ней можно рассказывать лишь на расстоянии, когда годы уже отмерили ложных гениев и оставили настоящих. В этой статье есть повод коротко снять шляпу: спасибо, служба доставки картинки!

И читабельный совет напоследок для практиков. Собираясь покупать сканер для работы с бухгалтерией, архивом или медицинской картотекой, загляните в первую очередь в строчку про поддержку TWAIN в спецификации. Эта сдержанная фраза означает, что устройство будет работать с профессиональными программами ещё много лет, переживёт несколько обновлений операционной системы и не превратится в бесполезный кирпич из-за одной недоработанной программы производителя. Маленькая строчка в характеристиках, а за ней тридцать лет стабильного договора целой индустрии.