One reason was a pragmatic one that Microsoft's partners had a lot of commercial software which to maintain backward compatability contained versions of the program to suit all versions of windows with simple checks at the start to find out the version of windows running on that machine and then jumps to the code for that version. Unfortunately the bit of code to check for W95 and 98 that M$ suggested originally was something like: if(version.StartsWith("Windows 9")) { /* 95 and 98 */ } else { etc
so if there was a real windows 9 it would jump to the old code and hang the machine.
Alan