
여러분의 PC를 보면 CPU가 있을 것이고 그 위에 운영체제가 설치 되어있을 것이다.
만일 여러분이 C/C++과 같은 언어로 프로그램을 작성한 다음 컴파일 하면 실행가능한 실행 파일. 즉, CPU가 이해하는 기계어 코드로 구성된 실행 파일이 나온다. 이런 실행 파일의 특징은 특정 CPU와 OS에서만 동작하는 실행파일이다.
다른 환경에서 사용하려면 다시 컴파일 하거나 소스 코드 자체를 다시 작성해야 한다.
C#의 경우에는 C# 컴파일러로 컴파일하고 나면 CPU와 OS에 독립적인 기계어 코드가 생성된다. 이것을 중간언어, IL(Intermedidate Language)이라고 한다. 옛날에는 MS에서 나온 IL이라고 MSIL고 많이 불렀는데 요즘은 Common Intermediate Language, CIL 이라고 한다.

이 중간 언어는 CPU가 바로 해석 할 수 있는 것이 아니라 "가상 머신"이라는 것이 CPU가 이해 할 수 있도록 해석해준다. 이런 구조의 장점은 CPU와 OS에 독립적으로 프로그래밍 할 수 있다는 것이다. 우리가 플랫폼 독립적으로 개발한 프로그램을 각 플랫폼에 맞는 가상 머신, 예를 들어 윈도우용 가상머신, 리눅스용 가상머신을 사용하면 어디에서든지 실행이 가능하다는 것이다.
게다가 C#만 IL 코드를 만들 수 있는 것이 아니다., C++로 프로그램을 작성하더라도 일반 컴파일러가 아닌 .NET C++ 컴파일러를 이용하면 IL을 만들어 준다. 심지어 VB도 IL로 만들 수 있다.
여러분은 IL언어로 만들어진 프로그램을 만들기 위해서 굳이 C#만 사용할 필요가 없고 C++, VB등 컴파일러가 지원만 한다면 어떤 언어든 사용 할 수 있다.
이 가상머신의 이름을 "CLR(Common Language Runtime)"이라고 한다.