Microsoft used to have two different product lines, called “Windows” and “NT”. It’s a little easier to understand what is going on if you use the versions that the operating systems identify themselves as instead of using Microsoft’s marketing department’s name for them. Ignoring all of the stuff from 3.x and earlier, the “Windows” line is:
Windows 95 (windows 4.0)
Windows 98 (windows 4.1)
Windows ME (windows 4.9)
The NT line is:
NT 4.0 (NT 4.0)
Windows 2000 (NT 5.0)
Windows XP (NT 5.1)
Windows Vista (NT 6.0)
You’d expect Windows 7 to be NT 7.0, but it looks like it might end up being NT 6.1, which is really odd if you ask me. It makes me think that Windows 7 isn’t some great new thing from the ground up like they’ve been saying it is. What it really might be is just Vista with a bunch of fixes for all of the things that customers have been complaining about.
Anyway, the “Windows” line was backwards compatible to DOS. Contrary to what was posted earlier in this thread, these operating systems did not just call DOS functions to do the work. They had their own system drivers, and only called DOS functions when a particular drive was in “dos compatibility mode”. In order to be compatible with DOS, they had to allow programs to fully access the machine’s hardware. This was necessary to get performance out of games at the time, and was also necessary for some DOS programs to function properly, but it also was an Achilles heel since a truly misbehaving program could bring the entire system to its knees.
The NT line was designed for business users in a networked environment, and as such it had to be more rugged from the ground up. The key architectural difference between Windows and NT is that NT has what is called the “hardware abstraction layer” or HAL. Programs can’t directly access hardware in NT. The program accesses the HAL, and the HAL accesses the hardware. This means that a misbehaving program can’t easily whack out the entire system. It also means that a lot of DOS programs just won’t ever work under NT.
Microsoft officially “merged” the operating systems at XP. That’s a bunch of marketing doublespeak. They didn’t merge anything. They killed off the Windows line and forced everyone to NT. They tried to do this for Windows 2000, but too many commonly used programs for home users wouldn’t run under 2000. Microsoft then switched gears and said 2000 would be for business users. You can still see evidence of this in the cutesy “my network places” instead of “network neighborhood” in Windows 2000, and in the multimedia apps that were clearly designed for the home user and not the business user. Microsoft then found themselves without a new software release for its home customers, and rushed ME out the door, which, IMHO, is why the thing was such a buggy piece of crap when it first came out. By the time XP came out, most home users had upgraded their software so that they didn’t have so many incompatibilities with NT any more, and Microsoft was able to complete their “merge”.
The actual API is very similar between the two operating systems.
As far as backwards compatibility goes, Microsoft has a long standing policy of intentionally breaking backwards compatibility if they think they can make their new OS “better”. Microsoft doesn’t go to any great lengths to maintain backwards compatibility. They are more than happy to tell you that no one supports old “legacy” code any more and that if you have something that old you need to upgrade it. Most of the compatibility between versions comes from the fact that the API hasn’t changed all that dramatically over the years.