I <3 Steve McConnell*
Coding Horror
programming and human factors
by Jeff Atwood

August 20, 2006

DirectX Version Number Abuse

Has anyone noticed that Microsoft defines "version" a little loosely when it comes to DirectX 9.0c? Here's a screenshot of the DirectX 9.0c download page on FileHippo:

DirectX 9.0c versions

DirectX 9.0c was originally released in August 2004, according to the DirectX Wikipedia entry. But Microsoft has surreptitiously been updating DirectX 9.0c since August 2005 without incrementing the version number.

It is not known why Microsoft has not used new version numbers for the updates to DX9.0c -- including the December 2005 update versioning could now be at DX9.0j, although this is nowhere reflected in the internal code.

So do you want version 9.0c, 9.0c, 9.0c, or perhaps.. 9.0c?

The versions are all fully backwards compatible, of course, but why is Microsoft abusing version numbers this way?

It's impossible to tell what version of DirectX 9.0 you're actually running. I've installed several games over the past year which inexplicably demanded to re-install DirectX 9.0c; now I know why.

At least Vista stops the madness by finally changing the version number to DirectX 9.0L.

Posted by Jeff Atwood    View blog reactions
« Video Card Power Consumption
Total Users Does Not Equal Total Usage »
Comments

Isn't it because it really is the same version of the DirectX core? I believe MS only adds data to support new hardware support, and stuff of that kind. Bug fixes and new functionality would result in a new version (say 9.0d).

If you already have 9.0c and it works on your computer, you needn't download it again.

I might be wrong, so if anyone knows better, please correct me. :)

C-J Berg on August 21, 2006 3:00 AM

The 9.0c relates to the core runtime which has remained the same for some time. The updates to the runtime download include D3DX and managed DirectX which are updated bi-monthly along with the DirectX SDK. These components have their own version number.

In theory a user shouldn't need to download a new runtime if they have 9.0c because the updated components should be installed as part of the game/application that uses them. Unfortunately this isn't always true, so Microsoft updates the runtime download so that 'bad' applications can just point users to install the DirectX runtime. It would probably be better to have two installs (core and extra components) but I guess that would just cause more confusion.

Leaf on August 21, 2006 4:34 AM

"It's impossible to tell what version of DirectX 9.0 you're actually running"

What about dxdiag?

ElfQT on August 21, 2006 4:42 AM

Also, I think there is good reason to believe that some programmers are so lazy that they have their applications attempt to install their preferred version of DirectX, even one that is a couple of version numbers behind, without regard to what is already there and without giving the user opportunity to say no.

Paul Coddington on August 21, 2006 4:46 AM

Paul's definitely right... In Vista, I am routinely prompted by game installers to install DirectX9. Microsoft has provided good instructions for years and years on how to properly detect DirectX and Windows version numbers, and developers routinely ignore them.

warren on August 21, 2006 4:54 AM

The major problem with this is that all these "versions" have differently named D3DX DLLs, leading to lots of application incompatibilities. These aren't being updated, too. You'd really need to download all the versions, just for this one DLL.

Developers have been screaming at Microsoft to fix this to no avail.

Steven on August 21, 2006 4:56 AM

Checking one's windows version speaks volumes about Microsoft and its versioning!

On that note, why isn't the dot net framework numbered like so

v.1.0
v.1.1
v.2.0

What's with the 1.1.4322 ?!!

shortcircuited1 on August 21, 2006 5:49 AM

"I've installed several games over the past year which inexplicably demanded to re-install DirectX 9.0c; now I know why."

Ha. Don't give them too much credit.

Last week I installed "Unreal Gold", from <i>1999</i> and <i>it tried to install DirectX</i>. DX7.1, in fact.

Most game installers will just blindly try to install their pack-in copy of DirectX, regardless of version numbers.

Adam Vandenberg on August 21, 2006 6:38 AM

1. The .NET Framework version numbers are simply the full build versions. We need full build versions because .NET Framework betas are public, which is a good thing, and people need to be able to distinguish between different betas.

Only developers ever see the full build numbers -- for the public it's simply 1.0, 1.1, 2.0 -- so I don't know why this is even an issue.

2. Game installers "blindly" try to install their DirectX version because it's actually Microsoft's DirectX installer that's supposed to handle the versioning. The Microsoft installer will never overwrite newer files, it will only install missing files. So it's safe to run in any case, which is exactly what the game installers do.

