What exactly *is* Windows XP/Vista relative to the older Windows OSes?

Some time ago I stopped following the evolution of XP/Vista relative to older versions of Windows. IIRC up to Win98/WinME it was simply extensions to the DOS/Windows95/386 instruction set. Then came XP which was based kinda-sorta on OS4 which was based on … and then it got hazy.

What exactly is Windows XP/Vista relative to the older Windows OSes?

A turd expressed in 0s and 1s?

According to Wikipedia and my personal experience with them, they’re NT based OS’s.

By OS4, I’m assuming you meant NT4.
Windows 2000 was NT5.
Windows Xp is NT6 workstation.
Windows Vista is NT7 workstation.

I’m sure someone who knows more about it will come in and supply more details.

So XP and Vista don’t have any old embedded windows code, it’s all NT now, and backwards compatibility with older win versions (to the extent possible) is some kind of virtualized emulation?

This table might be helpful: http://en.wikipedia.org/wiki/Microsoft_Windows#Timeline_of_releases

XP is actually NT 5.1/5.2.

Vista is NT 6, which is why the next version of Windows will be called Windows 7.

See also http://en.wikipedia.org/wiki/Timeline_of_Microsoft_Windows

That doesn’t sound right to me. I think Win2K and XP are the same major version number.

Ah.
Win2k is NT 5.0
WinXP is NT 5.1-ish
Vista is NT6.0.

Oddly, Windows 7 is NT 6.1

This doesn’t make sense: DOS and Windows 95 don’t have an instruction set. They’re rather simple attempts at an operating system without effective memory protection (DOS doesn’t even try, Windows 95 tries but fails) or the ability to enforce separation between applications and the hardware. That made them completely insecure and unstable.

The 386 has an instruction set, though, and it’s historically important because it’s the first 32-bit x86 chip and the first x86 chip capable of running real operating systems (it had both hardware memory protection and an address space big enough to hold a real OS). All later x86 chips implement the 386 instruction set but they also go significantly beyond it, meaning a Pentium 4 can run all 386 software but a 386 will likely be unable to run Pentium 4 software because it has opcodes the 386 doesn’t implement.

My intent was to convey the concept of the DOS/win95 + 386i instruction set as a combined paradigm. Not to indicate that the Oses themselves had instruction sets.

I’d understand “instruction set” to mean “API,” which is something that all had in common. Even command.com is just a shell to the DOS API.

Nobody uses the term instruction set to mean API. It’s like understanding the term “kidney” to mean “left ear”.

This actually makes more sense. Software that runs on multiple platforms is often ported to OS/hardware pairs as opposed to just different OSes, largely because many commercial OSes (outside of the embedded world) only exist on one piece of hardware (MVS is only on zSeries mainframes, Windows XP is only on x86 PCs, etc.) but also because the hardware can dictate what features the application can rely on.

To directly answer this: Yes, that’s more-or-less how it works now, but it isn’t that simple because MS tended to compromise the NT kernel to make certain Windows 95-era programs keep running. This means NT isn’t as secure as it ought to be (the single biggest reason is that MS allows application developers to insist that their applications must run with full Administrator privileges) in addition to being more complex than it should be. Raymond Chen goes over a lot of this in detail in his blog and book ‘The Old New Thing’.

It is the case that on 64-bit systems all 16-bit code (DOS programs and whatever Windows 3 applications you can dredge up) must run under software emulation because there is no way to run 16-bit code on the hardware when the CPU is in 64-bit mode. 32-bit code (Windows 95 and later) will run on the hardware in a special, OS-managed mode.

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.

I said I’d understand it, not use it. Just like when someone says their operating system is Office 2003 or Internet Explorer, or that they’ve upgrade their memory to 300 gigs. No one should say it, but to say that no one says it shouldn’t be said.