Ich hatte kürzlich das Glück, mit Chris Bacon zu chatten, der DotNetAnywhere (eine alternative Version von .NET Runtime) schrieb, und ich bemerkte witzig:
... Sie sind wahrscheinlich einer der wenigen, die ihre eigene .NET-Laufzeit erstellt haben, was großartig ist!
wenn wir diejenigen auf einem Gehalt ausschließen, d.h. Microsoft / Mono / Xamarin-Ingenieure, es gibt nur sehr wenige von ihnen.

Dies ist eine Übersetzung von Matt Warren ( Eine Geschichte von .NET Runtimes ). Um nicht erneut zu veröffentlichen, werde ich so lassen, wie es ist
Und dann dachte ich: Wie viele .NET-Laufzeiten gibt es insgesamt? Zuerst habe ich meine eigene Liste erstellt und dann ein Team hochbezahlter Forscher - meine Abonnenten - mit diesem Fall verbunden:
Für diesen Beitrag meine ich mit der .NET-Laufzeit alles, was auf der Basis des ECMA-335-Standards für .NET implementiert ist (weitere Informationen finden Sie hier ). Ich weiß nicht, ob es eine genauere Definition oder eine Möglichkeit gibt, die Konformität offiziell zu bestätigen. In der Praxis bedeutet dies jedoch, dass die Laufzeit exe / dll .NET-Dateien unterstützt, die von einem C # / F # / VB.NET-Compiler erstellt wurden.
Sobald die Liste fertig war, stieg ich in Wikipedia ein (siehe Quellenliste). Das Ergebnis ist die folgende chronologische Reihenfolge:

