Precisely. Any language which forces you to code to a specific machine without offering substantial performance benefits* in return is not really apropriate for any use after, say, 1975. By the 1970s, C had emerged as a viable way to write programs that you could reasonably expect to compile and run on any of a class of relatively diverse machines. Serious programming, especially in the realm of OSes, would never be the same.
*Yes, I do program assembly. I have a few x86 machines I code assembly for (between cussing out Intel) and a relatively good System/360 emulator I code assembly for (and no, it doesn’t require traditional JCL :)). It’s fun, it can gain me a bunch of bytes/clock cycles over trusting gcc, and it keeps my low-level skills sharp.
It’s a start, but it is a long way off from being universal.
Microsoft can change .Net/c#/MSIL/etc whenever it wants, to the benfit of Windows and the detriment of everything else. With Java, although Sun used to be able to change it at will, this hasn’t been true for a number of years (every change has to go through the JCP).
I don’t think that’s correct. The CLI (a.k.a. CLR) and C# have been standardized by ECMA and ISO/IEC. I suppose Microsoft could put proprietary extensions in their own compiler, but every compiler vendor already does that with C++.