Почему все драйверы в Windows датируются 21 июня 2006 года


230b15c4e8f84e6fb84caa4c6a51c70e.png

Почему в каждой новой версии Windows все драйверы датированы одним и тем же днём 21.06.2006 г.? Microsoft вообще когда-нибудь обновляет драйверы или они там собралась просто группа бездельников? Компания наконец-то ответила на этот вопрос и опубликовала пояснение в официальном блоге The Old New Thing.

Один из разработчиков компании Microsoft под ником zac_l объяснил, в чём дело. Сакральная дата 21.06.2006 распространяется даже на драйверы вроде Storage Spaces и современные процессоры, которые вообще не существовали десять лет назад, так что о лености разработчиков здесь речи не идёт. Причина в другом.
Для установки древней даты есть одна очень важная причина, которая не имеет никакого отношения к реальной дате выпуска драйвера.

Дело в том, что в Windows работает система Plug and Play (PnP), которая позволяет быстро определить и автоматически сконфигурировать устройства в компьютере. Она автоматически распознаёт наличие нового устройства, а потом подбирает драйверы, устанавливает их, так что всё функционирует нормально без установки и конфигурации вручную. Автоматичеcки распределяются ресурсы, порты ввода-вывода, карты распределения памяти устройств и прочее.

Так вот, когда система PnP в Windows выполняет ранжирование драйверов, она первым делом сверяет аппаратный идентификатор устройства и драйвера. Если же два драйвера имеют одинаковый идентификатор, то система должна выбрать один драйвер из двух. В этом случае главным фактором является дата драйвера.

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

Чтобы избежать такого конфликта, было принято простое и эффективное решение. Всем драйверам во всех версиях Windows присваивается стандартная дата, которая соответствует дате выхода Vista RTM. Эта фиксированная дата не зависит от версии драйвера или реальной даты создания файла. В то же время обновляется номер версии драйвера — это следующий фактор, который учитывается при выборе драйвера, после даты создания файла.

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

С новыми версиями Windows совместимы только драйверы не старше, чем Vista. Сторонние драйверы времён Windows XP с ними не совместимы, так что проблем с конфликтами дат не возникает.

Таким образом, система PnP работает без проблем, хотя ситуация и выглядит немножко смешно. До сих пор все драйверы установлены с датой 21.06.2006, и так будет продолжаться и дальше. Вышеупомянутый разработчик Зак из Microsoft сказал: «Это великолепный пример того, что на первый взгляд кажется глупым и незначительным, но в реальности имеет глубокую и основательную цель».

Как говорит народная мудрость: «Если что-то глупо, но работает, то это не глупо» (или по-прежнему глупо, но нам повезло).

Подобный механизм работы вряд ли можно назвать идеально грамотным программированием, потому что дата файлов — это атрибут, не предназначенный для сравнения драйверов. Но система де-факто работает, так почему нет? Да и как иначе решить проблему с корректным обновлением драйверов? Если у вас есть идеи на этот счёт, то у программистов Microsoft более простого и надёжного варианта не нашлось. Кто знает, может быть, над проблемой особо и не думали — и зафиксировать дату навечно было первой мыслью, которую тут же и реализовали? Может быть, проблему решили таким «фиксом» разработчики, у которых не было полномочий внедрять более грамотную систему, например, с проверкой издателя драйвера (если издателем является Microsoft — ставить драйверу наименьший приоритет).

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

Такой механизм сверки дат вполне может работать и дальше, если свет увидят новые версии Windows. Нужно лишь следить, чтобы в фирменных драйверах случайно не была указана дата более старая, чем 21.06.2006, потому что в этом случае Windows будет постоянно накатывать свой драйвер общего назначения вместо фирменного драйвера, независимо от версии. Если что, в Windows 10 есть возможность временно отключить обновление драйверов для Windows Update.

© Geektimes