This may be kind of an ambiguous question, or might take more explanation than anyone is willing to provide, so don't feel obligated to respond.

I've been using Windows since Version 3.11 came out, but I've never really thought about it from a programming viewpoint. My main Windows development application has been Visual Basic, starting with Version 4. It seems to me that Visual Basic allows one to kind of stay at a distance from the OS, and, until recently, still allowed building applications that would work with the latest Windows versions.

I've reached a point now where I would like to start working on programs that are a little closer to the OS level, which means that I will need to change programming applications. That brings up some questions about compatibility.

When I did programming for a living, compatibility was not an issue because all the clients I worked for had uniform systems (Same OS, and pretty much the same hardware) for my applications to run on. I knew what the system specifications were, and made sure I made sure that I did the programming on systems that were similar to the client's.

Now that I am thinking about moving forward, or maybe backward a little, I've started wondering about the compatibility issues. I'm aware of the obvious ones, like the Windows versions that were built on the NT platform as opposed to the ones that weren't. I think that started with the Windows 3 series, but I'm not sure. As well as I can remember, Win 95 was the last non-NT based version.

Looking at the present, though, something a little different seems to be happening. Windows 7 and 8 are considerably different from 2k, XP and Vista. As I understand it, Windows 7 was the first true 64 bit OS (If you got the right version.) that Microft produced for general sale, and I can understand why that change would have an effect on what applications would run on it.

Now we get to the question. Wasn't it possible to develop a 64 bit OS version that was transparently backwards compatible with 32 bit applications? When I asked myself that question, I realized that I really don't know what the major differences are between the 32 and 64 bit OSes.

I realize that an answer to this will not easily fit in a nutshell, but I would really appreciate it if someone who knows more about OSes than I do would take the time to let me know what the major differences are. The differences that are making it difficult to run 32 bit, and even 16 software on Windows 7 and 8.

The Win32 API still exists, the operating system translating for you to Win64 equivalent calls.
If it didn't, 32 bit applications would not work on a 64 bit version of Windows.
In theory Win16 APIs would be similarly translated or emulated.

BUT there are major differences in the hardware environment on which those operating systems were designed to work.
As a result those calls might not be possible to be translated, as they refer to things that no longer exist as such.
E.g. there's no more memory segments, so any calls relating explicitly to handling those are now meaningless.
Any application that relies on such calls to have meaning becomes itself meaningless.

And the further back you go, the worse it gets.
Current videocards for example have completely different programming models from those of 20 years ago. Thus any old softwre that writes into physical hardware space on the video hardware can't work, even emulated.
Ditto with CPUs and RAM.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, learning, and sharing knowledge.