[Перевод] Университет Карнеги-Меллона спасает старые программы от забвения

Прототип архивной системы Olive позволяет запускать на современных компьютерах винтажный код


0596756563f1e707235aa3e7bc5857a7.jpg

В начале 2010 года гарвардские экономисты Кармен Рейнхарт и Кеннет Рогов опубликовали анализ экономических данных разных стран, и заключили, что если долг превысит отметку в 90% от ВВП, это станет угрозой для роста экономики страны. С таким большим долгом, по их мнению, рост должен стать отрицательным.

Их анализ был сделан вскоре после рецессии 2008 года, поэтому он имел непосредственное отношение к работе законодателей, многие из которых были уверены в необходимости увеличивать долг для стимуляции национальных экономик. В то же время консервативные политики, например, Олли Рен, бывший тогда европейским комиссаром, и конгрессмен США Пол Райан, использовали открытия Рейнхарт и Рогова для агитации в пользу финансового воздержания.

Три года спустя Томас Херндон, выпускник Массачусетского университета, нашёл ошибку в электронной таблице Excel, которую Рейнхарт и Рогов использовали для своих вычислений. Значимость её была огромной: при правильном проведении анализа, как показал Херндон, уровень долга в 90% ВВП соотносился с положительным ростом экономики на 2,2%, а не с отрицательным ростом в -0,1%, как писали Рейнхарт и Рогов.
Херндон мог без труда проверить выводы гарвардских экономистов, поскольку ему было доступно ПО, с которым они работали — Microsoft Excel. А что же насчёт более старых открытий, использовавших старое ПО, которое сегодня сложно отыскать?

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

Хранение программ таким способом ведётся на постоянной основе, даже для программ возрастом несколько десятилетий. В онлайне можно, к примеру, найти исходный код для Apollo Guidance Computer, который помог доставить астронавтов на Луну в 1960-х. Его переписали с бумажного носителя и загрузили на GitHub в 2016.

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

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

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

Представьте, что вы — исследователь, желающий проверить подсчёты другого учёного, проведённые 25 лет назад. Будет ли то старое ПО всё ещё доступно вам? Компания, выпустившая его, могла уже закрыться. Даже если существует его современная версия — примет ли она данные в исходном формате? Будут ли все подсчёты — к примеру, работа с ошибками округления — идентичны старым, сделанным на компьютере целое поколение назад? Вероятно, нет.

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

Эта проблема может влиять и на проведение судебных экспертиз. Допустим, подсчёты инженера показали, что здание должно выстоять, а после этого крыша здания падает. Сделал ли ошибку инженер, или дело было в неправильной работе ПО? Если много лет спустя ПО нельзя будет запустить, проверить это будет очень сложно.

Поэтому мы с коллегами из Университета Карнеги-Меллона разработали способ архивировать программы таким способом, что их можно будет легко запустить сегодня и в будущем. Мои коллеги, специалисты по информатике Бенджамин Гильберт и Ян Харкс, написали большую часть кода. В совместной работе также участвовали архивариус программного обеспечения Дэниел Райан и библиотекари Глориана Сен-Клэр, Эрика Линке и Киф Вебстер, которые, по понятным причинам, имеют свой живой интерес в сохранении этой части современной культуры.

bd57dacd524c125f1bdd1428a4d19026.jpg
NCSA Mosaic 1.0, один из первых браузеров с Macintosh, 1993

0b29e852326e3eb3ea80b3bb76a4e97b.jpg
Chaste (Cancer, Heart and Soft Tissue Environment) 3.1 для Linux, 2013

659bf451f084536f472b224894fa567e.jpg
The Oregon Trail 1.1, игра для Macintosh, 1990

f33831bfa942659d23f3f4138519cd4d.jpg
Wanderer, игра для MS-DOS, 1988

002df151fea3b1ad1ed42a3de7d7575e.jpg
Mystery House, игра для Apple II, 1982

1614758746d18ae30a8fc61fdff11065.jpg
The Great American History Machine, интерактивный образовательный атлас для Windows 3.1, 1991

