[Перевод] Почему в установщике Windows 95 не использовалась миниатюрная версия Windows 95?

7fcd0a81c446c67540acf1d86f8b21c3.png

Одной из реакций на мою статью о том, почему в установщике Windows 95 использовалось три операционные системы [перевод на Хабре] (а реакций на неё было много), стала ещё одна моя статья [перевод на Хабре] с объяснением того, что миниатюрная версия Windows 3.1 применялась для апгрейда пользователей с MS-DOS до Windows 95. Но почему было не использовать миниатюрную версию Windows 95?

Техническая причина заключалась в том, что миниатюрная версия Windows 3.1 сжималась всего до 441906 байтов, то есть примерно до трети ёмкости одной дискеты. Миниатюрная версия Windows 95 не уместилась бы на одной дискете, поэтому пользователю пришлось бы тратить кучу времени в некрасивом текстовом режиме на смену дискет. Благодаря использованию миниатюрной Windows 3.1 пользователь быстро покидал текстовый режим. А код для работы с заменой дискет нужно было бы писать как программу для MS-DOS, что не особо весело. Мне бы не хотелось с этим возиться1.

Инженерный аргумент против миниатюрной Windows 95 заключался в том, что миниатюрной Windows 95 не существовало! У Windows 3.1 уже была разработанная миниверсия, поэтому мы сразу могли её использовать. Но для разработки миниатюрной Windows 95 нужно было бы забрать часть ресурсов остальной команды разработчиков операционной системы на поиск компонентов, которые можно удалить, и на исправление зависимостей, чтобы они могли выполняться без этих компонентов. Например, вы бы, наверно, исключили из миниатюрной Windows 95 мультимедийную систему, но тогда бы пришлось сделать так, чтобы остальная часть системы гарантированно работала без поддержки мультимедиа. Любая сторона, вызывавшая функцию в mmsystem.dll, должна была переключаться со статической зависимости на динамическую загрузку, потому что mmsystem.dll могла отсутствовать. То есть пришлось бы приложить кучу усилий для разработки версии Windows 95, выполняющей ровно одну задачу: установку Windows 95.

Была и маркетинговая причина использования миниатюрной Windows 3.1 для пользователей с MS-DOS: так мы радовали наших лучших покупателей (пользователей Windows 3.1). Если бы мы создали путь обновления MS-DOS в миниатюрной Windows 95, но оставили для апгрейда с Windows 3.1 установщик с Windows 3.1, то это бы разочаровало наших самых горячих сторонников — уже существующую базу пользователей Windows 3.1. Почему у них графика при установке хуже, чем у тех, кто оставался на MS-DOS? В качестве альтернативы можно было бы использовать миниатюрную Windows 95 даже для пользователей с Windows 3.1, но с этим связан следующий пункт.

Ещё одна причина использования миниатюрной Windows 3.1 — это эстетика: Windows 3.1 можно запускать из MS-DOS без перезагрузки, а установка миниатюрной Windows 95 потребовала бы перезагрузки в неё и ещё одной перезагрузки после полной установки Windows 95. В ту эпоху время загрузки компьютера было далеко от идеального3, и ещё приходилось слышать этот неприятный «БИП» в конце проверки при включении питания. Лучше было использовать установку с единственной перезагрузкой. Пользователь может выпить кофе, пока программа установки копирует файлы, а в конце компьютер перезагружается и окунает вас в новый восхитительный мир Windows 95, которая подобно бабочке вылупилась из кокона.

Существовала ещё и проблема отката. Если пользователь отменит установку Windows 95 или при ней произойдёт какой-то сбой Windows 95, отключится электричество в процессе установки, то компьютер не сможет вернуться к своему исходному состоянию. Наименее рискованный выход — избегать изменения файла в системе до самого конца. При установке миниатюрной Windows 95 пришлось бы изменять системные загрузочные файлы, чтобы система перезагрузилась в Windows 95; это бы нарушило принцип «не менять ничего до самого конца». Процесс установки Windows 95 выполняет финальную подготовку после изменения загрузочных файлов, но всё устроено так, что даже при сбое на этом этапе установке Windows 95 не пришлось бы откатываться назад; она всё равно бы продолжила запуск Windows 95, хоть, возможно, и без полной миграции принтеров пользователя.

