The Windows 10 Anniversary update, due later this summer, represents a major landmark for Microsoft. As well as being a significant update for Windows 10 on the desktop and Windows 10 Mobile on phones, the release is also coming to the Xbox One. For the first time, the Xbox One will be running essentially the same operating system as desktop Windows. Critically, it will also be able to run many of the same applications as desktop Windows.

In a lot of ways, this represents the realization of a vision that Microsoft has been promoting for more than 20 years: Windows Everywhere. Always important to Microsoft's ambitions for Windows as a platform, the Windows Everywhere ideal has a renewed significance with Windows 10 and CEO Satya Nadella's promise that Windows 10 will have one billion users within the first three years of its availability. The purpose of that promise is to send a message to developers that Windows is a big platform, a platform that they should still think about and create software for.

But if it is to have a hope of hitting that one billion target, Microsoft needs more than just PC users to get on board, which makes it important for Windows to run on more than just PCs. Hence the need for Windows Everywhere.

Microsoft can now credibly speak of having one operating system (with Windows 10 as its most familiar branding) that can span hardware from little embedded Internet of Things devices to games consoles to PCs to cloud-scale server farms. At its heart is a slimmed down, modularized operating system dubbed OneCore. Windows 10, Windows Server, Xbox 10, Windows 10 Mobile, Windows 10 IoT, and the HoloLens operating system are all built on this same foundation.

It took a long time to reach this point. Along the way, Microsoft built three major operating system families, killed two of them off, and even reorganized the entire company. In the end, all that action was necessary in order to make building a single operating system practical. Apple and Google will probably do something similar with their various operating systems, but Microsoft has managed it first.

One Windows for the future

Since the early 1990s, when Microsoft broke away from its shared OS/2 development effort with IBM in favor of its own Windows NT, the Redmond firm has been pitching the idea of Windows as a platform that scales from palmtops and handheld computers all the way up to large servers. Spanning the entire range of systems would be the Win32 API, offering developers a single set of tools and skills that could reach systems of any type.

Back then, this plan was enormously ambitious. Nowadays, Windows Server has carved off a substantial portion of the server market with both Windows itself and other products such as SQL Server, Exchange, and Hyper-V. But in 1992 when the Windows Everywhere ideal was first described, Windows NT hadn't even had its initial release. Microsoft had no presence at all in the server space, and this domain was instead occupied by Novell Netware and various kinds of Unix. There was no presence in the workstation market, either. Windows 3.1 and DOS were used for PCs, but high-end machines used for serious computing tasks like CAD and engineering were, once again, Unix. Microsoft had an eye on the early forays into novel form factors such as pen-driven computers, but again, no product to actually run on them.

By the late 1990s, Windows Everywhere was a bit more concrete, but it relied on a broader concept of what it meant to be "Windows." Windows NT was the "real" Windows. With native support for SMP, this was the platform that could scale from single-processor desktop systems up to large, multiprocessor servers. It was the operating system that had the complete, definitive implementation of the Win32 API. It was also Microsoft's system built with an eye on the future. It was written as portable, platform-neutral C so that it could scale to different processor architectures should something ever rival x86's dominance.

One Windows for right now

But Windows NT wasn't the only Windows. Windows NT's problem was that it was big; it had, for the time, prohibitively high demands for RAM and disk space. It also lacked support for DOS drivers, giving it weaker hardware support. This was especially true in the consumer PC domain when compared to Microsoft's second major operating system: Windows 95 (and its successors). Windows 95 was a transitional operating system, created to bridge the gap between the old pairing of DOS and Windows 3.1 and Windows NT.

Like those old operating systems, Windows 95 had relatively low hardware demands and support for DOS drivers and mass-market hardware. But like NT, it also offered a variant of the Win32 API, which didn't offer all the capabilities of Windows NT's Win32. For example, system services, multi-user capabilities, security, and high performance disk I/O all remained unique to the bigger operating system. But for most desktop applications, Windows 95 was good enough.

Windows 95 gave developers an on-ramp to that bigger operating system, enabling them to write Win32 applications while still supporting a mainstream platform. Windows 95 didn't support niche features (for the time) such as SMP. It also wasn't portable to different architectures, instead being tied specifically to x86 processors. Windows NT was still the longterm strategic platform, but Windows 95 was very effective as a transitional platform. It led to the widespread adoption of the Win32 API while allowing affordable hardware to catch up with Windows NT.

These two operating systems, however, weren't enough. Although Windows 95 could handle the PC and Windows NT could handle anything larger (think workstations and servers), the still-nascent markets of handhelds, thin terminals, set-top boxes, and in-car computers were off-limits to both.

One Windows for everything else

