/ˈsɪl/ or /ˌsiː-aɪ-ˈɛl/
n. “The common language spoken inside .NET before it becomes machine code.”
CIL, short for Common Intermediate Language, is the low-level, platform-neutral instruction set used by the .NET ecosystem. It sits between high-level source code and native machine instructions, acting as the universal format understood by the CLR.
When you write code in a .NET language such as C#, F#, or Visual Basic, the compiler does not produce CPU-specific binaries. Instead, it emits CIL along with metadata describing types, methods, and dependencies. This compiled output is packaged into assemblies, typically with .dll or .exe extensions.
CIL is deliberately abstract. Its instructions describe operations like loading values onto a stack, calling methods, branching, and manipulating objects, without assuming anything about the underlying hardware. This abstraction allows the same assembly to run unchanged on different operating systems and CPU architectures.
At runtime, the CLR reads the CIL, verifies it for safety and correctness, and then translates it into native machine code using JIT (just-in-time compilation). Frequently executed paths may be aggressively optimized, while rarely used code can remain in its intermediate form until needed.
Historically, CIL was often referred to as MSIL (Microsoft Intermediate Language). The newer name reflects its role as a standardized, language-neutral component rather than a Microsoft-only implementation detail.
One of CIL’s quiet superpowers is interoperability. Because all .NET languages compile to the same intermediate representation, they can freely call into one another, share libraries, and coexist within the same application domain. From the runtime’s perspective, everything speaks the same instruction dialect.
In essence, CIL is not meant to be written by humans, but it defines the contract between compilers and the runtime. It is the calm, precise middle layer that makes the .NET promise possible… many languages, one execution engine, and a single shared understanding of how code should behave.