834ed9834ee9d6a15c34a0e3f9b6ccc3.jpg
Microsoft Office 4.3 для Windows 3.1, 1994

5dcf1e8bfab71bd3fb9e71cccde70d66.jpg
ChemCollective, образовательное ПО по химии для Linux, 2013

Поскольку этот проект связан с сохранением ПО, а не с популярной информатикой, мы собирали на него средства не у обычных государственных агентств, а у фонда Альфреда Слоана и Института музейных и библиотечных услуг. С их помощью мы продемонстрировали восстановление давно забытых компьютерных систем и сделали их доступными для всех в онлайне, чтобы любой пользователь компьютера мог отправиться в прошлое одним щелчком мыши.

Мы создали систему Olive — это акроним для открытой библиотеки изображений для виртуального высполнения [Open Library of Images for Virtualized Execution]. Olive позволяет получить через интернет то же впечатление, которое вы получили бы, запуская приложение, ОС или компьютер из прошлого. Установив Olive, вы можете работать с очень старым ПО так, будто он современное. Это что-то вроде интернет-архива Wayback Machine для исполняемых программ.

Чтобы понять, как Olive может возрождать старое компьютерное окружение, необходимо пройти через несколько слоёв программных абстракций. В самом основании находится общая база большинства современных вычислительных технологий: стандартный настольный компьютер или ноутбук с одним или несколькими микропроцессорами x86. На нём мы запускаем ОС Linux, формирующую второй слой в стеке.

Над ОС находится ПО VMNetX, написанное в моей лаборатории, запускающее виртуальную машину по сети [Virtual Machine Network Execution]. Виртуальная машина — это вычислительное окружение, имитирующее на компьютере окружение, существовавшее на компьютере другого типа. VMNetX позволяет хранить виртуальные машины на центральном сервере и запускать их по требованию удалённо. Преимущество в том, что вашему компьютеру не нужно скачивать весь диск и состояние памяти с сервера для запуска виртуалки. Информация, хранящаяся на диске и в памяти, скачивается частями, по необходимости, для организации следующего слоя — монитора виртуальной машины (гипервизора), который может поддерживать работу одновременно нескольких машин.

На каждой из виртуалок работает эмулятор оборудования — это следующий уровень в стеке Olive. Эмулятор делает вид, что на нём работает уже давно вышедший из употребления компьютер — к примеру, старый Macintosh Quadra с Motorola 68040 CPU из 90-х. Если архивированное ПО может работать на компьютере с процессором x86, этот слой виртуализации можно опустить.

Следующий слой — старая операционка, на которой может работать архивное ПО. У неё есть доступ к виртуальному диску, имитирующему дисковый накопитель и файловую систему, необходимую для работы следующих слоёв этого торта программной абстракции.

Над старой ОС находится уже сама программа. Это может быть верх кучи, или же на ней может быть ещё один слой, состоящий из данных, которые необходимо скормить программе, чтобы получить от неё то, что вы хотите.

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

b6c931a85d34a6096797f391ed8214e9.jpg

Это то, что находится у системы под капотом. Но что Olive может делать? На сегодня в неё содержится 17 различных виртуальных машин, способных запускать разнообразные ОС и приложения. Выбор из того, что включить в систему, был основан на смеси любопытства, доступности и личных интересов. К примеру, один член нашей команды с нежностью вспоминал, как он играл в The Oregon Trail, учась в школе в начале 1990-х. В результате мы нашли старую версию игры для Mac и сумели запустить её через Olive. После того, как об этом стало известно, многие люди начали приходить к нам с вопросами о возможности возродить их любимое ПО из прошлого.

Самое старое приложение из восстановленных нами — это Mystery House, графическая игра с начала 1980-х для компьютера Apple II. Другая программа — NCSA Mosaic, которая, как могут вспомнить люди определённого возраста, подарила им чудеса WWW.

В Olive хранится версия Mosaic, написанная в 1993 году для Macintosh System 7.5. Эта ОС работает на эмуляторе Motorola 68040 CPU, созданном при помощи ПО, работающем на компьютере с процессором x86 под управлением Linux. Несмотря на всю эту виртуализацию, быстродействие получается неплохим, поскольку современные компьютеры работают гораздо быстрее оригинального оборудования Apple.

