
La infraestructura de lenguaje comรบn (en inglรฉs Common Language Infrastructure o CLI) es una especificaciรณn estandarizada que describe un entorno virtual para la ejecuciรณn de aplicaciones, cuya principal caracterรญstica es la de permitir que aplicaciones escritas en distintos lenguajes de alto nivel puedan luego ejecutarse en mรบltiples plataformas tanto de hardware como de software sin necesidad de reescribir o recompilar su cรณdigo fuente.
Si bien el CLI tuvo sus orรญgenes en Microsoft (en principio se pensaba desarrollar un entorno de ejecuciรณn compartido para COM con el nombre de Common Object Runtime, que luego se extendiรณ y generalizรณ para dar lugar a CLI), sus especificaciones fueron llevadas ante ECMA (European Computer Manufacturers Association), una importante organizaciรณn europea de estรกndares, para su estandarizaciรณn en el aรฑo 2000. Tras un aรฑo de trabajo conjunto entre ECMA, Microsoft y otras empresas que copatrocinaron el proceso (Intel, HP, IBM y Fujitsu entre otras), el estรกndar ECMA-335 que define el entorno CLI finalmente vio la luz en diciembre de 2001. En abril del aรฑo 2003 ISO ratificรณ este estรกndar con la denominaciรณn ISO/IEC 23271:2003 .
Para comprender mejor la inclusiรณn de cada una de las partes principales de la arquitectura de CLI es interesante analizar los objetivos de diseรฑo que se plantearon desde su concepciรณn. Segรบn su especificaciรณn, la arquitectura de CLI debe:
- Permitir escribir componentes interoperables independientemente de la plataforma subyacente y del lenguaje de programaciรณn utilizado.
- Exponer todas las entidades programรกticas a travรฉs de un รบnico sistema unificado de tipos (en la especificaciรณn, este sistema es conocido como CTS, o Common Type System).
- Empaquetar todos los tipos en unidades completamente autodescriptivas y portables.
- Cargar los tipos de forma tal que se encuentren aislados unos de otros en tiempo de ejecuciรณn, pero que puedan a su vez compartir recursos.
- Resolver dependencias entre tipos en tiempo de ejecuciรณn usando una polรญtica flexible que pueda tener en cuenta la versiรณn, atributos de localizaciรณn y polรญticas administrativas.
- Ejecutar aplicaciones bajo la supervisiรณn de un entorno privilegiado que permita controlar y hacer cumplir polรญticas en tiempo de ejecuciรณn.
- Diseรฑar toda la infraestructura y servicios basรกndose en metadatos extensibles, de manera tal que toda la arquitectura pueda acomodarse con poco impacto a nuevas incorporaciones y cambios.
- Poder realizar tareas de bajo nivel, como carga de tipos en memoria, enlace con librerรญas y compilaciรณn a cรณdigo nativo sรณlo cuando sea necesario (este enfoque se conoce tรญpicamente como โon demandโ, o โjust in timeโ).
- Proveer una serie de funcionalidades comunes mediante un grupo de librerรญas de programaciรณn que los desarrolladores puedan utilizar para construir sus aplicaciones.
Microsoft .NET de hecho es un superconjunto de esta especificaciรณn, es decir, provee todo lo necesario para cumplir con la misma y ademรกs agrega una serie de herramientas, librerรญas y funcionalidades no contempladas por ella originalmente y que proveen una enorme utilidad y flexibilidad a los desarrolladores (por ejemplo, librerรญas para la creaciรณn de aplicaciones y servicios web, acceso a motores de bases de datos, controles grรกficos, herramientas para desensamblar assemblies, debuggers, etc.). Si bien es gratuito, su cรณdigo fuente no es abierto, y es distribuido por Microsoft en versiones para sistemas operativos Windows 98 y sus sucesores รบnicamente.
La especificaciรณn del CLI estรก formada por cuatro partes:
- Sistema comรบn de tipos, en inglรฉs Common Type System (CTS).
- Metadatos.
- Especificaciones de lenguaje comรบn, en inglรฉs Common Language Specification (CLS).
- Sistema de ejecuciรณn virtual, del inglรฉs Virtual Execution System (VES).








