Please see my comment to the question. It's wonderful how the concept of language barrier could appear. Having something which does not have language compatibility is a huge misconception, but it is stemmed from the facts of real life. It looks like originally all platforms were intended to be language independent; as the opposite situation looks hostile and impractical. The platform, the facilities used to load and link modules (I don't say "compile") should be unified so the modules written in different language (call them "object" or "executable" — it depends on the architecture) could be able to work together. This is nearly the case, but with a lot of limitations in Linux and many other platforms, but especially in Windows. I personally was often responsible for binding any language and with any other, but it came for price. Not that anyone specifically wanted such disruption. Rather, this is the result of the struggle between different parties and narrow interests, multiplied by weak and not very wise standards for object/executable, and linking, etc. This process is very complex; following a the structures, rules and layouts of one language would dramatically limit the capabilities of some other and prevent development of new ideas.
So, the language compatibility is rather a natural feature of any platform, and the limitation of such compatibility is a matter of understanding, and is something which is not easy to understand well.
As to .NET in this respect, this is rather a more but a successful attempt not to invent something new, but to restore the natural order. The platform is language independent just because the language activity around this platform is done in a
platform-centric way. Important role plays the open character of the platform and publication of the platform and language standards, submitted and established by ECMA and later ISO. Technological approaches of CLI highly promote such unification. It makes most CLI languages very similar in their nature, but not quite: for example, F# uses a very different paradigm of functional programming.
The further detail can be understood from this reading:
http://en.wikipedia.org/wiki/Common_Language_Infrastructure[
^],
http://www.ecma-international.org/publications/standards/Ecma-335.htm[
^],
http://en.wikipedia.org/wiki/Common_Language_Runtime[
^],
http://en.wikipedia.org/wiki/Common_Intermediate_Language[
^],
http://en.wikipedia.org/wiki/.NET_Framework[
^].
See also:
http://en.wikipedia.org/wiki/Programming_paradigm[
^],
http://en.wikipedia.org/wiki/Imperative_programming[
^],
http://en.wikipedia.org/wiki/Object-oriented_programming[
^],
http://en.wikipedia.org/wiki/Functional_programming[
^];
http://en.wikipedia.org/wiki/C_Sharp_%28programming_language%29[
^],
http://en.wikipedia.org/wiki/C%2B%2B/CLI[
^],
http://en.wikipedia.org/wiki/F_Sharp_%28programming_language%29[
^].
—SA