Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Не так давно на Баше промелькнуло занятное открытие: в недрах системы бронирования ж/д билетов, оказывается, есть не все русские буквы. История вызвала массу домыслов в Тви, причём выдвинуты самые разные версии: от непрофессионализма инженеров РЖД до откровенной конспирологии. Всё проще, дело в истории железных дорог и советских компьютеров.
Всё началось в XIX веке
Первый проект по автоматизации сбора и обработки данных в серьёзных масштабах – перепись населения США в 1890. Для фиксации данных была взята проверенная технология, придуманная для ткацких станков – представление узора с помощью пробивки отверстий в картонных карточках. Так появились перфокарты, на них пробивались промежуточные результаты по округам, которые затем суммировались.
Перфокарты как стандарт хранения данных окончательно устаканились к концу 1920-х, стандартом стал формат IBM: 80 колонок по 12 отверстий. Тогда перфокарты применяли только для хранения и обработки числовых данных, о тексте речь не шла. Принцип был простой: каждая колонка – одна цифра. Дополнительные 2 отверстия в каждой колонке служили для указания на промежуточный результат.
С появлением первых ЭВМ общего назначения стало необходимо как-то записывать на перфокарты и текст. В начале 50-х годов во время разработки IBM 701 – первого коммерчески доступного компьютера – была придумана довольно оригинальная кодировка текста специально для перфокарт, BCDIC, в дальнейшем расширенная до EBCDIC. Эта кодировка не имеет ничего общего со всем известной и ставшей мировым стандартом кодировкой ASCII, там не менее EBCDIC до сих пор используется в мейнфреймах IBM.
Конечно, никакой кириллицы в этой кодировке не было.
Кириллица
В СССР с 50-х годов ХХ века использовался тот же стандарт перфокарт IBM (80×12), но вот кодировка символов, и даже направление записи, отличались. В стандарте IBM буквы, как и цифры, записывались поколонно, а в стандарте УПП (Устройство Подготовки Перфокарт) – построчно, причем на каждый символ отводилось 8 отверстий, хотя фактически для данных из них использовалось только 7.
Более того, кодировка символов алфавита для УПП не соответствовала кодировке символов ВКД, принятой в первых советских ЭВМ (Урал и БЭСМ).
Телеграф
На всё это разнообразие накладывался ещё два исторических фактора – телеграф и телетайп.
Исторически телеграфные линии строились параллельно железным дорогам, и, конечно, железная дорога изначально была основным заказчиком и пользователем телеграфа. К началу XX столетия телеграфный аппарат был практически на каждой станции железных дорог Российской империи.
Телеграф тех времён использовал код Морзе – сочетание точек и тире. Читать точки-тире и переводить их в буквы очень неудобно, поэтому довольно скоро появилось новое устройство, телетайп, представляющее из себя электромеханическую печатную машинку, передающую и принимающую данные по уже имеющимся телеграфным линиям.
Телетайп использовал свою кодировку, пятиразрядный код Бодо/Мюррея, который был стандартизирован, в том числе и в СССР, к началу 30-х годов. Для кодировки кириллицы использовались расширения кода Бодо/Мюррея, называемые регистрами.
Как азбука Морзе, так и код Бодо не включали в себя «маленькие», строчные буквы. Весь текст передавался только заглавными.
К началу 50-х телетайпы, как и телеграфные аппараты за полвека до этого, были почти на каждой ж/д станции СССР, и часто не в единственном экземпляре.
Телетайп, ЭВМ и железные дороги
На железных дорогах телетайп применялся очень активно для диспетчеризации и координации поездов и грузов в них. Было сформировано несколько отраслевых стандартов кодирования данных о составах, о пунктах назначения и остановках, о тоннаже, грузах и тп. Многие из этих стандартов действуют до сих пор.
Примерно к середине 50-х стало понятно, что если к телетайпу прикрутить компьютер, то можно существенно оптимизировать движение грузовых составов, поэтому железные дороги стали одним из первых пользователей советских ЭВМ. Эксперименты по применению ЭВМ на ж/д начались в конце 40-х в самом деле, примерно в то же время, когда компьютеры только начали использоваться для расчётов в оборонке.
Важно понимать, что никаких мониторов в то время в составе ЭВМ не было в помине, данные в основном вводились через перфоленты или перфокарты, или напрямую с телеграфной линии, а результаты расчётов печатались на бумагу или выбивались на перфокартах.
В оборонке компьютеры в то время использовались преимущественно для математических вычислений (решение уравнений), буквы были особо не нужны, достаточно было принтеров только с цифрами и некоторыми знаками препинания.
На железных дорогах компьютеры с самого начала использовали не только для расчётов, но и для обработки данных о составах. Дополнительно к этому уникальной особенностью железных дорог относительно других отраслей было массовое распространение «принтеров» – телетайпов – позволяющих вводить с клавиатуры и выводить на бумагу не только цифры, но ещё и буквы, причём не только кириллицу, но и латиницу.
К середине 60-х телетайпов на ж/д станциях было несколько тысяч, если не десятков тысяч, но буквы в этих «принтерах» были только заглавные, а «прошивка», преобразующая коды в буквы, была механическая. Обновить такую механическую «прошивку» для изменения кодировки не было никакой возможности, для этого надо было физически заменять устройство.
Пассажирские перевозки
Первые эксперименты по созданию сети продажи ж/д билетов начались в начале 60-х – было принято решение попытаться автоматизировать билетные кассы Московского узла железных дорог. По косвенной информации, путём интриг и использования родственных связей разработка была передана аж в Ереван (Армения) и за основу была взята ЭВМ «Раздан-3».
Так появилась система «Маршрут-1», которая, после примерно пятилетней отладки, начала обслуживать кассы Киевского вокзала. После введения в эксплуатацию систему переименовали в АСУ «Экспресс», так она и называется до сих пор.
Особенности разработки ЭВМ в СССР
Как и везде в мире, первые компьютеры в СССР строились для расчётов в оборонке. Проектированием занимались сразу несколько коллективов, практически никак друг с другом не сотрудничавших, причём не только из-за секретности, но и из-за административной конкуренции (это когда борьба не за рынки, а за благосклонность партийного руководства). Такой расклад привёл к появлению сразу нескольких не совместимых между собой ветвей развития ЭВМ.
Более того, в погоне за госпремиями и весьма ограниченными материальными и людскими ресурсами, коллективы разработчиков и их кураторы иногда устраивали настоящие межведомственные войны. Высшим пилотажем считалось протолкнуть ГОСТ, не совместимый с разработками конкурентов и перечёркивающий многолетние результаты их труда.
Это чрезвычайно тормозило прогресс в целом, и после смерти главного титана советского компьютеростроения – академика Лебедева, под руководством которого была разработана линейка ЭВМ БЭСМ, – в начале 70-х было принято антисоломоново решение: скопировать в СССР штатовскую IBM System/360. Просто чтобы навсегда пресечь разброд и шатание.
На основе архитектуры System/360 предполагалось создать целую линию компьютеров разной мощности. Всё получилось и эти компьютеры вошли в историю как Единая Серия Электронно-Вычислительных Машин – ЕС ЭВМ.
Разумеется, ЭВМ производства IBM не понимала кириллицу, но что ещё хуже, и стандартная к тому моменту ASCII была для System/360 не родной. Как выше уже упоминалось, основной кодировкой System/360 была EBCDIC.
При клонировании архитектуры в эту кодировку добавили кириллицу, но за основу взяли принципы, применявшиеся ещё в кодировках БЭСМ ВКД и УПП: зачем добавлять кириллические символы, похожие на латиницу, давайте добавим только те, которых в латинице нет.
Так появилась кодировка ДКОИ, ставшая стандартом для серии ЕС ЭВМ, а позже и весьма странным отраслевым ГОСТ-ом 19768-74.
Экспресс-2
АСУ «Экспресс-1», в целом, была устаревшей и плохо масштабируемой с момента внедрения, поэтому после начала производства машин Единой Серии было принято решение переделать всё на ЕС ЭВМ. На основе этих машин была спроектирована и введена в эксплуатацию в начале 80-х АСУ «Экспресс-2».
Понятно, что ради встраивания системы автоматизированных продаж билетов никто не собирался менять устоявшуюся кодировку имеющихся на ж/д телетайпов – для этого надо было поменять сами телетайпы. То-есть в системе остались только цифры, знаки препинания и заглавные буквы, которые в телетайпах были почти все. Но вот зато в EBCDIC/ДКОИ они были не все, и поэтому в «Экспресс-2» оставили только заглавные за вычетом русских букв А, В, Е, К, М, Н, О, Р, С, Т и Х, потому что их просто не было в ДКОИ. Конечному то пользователю билета совершенно всё равно, напечатана, скажем, буква М латиницей или кириллицей – они визуально совершенно одинаковы.
Экспресс-3
С увеличением объёмов ж/д перевозок системы «Экспресс-2» стало не хватать уже к концу 80-х, но в 1991 произошел распад СССР и стало не до этого. К вопросу вернулись только к концу 90-х.
К тому моменту сколь-нибудь серьёзных компьютеров производства РФ не существовало в природе, поэтому следующую версию стали делать на мейнфреймах IBM, просто чтобы всё не переписывать и внедрять поэтапно, соединяя новые узлы системы со старыми, на ЕС ЭВМ.
Вероятно, в новую систему мигрировало часть старого кода, в т.ч. сообщения об ошибках, записанные в кодировке только из заглавных букв с пропусками в кириллице.
Судя по всему, они там остались до сих пор, и именно на них и наткнулись разработчики, запостившие своё открытие на Башорг.
И, скорее всего, именно поэтому билеты в кассах РЖД до сих пор печатаются только заглавными.