Timeline-Hersteller
(Für die interaktive Version folgen Sie dem Link)
Wenn ich eine Laufzeit verpasst habe, lass es mich wissen.
Um die Wahrnehmung der Chronologie zu erleichtern, habe ich jedes Medium in eine der folgenden Kategorien eingeordnet:
- Microsoft .NET-Frameworks
- Andere Microsoft Runtimes
- Mono / Xamarin-Laufzeiten
- AOT-Kompilierungslaufzeiten
- Gemeinschaftsprojekte
- Forschungsprojekte
Der Rest des Beitrags ist einer detaillierten Beschreibung der verschiedenen Laufzeiten gewidmet. Warum sie erschienen sind, was sie können und warum man sie vergleicht.
Microsoft .NET-Frameworks
Microsofts ursprüngliches .NET Framework erschien Ende der 90er Jahre und ist seitdem erst effizienter geworden. Vor kurzem hat das Unternehmen seinen Kurs etwas geändert, indem es die Veröffentlichung des .NET Core-Frameworks angekündigt hat, das sich durch plattformübergreifenden und Open Source-Code auszeichnet. Darüber hinaus hat Microsoft durch die Entwicklung der .NET-Standardspezifikation Interoperabilität in Laufzeitumgebungen bereitgestellt.
Die .NET-Standardspezifikation bietet Codefreigabe. Es definiert die APIs, die in allen .NET-Implementierungen verfügbar sein sollten, um dem Standard zu entsprechen. Dies stellt die Einheitlichkeit aller .NET-Laufzeiten sicher und verhindert eine zukünftige Fragmentierung.
Ein kleiner Exkurs: Wenn Sie mehr über die Geschichte von .NET erfahren möchten, empfehle ich, Anders Halesberg zuzuhören oder eine Rede von Richard Campbell zu sehen - dies ist ein wirklich cooler Geschichtenerzähler.
(Ein Podcast ist ebenfalls verfügbar . Darüber hinaus schreibt Campbell ein Buch zum gleichen Thema . Wenn Sie mehr über den Entwicklungsverlauf des gesamten .NET-Ökosystems und nicht nur über Laufzeiten erfahren möchten, lesen Sie die Seite Legends of .NET. )
Andere Microsoft Runtimes
Neben dem .NET Framework für die breite Verwendung hat Microsoft weitere Versionen der Umgebung für spezielle Zwecke veröffentlicht.
.NET Compact Framework
Die Frameworks Compact (.NET CF) und Micro (.NET MF) waren Versuche, kürzere Laufzeitversionen für Geräte mit begrenzten Ressourcen zu erstellen. Beispiel: .NET CF:
... für mobile oder eingebettete Geräte mit einer begrenzten Anzahl von Ressourcen wie PDAs, Mobiltelefonen, industriellen Controllern, Set-Top-Boxen usw. entwickelt. Das .NET Compact-Framework verwendet einige der Bibliotheken derselben Klasse wie die Vollversion von .NET sowie mehrere Bibliotheken, die speziell für mobile Geräte erstellt wurden, z. B. .NET Compact-Steuerelemente. Bibliotheken sind jedoch keine exakte Kopie der in .NET Framework verwendeten. Sie werden reduziert, um weniger Platz zu beanspruchen.
.NET Micro Framework
Das .NET MF-Framework ist noch kleiner und:
... ist für Geräte mit einer begrenzten Anzahl von Ressourcen vorgesehen, die über mindestens 256 KB Speicher und 64 KB RAM verfügen. Es enthält eine reduzierte Version der .NET CLR und unterstützt die Entwicklung von C # und Visual Basic .NET sowie das Debuggen (in Emulator oder Hardware) mit Microsoft Visual Studio. NETMF implementiert eine Reihe von .NET-Basisbibliotheken (ca. 70 Klassen und 420 Methoden). Spezielle Bibliotheken für eingebettete Anwendungen wurden hinzugefügt. Dies ist kostenlose Open Source-Software, die unter der Apache License 2.0 veröffentlicht wurde.
Für diejenigen, die das Framework in Aktion ausprobieren möchten, hat Scott Hanselman einen hervorragenden Leitfaden für das .NET Micro Framework - Hardware für Software-Benutzer geschrieben .
Silverlight
Trotz der Tatsache, dass sich die Plattform im Support-Modus befindet (oder sich je nach Sichtweise sogar tot / in Richtung Sonnenuntergang bewegt), ist es interessant, zur ursprünglichen Ankündigung zurückzukehren und zu sehen, wofür Silverlight gedacht ist:
Silverlight ist ein plattformübergreifendes, browserübergreifendes NET-basiertes Erweiterungsmodul, mit dem umfangreiche Internetanwendungen für Browser erstellt werden können. Diese Woche veröffentlichte Pre-Builds unterstützen Firefox, IE und Safari auf Mac und Windows.
Im Jahr 2007 implementierte Silverlight 1.0 die folgenden Funktionen (die Plattform funktionierte sogar unter Linux):
- Unterstützung für integrierte Codecs zum Abspielen von VC-1- und WMV-Videodateien sowie Audiodateien im MP3- und WMA-Format in einem Browser ...;
- Silverlight unterstützt die Möglichkeit, Medieninhalte schrittweise von jedem Webserver herunterzuladen und abzuspielen ...;
- Silverlight unterstützt optional auch integriertes Media-Streaming ...;
- Mit Silverlight können Sie multifunktionale Benutzeroberflächen und Animationen erstellen, Vektorgrafiken und HTML kombinieren, um attraktive Inhalte zu erstellen ...;
- Mit Silverlight können Sie ganz einfach umfangreiche interaktive Videoinhalte erstellen ...
Wie in den Kommentaren vorgeschlagen, war Silverlight auch auf dem Symbian S60
Mono / Xamarin-Laufzeiten
Mono erschien als Ergebnis von Versuchen von Miguel de Icaz und anderen Entwicklern, .NET dazu zu bringen, unter Linux zu arbeiten (aus der frühen Geschichte von Mono ):
Es ist mir egal, wer der Erste war, denn ich denke, Mono ist ein Mittel zum Zweck: eine Technologie, die Linux hilft, auf Desktop-Computern Fuß zu fassen.
Der gleiche Beitrag beschreibt, wie alles begann:
Was Mono betrifft, so ereigneten sich die Ereignisse ungefähr wie folgt.
Sobald die .NET-Dokumentation im Dezember 2000 veröffentlicht wurde, interessierte ich mich für diese Technologie und begann, sie wie alle anderen vom Bytecode-Interpreter aus zu studieren. Ich stieß jedoch bald auf ein Problem - das Fehlen von Spezifikationen für Metadaten .
Die letzten Änderungen in den frühen Quellen für virtuelle Maschinen wurden am 22. Januar 2001 veröffentlicht. Ungefähr zu dieser Zeit begann ich, Nachrichten über die .NET-Mailingliste zu schreiben und nach den fehlenden Informationen zum Metadatendateiformat zu fragen.
...
Etwa zur gleichen Zeit versuchte Sam Ruby, die Mitglieder des ECMA-Komitees davon zu überzeugen, eine Beschreibung des binären Dateiformats zu veröffentlichen, die nicht Teil ihrer Pläne war. Ich weiß nicht, wie sich alles entwickelt hat, aber bis April 2001 veröffentlichte die ECMA eine Beschreibung des Dateiformats.
Im Laufe der Zeit hat sich Mono ( jetzt Xamarin ) auf andere Plattformen ausgeweitet . Das Framework läuft auf Android und iOS / Mac. Im Februar 2016 erwarb Microsoft Xamarin. Es sei an die langjährige Zusammenarbeit zwischen Mono / Xamarin und Unity erinnert , die darauf abzielt, C # in Unity zu unterstützen . Gleichzeitig ist Unity jetzt Mitglied der .NET Foundation.
AOT-Kompilierungslaufzeiten
Ich habe solche Umgebungen in eine separate Kategorie eingeordnet, da .NET traditionell die JIT-Kompilierung verwendete , aber im Laufe der Zeit mehr Implementierungen mit AOT erschienen.
Soweit ich das beurteilen kann, war das erste das Mono-Framework, in dem die AOT-Zusammenstellung 2006 erschien. Darüber hinaus hat Microsoft kürzlich .NET Native veröffentlicht und arbeitet derzeit an CoreRT , einer für die AOT-Kompilierung optimierten .NET-Laufzeitumgebung.
Gemeinschaftsprojekte
Es wurden jedoch nicht alle .NET-Laufzeiten von Microsoft oder von später erworbenen Unternehmen entwickelt. Es gibt Projekte, die von Gemeinden durchgeführt werden.
- Das älteste davon ist DotGNU Portable.NET . Die Entwicklung begann gleichzeitig mit Mono mit dem Ziel, „eine Reihe kostenloser Tools zum Kompilieren und Ausführen von Anwendungen im Rahmen der CLI zu erstellen ...“.
- Zweitens werde ich DotNetAnywhere nennen , das von nur einer Person, Chris Bacon, entwickelt wurde. DotNetAnywhere ist dafür bekannt, als anfängliche Laufzeit für das Blazor-Projekt zu dienen. Es ist auch eine großartige Gelegenheit, einen Blick darauf zu werfen, was eine .NET-kompatible Laufzeit ausmacht, ohne die Millionen von Codezeilen durchlaufen zu müssen, aus denen CoreCLR besteht !
- Dann kommt CosmosOS ( ein GitHub-Projekt ), das nicht nur eine .NET-Laufzeit, sondern ein verwaltetes Betriebssystem ist. Wenn Sie mehr wissen möchten, empfehle ich Ihnen, diesen FAQ-Abschnitt zu lesen oder „unter die Haube“ zu schauen . Ein weiterer ähnlicher Versuch ist SharpOS .
- Schließlich bin ich kürzlich auf CrossNet gestoßen . Diese Laufzeit "analysiert .NET-Assemblys und generiert nicht verwalteten C ++ - Code, der von jedem C ++ - Compiler kompiliert werden kann." Weitere Informationen finden Sie in der Dokumentation und im Beispiel für den generierten Code.
Forschungsprojekte
Kommen wir nun zu den sehr wenig bekannten .NET-Laufzeiten. Hierbei handelt es sich um Microsoft-Forschungsprojekte, die gestartet wurden, um festzustellen, um wie viel die Funktionalität der verwalteten Ausführungsumgebung erweitert werden kann und welche Aufgaben mit ihrer Hilfe gelöst werden können. Einige Forschungsergebnisse sind in kommerziellen Implementierungen der .NET-Umgebung erschienen, beispielsweise ist Span <T> aus dem Midori-Projekt hervorgegangen .
Eine Implementierung der CLI (.NET Framework) von Microsoft, in der der Quellcode unter der Shared Source-Lizenz verfügbar ist. Obwohl SSCLI aufgrund von Lizenzspezifikationen nicht für den kommerziellen Gebrauch geeignet ist, können Programmierer mit seiner Hilfe die Implementierungsfunktionen vieler .NET-Bibliotheken analysieren und modifizierte Versionen der CLI erstellen. Microsoft stellt die Shared Source-CLI als Referenz-CLI für Bildungszwecke bereit.
Interessanterweise konnte das Unternehmen mit der Veröffentlichung von Rotor das Gyro-Projekt veröffentlichen , das eine Vorstellung davon gibt, wie Generika in der .NET-Laufzeit angezeigt wurden .
Midori ist der Codename für ein verwaltetes Code-Betriebssystem, das von Microsoft in Zusammenarbeit mit Microsoft Research entwickelt wurde. Es wurde berichtet, dass es sich um eine kommerzielle Implementierung des Singularity-Betriebssystems handeln könnte, eines Forschungsprojekts, das 2003 gestartet wurde, um ein äußerst zuverlässiges Betriebssystem zu erstellen, bei dem der Kernel, die Gerätetreiber und die Anwendungen aus verwaltetem Code bestehen. Es wurde für paralleles Rechnen entwickelt und kann ein Programm ausführen, das auf mehrere Knoten gleichzeitig verteilt ist. Außerdem wurde ein Sicherheitsmodell implementiert, das auf der Ausführung von Anwendungen in einer isolierten Umgebung basiert. Microsoft hat verschiedene Möglichkeiten für die Migration von Windows nach Midori vorgeschlagen. Die Arbeit am Betriebssystem wurde 2015 eingestellt, obwohl viele der darin implementierten Ideen in andere Microsoft-Projekte fielen.
Anscheinend sind die meisten Ideen aus dem Midori-Projekt wieder in .NET Framework eingegangen. Sie können mehr darüber mit Joe Duffy in einer Reihe von Artikeln über Midori lesen:
- Eine Geschichte von drei Sicherheiten
- Objekte als sichere Funktionen
- Alles asynchron
- Sicherer nativer Code
- Das Fehlermodell
- Leistungskultur
- 15 Jahre Parallelität
Singularity ist ein experimentelles Betriebssystem, das von Microsoft Research zwischen 2003 und 2010 entwickelt wurde. Es sollte ein äußerst zuverlässiges Betriebssystem sein, in dem der Kernel, die Gerätetreiber und die Anwendungen aus verwaltetem Code bestehen. Die interne Sicherheit verwendet Typensicherheit anstelle des Schutzes des Hardwarespeichers.
Und das letzte, aber nicht zuletzt wichtige Umfeld ist Redhawk :
Der Codename für die experimentelle, minimale Version der Laufzeit des verwalteten Codes, die sich zu CoreRT entwickelt hat.
Verweise auf Quellen
Im Folgenden sind die Wikipedia-Artikel aufgeführt, mit denen ich die chronologische Skala erstellt habe:
Weitere Optionen gefunden
Net60
In den Kommentaren schlug bmforce vor, dass es eine andere Plattform gibt, Net60. Es gibt nicht viele Informationen darüber, aber es ist gelungen, eine Erwähnung im Forum + Artikel auf CodeGuru zu finden :
Das .NET Compact Framework für Symbian S60 3rd ist endlich da!
Daher können Sie Symbian in jeder Sprache von Visual Studio 2005 programmieren. (Visual Basic, Visual C #, Visual C ++). DotNet (net60) selbst ist an die Nachricht angehängt. Sie müssen sie signieren und auf dem Telefon installieren. Übrigens kann es EXE-Dateien ausführen, die auf Windows Mobile .NET CF aus einem eigenen Ordner geschrieben wurden!
Mondschein
Moonlight, das auf der Mono- Opensource-Version von Silverlight basiert, wird nicht erwähnt:
Moonlight ist eine Open Source-Implementierung von Silverlight, die hauptsächlich für Linux und andere Unix / X11-Betriebssysteme entwickelt wurde. Die neueste Version von Moonlight (Moonlight 4 Preview 1) bietet Unterstützung für die Kernfunktionen von Silverlight 3 sowie Kompatibilität mit Silverlight 4.
Blazor
Ebenfalls nicht erwähnt wird das neue Blazor-Projekt , das alle Erfolgschancen hat: .NET for Web Assembly. Es wird beispielsweise im Try .NET- Projekt verwendet, einem Toolkit zum Erstellen von .NET-Codebeispielen, die in einem Browser ausgeführt werden können.
PageFX
Es sieht für mich absolut fantastisch aus, aber einer der Entwickler des PageFX- Projekts hat mich umgehauen und den Link zum Repository entfernt, in dem der Übersetzer von .NET CIL zu Flash-Bytecode gespeichert ist. Es ist großartig :) Der Autor dieses Projekts ist @todysh
Weitere Übersetzungen von Artikeln von Matt Warren