27

OSF/1 в эмуляторе

Серия Некромантия старой школы

Если вам успели надоесть и азиатки и знойные африканки и даже развратные животные, рассказываю про одну редкую UNIX-систему из далекого прошлого, которая был возвращена из небытия и выведена в интернет.

Так это выглядит в работе.

Так это выглядит в работе.

История

OSF/1 это еще одна редкая UNIX-система из далекого прошлого, которую вы врядли могли наблюдать в живую:

OSF/1 is a variant of the Unix operating system developed by the Open Software Foundation during the late 1980s and early 1990s. OSF/1 is one of the first operating systems to have used the Mach kernel developed at Carnegie Mellon University, and is probably best known as the native Unix operating system for DEC Alpha architecture systems.

Прямой участник корпоративных Unix‑разборок 90х известных как Unix Wars, но в отличие от A/UX (которую автор оживил и запустил в прошлом выпуске) OSF/1 не канула в лету в бурные 90е а будучи переименованной в TRUE64 UNIX поддерживалась аж до 2012го года.

Вот вам и «динозавр», внезапно отказавшийся умирать.

Еще из интересных фактов стоит упомянуть использование этой ОС для суперкомпьютеров:

IBM used OSF/1 as the basis of the AIX/ESA operating system for System/370 and System/390 mainframes.[12] Intel Paragon supercomputers used a version of OSF/1 featuring the Mach 3.0 kernel.[13] OSF/1 was also ported by Kendall Square Research to its proprietary microarchitecture used in the KSR1 supercomputer.

Суперкомпьютер KSR1 Единственное <a href="https://pikabu.ru/story/osf1_v_yemulyatore_14080919?u=https%3A%2F%2Fglobal.museum-digital.org%2Fsingleimage%3Fimagenr%3D2310146&t=%D1%84%D0%BE%D1%82%D0%BE&h=4b7b079fa2995c9379cb8f99799979f7e7eb5c34" title="https://global.museum-digital.org/singleimage?imagenr=2310146" target="_blank" rel="nofollow noopener">фото</a> в приличном разрешении этой редкой машины.

Суперкомпьютер KSR1 Единственное фото в приличном разрешении этой редкой машины.

А также попытку адаптации компанией Apple в качестве замены A/UX:

Apple Computer intended to base A/UX 4.0 for its PowerPC-based Macintoshes upon OSF/1,[11] but the project was cancelled and PowerOpen deprecated.

Которая была отменена вместе с самой A/UX.

OpenBSD/luna88k running inside GXemul, on an emulated SGI O2 running OpenBSD/sgi (on a FreeBSD/amd64 host). Теперь попробуйте осознать прочитанное.

OpenBSD/luna88k running inside GXemul, on an emulated SGI O2 running OpenBSD/sgi (on a FreeBSD/amd64 host). Теперь попробуйте осознать прочитанное.

Эмулятор

Полностью оно называется Gavare's eXperimental Emulator за авторством Anders Gavare и согласно официальному описанию с сайта проекта, считает себя фреймворком для виртуализации:

GXemul is a framework for full-system computer architecture emulation, mostly written in 2003-2005. Several real machines were implemented within the framework, consisting of processors (ARM, MIPS, Motorola 88K, PowerPC, and SuperH) and surrounding hardware components such as framebuffers, interrupt controllers, busses, disk controllers, and serial controllers. The emulation is working well enough to allow several unmodified "guest" operating systems to run.

По сути это такой сильно разросшийся «pet project», созданный одним энтузиастом ради эмуляции особо редких систем:

Простым обывателям из этого списка знакомы наверное только игровые платформы, в лучшем случае еще «малинка» (Rastberri Pi) а про некоторые особо редкие не знал даже автор, так что будут еще изыскания и эксперименты, посвященные этому удивительному проекту.

Сборка

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

В этот раз все действия производились на обычном Mageia Linux, без BSD и прочих изысков, с использованием стандартного GCC:

Несмотря на строчку из документации по сборке:

This should work on most Unix-like systems, with few or no modifications to the source code. The basic requirement is a reasonably modern C compiler (C99).

