Wspólna infrastruktura językowa (CLI) to zestaw międzynarodowych standardów technicznych promujących interoperacyjność języków programowania komputerów. CLI pozwala również wielu językom wysokiego poziomu na tworzenie aplikacji, które są niezależne od platform i architektur. Istnieje ponad 30 języków programowania zgrupowanych w tym celu i wykorzystujących cztery działy specyfikacji programowania wspólnego języka, aby uzyskać zgodność z CLI.
Wykorzystanie tak zwanego wspólnego systemu typów (CTS), przy użyciu zestawu typów danych i operacji oraz informacji o metadanych dotyczących struktur programistycznych, umożliwia pisanie kodu w wielu językach. CLI kompiluje języki do wspólnego języka pośredniego (CIL), a z CIL przekazuje aspekty aplikacji do języka maszynowego asemblera, który dotyczy sprzętu. Ponadto istnieją wspólne specyfikacje językowe (CLS), które są podstawowymi regułami ustawionymi do użytku przez dowolny język poszukujący współdziałania, oraz wirtualny system wykonawczy (VES) do ładowania, wykonywania i generowania kodów uruchamiania dla wszystkich programów zgodnych z CLI .
Większość języków zgodnych z CLI kompiluje się bezpośrednio do CIL przy użyciu środowiska uruchomieniowego języka wspólnego (CLR). Po skompilowaniu i zbuforowaniu w pamięci podręcznej kompilator just-in-time przywłaszcza kod maszynowy z istniejącej architektury. Konstrukcja kodu maszyny montażowej może być również skonstruowana przed CLR za pomocą kompilatora wyprzedzającego czas.
Aby języki zgodne z CLI korzystały ze specyfiki obiektów, wspólna infrastruktura językowa określa, że obiekty podczas wywoływania muszą ujawniać tylko te funkcje, które posiadają wspólne z innymi językami zgodnymi z interfejsem CLI. Komponenty kodu opracowane do używania tylko typów danych akceptowanych w CTS są uważane za zgodne z CLI i dostępne dla wszystkich innych języków zgodnych z CLI. Ponadto każda konstrukcja języka, której nie można szybko zweryfikować przez bezpieczeństwo typów kodu, jest wykluczona z CLS, tak więc tylko weryfikowalne kody można uznać za zgodne z CLS.
Niektóre funkcje programistyczne są wspólne zarówno dla kompilatorów, jak i programistów, a inne są dostępne tylko dla kompilatorów. Lista jest długa i pełna przydatnych funkcji. Funkcja dostępna tylko dla kompilatorów to: słowa kluczowe, które dostarczają identyfikatory odwołań i mogą zastępować metody wirtualne nazwami będącymi słowami kluczowymi. Funkcja dostępna zarówno dla kompilatorów, jak i programistów obejmuje: funkcje modyfikatorów, które mówią, że właściwość oraz jej oceniający muszą być „statyczne”, wszystkie muszą być „wirtualne”, wszystkie muszą być „instancjami”.
Programy wdrożeniowe są przeznaczone dla komputerów stacjonarnych, serwerów, urządzeń mobilnych i konsol do gier. Programy poprawiające widzenie komputerowe i zestawy narzędzi maszyn wirtualnych niskiego poziomu są również opracowywane z języków zgodnych ze wspólną infrastrukturą językową. Środowiska wykonawcze infrastruktury wspólnego języka efektywnie przydzielają zasoby systemowe i wywołują urządzenia peryferyjne, chociaż są one niezależne od platformy.