Lesson 1 of 11 in the free .NET Internals — CLR, CTS, CLS, IL, JIT, Memory Management & Garbage Collection course on DevLadder.
| .NET Framework | .NET Core 1–3.1 | .NET 5+ | |
|---|---|---|---|
| Years | 2002–2019 (4.8.1 in 2022) | 2016–2019 | 2020 → |
| OS | Windows only | Windows, Linux, macOS | Windows, Linux, macOS, mobile (MAUI), WebAssembly |
| Source | Closed (reference source available) | Open source (MIT) | Open source |
| Deployment | Machine-wide install, part of Windows | Side-by-side, self-contained possible | Same + single-file, Native AOT |
| Web | ASP.NET Web Forms, MVC 5, Web API 2 | ASP.NET Core | ASP.NET Core |
| Performance | Good | Much faster | Fastest; improves every release |
| Status | Maintenance only | Out of support | Active |
Mono (2004, open source, by Ximian → Xamarin → Microsoft) ran .NET on Linux/macOS/mobile and powers Unity and Xamarin; today its runtime is used inside .NET for mobile and WebAssembly.
Interview tip: "Why did they skip .NET 4?" — to avoid confusion with .NET Framework 4.x; .NET 5 dropped "Core" from the name because it became the .NET going forward.
Interview questions on .NET Internals
What is the CLR and what does it do?
The Common Language Runtime is .NET's execution engine. It loads assemblies, verifies type safety, JIT-compiles IL to native code, manages memory with the garbage collector, handles exceptions, threads and synchronisation, provides interop with native code and exposes debugging/profiling services. Code running under it is "managed code".
What are CTS and CLS?
CTS (Common Type System) defines how types are declared and used in .NET — value vs reference types, inheritance, members, visibility — so all languages share one type system (C# int = VB.NET Integer = System.Int32). CLS (Common Language Specification) is a subset of CTS rules that every .NET language supports, so a CLS-compliant library can be used from any language (e.g. avoid public unsigned types or names differing only in case).
What is IL (MSIL/CIL) and what does the JIT do?
IL is the CPU-independent, stack-based intermediate code the C#/VB.NET compilers produce, stored with metadata in assemblies. At runtime the JIT compiles each method's IL to native machine code on its first call, optimised for the actual CPU; tiered compilation starts with quick code and re-compiles hot methods with full optimisation. ReadyToRun and Native AOT precompile to reduce startup time.
Read the full lesson with progress tracking and the rest of the course on DevLadder — free step-by-step tutorials and interview questions for developers.
Next in the course: CLR, CTS, CLS — what each one does →


