Eu vi essa imagem legal aqui . Aprendi que todos os compiladores que suportam a linguagem .net convertem o código-fonte em CILformato. Agora, a Microsoft nunca está trazendo .NETpara todo o sistema operacional escrevendo um CLR para todos os sistemas operacionais. Então, por que manter um formato de código intermediário e um CLR para executar esse CIL. Isso não é uma dor de cabeça para lidar. Por que a Microsoft escolheu ser assim?
EDITAR Essa arquitetura meio tem seu preço. Isso reduzirá o desempenho, não é? O Java faz isso para manter a independência da plataforma, por que motivo o .NET faz isso? Por que não manter um C simples e simples como o compilador? De qualquer maneira, também será necessário um compilador para converter o código em CIL, se eu precisar adicionar um novo idioma, a única diferença que ele faria é o idioma de destino. Tat é tudo.