Selam,
CIL Java nin bytecode u gibi açık bir standartdır. Microsoft tekelinde de değildir. Bunun böyle olduğunu mono projesiyle geliştirilen CLR ın farklı bir versiyonunun da (Hem windows hem de değişik *nix lerde çalışan) varlığından da anlayabilirsiniz.
Javada bir derleyici ve bir runtime olmak üzere iki bileşen vardır. İçinde yerleşik bir kütüphane bulundurur. Derlenen kodlar bytecode a çevrilir ve runtime bu bytecodeu işlertir. Böylelikle runtime ı bir yere taşıdığınızda onun çalıştırdığı kodları da taşımış olursunuz (JNI kullanamdınızsa tabi, bunu kullanmadan da performans gerektiren yerleri yönetemiyorsunuz genelde).
.Net le gelen konsept de bunun aynısıdır neredeyse. CLR adlı environment, kodlarınızı derler ve CIL kodlara dönüştürür. Aynı environment bu kodları interpret de eder. CLR ı taşırsanız kodları da taşımış olursunuz. Kullandığınız bir kütüphane (java daki gibi) burada da var. Kütüphaneyi extend edebilirsiniz ama dikkat, javadaki problem burda da kendisini gösterir. Eğer uygulamalar windows API larına vs erişmişse bunu diğer sistemlere taşıyamazsınız. Belki de en değişik özelliği CTS dir. Değişik dillerde dağişken sınıfları ortak bir yöneticiden kullanmasıdır.
Bence sarsılmak yerine araştırmalı ve okumalısınız. Zira internette "birisinden duymak" tan çok öte yazılı kaynak mevcut. İyiliği kötülüğü performansı vs tartışılabilir lakin temelde olay budur.
Kolay gelsin,
EK: Mono ne alemde bu aralar diye sitesini inceliyordum ve ecma sitesinde yayınlanan temel standardın linkine rast geldim;
http://www.ecma-international.org/publi ... ma-335.htm