MSIL ("Microsoft Intermediate Language") es al lenguaje intermedio al que es convertido todo código fuente escrito para ambientes .Net, esto dista en grandes proporciones al proceso típico de compilación para código fuente, que por lo general produce ejecutables aptos únicamente para determinada plataforma.
Vale mencionar que este mismo mecanismo de utilizar un lenguaje intermedio (byte-code) es el que también utiliza la plataforma Java para otorgar su tan afamada interoperabilidad y poder ejecutar componentes - independientemente de donde hayan sido creados - en diversos ambientes como Linux , Windows, PDA's y dispositivos inalámbricos .
Ahora bien, en este sentido de interoperabilidad la plataforma .Net aun no es tan avanzada, puesto que los ambientes de ejecución (".Net Runtime") en su mayoría existen para sistemas Windows, no obstante, ya se han iniciado trabajos sobre implementaciones .Net Open-Source que en un futuro permitirán la ejecución de componentes en sistemas operativos como Linux y otras versiones de Unix.
En lo que a interoperabilidad de lenguajes se refiere, .Net ya ofrece una implementación real que facilita generar sus componentes a través de lenguajes de antaño como Java, C++ o Visual Basic. Lo anterior no sólo agiliza el proceso de aprendizaje para programadores con experiencia en otras plataformas, sino además, otorga la posibilidad que componentes escritos en determinado lenguaje interoperen con otros escritos en distintos lenguajes, lo cual nos puede llevar a una pregunta como la siguiente : Como es que un componente escrito en C++ sea interoperable con uno escrito en Java ?
La respuesta sencilla a la pregunta anterior es obviamente el lenguaje intermedio MSIL ("Microsoft Intermediate Language"), sin embargo, el proceso por el que pasa todo código fuente escrito en determinado lenguaje para ser llevado a MSIL tiene sus raíces en otro concepto denominado "Foundation Class Library" o clases base.
A través de estas clases base o "Foundation Class Library" se uniformiza la serie de mecanismos disponibles para la plataforma .Net, ya que define los estándares sobre los cuales se deben escribir sus diversos componentes. Por ilustrar este concepto de manera practica, una de las clases definidas en el "Foundation Class Library" es llamada System.Xml
la cual posee una serie de funciones predefinidas que le permiten interactuar directamente con elementos XML , el detalle se encuentra en que es sobre estas mismas definiciones a las que se debe apegar todo código independientemente del lenguaje en el que sea escrito.
Lo anterior implica que las estructuras sobre las cuales trabaja un programador escribiendo en C# son muy similares a las que utilizará uno en J# u otro en Visual Basic.Net, con la clara distinción que la lógica de negocios será escrita en el lenguaje en el que se tenga más experiencia.
Hoy en día, ya existen varias herramientas/compiladores para diversos lenguajes que implementan estas clases base o "Foundation Class Library", en su mayoría para el lenguaje más reciente de Microsoft : C#, al igual que otros como J# (Implementación .Net para Java), Visual Basic.Net (Encarnación .Net de Visual Basic) e inclusive hasta Delphi y COBOL entre otros, los cuales le permitirán crear sus componentes .Net utilizando el lenguaje de su elección.