Довольно интересно направлять восстановленный Mosaic из Olive на современные сайты. Он появился раньше, чем такие современные веб-технологии, как JavaScript, HTTP 1.1, Cascading Style Sheets и HTML 5, и поэтому неспособен отображать большинство сайтов. Но вам может быть интересно поискать так давно сделанные сайты, что они отлично видны в этом браузере.

На что ещё способен Olive? Возможно, вам интересно, какие инструменты использовались в бизнесе сразу после появления процессора Intel Pentium. Olive может помочь и с этим. Запустите Microsoft Office 4.3 с 1994 года (который, к счастью, вышел ещё до появления раздражающего ассистента-скрепки).

Возможно, вам захочется провести ностальгический вечер, поиграв в Doom для DOS, или понять, почему в начале 90-х шутеры от первого лица стали так популярны. Или, возможно, вам надо переделать ваши налоги от 1997 года, и вы не можете найти дискету с той версией программы TurboTax на чердаке. Не волнуйтесь, Olive позаботится о вас.

Если говорить о более серьёзных вещах, то в Olive хранится Chaste 3.1. Это сокращение от Cancer, Heart and Soft Tissue Environment (рак, сердце и мягкие ткани). Это симуляция, разработанная в Оксфордском университете, позволяющая решать вычислительные задачи по биологии и физиологии. Версия 3.1 была связана с исследовательской работой, опубликованной в марте 2013 года. Однако уже через два года после публикации исходный код Chaste 3.1 перестал компилироваться в новых версиях Linux. Это прекрасный пример проблем научной воспроизводимости, решать которые должна система Olive.

406d7258ae62f54582561c6b27d262e0.jpg

Чтобы Chaste 3.1 продолжал работать, Olive предоставляет неизменное во времени Linux-окружение. Воссозданный в Olive Chaste также содержит примеры данных, опубликованных с работой от 2013 года. Обработка этих данных выдаёт визуализацию работы мускулов. Будущие исследователи физиологии, которые захотят изучить эти визуализации, или внести исправления в опубликованное ПО, смогут использовать Olive для редактирования кода на виртуальной машине и его запуска.

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

В наших поисках возможностей поддерживать жизнь в старом ПО мы не одни. Internet Archive сохраняет тысячи старых программ при помощи эмулятора MS-DOS, работающего в браузере. В Йельском университете разрабатывают проект EaaSI (эмуляция как инфраструктура услуг), в надежде дать всем доступ к тысячам эмуляций программного окружения из прошлого. Учёные и библиотекари из проекта Сеть сохранения программ [Software Preservation Network] работают над этим и другими проектами. Они также работают над решением проблем с авторскими правами, появляющимися при запуске старого ПО таким способом.

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

Одно из препятствий — импорт новых данных для обработки старой программой. Пока что такие данные нужно вводить вручную, а этот способ труден и подвержен ошибкам. Также этот способ ограничивает объём данных, которые можно проанализировать. Даже если бы мы добавили механизм импорта данных, количество сохраняемых данных было бы ограничено размером виртуального диска виртуальной машины. Это может казаться небольшой проблемой, но нужно помнить, что у файловых систем старых компьютеров иногда были такие ограничения на объём, которые сейчас воспринимаются, как странные.

Другое препятствие — эмуляция GPU. Уже довольно давно учёные пользуются параллельными вычислениями для ускорения различных подсчётов. Для архивации исполняемого ПО, использующего GPU, в системе Olive придётся воссоздать виртуальные версии таких чипов –, а это трудная задача. Всё оттого, что интерфейсы GPU — что в них можно вводить и что они выводят — не стандартизированы.

Очевидно, что предстоит сделать ещё много работы перед тем, как мы объявим о решении проблем с архивацией исполняемых программ. Но Olive — это хорошее начало создания систем, которые потребуются, чтобы гарантировать сохранение старых программ в таком состоянии, чтобы их можно было ещё долго изучать, проверять и использовать

© Habrahabr.ru