Защо във всяка нова версия на Windows всички драйвери на корпорацията са подписани с една и съща дата – 21.06.2006 година? Microsoft изобщо обновява ли си драйверите или там е събрана група от мързеливци? Софтуерният гигант най-после даде отговор на този въпрос и го публикува в официалния блог The Old New Thing.
Един от програмистите на Microsoft с псевдоним zac_l обясни каква е работата. Сакралната дата 21.06.206 може да се види дори и в драйверите на Storage Spaces и съвременните процесори, които въобще не са съществували преди 10 години, така че не може да става и дума за мързел. Причината очевидно е друга.
За слагането на толкова древна дата има важна причина, която няма отношение към реалната дата на написване и публикуване на драйвера.
Причината се крие в Plug and Play (PnP) системата на ОС Windows, която дава възможност за бързо определяне и автоматично конфигуриране на различните устройства в компютъра. Тя автоматично разпознава включването на ново устройство, а след това подбира драйверите, инсталира ги и всичко работи нормално без ръчна намеса. Автоматично се заделят ресурсите, входно-изходните портове, разпределението на областите памет и т.н.
Но когато PnP системата върши това, най-напред сверява идентификатора на устройството и драйвера. Ако два драйвера имат еднакъв идентификатор, системата трябва да избере единия от тях. Ето в този случай главният фактор при избора е датата на драйвера.
Да си представим ситуация, при която драйверите са с реални дати на създаването на файла. Какво ще стане? Да предположим, че вашето устройство използва стандартен драйвер на Windows, а вие инсталирате специализиран фирмен драйвер за него. При тази ситуация, с всяко обновяване, Windows ще инсталира своите драйвери вместо фирмените, понеже датата на драйверите, дошли с обновяването, ще е по-нова и ще се наложи ръчно да преинсталирате фирмените драйвери.
За да се избегне подобен конфликт е взето просто и ефикасно решение. Всички драйвери във всички версии на Windows получават стандартната дата, която съответства на излизането на ОС Vista RTM. Но в същото време, номерът на версията на драйвера се обновява и това е следващият фактор, който се взема под внимание при избора на драйвера, след датата на създаването на файла.
По подразбиране PnP системата винаги ще избира специализираните фирмени драйвери, ако разбира се са инсталирани и ги има. Ако няма подобни драйвери се инсталира вградения в ОС драйвер на Microsoft, при това – най-новия, понеже той има най-висок номер на версията, но една и съща дата с останалите драйвери.
По този начин PnP системата работи без проблеми, въпреки че ситуацията изглежда твърде странна и малко смешна. И до днес всички драйвери на Windows имат дата 21.06.2006 година и така ще продължава и занапред. Програмистът на Microsoft допълва, че „Това е великолепен пример, че това което на пръв поглед изглежда глупаво и незначително, в реалността има дълбока и основателна цел“.
Или ако перифразираме народната мъдрост, че ако едно нещо е глупаво, но работи, значи не е глупаво (или всъщност си е глупаво, но ние извадихме късмет).
Подобен начин на работа едва ли може да бъде наречен идеално програмиране, понеже датата на файловете е атрибут, който не е предназначен за сравняване на драйвери. Но системата работи, така че защо не? Ако ви хрумват десетки идеи по този въпрос (проверка на издателя на драйвера и ако е Microsoft, да се инсталира най-новия), програмистите на Microsoft явно са избрали по-опростен и надежден вариант.
Не е добре, че този механизъм на работа на PnP дълги години остана недокументирана функция в ОС Windows и това е една от основните причини заради които критикуват операционната система със затворен код – твърде много недокументирани особености, за които не знаем.
Този механизъм може да продължи да работи и в следващите версии на Windows. Трябва само да се следи да не би някой фирмен драйвер да е с дата по стара от въпросната 21.06.2006, понеже в този случай Windows непрекъснато ще инсталира своя драйвер с всяко обновяване на системата. Все пак във Windows 10 има начин за временно изключване обновяването на драйверите.