3. You MUST run the installer of whatever DX version comes with your latest game because, as Jeff discovered, numerous files are different and regularly updated within the same "9.0c" version number of DirectX.

Chris Nahr on August 21, 2006 7:09 AM

For the pedants: I meant to say that the Microsoft DirectX installer only overwrites older files or installs missing files.

Chris Nahr on August 21, 2006 7:11 AM

"For the pedants: I meant to say that the Microsoft DirectX installer only overwrites older files or installs missing files."

I have a readme file for a major music sequencer program that states that the user shouldn't be concerned because they (the developers) are expecting Windows to self-repair any damage that is done by their installation process.

However, my memory may be foggy (it may be Windows Media components, [as well as | instead of] DirectX.

Personally, I raised a support ticket for that one to make it clear that taking that sort of chance was not reasonable in an established mainstream product of such price (incredibly expensive) - that, and it also ignored all principles of multi-user support, user security, etc.

Paul Coddington on August 21, 2006 8:23 AM

I've been using some Managed DirectX since the Summer 2004 release -- DirectInput. As long as I've got any SDK release past that, it'll work fine.

What's semi annoying is that the Managed DirectX installer is different that the main install, and is a total bitch to find outside of the SDK.

Alex on August 21, 2006 11:43 AM

Here's a bit more info on the new files added in each "bi-monthly release":

<a href="http://www.google.com/search?q=toymaker+installers+distributes&btnI=1">http://www.google.com/search?q=toymaker+installers+distributes&btnI=1</a>

This makes installing new games a bit of a crapshoot. They offer to install DirectX 9.0c, I think "no, I already have that version installed" so I opt not to re-install. Then when I run the game.. missing file error!

That's the problem with keeping everything at the same "version".

Jeff Atwood on August 21, 2006 11:53 AM

If they make such a mess of Direct3D installation, what does it tell you about their OS?

I stumbled across a comment in their Direct3D docs, where they encourage you to silently update Direct3D (no need to ask the dumb user..), which I find appalling.

Furthermore the platform SDK is no longer just plain "platform SDK", it's now Windows Server 2003 platform SDK R2. Which throws you off a little when you are looking for "the" SDK, and not the "Server 2003 SDK".

DirectShow has suddenly moved to the Platform SDK. During the transition, there was a period, were DirectShow was not supported (neither in the SDK or in DirectX/3D). Now it's in the Platform SDK but it retains some legacy dependencies to the DirectX SDK, so you need to get that as well.

But I _am_ looking forward to Vista ;)

mtn on August 21, 2006 1:19 PM

The perceived problems with DirectX versioning and game installs is mostly a result of lazy/stupid game installer writers. I should know, I work as a software engineer at a game company. I repeatedly have to educate our build/installer engineers about the proper procedures for installing DirectX, which are fairly clearly outlined, if you take the time to research it. Microsoft recommends that game installers silently install the version of DirectX that the game is built for. If you don't do this, chances are great that your game won't run properly - no fun for the customer and no fun for tech support. The DirectX installer will not downgrade to a lower version, it will only replace files with lower version numbers. And as others here have pointed out, the core DirectX runtime (9.0c) has not changed since 9.0c was first released, only the satellite DLLs.

Here's the relevant doc...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/Installing_DirectX_with_DirectSetup.asp

Cheers.

SpaceDog on August 21, 2006 8:13 PM

I thought vista was going to ship with DirectX 10?

Chris on August 21, 2006 11:41 PM

There is some way for developers to tell the difference.

Over the weekend I installed the demo for Caesar IV. It did the standard, let us install Direct X for you, since dxdiag said I had 9.0c I ignored it. I had updated all my drivers and stuff like direct X back in Feb, so the Feb or Dec version of 9.0c installed.
Firing up the game it said that I had an old version and needed to upgrade to 9.0c, talk about a fun phone support problem. So I did a reinstall from the aug version, pulled from microsofts site, and it worked with that.

will dieterich on August 22, 2006 12:45 AM

The reason for the persistent revision is because of particular Microsoft applications requiring 6.0c. The apps are -hardcoded- for 6.0c.

Jay C. James on August 23, 2006 12:12 PM