In the '90s, Microsoft had a third platform for these devices: Windows CE. Like Windows NT, Windows CE was designed to be portable to a wide range of processor architectures. And like Windows 95, Windows CE had an incomplete version of the Win32 API and low hardware requirements.

Beyond that, Windows CE was an odd operating system. For example, Windows NT has a strict protected memory system that isolates programs from each other to provide security and protect against system crashes; Windows 95 had a weaker form of the same. Windows CE had essentially nothing of the sort, with most memory shared and system stability left very much to the whims of individual applications. At the time, Windows NT gave each application 2GB of private memory to use—the same as Windows 95. On Windows CE, each application had just 32MB of private memory.

This kind of odd design made some sense for the embedded systems and range of processor architectures that Windows CE was aimed at. It let the operating system squeeze onto smaller machines and eke out extra performance when doing it. But it was also a design that meant Windows CE was forever going to be limited to a narrow niche; it's not a design that could ever run on the desktop or anywhere else.

With these three operating systems, Microsoft sorta kinda had a way of doing "Windows Everywhere"—albeit a disjointed version. Parts of Win32 were common to every operating system, and even though the NT-95-CE trio shared little or nothing under the hood, they were at least all "Windows" branded.

This trifurcated approach made sense at the time given the disparate needs and system requirements that Microsoft was trying to address: Windows NT was too big to go everywhere; Windows 95 (or the DOS it was compatible with) too tied to x86 processors; Windows CE too damn weird. Having a single operating system that could meet these diverse requirements simply wasn't viable.

Triple trouble

Having three separate solutions came at some cost. Obviously for Microsoft, there was a great cost in developing these operating systems in parallel, doing everything in triplicate. This might have been tolerable if it gave developers an identical platform to target—Microsoft's commitment to backwards compatibility has shown the company is willing to suffer a great deal of pain if it makes things easier for third-party developers—but in practice the company didn't even do that.

This is not to say that Windows 95 was not a tremendously important stepping stone toward enabling Windows NT to become Microsoft's primary desktop operating system. Additionally, Win32 certainly wouldn't have the huge uptake and wide variety of applications that now exist if it weren't for Windows 95. But the lack of, for example, proper security in Windows 95 meant that when Microsoft shipped Windows XP in 2001—finally, a version of Windows NT that was built for the mainstream consumer desktop—application compatibility took a hit. Windows 95 applications were Win32 applications, and Win32 applications ran on Windows XP... but Windows 95 applications expected to be able to scribble anywhere they liked on the hard disk. They expected to be able to monkey around with device drivers. They expected to be able to inspect and interfere with other programs running on the system. These things were prohibited in Windows XP.

Windows 95 applications also expected Win32 to have the same quirks and oddities on XP as it did on Windows 95. This often wasn't deliberate; it was just a consequence of the software being developed and tested on Windows 95. As such, XP almost accidentally grew to depend on the way Windows 95 did things. For many applications this wasn't a big deal, but for system utilities that depended on low-level functionality or games that were more concerned with going fast than using APIs in precisely the way they were supposed to be used, this caused compatibility issues.

As a result, in the early days of Windows XP's availability, many Windows users swore it off and insisted that they'd be sticking with Windows 98 forever and that Windows XP was a terrible mistake. For the most part these problems went away, and Windows XP grew to become very popular as developers updated their software to work correctly on the new operating system, but until that happened there were real costs to having these two separate, different versions of Win32.

Windows-esque... and not quite everywhere

Offering something similar to Win32 on each operating system was helpful, but it wasn't enough to tell developers that there was truly "Windows Everywhere" with a single development platform and API.

The same was true, and worse, for hardware companies. Although elements of driver development were common between Windows 95 and Windows NT (Microsoft introduced a thing called the Windows Driver Model, WDM, in Windows 98 and Windows 2000 that allowed some hardware such as USB devices to use one driver for both operating systems), large parts were different and incompatible. This issue became particularly acute with the release of Windows XP; old DOS drivers didn't work with XP at all, and even many Windows 95 drivers were incompatible. At its worst, switching to Windows XP meant abandoning a wide range of old but otherwise functional hardware.

Even with these hardware and software compatibility issues, those two operating systems were more successful than Windows CE. Windows 95 and Windows NT were similar enough in terms of user expectation and application design that their close-but-not-identical APIs enabled developers to write applications that ran on both platforms. Windows CE didn't even manage this much; although Microsoft attempted to make it similar to Win32, the differences, in terms of API support, hardware capability, and user interface, meant that it was rarely considered a part of the family. While developers could certainly use some of their existing Win32 knowledge, most programmers ignored it.

Windows 95 was only ever intended as a stopgap to ease the adoption of Windows NT on the desktop. And with the release of Windows XP, the trifurcated platform became merely bifurcated as NT and CE each catered to their different markets.