Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Windows Microsoft

Developer Explains Why All Windows Drivers Are Dated June 21, 2006 (microsoft.com) 236

For years, people have wondered why all Windows drivers are dated June 21, 2006. Long time developer at Microsoft, Raymond Chen explains (much of the entire post in summary): When the system looks for a driver to use for a particular piece of hardware, it ranks them according to various criteria. If a driver provides a perfect match to the hardware ID, then it becomes a top candidate. And if more than one driver provides a perfect match, then the one with the most recent timestamp is chosen. If there is still a tie, then the one with the highest file version number is chosen. Suppose that the timestamp on the driver matched the build release date. And suppose you had a custom driver provided by the manufacturer. When you installed a new build, the driver provided by Windows will have a newer timestamp than the one provided by the manufacturer. Result: When you install a new build, all your manufacturer-provided drivers get replaced by the Windows drivers. Oops. Intentionally backdating the drivers avoids this problem. It means that if you have a custom manufacturer-provided driver, it will retain priority over the Windows-provided driver. On the other hand, if your existing driver was the Windows-provided driver from an earlier build, then the third-level selection rule will choose the one with the higher version number, which is the one from the more recent build. It all works out in the end, but it does look a bit funny.
This discussion has been archived. No new comments can be posted.

Developer Explains Why All Windows Drivers Are Dated June 21, 2006