Эмулятор написан все же на C++ а не на чистом С, поэтому для сборки требуется компилятор C++, который ныне устанавливается отдельным пакетом.

Но в остальном автор не врет:

GXemul does not require any additional third-party libraries to build.

И проект действительно не использует никаких внешних библиотек. Кроме X11, ради эмуляции графического экрана:

  • X11 headers and libraries: for graphical framebuffer emulation.

Так что ничего дополнительно устанавливать не придется.

С версии 0.6 разработка переехала на Github, откуда мы и заберем последние правки исходников (ветка master):

git clone https://github.com/BitEdits/gxe.git

Главная проблема с этим эмулятором — неправильная работа с некоторыми эмулируемыми ОС без специального ключа сборки --debug:

When compiling on Linux via a modern GCC please bear in mind that the emulator wont work correctly if compiled with -O optimization flags. Please use -debug configure option to disable such optimization

Что выяснилось далеко не с первой попытки.

Изучаемая OSF/1 как раз из числа проблемных, поэтому попытка запуска в версии эмулятора, собранного без этого волшебного ключа выдает kernel panic:

Теперь вы тоже видели как выглядел kernel panic в 1992м, поздравляю.

Теперь вы тоже видели как выглядел kernel panic в 1992м, поздравляю.

Согласно официальному описанию, ключ --debug всего лишь отвечает за отладочную сборку:

configure for a debug build (turn off optimizations)

На практике все несколько сложнее и этим ключом помимо отключения оптимизаций, еще собирается отдельный оконный отладчик. Чтобы не вводить параметр каждый раз, я прописал в начале скрипта configure вот такой параметр:

DEBUG=YES

Скрипт кстати не из известного пакета autotools а полностью собственной разработки. После каждой правки configure скрипта или шаблонов Makefile.skel (см. ниже) необходимо перезапускать настройку вызовом:

./configure

Теперь запускаем make для запуска сборки и ждем приключений.

Первая ошибка не заставит себя ждать:

Связана она с изменениями в спецификации самого языка C++ и по-хорошему стоило бы эту логику переделать. Но поскольку это не мой личный проект, пошел по пути упрощения — просто переключив используемую версию спецификации при сборке.

Файл, в котором появляется эта ошибка, включается в сборку только при ключе --debug , так что без него вы эту ошибку вообще не увидите.

В файле src/main/Makefile.skel в конец значения параметра CXXFLAGS необходимо дописать указание на версию спецификации --std=c++14:

CXXFLAGS=$(CWARNINGS) $(COPTIM) $(DINCLUDE) -std=c++14

Заново запускаем configure и сборку:

./configure
make

Следующая ошибка также связана с изменением в поведении компилятора:

И да, эта ошибка также обоснована и по хорошему код стоит отрефакторить. Когда-нибудь потом.

А на сейчас я просто отключил предупреждение, добавив в файл src/main/promemul/Makefile.skel параметр -Wno-narrowing:

CXXFLAGS=$(CWARNINGS) $(COPTIM) $(DINCLUDE) -Wno-narrowing

Повторно запускаем configure и сборку:

./configure
make

В этот раз сборка должна завершиться успешно и в корне проекта появится бинарник gxemul:

Запуск

К сожалению не удалось найти установочный диск OSF/1, поэтому я использовал готовый образ диска, в котором ОС уже была развернута.

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

Команда запуска выглядит так:

./gxemul -e 3max -X -d osf1_mips.img -j vmunix

Где -e 3max указание на тип эмулируемой машины, 3max это например DECstation 5000/200 (3MAX):

Ключ -X указывает использовать графический фреймбуфер, без него вы не увидите графического приглашения. Ключ -d указывает на путь к образу диска (в архиве по ссылке выше) а вот -j это уже особая уличная магия:

-j name  set the name of the kernel;

for DECstation emulation, this passes the name to the bootloader, for example:  --j netbsd  (NetBSD/pmax) 

-j bsd  (OpenBSD/pmax)

-j vmsprite  (Sprite/pmax)  

-j vmunix  (Ultrix/RISC)

