Весит меньше фотографии, а изменила мир.

Куратор программного обеспечения Музея компьютерной истории Эл Коссоу успешно восстановил данные с магнитной ленты возрастом более полувека, обнаруженной в Университете Юты в прошлом месяце. На ней оказалась UNIX V4 — первая версия операционной системы UNIX, ядро которой было написано на тогда ещё новом языке программирования C.
Данные удалось извлечь с девятидорожечной ленты 1970-х годов. Теперь образ системы доступен для скачивания в Internet Archive, а запустить его можно в эмуляторе SimH. Пользователь Mastodon под ником Flexion уже опубликовал скриншот UNIX V4, работающей под SGI IRIX.
UNIX V4 в эмуляторе SimH на macOS 12
Ленту обнаружил профессор Роберт Риччи из Школы компьютерных наук Калерта при Университете Юты. Коссоу, который также ведёт проект Bitsavers, ещё тогда предположил, что данные «вполне можно восстановить». Он оказался прав, и в конце прошлой недели работа была завершена. Риччи опубликовал видео процесса восстановления — оно длится чуть более пяти минут, что неудивительно: ядро UNIX V4 занимало всего около 27 килобайт.
Для извлечения данных использовалась программа readtape, созданная Леном Шустеком из Музея компьютерной истории. Принцип её работы схож с утилитой Greaseweazle для архивирования старых дискет: вместо попытки скопировать байты или секторы программа записывает необработанные магнитные колебания, из которых затем восстанавливаются цифровые данные. Это позволяет исправлять ошибки — в данном случае не удалось прочитать лишь два блока, но их содержимое удалось реконструировать.
Исходный файл на Internet Archive занимает 1,6 гигабайта, хотя сама лента вмещала около 40 мегабайт — это связано с особенностями записи сырых данных. Для удобства Анджело Папенхофф подготовил обработанную версию с инструкцией по запуску. На Reddit пользователь drop_table_allusers объясняет: нужно запустить исполняемый файл SimH pdp-11 с параметром boot.ini, нажать «k», ввести «unix» и нажать Enter.
Система совсем крошечная: около 55 000 строк кода, из которых примерно 25 000 на языке C и менее 1000 строк комментариев. Впрочем, покойный Деннис Ритчи и его соавтор Кен Томпсон были настоящими программистами, а как гласит древняя мудрость: «Настоящим программистам комментарии не нужны — код и так понятен». Томпсон по-прежнему активен и недавно дал второе устное интервью для Музея компьютерной истории под названием «Легенда компьютерного мира рассказывает» (A Computing Legend Speaks).
Чтобы понять значимость находки, стоит вспомнить историю UNIX. Самую первую версию, позже названную «нулевым изданием», Томпсон написал вручную на ассемблере в 1969 году для свободного PDP-7 в Bell Labs — 18-битного миникомпьютера Digital Equipment Corporation 1965 года выпуска. Это было настолько давно, что восьмибитный байт ещё не стал стандартом. PDP-7 UNIX восстановили по распечаткам между 2016 и 2019 годами.
Позже Томпсон получил доступ к PDP-11 и переписал систему для этой 16-битной машины, всё ещё на ассемблере, создав UNIX First Edition. Поначалу машина имела единственный жёсткий диск RS11 объёмом в полмегабайта, хотя восстановленный исходный код относится к более поздней машине со вторым диском.
В том же году вышла UNIX v2, а в 1972-м — UNIX V3, в которой появились каналы (pipes) и для которой впервые был написан язык C. Теперь же найдена и восстановлена UNIX V4 — первая версия с ядром, переписанным на C. Она работала только на более мощной модели PDP-11/45.
Многие особенности ранней UNIX объясняются ограничениями железа. Например, когда у разработчиков был единственный жёсткий диск DEC RK05 на 1,5 мегабайта, а затем появился второй, они перенесли на него домашние каталоги пользователей. Папка называлась /usr — сокращение от «users», и в ней хранились каталоги ken и dmr, а также большинство бинарных файлов системы. Возникла проблема: как смонтировать второй диск, если команда mount находится на нём же? Решением стала специальная папка /sbin на первом диске с инструментами для доступа к дополнительным накопителям. Роб Лэндли, автор Toybox (замены BusyBox Брюса Перенса), написал отличное объяснение истории разделения bin, sbin, usr/bin и usr/sbin.
Сегодня это часть юниксовой мифологии — считается, что между бинарниками в корневом каталоге (/bin, /sbin, /lib) и в дереве /usr (/usr/bin, /usr/sbin, /usr/lib) есть важное функциональное различие. Попытка примирить это разделение называется usr merge, и, забавно, даже последняя Alpine Linux 3.23 пока его не завершила.
UNIX начиналась как быстрый хак двух гениев в свободное время — они хотели использовать свободный компьютер, редкость невероятную для 1960-х, чтобы запустить симулятор Space Travel — игру о полётах по двумерной Солнечной системе. Их основной проект, операционная система MULTICS, стала несправедливо знаменита своей громоздкостью, хотя на самом деле использовалась годами и её помнят бывшие пользователи.
Кен и Деннис написали нечто крошечное и простое, используя короткие криптографические сокращения для файлов и каталогов. Их коллега, великий Брайан Керниган — буква «K» в «K&R C» и «AWK» — даже предложил название UNICS как шутку.
Проблема в том, что эта крошечная экспериментальная ОС вырвалась из лаборатории. Версия 6 стала основой знаменитой книги Лайонса, в которой содержится, пожалуй, самый известный комментарий в истории кода: «You are not expected to understand this» («Не ожидается, что вы это поймёте»). Найти его можно на строке 2238 в аннотированном исходном коде, а сам комментарий вдохновил целую книгу.
Настоящий ущерб нанесла Unix V7: она стала вирусной, а её потомки, ответвления и переписывания широко распространились в индустрии и академических кругах. Сегодня система разрослась в раздутый монстр, в миллионы раз больше оригинала. Те шуточные криптографические имена файлов в криптографических папках теперь священны, а люди, поддерживающие системы, забыли их происхождение.
Тем временем оригинальные разработчики продолжали работу, улучшая и упрощая дизайн вплоть до десятого издания, после чего система была радикально переписана и превратилась в сетевую Plan 9 from Bell Labs. Сегодня работа продолжается в виде 9front.
И вот теперь ключевой этап ранней эволюции UNIX найден, оцифрован и работает. Почти как рождественское чудо.