[Перевод] BeOS в браузере: чужая ОС нашла в эмуляторе Mac баги, которых Mac OS не замечала
Автор оригинала: Mihai Parparita Коротко: на Infinite Mac , моём сайте, где можно пожить во «вселенной Macintosh» с 1984 по 2005 год, теперь в браузере запускаются многие версии BeOS . Они работают...
Коротко: на Infinite Mac, моём сайте, где можно пожить во «вселенной Macintosh» с 1984 по 2005 год, теперь в браузере запускаются многие версии BeOS. Они работают наравне со своими маковскими соседями: загружаются мгновенно (большие диски подкачиваются по сети), на диске Infinite HD уже лежат программы, можно вставить CD-ROM из Internet Archive, а свою работу сохранить на диск Saved HD.
BeOS была мультимедийной многозадачной и многопоточной ОС, которую в итоге портировали и на Power Macintosh середины 90-х. Она впечатлила многих в маковском сообществе, включая саму Apple: та всерьёз думала купить Be, компанию-разработчика. Если вы следили за сагой о том, как Apple искала операционную систему следующего поколения, здесь можно своими глазами увидеть дорогу, по которой она не пошла.
Прошлый проект для Infinite Mac вышел довольно хлопотным (хотя и принёс удовольствие), так что теперь мне хотелось чего-нибудь попроще. BeOS давно была у меня в планах, и, в отличие от A/UX, с ней у меня связаны личные воспоминания: я видел BeBox в Акихабаре, наряжал свой Mac под неё с помощью BeView, а потом и вовсе поставил BeOS второй системой на свой Power Macintosh 8500. DingusPPC, эмулятор, который я уже встроил в сайт, неплохо продвигался в запуске BeOS, так что, казалось, дело сведётся к подготовке ещё нескольких образов дисков.
Поначалу всё и правда шло так просто, как я надеялся: я добавил конфигурацию Power Macintosh 7300 (одной из моделей, которые Be официально поддерживала), нашёл установочный CD, сделал образ диска и получил работающую систему. Но чем больше я ею пользовался и чем больше версий ставил, тем больше всплывало мелких багов и пограничных случаев:
Загрузчик BeOS считал, что все клавиши-модификаторы зажаты, из-за ошибки в эмуляции ADB. Поэтому при каждом старте он показывал (уродливый, как BIOS на PC) экран выбора раздела.
При смене глубины цвета нужно уведомить два аппаратных компонента: видеоконтроллер и цифро-аналоговый преобразователь. DingusPPC, сам того не замечая, полагался на порядок, в котором эти уведомления отправляла Mac OS. BeOS делала это в обратном порядке, и изображение на экране превращалось в кашу.
Ранние версии BeOS писали в видеопамять в режиме little-endian¹, а в DingusPPC не было поддержки этой аппаратной возможности.
Поздние версии BeOS умели монтировать разделы HFS, но спотыкались на томах, которые я собирал Python-библиотекой machfs. Оказалось, что BeOS (вполне обоснованно) строже, чем Mac OS, относится к тому, как должны быть заполнены некоторые структуры данных.
И так далее: большую часть коммитов, которые я за последний месяц отправил в DingusPPC, я писал ради лучшей совместимости с BeOS.
SheepShaver, эмулятор Power Macintosh, который живёт и сегодня (и который Infinite Mac тоже встраивает), родился именно на BeOS. В основном ради забавы — ещё один слой эмуляции внутри эмуляции — я захотел, чтобы работал и он. Как выяснилось, и тут понадобилось исправление совместимости: SheepShaver полагался на пограничный случай отображения ПЗУ на физические адреса памяти, который DingusPPC моделировал неточно.