Kernel-Mode Windows Versions

It’s not too strong to say that for the first few years of early Windows history, there was no kernel-mode version numbering at all. That kernel-mode software should know which version of Windows it’s running on was at best an after-thought. Not until Windows NT 4.0 in 1996 was this given explicit support in the form of a function (PsGetVersion) that the kernel exports so that arbitrary kernel-mode software might call it to learn of a version number—and very nearly a decade had passed before the kernel provided a documented function to call (RtlGetVersion, new for Windows XP in 2001).

Version numbering and product identification in Windows had been loose from the very start. Given a kernel whose version resource gives 3.10 as the Product Version but which contains the text “Microsoft (R) Windows NT (TM) Version 3.1”, is the product properly called Windows NT 3.10 or Windows NT 3.1? The corresponding text in a later build is “Microsoft (R) Windows NT (TM) Version 3.50” but a README.TXT file on the distribution discs announces “Microsoft Windows NT 3.5 Workstation and Server”. Fortunately for historians, the major and minor version numbers as recorded in the binaries’ version resources do not have this inconsistency:

File Version Distribution
3.10 Windows NT 3.1
3.50 Windows NT 3.50
3.51 Windows NT 3.51
4.0 Windows NT 4.0
5.0 Windows 2000
5.1 Windows XP
5.2 Windows Server 2003
6.0 Windows Vista
Windows Server 2008
6.1 Windows 7
Windows Server 2008 R2
6.2 Windows 8
6.3 Windows 8.1
10.0 Windows 10

The early versions have client and server editions that are distinguished simply by adding such descriptions as Workstation or Server to a straightforward product name: Windows NT plus the version number, with or without a trailing zero. What was appended to this was sometimes more elaborated, as with Terminal Server. Different editions have different selections of binaries, but the binaries that are common to multiple editions are the same in each. This applies especially to the kernel and HAL, and to most drivers too, such that it is reasonable to speak of these early versions without distinguishing client and server editions.

Major Version 5

Perhaps to supplant the Windows 95 and Windows 98 line of operating systems that run on MS-DOS and were still far and away the most popular with everyday users—or perhaps just from excitement about the last year of a millennium—marketing took hold for rebadging version 5.0 as Windows 2000. Still, it too had client and server editions as just that: editions of one product, not separate products.

The immediate successor to version 5.0, given a bump in the kernel’s minor version number, was distinctive in two ways. First, as Windows XP, it was named in some new way that someone at the time must have thought creative but which is problematic for historians in having no sense of sequential development. Second, it had client editions only. Server editions came nearly two years later and kept to the naming pattern of Windows plus a four-digit year, but they were very much a new Windows product—with another bump in the minor version.

The server branch of major version 5 is distinctive for introducing the world to 64-bit Windows on a processor architecture that the mass market could easily perceive as practical. An amd64 (x64) processor had enough compatibility with the venerable i386 (x86) architecture that it runs first as an i386 processor and could therefore have either or both of 32-bit and 64-bit Windows installed. This 64-bit Windows was at first provided only to the server market, and even for this had to wait for the first service pack. The reworking of the kernel and much else to accommodate the new processor architecture meant that even for its 32-bit edition Windows Server 2003 SP1 is more on the scale of a new minor version than of a mere service pack.

Major Version 6

It is not often enough appreciated enough that although Windows XP and Windows Server 2003 were largely contemporaneous, they were significantly different. At least as much under-appreciated is that although Windows Vista and Windows Server 2008 were marketed as very different, being for use as client and server respectively, most of the binaries in Windows Server 2008 are exactly those of Windows Vista SP1. Or were we meant to think of it the other way round!

Matters are even worse for Windows Server 2008 and Windows Server 2008 R2, for although their names sound alike the one is a Windows Vista service pack, as noted, and the other is Windows 7. So they are in fact very different! On the assumption that similar unification of client and server editions is intended forever, however much the correspondence is disguised in the names that Microsoft chooses for marketing, I do not keep downloading releases of the server products just to check the correspondence with client products.

Version numbering gets indisputably quirky for Windows Vista, Windows 7, Windows 8 and Windows 8.1. These were each in their time promoted as a significant—even major—release, yet they all have the same major version number which anyway isn’t in any of the names.

What Microsoft meant by the names is itself something of a mystery. Windows Vista may be explained as continuing the style of Windows XP, but however much Windows 7 looks to be recapturing some sort of sequence to convey progress, it’s specifically a seventh Windows version only with very selective counting. Even if it’s Windows 7 just for following version 6.0, who among ordinary users will have known, the major and minor version numbers having been disguised for years by the marketing names?

That Microsoft kept to major version 6 for what looked like a return to having version numbers in the product name makes it seem, at least to cynics, that 7, 8 and 8.1 are not numbers but marketing names: Windows 7 because it needed to be distanced from the unpopular Windows Vista; and Windows 8.1 to suggest merely a tweak of the unpopular Windows 8, enough to demonstrate Microsoft’s responsiveness but not to undo the promotion of Windows 8 for its great new features that would bring Windows to the mobile phone.

Major Version 10

As if to acknowledge the mismatched names and numbers for versions 6.0 to 6.3 as unsatisfactory, the major version number for Windows 10 leaps ahead to 10. This, however, brings the different problem that the roughly half-yearly updates of Windows 10 all have the same major and minor version numbers. So too had the mostly less frequent service packs of each earlier version, but the variation between successive updates of Windows 10 is mostly much greater. Some add more functionality than would once have come with an increment of the minor version number. Yet for now much more than half a decade, every update of Windows 10 is version 10.0.

Build numbers are accessible programmatically but they are no substitute. They do advance, but with no regularity and even less memorability. Some commentators, mostly programmers, took to using Microsoft’s codenames such as TH2 and RS1, sometimes spelled out as Threshold and Redstone. A programming interface helpfully kept step by increasing a new type of version number, the NT Device Driver Interface (NTDDI) version, but even programmers don’t keep it front of mind.

Year-Month Naming

Even while early updates of Windows 10 were promoted more by marketing names such as November Update, Anniversary Update, Creators Update and even Fall Creators Update, as if anyone should want to remember which is which, Microsoft’s names for the corresponding ISO images contained what was soon established as the conventional nomenclature for significant Windows 10 releases: two digits for the year and two digits for the month. Some commentators have even retro-fitted this to the original Windows 10 from July 2015 to call it the 1507 release.

After a little irregularity with 1511 and 1607, half-yearly releases labelled for March and September settled in so well that after 1703, 1709, 1803, 1809 and 1903, Microsoft may have felt some pressure to keep to the programme even without a new release to release. Thus do we get a Version 1909 that’s hardly different (at kernel level) from 1903 and which this study disregards.

Half-Yearly Naming

As if five years of significantly different kernels all presenting as version 10.0 was not enough trouble, the advance of year to 2020 brought a problem for the naming convention. The release from April 2020 is conventionally Version 2004. That this sounds too much like a year seems likely as the cause for a modification of the convention. Later releases are still named with two digits for the year but instead of two digits for the month, they now have H1 or H2 for first and second half. The release that followed Version 2004 is thus 20H2 and Version 2004 is often since referred to as 20H1. It is what it is. And, anyway, this study does not yet get so far!