О Windows из первых рукWindows 95 неофициально

Рэймонд Чен (Ramond Chen)

Несмотря на то, что для сборки 32-разрядных программ для Windows® 95 можно использовать обычный 32-разрядный компилятор, а для 16-разрядных программ – обычный 16-разрядный компилятор, для сборки самой операционной системы Windows 95 был необходим специальный компилятор, понимающий оба мира 32 и 16 разрядов и способный соединить их. Для сборки системы Windows 95 также был необходим специальный компоновщик, способный собирать эти два типа кода, а также компоновщик для файлов VxD (формат драйвера для Windows 95).

В обеспечении этих специальных компиляторов и компоновщиков команда разработчиков Windows 95 полагалась на подразделение языков и средств. Я уверен, что подразделение языков посчитало этот запрос странным: «Вы хотите, чтобы мы написали компилятор, выполняющий X, Y и Z, и который предназначается для компилирования всего двух библиотек DLL?». Именно так. Но это были, в конце концов, две очень важные библиотеки DLL.

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

Однажды работа над сборкой Windows 95 неожиданно замедлилась. Компоновка файла, обычно длившаяся несколько секунд, неожиданно заняла несколько минут. Файл по-прежнему был создан успешно, но процесс создания длился очень долго. И это происходило не только на компьютере одного разработчика — проблема коснулась всей команды. Возникла ли в коде какая-то патология, связанная с компоновщиком? Или, может быть, мы столкнулись с ошибкой компоновщика?

После определенной отладки мы выявили источник проблемы. В последней версии компоновщика содержался определенный код диагностики, который сотрудники подразделения языков забыли удалить перед передачей кода группе разработчиков Windows. Этот код диагностики регистрировал результаты работе в файле, хранящемся на компьютере, который был расположен в офисе группы компиляции. А этот компьютер оказался выключенным. (Вспоминается Лесли Лампорт (Leslie Lamport), который отлично описал распределенную систему как систему, работа в которой невозможна из-за того, что компьютер, о котором вы никогда не слышали, выключен.)

fig84a.gif

Эта версия компоновщика успешно проработала несколько недель. Каждый раз, когда кто-либо пытался скомпоновать VxD при сборке Windows 95, выполнялось обновление файла, который находился на компьютере разработчика. Пока компьютер был включен и подключен к сети, никто ничего и не замечал. Но однажды компьютер выключили, и работа сильно замедлилась.

После выявления проблемы сотрудникам отдела компиляции потребовалось не слишком много времени, чтобы предоставить группе разработчиков Windows исправление, удалявшее код диагностики из компоновщика.

Существует несколько концовок этой истории, в зависимости от того, кто ее рассказывает. Мой вариант: «А потом разработчик этого компилятора перешел в команду разработки Windows и перестал быть моим начальником.» Я часто рассказываю эту историю в форме доброй шутки.

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

Рэймонд Чен на своем веб-узле The Old New Thing (Хорошо забытое старое) и в одноименной книге (издательство Addison-Wesley, 2007 г.) рассказывает об истории развития Windows и касается вопросов программирования в среде Win32. Его ДНК заполнена неиспользуемым кодом.