Введение

BinHex, первоначально сокращение от "binary to hexadecimal", — это система кодирования бинарных данных в текст, которая использовалась в классической macOS для передачи бинарных файлов по электронной почте. Изначально представляя собой шестнадцатеричное кодирование, последующие версии BinHex стали больше похожи на uuencode, но объединяли оба "форка" файловой системы Mac вместе с расширенной информацией о файлах. Файлы, закодированные BinHex, занимают больше места, чем исходные файлы, но не будут повреждены программами, не поддерживающими 8-битные данные.

TRS-80 BinHex (.hex)

BinHex был первоначально написан Тимом Манном в 1981 году для TRS 80 как самостоятельная версия схемы кодирования, изначально встроенной в популярный терминальный эмулятор ST80 III, разработанный Лэнсом Микклюсом. BinHex использовался для отправки файлов через крупные онлайн-сервисы, такие как CompuServe, которые не поддерживали передачу 8-битных данных в чистом виде и требовали ASCII-бронирования для успешной передачи. Однако не все использовали ST 80, поэтому Манн разработал BinHex, чтобы пользователи других терминалов могли использовать этот формат. Оригинальная система ST 80 преобразовывала содержимое двоичного файла в шестнадцатеричные числа, которые кодировались в виде цифр и букв ASCII (0–9, A–F). Затем после каждых 60 символов добавлялась новая строка. Система стала очень популярной после того, как Манн загрузил её в раздел файлов TRS 80 на CompuServe. Вскоре в систему была добавлена контрольная сумма в конце каждой строки для проверки на наличие ошибок. Билл Стоквелл перенёс эту версию на компилятор BASIC/S, который работал значительно быстрее, чем интерпретируемая версия Манна. Файлы BinHex того времени обычно имели расширение Ports. Вскоре появились версии для других популярных платформ того времени, включая Apple II. Позже CompuServe добавила поддержку 8-битных передач, и формат быстро устарел.

Mac BinHex (.hex)

Проблема загрузки файлов всё ещё существовала на CompuServe, когда Mac был впервые представлен в 1984 году. В апреле 1984 года Уильям Дэвис портировал BinHex на Mac, используя Microsoft BASIC, чтобы создать версию, во многом идентичную версиям для TRS 80 того же периода. Эта версия поддерживала только кодирование "форка данных", игнорируя ресурсный форк, что означало, что её можно было использовать только для файлов данных. Распространение электронной почты через Интернет примерно совпало с выходом Macintosh, и версия Дэвиса была опубликована в списке рассылки Info Mac Джоэлем Хеллером в июне 1984 года. В течение 1984 года было выпущено несколько новых версий, что привело к созданию BinHex 3, способного кодировать оба форка. Ив Лемперёр, автор первого ассемблера для Mac, MacASM, обнаружил, что для загрузки своих файлов на CompuServe ему необходимо использовать BinHex. BASIC-версия была очень медленной, поэтому Лемперёр портировал BinHex 3 на ассемблер и выпустил его как BinHex 1.0. Программа была примерно в сто раз быстрее BASIC-версии, и вскоре запросы на обновление стали поступать в огромном количестве.

Компактный BinHex (.hcx)

Оригинальный BinHex был довольно простым форматом, не отличавшимся высокой эффективностью, поскольку каждый байт входных данных преобразовывался в два, что требовалось шестнадцатеричным представлением – кодированием 8 к 4 битам. Для BinHex 2.0 Lempereur использовал новое кодирование 8 к 6, которое уменьшило размер файла на 50%. Он также воспользовался возможностью увеличить контрольную сумму с 8 до 16 бит. В этом новом кодировании для представления данных использовались первые 64 печатных символа ASCII, включая пробел, подобно uuencode. Несмотря на то, что новое кодирование больше не было шестнадцатеричным, программе было оставлено прежнее название. Уменьшенные файлы были несовместимы со старыми, поэтому расширение стало hcx, где "c" обозначает "компактный". Новая версия быстро вытеснила предыдущие.

BinHex 4 (.hqx)

Лемпёр был обеспокоен некоторыми особенностями BinHex, в частности использованием контрольной суммы вместо циклического избыточного кода (CRC) и тем, что метаданные в заголовке хранились в виде обычного текста и, следовательно, могли быть повреждены так же, как и сами данные. Чтобы решить эти проблемы, Лемпёр выпустил BinHex 4.0 в 1985 году, пропустив номер версии 3.0, чтобы избежать путаницы со старой, уже не поддерживаемой версией BASIC. В версии 4.0 данные, ресурсы и метаданные файла были сначала объединены в единый 8-битный формат, затем к результату была применена кодировка повторения (RLE) для сжатия, после чего результат был преобразован из 8 в 6 бит и защищён несколькими CRC. Полученные файлы hqx имели примерно тот же размер, что и hcx, но были гораздо более надёжными.

BinHex 5

Примерно в то время, когда был выпущен BinHex 4, большинство онлайн-сервисов начали поддерживать надёжные 8-битные протоколы передачи файлов, такие как ZMODEM, и необходимость в ASCII-бронировании отпала. Однако это создало проблему на Mac, так как всё ещё требовалось кодировать две вилки в один файл. Совместная работа программистов, занимающихся коммуникациями на Macintosh, включая Lempereur, привела к созданию MacBinary. Эти файлы сохраняли содержимое вилок в их исходном 8-битном формате и добавляли простой заголовок для их объединения при получении; файлы MacBinary были значительно меньше, чем BinHex. Lempereur выпустил BinHex 5.0, почти идентичный 4.0, за исключением того, что он использовал MacBinary для объединения вилок перед применением 8-6 кодирования. Это оказалось малоэффективным, как и ожидалось. В то время электронная почта оставалась основным способом передачи файлов в сети Интернет. Относительно небольшое количество людей имело полный доступ к Интернету, и такие сервисы, как FTPmail, были единственным способом загрузки файлов для многих пользователей. Спустя годы, когда Lempereur впервые получил доступ к Интернету, он был удивлён, обнаружив, что BinHex 4.0 всё ещё остаётся очень популярным. Те же результаты можно было достичь, сначала объединив вилки с помощью MacBinary или AppleSingle, а затем закодировав полученный файл с помощью Uuencode или Base64, но ни одно из этих решений не получило широкого распространения, и BinHex 4.0 оставался в использовании вплоть до конца 1990-х годов. Файловые архивы классического программного обеспечения Mac OS по-прежнему содержат множество файлов, закодированных с помощью BinHex.