Paul Murphy write an article. It show up my primary main frustration on developping applications on Unix: complete lack of continuity in Windows OS. The monopolistic position of Windows allow them to force changes directly to their developpers, and a lot of the maintenance I have done for Windows applications was simply related to make things work in new version of Windows. And here, I'm not talking about supporting new features for a better integration, it simply to get the thing to compile again! Sometime, even just changing the language version of the underlying operating system can break things. Good Windows development included running your application on a dozen of different version of the operating system, just to get the Windows Ready logo. Some years ago, I even find that MS Office cannot be certified this way since to make it works, MS developers have to break with MS own guidelines!
In windows environment, to be sure to get your code compile again, you better conserve a copy of all your tools, including the full OS. Because old tools often doesn't work anymore in new version. Very hard then for a company to provide extended support. In FOSS, especially on very closed-to-the-bare-metal systems, it's a good practice too and necessary on some occasions. But there is most of the time a documented path for upgrading and the changes involved are often just some justified code cleanup adding often some value (like cleaner code, better error handling, more hardware support, new features) at the same time, without removing any functionnality to your code!
I simply hate maintaining Windows code. I'll never give any warranty for such code, even on the same platform. Most code in FOSS already run on multiple platforms, including for some non-Unix-like OS as MS Windows or IBM OS/2. And that's not counting on all the different architectures that *nix interfaces abstract for you most of the time.