Die Common Language Runtime (CLR) ist die verwaltete Ausführungsumgebung der .NET-Plattform und das Herzstück aller .NET-Programme. Sie führt nicht direkt nativen Maschinencode aus, sondern Code in der sprachneutralen Common Intermediate Language (CIL), den sie zur Laufzeit per Just-in-Time-Compiler (JIT) in plattformspezifischen Maschinencode übersetzt. Damit ist die CLR die konkrete Implementierung der von Microsoft, HP und Intel als ECMA-335 standardisierten Common Language Infrastructure (CLI).
Eingesetzt wird die CLR in jedem .NET-Programm, vom Konsolen-Tool über ASP.NET-Core-Webanwendungen bis hin zu Azure Functions und Container-Workloads. Sie übernimmt zentrale Aufgaben: das Laden und Verifizieren von Assemblies, die JIT-Kompilierung, automatische Speicherverwaltung über den Garbage Collector, Typüberprüfung und Type Safety, Ausnahmebehandlung über Sprachgrenzen hinweg, Threading- und Synchronisationsprimitiven, ein einheitliches Sicherheitsmodell sowie Interop-Mechanismen zu nativem Code (P/Invoke, COM-Interop).
Der Einsatzzweck der CLR ist es, viele über Jahrzehnte mit C/C++ verbundene Probleme strukturell zu beseitigen: undefiniertes Verhalten durch ungültige Pointer, manuelles malloc/free-Memory-Management, fehlende Typsicherheit zwischen Sprachen und inkompatible Ausnahmemodelle. Stattdessen liefert sie ein einheitliches Common Type System (CTS), in dem Sprachen wie C#, F# und VB.NET dieselben Datentypen, Vererbungsregeln und Aufrufkonventionen teilen — ein .NET-Objekt aus C# kann ohne Marshalling direkt in F# verwendet werden.
Historisch ist die CLR mit dem .NET Framework 1.0 im Jahr 2002 erschienen, mit großen Sprüngen in der CLR 2.0 (Generics, 2005) und CLR 4.0 (parallele Laufzeit, 2010). Mit .NET Core wurde die Architektur als CoreCLR neu aufgesetzt, plattformübergreifend ausgelegt und auf GitHub veröffentlicht; CoreCLR ist seit der Vereinheitlichung ab .NET 5 die einzige aktiv weiterentwickelte CLR-Implementierung im Microsoft-Stack.
Eingeführt und maßgeblich geprägt wurde die CLR von Microsoft Research und der CLR-Architekturgruppe um Patrick Dussud (Garbage Collector), Jan Kotas und in Sprachfragen von Anders Hejlsberg. Patrick Dussud, der ‚Vater' des .NET-Garbage-Collectors, hatte zuvor an Garbage Collectors für Lisp- und Common-Lisp-Implementierungen gearbeitet — viele Designentscheidungen der CLR (Generations, Compacting GC) sind unmittelbar von Erkenntnissen aus der Lisp-Welt geprägt und zeigen, wie tief funktionale und akademische Sprachforschung in eine vermeintlich rein industrielle Plattform eingeflossen ist.