Войти в систему можно под учетной записью root с паролем Jaguar64.

Новый пользователь создается в терминале xterm, с помощью команды adduser:

Изменить пароль можно стандартной командой passwd.

Сеть

Разумеется без поддержки сети толку от такой эмуляции было бы немного. К счастью эмулятор сделает за вас большую часть работы по пробросу сети в эмулируемую систему (сторону хоста) — сам поднимет виртуальный интерфейс, назначит IP‑адрес и даже выставит DNS.

Вам остается только вторая половина — настроить сеть в системе 1992 года.

Как уже описал выше, эмулятор сам создает виртуальный сетевой адаптер, который со стороны гостевой OSF/1 называется ln0.

Должна отрабатывать команда:

ifconfig ln0

В выводе должно быть видно текущее состояние адаптера.

Также эмулятор самостоятельно создает исходящий адаптер с IP-адресом 10.0.0.254, который также является маршрутизатором.

Эти детали отображаются в консоли при запуске эмулятора:

simulated network: 10.0.0.0/8 (max outgoing: TCP=100, UDP=100) simulated gateway+nameserver: 10.0.0.254 (60:50:40:30:20:10) simulated nameserver uses real nameserver 192.168.1.1

Так выглядит запрос состояния устройства со стороны гостевой OSF/1:

Как только назначим IP-адрес 10.0.0.2 виртуальному адаптеру, должна отрабатывать команда pingк хосту:

Таким образом обеспечен сетевой доступ к хосту из гостевой ОС.

Но чтобы заработал доступ еще и наружу — в интернет, необходимо включить маршрутизацию в гостевой ОС (со стороны хоста это NAT):

В этот момент автор наткнулся на свежую статью 2024го года от Kevin Read, где случились два важных открытия:

  • в интернете есть более современная версия OSF/1 2.0 (да оно официально так называется),

  • существует и подробно описана стандартная настройка сети.

Шаги настройки описанные выше в правильной версии закрываются командой netsetup:

Так вы получите базовую настройку сети и маршрутизацию, но вот с DNS все несколько сложнее. Отвечает за настройку работы резолвера команда bindsetup:

Вся последовательность выглядит как-то так:

Enter the default BIND domain name []: localdomain

Enter your choice [c]: c

Enter the host name of a BIND server: vigor

Enter the Internet address for 10.0.0.254. []: 10.0.0.254

# affected: /etc/rc.config, /etc/hosts

Would you like to run svcsetup now to edit the /etc/svc.conf file (y/n) [y] ?

Enter your choice(s).

For example "0 3 5" [no default] : 2 "hosts" database [2]: 3

# affected: /etc/svc.conf

# hosts: local,bind

Главное это задать IP-адрес хоста, который отвечает за DNS.

В результате всех этих манипуляций должен отрабатывать ping из гостевой OSF/1 и с использованием доменного имени:

OSF/1 2.0

С помощью образов дисков, взятых отсюда, удалось запустить и версию 2.0 этой системы:

Отличить можно по качеству картинки - в 2.0 версии больше цветов. Учетная запись в этой копии: root/test123

Команда запуска также несколько отличается:

./gxemul -X -e 3max -d osf1-2.0-root-full.img -d osf1-2.0-opt.img -M 128 -j genvmunix

Еще тут в каталоге /usr/local/src находится куча полезного софта в виде исходников, для примера удалось запустить сборку bash:

К сожалению не до конца:

Хотя Kevin пишет что should compile fine:

The installed MIPS C compiler is good enough to compile some basic things, and gcc 2.9.5 should compile fine. Apparently binutils is broken, but ld is installed anyway.

Думаю реальная проблема в лицензиях, которые в те времена выдавались на компиляторы в коммерческих UNIX-системах.

P.S.

Статья была опубликована на Хабре, оригинал в нашем блоге.

IT минувших дней

1.3K постов7.5K подписчиков

Правила сообщества

Запрещается добавлять новости о прошлогодних новинках, а также посты, не относящиеся к тематике "ретро в ИТ".

Желательно соблюдать правила приличия.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества