# Common Language Infrastructure

Il Common Language Infrastructure (CLI), in italiano "infrastruttura del linguaggio comune", è una specifica aperta sviluppata da Microsoft, che descrive il codice eseguibile e l'ambiente di esecuzione che costituisce il cuore del framework .NET. La specifica definisce un ambiente che permette a più linguaggi ad alto livello di essere utilizzati su differenti piattaforme senza la necessità di essere riscritti per specifiche architetture hardware o software.

## Specifica

Il CLI è solo una specifica e non una implementazione, ed è spesso confusa con il Common Language Runtime che contiene caratteristiche non incluse nella specifica.
La specifica CLI è divisa in quattro parti:
* Il Common Type System o CTS: un insieme di tipi di dato e di operazioni su di essi.
* I Metadata: le informazioni sulla struttura del programma. Esse sono indipendenti dal linguaggio di partenza per permettere a programmi scritti in linguaggi differenti di comunicare tra loro.
* La Common Language Specification o CLS.
* Il Virtual Execution System o VES: il sistema che esegue i programmi CLI.
La compilazione di un programma in linguaggio .NET compatibile viene tradotto in istruzioni di tipo Common Intermediate Language (CIL), un linguaggio intermedio indipendente dalla piattaforma. Per eseguire un programma in linguaggio CIL, un VES specifico per la piattaforma traduce le istruzioni CIL in linguaggio macchina, un linguaggio direttamente comprensibile dal processore della piattaforma, che è così in grado di eseguire le istruzioni.

## Standardizzazione e licenza

Nell'agosto del 2000, Microsoft, Hewlett-Packard, Intel e altri lavorarono per standardizzare il CLI. Nel dicembre del 2001 lo standard fu ratificato dall'ECMA, e nell'aprile del 2003 è diventato uno standard ISO.
Mentre Microsoft e i suoi partner detengono i brevetti per il CLI, sia l'ECMA che l'ISO richiedono che tutti i brevetti essenziali per l'implementazione devono essere disponibili sotto termini "ragionevoli e non discriminatori" (RAND). Nel 2009 le aziende coinvolte si sono invece trovate d'accordo di rendere i brevetti disponibili sotto termini liberi da royalties o altrimenti di tipo RAND. L'accordo è detto Microsoft Open Specification Promise, e stabilisce che Microsoft e i suoi partner non perseguiranno legalmente coloro che realizzeranno una personale implementazione delle specifiche dello standard CLI (coperto da brevetto). Coloro che desiderano realizzare una propria implementazione delle specifiche CLI, hanno il permesso di estendere lo standard, tramite nuovi metodi, nuovi tipi per classi e nuovi namespace, ma non possono aggiungere o definire nuove interface.
Nel 2012, è stata pubblicata la nuova edizione dello standard CLI, ma questa nuova versione non è stata coperta dall'accordo Microsoft Open Specification Promise.

## Implementazioni

* Microsoft .NET è l'implementazione commerciale della Microsoft, che contiene anche un'ampia collezione di risorse, librerie e strumenti di sviluppo.
* Shared Source Common Language Infrastructure è una implementazione di riferimento della Microsoft disponibile sotto una licenza di tipo Shared source.
* Mono è una implementazione open source e multipiattaforma sponsorizzata da Novell.
* Portable.NET, parte del progetto dotGNU, è un'altra implementazione open source.