Another story from the good old days from Raymond Chen.
During an exchange of war stories, a colleague of mine told one from back in the days when Windows included a processor emulator for x86-32 on systems that natively ran some other processor. (This has happened many times. And no, I don’t know which processor this particular story applied to.)
↫ Raymond Chen at The Old New Thing
So the core of the story comes down to this:
All in all, it took this program 256 kilobytes of code to initialize 64 kilobytes of data.
↫ Raymond Chen at The Old New Thing
The people working on Windows were so offended by this, they added code to the processor emulator just to fix this program.

From my understanding it was also a reason why they switched from Windows 8 to Windows 10, skipping Windows 9, because so many old software were checking for Windows 9_ (95, 98) identifier string and since “Windows 9” ends with a null character, it made those software fail identification. It was too much to handle for “live patching” to ensure backward compatibility.
Kochise,
I’ve heard this too, but I don’t know if it’s just a made up rumor. I’d like to hear from a credible source on the matter.
The old win32 API GetVersion function from windows 95 ONLY returns integral values. Also microsoft has diverged version numbers from the familiar consumer product names ages ago. This makes it unlikely for old windows 9X software to get mixed up with a future version of windows 9 having a different integral value that had not yet been defined.
Windows 95 == 4.00 and Windows 98 = 4.01, which will always be smaller than 7, 8, 9, 10, etc. no matter what windows is actually called.
There is a new GetVersionEx that returns a string as well as the version numbers, but I don’t believe this was supported in windows 98 so it would not be the cause an incompatibility in win9x software.
https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-osversioninfoa
As an aside….
I’ve seen complaints about MSDN retroactively erasing windows 95 & 98 from history. You’ll notice they’ve been erased these OSes from the version table above.
For those interested, wikipedia has an unadulterated list of windows version numbers here:
https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions
It gets worse because whoever is editing the MSDN documentation is also changing the minimum windows version needed by various APIs. For example win32 calls that go back to windows 3.x are listed as “Minimum supported client : Windows 2000 Professional”. I don’t know when microsoft started doing this. On the one hand most of us don’t care about an obsolete OS, but on the other hand these edits are making MSDN historically inaccurate. 🙁
Alfman,
Yes, that
Is unfortunately true.
Some public examples:
https://github.com/search?q=startsWith%28%22Windows+9%22%29&type=code
sukru,
I’m sure you didn’t realize it, but FYI your link is not public.
https://postimg.cc/XrBfqvdT
(Not sure why the screen shot is messed up, but no I did not fabricate it 🙂 )
I wish I could see your examples, but I’m not questioning that some software may have done this. Rather I am questioning whether skipping #9 was anything other than a marketing thing and someone retroactively invented this rationale. It just seems like a good candidate for the rumor mill.
Since we don’t have evidence of microsoft’s intent, personally I think it was a marketing thing and Microsoft would have dealt with incompatibilities using their usual hacks. You will rightfully call this out to be speculative, because it is, however consider this: Windows APIs are known to not report the correct version even for windows 10!
https://stackoverflow.com/questions/58294262/getversionex-windows-10-detected-as-windows-8
So the justification that they needed to call it windows 10 instead of windows 9 doesn’t really add up. The compatibility hacks microsoft used for windows 10 would have applied to windows 9 also. Obviously this doesn’t prove that I am right, but it does give a little more credence that compatibility was not the reason.
This is sort of true, but not for Windows 9/10.
When Windows 95 was being developed, some software misinterpreted the version check and failed when Windows reported itself as 4.0, so they instead set the version to 3.95
Raymond Chen’s blog goes into more detail
Drumhellar,
Thanks for the link. That code is terribly wrong, haha. Obviously windows did eventually move beyond those version numbers so evidently the decision wasn’t permanent.
Alfman,
You need a free Github account login
https://imgur.com/a/QqFEcmC
The main culprit is some popular (official?) Java example where everyone copied verbatim
And I have also seen this in actual private searches. Obviously cannot share those.
sukru,
Obviously I know what they want me to do, whether it will work is a different matter 🙂
I am not near a windows computer with java to test, however I am curious what java actually returns for windows 10/11.
programiz.com/java-programming/online-compiler/
Apparently this is a popular question but all the lists I’ve found however are obsolete.
stackoverflow.com/questions/2357758/what-does-system-getpropertyos-name-return-in-latest-windows-osslopica.sourceforge.net/os.html….I just found a source that covers windows 11 and funnily enough java itself couldn’t detect it initially.
https://www.javathinking.com/blog/what-does-system-getproperty-os-name-return-in-latest-windows-oss/
So java programmers are not only creating their own partial string match hacks to infer versions of windows, but they’re also subjected to the inference hacks in java and microsoft’s hacks in windows too. This is inception level of confusion, haha.
This isn’t good for anybody and IMHO the best solution is for windows to return the correct version and only resort to messy hacks when windows backwards compatibility modes are invoked. The reality is bugs do exist in 3rd party software and this is exactly what the windows compatibility modes are for.. They can and should be used to rectify compatibility problems without burdening normal software devs with creating their own hacks to mitigate the hacks.
This story truly highlights the dedication of the emulator team speed stars game! I once encountered a similarly frustrating code issue while debugging an old application. It’s amazing what can be achieved through persistence and collaboration. Thanks for sharing this insightful piece!