Firstly, People. Do. Not. Want. Metro. If Microsoft is truly interested in so-called universal apps ("so-called" because supporting a few versions of Windows is in no way universal....), they really need to have an option to run these at least in Windows 8 *outside* the Metro environment, and preferably a Windows 7 runtime. Why not? They will have to realize eventually, expecting people to build to a spec with *zero* backward compatibility, they just aren't going to do it.
Secondly.... I just can't believe how badly Microsoft screwed this up. .NET's original intention was just to claim portability to displace Java, but really make sure that other platforms are second-class citizens compared to Windows to drive users to Windows. Nevertheless, the language has a decent design, the API is pretty clean as long as you stick to the portable part. They have a not at all portable WinAPI, but recommend against using it unless you have to use it for something. Don't use WinAPI, and the same binary will in fact run on Windows, Mac, Linux and any other platform Mono is built for.
WHY... ****WHYYYYY****... did they not use .NET and CLR runtime to allow the same apps to run on Windows (Vista on up), the stupid tablet-on-desktop interface (Metro), Windows (Phone) and Windows (RT)? As long as your .NET app doesn't call WinAPI, it would already be portable. You'd spend like 30 seconds running it through Metro, Phone, and RT packagers (assuming they use different package formats) and a packager to build a Windows desktop installer if you don't want the user to just download and run your .exe directly, and you'd be done!