"OK also zusammen gefasst kann man sagen, das in netframe diese ganzen sachen (Klassenbibliotheken, Programmierschnittstellen und Dienstprogrammen) hinterlegt sind, damit man nicht alles immer wieder schreiben muss."
Das gilt für jede Sprache. Jede bringt Schnittstellen etc. mit.
Das .NET Framework ist nur ein Framework. Es stellt die erwähnten Klassenbibliotheken etc. zu Verfügung. Zu diesem Umfang geht eben auch die CLR. Damit der Zwischencode durch die Laufzeitumgebung verwendet werden kann, muss er zuerst interpretiert werden (siehe
Interpreter der erste Satz sagt alles, wobei statt Quellcode bei .NET der Zwischencode verwendet wird). Daher ist "nur" das CLR die Laufzeitumgebung, was jedoch Teil des Frameworks ist.
dotGNU ist von der FSF, Mono ist für viele Betriebssysteme verfügbar. Aber das sind nicht Compiler, sondern Nachbauten des kompletten .NET Frameworks.
"Kann die Vm nicht auf der Vm auch maschienencode zum laufen bringen ähnlich wie bei c++ ?"
Das Ziel der VM ist die Interpretierung des Zwischencodes und anschließende Kompilierung in die Maschinensprache. Nur dazu und zu nichts anderem ist sie fähig. Die Arbeitsweise unterscheidet sich grundlegend von C++. Dazu ist die Just-in-Time Kompilierung (JIT) anzumerken, die ein wichtiger Punkt für diese VMs sind.