Ещё один вопрос заключается в судьбе миниатюрной версии Windows 95 после завершения установки. Например, можно удалять миниатюрную Windows 95 после полной установки Windows 95 в какое-то другое место. Для этого потребовалось бы много дополнительного места на диске и ресурсов ввода-вывода, потому что файлы из миниатюрной Windows 95 пришлось бы устанавливать дважды, для миниверсии и для реальной. Или же можно апгрейдить миниатюрную Windows 95 до полной Windows 95. Однако для этого бы пришлось заменять оригинальный win.com и другие системные файлы их версиями для Windows 95, чтобы их можно было использовать для запуска миниатюрной Windows 95 (которая скоро станет полной). Это усложняет откат, потому что теперь пользователь находится в состоянии при котором неожиданное отключение электричества приведёт к образованию системы, выполняющей системную загрузку в частично установленную Windows 95, а устранение неполадок было бы очень сложным.

Миниатюрная Windows 3.1 была настолько мала, что лишнее дисковое пространство, занимаемой ею в процессе установки Windows 95, оказалось не столь существенным.

А как насчёт загрузочных CD? Почему бы их не использовать?

Это как спросить, почему бы не использовать шаттл для спасения астронавтов с «Аполлона-13» [прим. пер.: миссия «Аполлон-13» состоялась в 1970 году, первый шаттл был запущен в 1981 году]. Спецификация загрузочных CD El Torito была опубликована только в январе 1995 года, поэтому количество поддерживающих её систем всё ещё было очень низким (и ещё меньшим было количество систем, поддерживающих её без багов)4. Кроме того, она появилась на слишком позднем этапе разработки Windows 95, чтобы можно было добавить такую серьёзную фичу.

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

1 Я написал одну из итераций кода копирования файлов для установки Windows 95 ещё в то время, когда мы думали, что будут использоваться две отдельные программы установки (одна для апгрейда с MS-DOS, другая для апгрейда с Windows 3.1 или с Windows 952). Чтобы не дублировать работу (кодинг и отладку) мы сделали так, чтобы основная логика кода могла компилироваться и как программа для MS-DOS, и как 16-битная программа для Windows. Части кода, относящиеся к вводу-выводу и управлению памятью, включались условными операторами, однако для отслеживания всех буферов ввода-вывода, обработки ситуаций, когда нам нужно попросить следующую дискету и так далее использовался общий код. Версия для MS-DOS должна была учитывать, что у неё может быть доступ всего к 512 КБ (или меньше) основной области памяти, поэтому буферизацию файлов необходимо было выполнять через расширенную (expanded) или дополнительную (extended) память в зависимости от того, как настроил память пользователь, а затем выполнять двойную буферизацию через основную область памяти для ввода-вывода в устройство. Вы считали, что с дальними указателями неудобно работать? Попробуйте поработать с переключением банков памяти.

2 После завершения моей временной работы в команде разработчиков программы установки они поняли, что могут уместить на один флопик миниатюрную Windows 3.1, чтобы не приходилось писать две программы установки. Думаю, часть моего кода копирования файлов всё ещё присутствует в GUI-части установки Windows 95, но, вероятно, больше нигде.

3 Кто-то может сказать, что мы по-прежнему живём в этой эпохе.

4 В эпоху до появления Windows 95 драйверы CD-ROM не были особо стандартизированы. У каждого привода CD-ROM имелись собственные драйверы, и некоторые из них были тщательно спроектированы так, чтобы замаскировать дрянную аппаратную начинку.

© Habrahabr.ru