Comments Filter:
  • Change all the dates of your co-worker's drivers. Set them to the future.

    • Re: (Score:3, Funny)

      by Anonymous Coward

      Change all the futures of your co-workers. Drive them on a date.
      (much better prank IMHO)

  • by Anonymous Coward on Thursday February 09, 2017 @10:05AM (#53832141)

    Why don't they simply add another record ("source") to help make the driver comparison? A typical Microsoft solution I would say.

    • by Opportunist ( 166417 ) on Thursday February 09, 2017 @10:20AM (#53832227)

      Your idea would be easy to implement, a perfect solution to the problem and most of all it would work. We can't have that at MS.

      • by grcumb ( 781340 )

        Your idea would be easy to implement, a perfect solution to the problem and most of all it would work. We can't have that at MS.

        I laughed, too. But it has to be admitted that this phenomenon is not unique to Microsoft.

        I haven't used RPM in years, so I don't know if the problem persist, but it used to be that Redhat upgrade mechanism sorted packages alphabetically, which meant that this you'd frequently get cases where upgrade candidates sorted like this:

        package-name-9.8.7.6-alpha.rpm
        package-name-9.8.7.6-beta.rpm
        package-name-5.4.3.2.rpm
        package-name-10.12.13.14.rpm
        package-name-1.2.3.4.rpm

        And because your packages came from hundred

    • by Geoffrey.landis ( 926948 ) on Thursday February 09, 2017 @10:22AM (#53832233) Homepage

      There's a word for this method of solving a problem: it's a kluge [urbandictionary.com].

      • Sorry, but backdating is the kluge.

        Properly identifying the resource is not a kluge.

      • by TheFakeTimCook ( 4641057 ) on Thursday February 09, 2017 @11:19AM (#53832625)

        There's a word for this method of solving a problem: it's a kluge [urbandictionary.com].

        Exactly what I came here to say.

        Microsoft Developers have got to be the laziest on the planet. EVERYTHING that MS does is done for the ease of their Developers, regardless of what hoops or inconvenience it causes the User.

        • by clodney ( 778910 )

          Microsoft Developers have got to be the laziest on the planet. EVERYTHING that MS does is done for the ease of their Developers, regardless of what hoops or inconvenience it causes the User.

          Given that in the this case the kludge only affects Microsoft developers, it forces other developers and users to go through exactly zero hoops.

          Microsoft backdates their drivers so that they don't win timestamps and will only win on version compares. I think changing the order of the timestamp and version compares would be a simple solution, but I can imagine that they considered that and had some reason why that led to undesirable results. So they have a solution where they backdate their drivers and nob

          • Microsoft Developers have got to be the laziest on the planet. EVERYTHING that MS does is done for the ease of their Developers, regardless of what hoops or inconvenience it causes the User.

            Given that in the this case the kludge only affects Microsoft developers, it forces other developers and users to go through exactly zero hoops.

            Microsoft backdates their drivers so that they don't win timestamps and will only win on version compares. I think changing the order of the timestamp and version compares would be a simple solution, but I can imagine that they considered that and had some reason why that led to undesirable results. So they have a solution where they backdate their drivers and nobody else has to.

            This is where certain Slashdotters would accuse me of being a "shill", if I were defending an Apple policy; so, pray tell, why wouldn't the term apply to you and your response?

            • by clodney ( 778910 )

              This is where certain Slashdotters would accuse me of being a "shill", if I were defending an Apple policy; so, pray tell, why wouldn't the term apply to you and your response?

              If I were to be pedantic, I would say that a shill is someone who is paid by the entity being promoted, or at a minimum has a self interest at stake in the promotion. I get nothing from Microsoft (you will have to take my word on that I guess), so at worst I am being guilty of being a fanboi.

              But I would also say that my statement was correct, and truth is an affirmative defense. Microsoft backdates their drivers. They don't ask anyone else to do so, and the fact that copying a Windows install doesn't wor

          • Microsoft Developers have got to be the laziest on the planet. EVERYTHING that MS does is done for the ease of their Developers, regardless of what hoops or inconvenience it causes the User.

            Given that in the this case the kludge only affects Microsoft developers, it forces other developers and users to go through exactly zero hoops.

            Microsoft backdates their drivers so that they don't win timestamps and will only win on version compares. I think changing the order of the timestamp and version compares would be a simple solution, but I can imagine that they considered that and had some reason why that led to undesirable results. So they have a solution where they backdate their drivers and nobody else has to.

            Oh, and please tell me how this Kludge ONLY affects MS DEVELOPERS?

            In fact, I am pretty sure that it is almost exclusively USERS that are affected by this.

            And to clarify, I meant "Developers that work AT Microsoft" that we're lazy; NOT the poor sods (like me), who have done something horrible in a past life, and so are now forced to Develop stuff FOR Microslop Products.

      • by flopsquad ( 3518045 ) on Thursday February 09, 2017 @12:09PM (#53832981)
        Kluge: An ordinary high-speed death toboggan, but with KDE graphical interface. Those who prefer GNOME on their bullet sleds might call it a "kludge."
    • by goombah99 ( 560566 ) on Thursday February 09, 2017 @10:35AM (#53832309)

      Right. A bit here a bit there and pretty soon you have saved a whole byte. Overloading the date value with multiple meanings is so 1980s programming. Maybe they could also start using special dates for other meanings too! that way they could save another bit somewheres

    • It would not work very well. It would have the same original problem if two drivers had the same source and you would still have to define a criterion to decide which source would have priority (not always the manufacturer's drivers will automatically be better than Microsoft's, or both drivers are from different third parties and Windows does not know which one to give priority to).
      • The flag would simply be "Microsoft" and "Non-Microsoft", and priority would be given to existing non-Microsoft drivers over all Microsoft drivers. It would fix the specific problem indicated (overwriting non-Microsoft drivers during a Windows update) without creating any new ones. The other ranking criteria would still apply when comparing existing Microsoft drivers to new third party drivers, and you would still have to manually select when the rankings failed. But it would eliminate the overloading of
    • by mwvdlee ( 775178 )

      Because there are probably situations where conflicting drivers come from more than two sources, which would break.

    • by clodney ( 778910 )

      Why don't they simply add another record ("source") to help make the driver comparison? A typical Microsoft solution I would say.

      So how do you compare sources? If I have a nVidia reference driver, a custom driver from the hardware OEM, and a Microsoft driver, how do I rank those? Or is source simply MS vs non-MS?

      Don't forget that whatever change to driver ranking MS makes also has to have provision with the thousands of already existing drivers that won't get updated to include a new field.

      • by dgatwood ( 11270 )

        Yeah, this is a hideous workaround. Apple's design is much saner, providing a default probe score based on how many properties were matched, then calling a probe method in the driver to give it an opportunity to dynamically change its probe scores for even more control. So with that scheme, the generic Windows driver would match based on something generic like vendor and device subclass, the NVidia reference driver would match with vendor + product (and optionally add bcdDevice), and the custom driver fr

        • Yeah, this is a hideous workaround. Apple's design is much saner, providing a default probe score based on how many properties were matched, then calling a probe method in the driver to give it an opportunity to dynamically change its probe scores for even more control. So with that scheme, the generic Windows driver would match based on something generic like vendor and device subclass, the NVidia reference driver would match with vendor + product (and optionally add bcdDevice), and the custom driver from the OEM would presumably return a higher probe score dynamically so that it always wins.

          Version numbers and release dates have no legitimate place in driver matching behavior, IMO.

          You mean to say Apple solved it by not having 3rd party drivers...

          • by dgatwood ( 11270 )

            Um... no, there are lots of third-party drivers available in OS X. Maybe you're thinking of its mutant halfling spawn, iOS?

  • by Anonymous Coward on Thursday February 09, 2017 @10:08AM (#53832159)

    . Maybe it's all the weed talking, but I've really lost the will to even attempt to understand all the insane complexity of modern PCs. I feel like I do nothing but constantly deal with all sorts of bizarre glitches and software harassing me in numerous ways, to the point where I mostly use the computer for the sake of maintaining itself, rather than any actual work.

    That's not how it was back in the Amiga days.

    • . Maybe it's all the weed talking, but I've really lost the will to even attempt to understand all the insane complexity of modern PCs. I feel like I do nothing but constantly deal with all sorts of bizarre glitches and software harassing me in numerous ways, to the point where I mostly use the computer for the sake of maintaining itself, rather than any actual work.

      That's not how it was back in the Amiga days.

      You need to shitcan that Linux box and buy a Mac.

    • Hey, it sounds like you have a deployment problem. Just use docker and kubernetes to keep your system up to date and everything will be easy. J/K docker is a mess, the problem is it's too close to the metal and needs to abstract some of those differences away. It should really have been built on top of systemd. Clean, simple, easy. You can run the deployment server in your bios.
    • by antdude ( 79039 )

      No kidding. I miss the old days of computing. These days, computing is no fun. Complex, unstable, buggy, etc. :(

    • That's not how it was back in the Amiga days.

      You mean the days when simply plugging in some fast RAM caused half your software to stop working? 8)

      Both my A1000 and A1200 were the most fun computers I ever owned, but man, Amiga programmers were the worst. They understood nothing about making software for a proper OS, especially when copy protection was involved (as it always was).

  • badly designed (Score:5, Insightful)

    by edxwelch ( 600979 ) on Thursday February 09, 2017 @10:08AM (#53832163)

    Seems like a really badly designed system to me. If the time stamp of a driver somehow got changed by accident, it would lead to a very hard to find problem.

    • by monkeyxpress ( 4016725 ) on Thursday February 09, 2017 @10:40AM (#53832337)

      I realise the driver system in windows has moved along (hopefully for the better) a lot recently, but about 15 years ago I remember looking into developing a custom driver for a USB device I had developed. My background was as an embedded developer so I had a detailed knowledge of how the bits on the bus worked, and what the host controller chip was doing. All I wanted to do was send some packets to my device and receive a few packets back from a windows application - nothing real time or taxing of the system's capabilities.

      I got a copy of Walter Oney's windows driver model book, and proceeded to work my way through it.

      Even now, as someone who does a fair amount of web development, working my way through ten years of terrible javascript language and library designs decisions to make otherwise simple things happen on a webpage, it still shocks me just how ridiculously horrible the WDM was. The basic IRP system was already pretty over the top architectural astronauty, but I guess you could accept that they had to provide for the possibility that there would be a lot of fancy new peripherals in the future. But once you figured that out, the book went into how incredibly broken the model was once you had to support multi-processor system and plug and play. What ensued was basically 200 pages describing the most horrible mess of obscure synchronisation problems you could possibly find in a couple of pages worth of driver code.

      Ever since I ceased being shocked when my computer BSOD due to a third party driver. Frankly, if the thing allowed you to get much done at all, whoever wrote the driver probably deserved a medal or something.

      Anyway, with such an experience, this back dating driver thing doesn't surprise me in the slightest.

      • by ShooterNeo ( 555040 ) on Thursday February 09, 2017 @11:02AM (#53832521)

        I'm doing embedded work. I've noticed (and done myself) that there is a way to dodge this issue. What you do is, you stick an FTDI chip at the front end. USB to serial is the easiest, but if you need more bandwidth, you can do USB to SPI. So FTDI manages the drivers, and most windows (and Linux) PCs are going to have valid FTDI drivers in them from OS install. You then either access the chip by having it map to a comm port or there is a way to link to FTDI's drivers.

        Either way, you export the problem - FTDI worries about writing and maintaining the driver, which hundreds of millions of devices depend on, and you just piggy back on that driver for your gadget. Works great and you can be up and running in under a day. (just use their USB to serial one, and connect RX and TX, and use the scanf/printf which most any microcontroller has support for)

    • Seems like a really badly designed system to me. If the time stamp of a driver somehow got changed by accident, it would lead to a very hard to find problem.

      Especially since you can change the tine stamp of a Windows file by so much as looking sideways at it.

    • That never happens in Windows... so no need to fix what ain't broke... amirite?!
  • by Joe_Dragon ( 2206452 ) on Thursday February 09, 2017 @10:11AM (#53832181)

    Put the real date in the info area!

  • Wow (Score:4, Funny)

    by gatkinso ( 15975 ) on Thursday February 09, 2017 @10:17AM (#53832217)

    This is the type of hack that an inter is chastised for in a code review.

    Ship it.

    • Re:Wow (Score:5, Insightful)

      by Scarred Intellect ( 1648867 ) on Thursday February 09, 2017 @10:32AM (#53832289) Homepage Journal
      Seems to me it would be easier and more maintainable to check the author of the driver and give precedence to NVidia drivers over Microsoft drivers rather than back-dating your own...but maybe that's why I'm not a Microsoft software engineer, they obviously know more than me.
      • I agree with your main point although when I read the article I kept thinking that I would always prefer the Windows driver over the third-party driver. Third-party ones tend to be horribly buggy. Once a device has a built-in driver is when I know that it will actually work correctly. Until then it's a crap shoot.
        • Simple: user option.

          I do like your point, though, and understand your reasoning. I've never had huge issues with manufacturer-supplied drivers (actually, I probably HAVE...) and typically default to them over MS/Windows drivers.

          One instance, I installed Server 2012 on my old desktop, and Windows Server didn't have any good drivers for the video card (GeForce 560) so I had to install NVidia's...

          But now you've got me wondering...how often have those quirky problems I've lived with been the result of thi

  • by Sporkinum ( 655143 ) on Thursday February 09, 2017 @10:18AM (#53832221)

    Why were there all the issues with Windows 10 replacing manufacture drivers with Microsoft ones then? I am guessing they have since fixed that, but I did hear about a lot of complaints.

  • by OneSmartFellow ( 716217 ) on Thursday February 09, 2017 @10:36AM (#53832315)
    So, if the hardware provider creates a driver too, why does MS use the "perfect match hardware ID".. Why not a system where the manf. Hardware ID is X.Y.Z.Pref  (or some other identifier which would supersede the Microsoft version) and Microsoft's would then be X.Y.Z.Microsoft.  Then it's really obvious what's going on, it doesn't rely upon checking for date, or version ID, or other in-exact ways of *guessing* which driver to use.<br><br>
    Why ?<br>
    Because, the vast majority of devs at MS can't think straight about anything - that's why we have the current state of Windows.  MS hasn't hired a good developer since the days of Windows NT.
    • by DarkOx ( 621550 )

      Or even just extend the version number field out one extra .X and tell third parties a release driver should always have a value of 1 or greater in the final position, where Microsoft always puts a zero in the final position.

    • On the other hand, Microsoft at least has a kernel that allows for drivers to be dynamically added to the system...

  • by wbr1 ( 2538558 )
    Um.. since most drivers are now signed/certified would the signature not have better info than a fucking date stamp to determine age/version/author/priority? By default windows requires signed drivers, so what gives? I am not a coder by day but this seems kludgy as shit.
    • The problem arises when both drivers looks the best ones to use, assume equal signatures, certifications, etc. Compilation date is not a bad option to decide priority when you have many copys from the same driver from the same vendor for the same hardware and this vendor forgets to report correctly the version.
      • by wbr1 ( 2538558 )
        Uhhhh.... why would the sigs be equal? It is a cryptographic hash of the driver and can contain, or be used as a unique id to obtain all the info for that specific version. Also, this is between vendor versions vs MS versions, not vendor to vendor. Would not the signature be invalid if the vendor failed to update it for new versions? Shouldn't it contain a hash of the driver data to compare (which would change between versions)?
        • I was thinking of drivers from the same manufacturer to the same hardware unless you are thinking of putting in that signature the manufacturer and the driver version. And I noticed that Microsoft's idea would also work in the situation where you're replacing a manufacturer's driver with a newer version of the same manufacturer without having to depend on the manufacturer having informed the versions correctly. So with the same code you can satisfy both cases (manufacturer-manufacturer and manufacturer-micr
    • are now

      I quoted the relevant part of your comment. Never underestimate the power of legacy.

  • by Oxygen99 ( 634999 ) on Thursday February 09, 2017 @10:44AM (#53832367)
    Prefix all their drivers with AARDVARK_
    • Hey, aardvark pays off!

    • That will be a problem when Nvidia release version 26 of their driver prefixed with ZAPOS_. Then on the roll-over they will do it excel style and the next driver will be called AAARDVARK_ only to be alphabetically replaced by the windows default.

  • Wrong Priority (Score:4, Informative)

    by coinreturn ( 617535 ) on Thursday February 09, 2017 @10:46AM (#53832383)
    Perhaps using a higher revision number before a newer time stamp would be the way to solve this stupidity.
    • Re:Wrong Priority (Score:5, Interesting)

      by ShooterNeo ( 555040 ) on Thursday February 09, 2017 @11:05AM (#53832549)

      Yeah that's what I don't get. Why doesn't version number take precedence over time stamp? Why isn't the time stamp the date the manufacturer driver got Windows Certified? If you think about it, the last windows certified driver is going to be the one you want, from the perspective of an OS updater you want the latest version from the most stable branch.

      • by Yunzil ( 181064 )

        Sure. Now you just have to get everyone to agree on a version number scheme and get all the vendors to coordinate with Microsoft to make sure their version numbers are in sync.

        (The problem is, what happens if the Microsoft driver version number is 4.6.13 and the vendor's version number for their newer revision of the same driver is 2.9?)

    • Re:Wrong Priority (Score:4, Insightful)

      by CrimsonAvenger ( 580665 ) on Thursday February 09, 2017 @12:08PM (#53832973)

      Perhaps using a higher revision number before a newer time stamp would be the way to solve this stupidity.

      So, Rev 51.2.3.1 of the MS Driver, dated July 20, 1969, should have a higher priority than Rev 34.5 of an nVidea driver? Really?

      Revision number having priority would work if everyone who made drivers for that device used the same sequence of revision numbers. With two or more groups each using their own sequence of revision numbers, not so well.

      • Perhaps using a higher revision number before a newer time stamp would be the way to solve this stupidity.

        So, Rev 51.2.3.1 of the MS Driver, dated July 20, 1969, should have a higher priority than Rev 34.5 of an nVidea driver? Really?

        Yes, because the time stamp of 1969 has obviously been altered and thus the version number should be used. Thanks for proving my point.

  • "And if more than one driver provides a perfect match, then the one with the most recent timestamp is chosen. If there is still a tie, then the one with the highest file version number is chosen. Suppose that the timestamp on the driver matched the build release date. And suppose you had a custom driver provided by the manufacturer. When you installed a new build, the driver provided by Windows will have a newer timestamp than the one provided by the manufacturer." But is it the flagon with the dragon or v
  • by Tomahawk ( 1343 ) on Thursday February 09, 2017 @10:47AM (#53832403) Homepage

    I was expecting an answer to why that particular date was chosen. I could easily have guessed that they were back dated to allow files with new filestamps to take priority. But why that date, and not, say, 1970-01-01 00:00:00?

  • by Sooner Boomer ( 96864 ) <sooner.boomr@nOSPAM.gmail.com> on Thursday February 09, 2017 @10:53AM (#53832455) Journal

    For years, people have wondered why all Windows drivers are dated June 21, 2006.

    Yup, I just checked. All my XP and Vista drivers are dated 7/21/2006. How did they know?

  • by HalAtWork ( 926717 ) on Thursday February 09, 2017 @11:01AM (#53832501)

    I think we already knew this type of bullshit was happening under the hood but it's nice to see a detailed explanation. Gross though.

  • by RightwingNutjob ( 1302813 ) on Thursday February 09, 2017 @11:03AM (#53832529)
    why no one takes Microsoft seriously. I mean how hard is it to maintain a "registry" of drivers for a given device? It's not like peripherals don't have unique ids you can get at through the bus.
  • It sounds like the date is almost never, ever, used as they are all dated the same. Why even consult that field or have it exist at all?
    • It sounds like the date is almost never, ever, used as they are all dated the same. Why even consult that field or have it exist at all?

      "All Windows drivers" are all dated the same. Not "all drivers for Windows". Only Microsoft sets a fixed date for drivers shipped with Windows. Every other manufacturer can and does use the field. E.g. My graphics card driver: 11/12/2016

  • ... a massive kludge to get around yet another Windows design flaw.
  • ... that so long as there is an explanation n for the incredibly stupid design decision, that design decision is masterful.
  • As the driver system architect you have to:
    Make sure all the existing drivers work
    Work with every possible permutation of system - multi core, weird combinations of peripherals
    Anticipate new possibilities even though you have no idea what those might be
    Get it done by a deadline

    No you don't get to go back and fix past mistakes, you don't get to create a new preference field, you have to work with something that is common to every existing driver. Kludge? It's ugly but I bet 99.9% of us couldn't have
  • ...you had to use a hacky, counterintuitive fix to cover for a bad design decision. Business as usual at Microsoft, in other words.

  • by 140Mandak262Jamuna ( 970587 ) on Thursday February 09, 2017 @01:00PM (#53833365) Journal
    Many people are posting why the windows driver model sucks and how terrible it is etc etc.

    But device drivers, especially printer drivers were the front lines of the war between MS-Word and WordPerfect in 1990s. WordPerfect created a virtual printer to which its software will print. They laboriously wrote printer drivers for every printer maker in existence at that time. In those days no matter how obscure and unknown your printer is, WordPerfect will be able to correctly print in it. It also got the "exactly the same printout, no matter what the printer is" edge over Microsoft.

    One way MS decided to create Windows printer driver standard and strong armed all the printer makers to supply a driver that will meet the windows spec. Apple Laserwriter and most other unixy printers had settled on postscript. It wanted to mess them up too. So it was all serious market share battleground those days. Forcing a proprietary ill-defined ever changing driver spec was MS way to deny the competitive advantage WP had built laboriously.

    But it also created two serious side effects on MS-Word. They comingled the virtual device driver code into MS-Word and tried to get the WYSIWYG cheap way. That is why MS-Word margins would change, pagination would change and page references would change if you change your default printer. It was a nightmare those days. Grad students who were PhDs in Engineering went completely bonkers trying to get a paper correctly printed in MS-Word, and worse the TeX guys were laughing at them.

    The second effect was hard pressed printer makers hacked out really bad printer drivers. Many of them took some approximate driver from some place and hacked out something that barely worked and passed basic acceptance test. Then bug reports would pour in, they will fix some of them, then post updated drivers... the mess has not been fully sorted out even now.

    The damage Microsoft did by deliberately sabotaging inter-operability is incalculable.

  • It is interesting to see this is complete opposite of what we have on Linux. Here, vendor drivers are almost universally shitty. If they work at all, vendors tend to ship drivers compiled for ancient and/or specific kernels.
    On Linux, if you have driver in kernel, you almost always want it instead of vendor provided one. nVidia GPU driver may be the only exception.

  • UEFI doesn't suffer the same addressing limitations BIOS does. Just put the vendor driver in the hardware firmware, perhaps on EEPROM.
  • That's when we last touched them.

  • I hate to say it, but really it should "just work".. given Microsoft *can* control what drivers are installed, I simply don't understand why hardware drivers aren't maintained through a quality controlled channel, let people choose which version they want, but otherwise have a default currently supported (and tested in at least the most common hardware configurations) driver that is delivered through windows updates or something...

    One of the reason's I (as a Windows admin, and Linux admin too) enjoy usi

Always draw your curves, then plot your reading.

Working...