Linux has to many versions?
"Linux has TOO MANY 'versions', some wildly different!"
Uhm, yes, there are specialist versions of Linux, true. The Linux on your router is different to the one on your desktop... however you can easily write software which runs on all of them by just recompiling it. And that software would even work on a Linux Distribution from 1993 just as well as it does on todays systems, despite of potentially different hardware architectures and such.
Since you don't have package managers or full automated updates, even installations of one Windows version quickly diverge. And even on stock installations no two versions are alike. For example there is a whole separate set of versions for non-latin character sets. A feature which is implemented as a per user setting on most other platforms.
And even when you step back a bit, even the most basic APIs change. While you may still be able to port software from Win16 to Win32 and even Win64, .net is completely out of the question. And you cannot just choose one of them. While Win16 and Win32 can run on anything from Windows 3.1 (if you install Win32s), it won't run on Windows RT or Windows phone devices. (You could however port it to Windows CE).
"Android is made to run on *particular* hardware."
Yes and that is why Android development is so slow. The same is however also true for Windows phone or even Windows CE.