Microsoft's perverse compatibility strategy: Technology wins, users lose
You'd think that Windows users would happily keep up with the latest Windows versions, like Mac users do with OS X. One reason OS X users upgrade more, beyond having bought into Apple's "you get five years" implicit mandate, is that each version builds from the previous one. You don't have to relearn how to use OS X, even if you have to learn how to use new features. But you have to accept some apps or devices will no longer function -- which should be a barrier to upgrading.
Windows users face the opposite calculation: They can be darned sure their apps and hardware will still work, perhaps after a driver upgrade. But they typically have to relearn basic Windows functions. (Microsoft imposes the same trade-off for Office: Your files are compatible, but your UI is not.) What you get are inchworm upgrades: Users avoided the buggy Windows Millennium, Windows XP (until its early compatibility issues were worked out), the confusing Vista, and the confounding Windows 8. But they leapt into Windows 95, Windows 98, XP Service Pack 1, and Windows 7.
You can't say Windows users are averse to change -- just (rationally) to bad change. Because Microsoft can't tell the difference between good change and bad change, it forces its users to make that decision, and they've learned to do so cautiously and slowly, often by buying a new PC a year or two later.
Internet Explorer plus hacked-together apps and device drivers held back Windows
But there's much more to Microsoft's compatibility strategy that gets in the way of fast user upgrade adoption than favoring technical compatibility over user compatibility. This one is not entirely Microsoft's fault.
A common complaint in IT organizations is the use of apps that require a certain version of ActiveX or Internet Explorer to function. Microsoft does orphan IE to specific Windows versions, so if you need a certain version of IE to run a key custom or niche application, you literally cannot upgrade Windows. Many small and in-house developers wrote quick-and-dirty code for the then-current IE versions for such niche software, and they went out of business or decided that they or their customers wouldn't pay for the development to get new versions.
Java developers have done the same, of course, so you also hear IT complain that they can't run certain apps because they use an old Java runtime. Microsoft's attempt in the early 2000s to fork Java didn't help. It's clear that IT organizations didn't value cross-generational compatibility in their own work or from their suppliers, so they dug themselves a hole that has now swallowed Windows.
Remember: Microsoft's deal with IT has been compatibility, which has led Microsoft shops to stick with old Windows versions to avoid the costs of upgrading their apps and even some hardware devices to work with the newer Windows. Microsoft has accommodated that by letting enterprises run older versions of Windows when they get new licenses, such as when buying new PCs. Of course, to fulfill its compatibility promise, Microsoft had to make that allowance.
As a result, we now have a compatibility bramble that keeps big segments of the Windows user base stuck on specific Windows versions. Microsoft has no compatibility solution -- each version of IE is essentially a new product, with no guaranteed backward compatibility, and hacks like Windows 7's XP mode and IE's compatibility mode don't work well or easily.
Essentially, Microsoft has been unable to keep its compatibility promise in its software, creating this mess. Sloppy development practices by IT organizations and software vendors made situation worse. Yet the customer expectation of compatibility has only grown, ironically enough.
Microsoft's clean break didn't work
Although it may not seem that way sometimes from the outside, Microsoft has a lot of smart people working for it. The folks in Redmond know that Windows has become an unmanageable mess in need of a fresh start.
Windows 8 was supposed to be the transition to that fresh start: a mix of the old compatible Windows with a new Windows (aka Metro) that started clean. Apple had made its clean break with iOS, which had no compatibility with OS X, despite a common base. Microsoft, given its 30-year-old compatibility commitment, took the "two in one" transitional approach instead, which we now know is a big flop.