(noob question) Is it possible to make a Windows game that works across all versions of Windows between Windows 95, all the way to Windows 11?
I've done hardly any game development in my life (making a simple Gamemaker game at high-school in 2016 or 17, & making a box fall in Unity a couple years back; so you can call me a complete noob. But I was just wondering: If I for whatever reason wanted to make my game work natively on a Bunch of different Windows versions, like 95, 98, 98SE, 2000, ME, XP, Vista, 7, 8, 8.1, 10 & 11; would that be possible without making separate versions of the game for different Windows versions? It sounds like a cool project for doing just for the fun of it, for learning about the different OS versions once I already have more experience with development on modern Windows. What if I made the game on Godot game engine? Can Godot games even run on such old operating systems? I heard that Windows 2000 and above are NT based, and major Windows versions prior to that ran on something else: would this greatly affect the development process at all?
Clarification:
Sorry, but I should have clarified that my development platform is Linux, and would be porting to Windows, which obviously should change the answer to my question drastically; I have no idea why I worded things to sound like I would develop the game on Windows first and foremost; but that was my mistake.
If you use plain C and only the part of the Win32 API that has been availlable since 95 that should be doable. No modern toolkit/SDK will likely enable you to do that. The problem will be finding downloads/sources for OS, SDK, and IDE old enough to target Windows 95. You might be able to use DirectX 8, but it will require installing DirectX 9 on newer versions of Windows as a dependency (DX10+ is not backwards compatible with DX8 and DX8 is the latest you get for Windows 95, DX9 is still availlable for Windows 11). Your game will have to be offline only or rely on insecure network stack because hardware old enough to run 95 does not have CPU instruction sets required by implementations for modern SSL.
would this greatly affect the development process at all?
Well, take the information I provided and have a guess ;-)
One of the big problems with getting hold of dev tools from that era is there wasn't a lot of stuff that was free. Pretty much all the windows developer tools had a price of entry. This means there's less chance of being able to find stuff because someone making it available for download would probably be piracy.
They'd probably want to develop with Visual C++ 6 on Windows 98SE for the best chance of success. I think I agree that DX8 is probably the one to target, though there might be better luck targeting an OpenGL (or maybe SDL) version from that era.
Getting decent docs might be hard too as even the MSDN library was a paid for product.
As for networking, I think I've seen some projects that port TLS 1.2 to 9x windows, so I wonder if you could bundle a library to enable this. I guess the OS TCP/IP stack is riddled with holes too though probably making this a bad idea regardless.
It would definitely be an interesting project, but I don't doubt it's going a pretty frustrating time throughout
I think using OpenGL will be even harder than DX8. Your point with the documentation is spot on: it will be hard to come by. As for TLS/SSL third party libs: I had the fun opportunity to implement/maintain the backwards compatibility for a piece of software for Win XP/Server 2003 ~3 years ago. We had to jump some hoops with a custom compilation of OpenSSL to get the parts of TLS 1.2 we needed in Windows 10. I can say with confidence, that that route is a dead end for even older Windows versions.
Thanks for that. I'm sorry, I have no idea why I worded the post the way I did; but I kept on making it sound like I would be developing the game initially on Windows. As a matter of fact, I would develop it on Linux first, and the Windows version would be a port. Would any of what you said be be doable in the same way, or similarly, if I'm developing on Linux and porting to Windows?
That's an entirely different question, which you should have posted instead. Cross platform development is actually getting easier lately and is much less troublesome than what you were asking. Your question was more akin to "can I develop a game that works on Slackware 3.0 with a Linux 2.x kernel as well as on an Ubuntu 23.04?".
It’s definitely possible if you’re going back to Windows 2000, but I don’t think commercial engines are going to get you there, you’d probably have to use the Win32 api directly (or something like SDL) with a software renderer or a very old version of DirectX. I’m not sure about Windows 95 and 98, it might be possible but I don’t have experience going that far back. I’m pretty sure it’s not going to be possible with Godot 3 or 4, maybe with Godot 2 or older versions if you can still find those online
I'd imagine you'd need to create the game in assembly to make it work on all versions of Windows, this is only a guess though
also not sure about Godot as it's still relatively new in comparison to other game engines and programming languages(GDScript)
Edit: even if Godot was a mature game engine at this point in time it'd be more likely that improvements to the engine would be forward facing and thus be unlikely to work for previous versions of Windows(this is only an educated guess)
<br>
Your idea is more feasible on Linux(+Godot) due to Flatpaks(and Flathub)
most suitable for forwards compatibility
unsure about backwards compatibility (previous Linux versions) due to requiring distro level support
Thanks. Although I don't get your point on using Linux; because, why would I develop a Windows game on Linux? And Flatpaks are a Linux specific package (I know because I daily drive Manjaro). So... why would Flatpaks make my idea more feasible if they can't be used on Windows?
Could somebody tell me why this comment has so many downvotes, please? What makes this bad advice for me?
ah I meant that Linux games would be easier to create for multiple versions since packaging into a Flatpak once would let you distribute it to multiple platforms/distros all at once
the downvotes are probably from me giving tangent advice rather than one that's parallel to your goal(Windows)