Vista will ship with both DirectX 9.0c (whatever current revision) and 10. That's because there will be few if any DX10 capable video cards when Vista launches. In fact the Aero desktop itself runs on DX9, not DX10, for this very reason...

As for game installers, again: ALWAYS INSTALL THE DIRECTX 9.0C THAT COMES WITH YOUR GAME! ALWAYS! Silently installing this version is a GOOD idea because otherwise the user will skip the step thinking "oh, I already have that." NO YOU DON'T.

You only need to be careful with really old DX versions, pre-8 or so -- those might mess up your system if you let them install.

Chris Nahr on August 24, 2006 1:33 AM

Actually DirectX is NOT updated.

Those are *SDK* updates bringing additional documentation, preview materials, updated tools etc... so there is no need to change the DX version.

The Managed DirectX D3DX part is updated and gets new version number each time.

Pat on August 24, 2006 8:07 AM


If only MS was not interested in monopolizing everything and we had OpenGL games that were *gasp* multi-plaform.

But then, we'd probably have issues with ICD mini-drivers...

The Foo on August 24, 2006 12:53 PM

I am a program manager at Microsoft.
I'd like to point out that the link Spacedog has posted is what you should go by.

I think the confusion exists because there are essentially two part of a DirectX SDK download.
1) The runtime, which is a redistributable that game developers redist along with games
2) Libs, Samples docs etc. that game developers use to build their games.

Since 2003, the runtime/redist has been frozen at DX9.0c. The runtime has not changed since then. Period.

However, there have been SDK updates every 2-3 months that package up the frozen DX9.0c runtime and updates the libs and samples etc. These are what have versions of the form DirectX 9.0c (date).

If there are any additional questions, please send mail to directx@mictosoft.com

Anantha on August 25, 2006 2:59 PM

MS did the same thing with an earlier version of MDAC. Caused no end of problems. Since MS has the Windows installer that can chek numeric file versions and product versions, I'd like to see a blanket policy of "no letters in version numbers, and always increment for a new release".

Regarding Leaf's comment, "The 9.0c relates to the core runtime which has remained the same for some time. The updates to the runtime download include D3DX and managed DirectX which are updated bi-monthly along with the DirectX SDK. These components have their own version number.

In theory a user shouldn't need to download a new runtime if they have 9.0c because the updated components should be installed as part of the game/application that uses them. Unfortunately this isn't always true, so Microsoft updates the runtime download so that 'bad' applications can just point users to install the DirectX runtime. It would probably be better to have two installs (core and extra components) but I guess that would just cause more confusion."

Alternatively using the product version number intelligently alongside the file versions would correct this. Leave the core component version numbers alone, update the product version.

Anantha should take note particularly; MS included the Product Version resource in the very earliest specs; why not use it?

Regarding SpaceDog's comment, "The perceived problems with DirectX versioning and game installs is mostly a result of lazy/stupid game installer writers. I should know, I work as a software engineer at a game company. I repeatedly have to educate our build/installer engineers about the proper procedures for installing DirectX, which are fairly clearly outlined, if you take the time to research it."

So what else is new? ;>

I've only been in one or two companies where the people in charge of the install are even -aware- of the MS recommendations. Read and understand them? Never. ;>

Installation and support are almost always afterthoughts.

Ron Ruble on August 26, 2006 4:58 AM

Here's the reason why this versioning scheme is dumb:

Say a user, for whatever reason, manages to end up with your application installed, but not the D3DX DLLs. It doesn't run. The user suspects a DirectX problem and installs DirectX 9.0c, but it doesn't help. So the user contacts your technical support staff, and you have to tell them:

"Oh, that DirectX 9.0c installer won't work. You have to use the DirectX 9.0c installer that comes with our product, even though it looks like it's installing the same thing."

Phaeron on September 7, 2006 8:37 PM

The only time I've actually had a problem not installing Dx9 from a game (and I *always* say no) is the BF2142 demo and that doesn't actually COME with a DX9 redist..

Also I don't believe this claim -> "Since 2003, the runtime/redist has been frozen at DX9.0c. The runtime has not changed since then. Period."

Uh what? So why, if the runtime has not changed do I need to install a new one?

In any case it's stupidly confusing.

Daniel O'Connor on October 19, 2006 12:19 AM

Some people are not bothering to read. It's been quite clearly explained that although the runtime hasn't changed, other bits have which is why there is a new directx redist every two months. This has been explained so many times including in the one of the replies which was quoted so I don't get what's so hard to understand

However I do think MS needs to come up with a new system. Clearly the current one is not working because we're getting a lot of clueless and stupid users who are getting confused. More importantly, I'm agast to find that MS recommends games silently install directx. I HATE APPLICATIONS OF ANY SORT THAT THINK THEY KNOW BETTER THEN ME. So do A LOT OF USERS. APPLICATIONS SO LET THEIR USERS DECIDE WHAT THEY WANT TO DO<PERIOD> No ifs, no buts nothing. If you need to do stuff silently do avoid problems with stupid users you need to come up with a better scheme. It is important to remember that this stupid silent install has caused no ends of problems for users of Windows x64. Because the stupid directx install fails, the stupid game fails. Any gamer on Windows x64 has probably had some experience with Orca due to this exceptionally stupid design. So, I repeat, PLEASE STOP THINKING YOU KNOW BETTER THEN THE USER. You don't. The user SHOULD ALWAYS BE TOLD AND ALLOWED TO ADJUST WHAT YOU INSTALL!

NE on October 29, 2006 11:33 AM

Hear hear!

Jeff Atwood on October 29, 2006 11:49 AM

Hey, we have another one, released on 12/13/2006 and still 9.0c

KL on December 19, 2006 2:03 PM

Ok, so the core runtime hasn't changed, so its version doesn't change. Sure, that makes sense. But Direct3D, which these days is the main reason developers USE DirectX, IS changing versions with every bi-monthly update. I've found no way to update the D3D 'add-on' without installing the DirectX runtime. In this sense, D3D IS part of the DirectX runtime package. And since its version is changing, the runtime package's version should change. This is common sense. WTF.

I've also found no reasonable way to check for the version number of D3D. It's not in HKLM\software\microsoft\direct3d, where one might expect. I want our http installer to intelligently decide whether the user needs to download and install a DX update to run our game. Currently I have to explicitly search for the d3dx9_30.dll that appeared in the release we decided to build against. I'm not willing to make them download the entire DirectX runtime package on top of our game binaries 'just in case'.

Timbo on February 21, 2007 5:20 PM

I'm downloading feb2007 version- because I have phantom issues in one game and not any others. Maybe a silent install of something else broke it?

toecheese on March 7, 2007 11:45 AM

It would seem you don't always have to upgrade to version 9.0c.

The game EverQuest began to require 9.0c. I was unaware of this and tried to launch the game. I was given a missing file error for the dll file: d3dx9_30.dll

Being uncertain of the effects of 9.0c on a machine with a copied version of Windows XP I tried instead to download d3dx9_30.dll to my Windows /System folder. The game will now launch and I do not have version 9.0c

Blodwulf on March 11, 2007 4:04 PM

>>At least Vista stops the madness by finally changing the version >>number to DirectX 9.0L.

Thats not really a change. DX9.0L is basically 9.0C modified to run in the vista WDDM, there are no functionality changes, and infact, this has caused some confusion because you have some people thinking it means some sort of functionality change.
However, this IS changing with DX10 and DX10.1, MS has apprently comitted to bringing out new DX versions in full versions rather then peice meal.

Daniel on June 13, 2007 1:24 AM

I have installed directx 9.0c a thousand times and I have a game that when I try to install it it tells me that I need to install directx 9.0c. what do I do? Please help me.

roger on December 12, 2007 11:01 PM

How to fix directx. Download 9c in a seperate drawer. Install it, everything should be there but your version will still be 9b. Run regedit find the directx drawer. Hotkey Local Machine/Software/Microsoft/Directx. Double click version,type 4.09.00.0904. This will change 9b to 9c when you open dxdiag. Everything now works for me.

Mike on December 24, 2007 11:07 AM

RE: The perceived problems with DirectX versioning and game installs is mostly a result of lazy/stupid game installer writers

WRONG! The program is (deleted) Microsoft and their (deleted) version numbers. They CLAIM to have a way to detect the DirectX version -- but they lie.

How do I know? I just tried it on my Vista (DirectX 10) box. DirectXSetupGetVersion says: version 9.0c.

(delete) them and the horse they came in on.

Sunrise Programmer on June 20, 2008 6:55 PM
Content (c) 2009 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved.