Mono (Software)

unabhängige Implementierung des .NET-Frameworks

Mono (spanisch für „Affe“ oder auch vom griechischen monos für „allein“ oder „einzig“) ist eine alternative, quelloffene Implementierung von Microsofts .NET Framework. Sie ermöglicht die Entwicklung von plattformunabhängiger Software auf den Standards der Common Language Infrastructure und der Programmiersprache C#. Entstanden ist das Mono-Projekt 2001 unter Führung von Miguel de Icaza von der Firma Ximian, die 2003 von Novell aufgekauft wurde. Die Entwickler wurden 2011 in eine neue Firma Xamarin übernommen, die im Jahr 2016 eine Microsoft-Tochtergesellschaft wurde. In der Folge wurde Microsoft Hauptsponsor des Projektes.[4]

Mono

Mono-Logo
Basisdaten

Maintainer Zoltán Varga[1], Marek Šafář
Entwickler Xamarin (zuvor Novell)
Erscheinungsjahr 2004
Aktuelle Version 6.12.0.206[2]
(13. Februar 2024)
Betriebssystem Unix/BSD-Derivate, Linux, Windows, macOS und Solaris 8
Programmier­sprache C, C#[3], XML
Kategorie Framework
Lizenz MIT/X11; teilweise:GPLv2/LGPLv2
www.mono-project.com

Hintergründe und technische Details

Bearbeiten

Mono unterstützt eine hohe Anzahl an Plattformen und Architekturen. Durch Lizenzierung unter MIT-Lizenz gibt es für Entwickler und Nutzer praktisch keine Einschränkungen, so dass hohe Lizenzkosten für das Betriebssystem des Servers vermieden werden können, wenn .NET-basierte Software eingesetzt werden soll. Allerdings lässt sich inzwischen hierzu oft auch .NET Core verwenden. Hinzu kommt bei der Entwicklung von Smartphone-Apps der Wunsch, Code für verschiedene Plattformen (Android, iOS, Windows Phone) auf einer gemeinsamen Basis zu pflegen.

Microsoft dagegen bot seine Laufzeitumgebung .NET lange Zeit ausschließlich für seine eigenen Windows-Betriebssysteme an. Ursprünglich gab es von Microsoft eine Open-Source-Variante von .NET namens Rotor, welche neben Windows auch für FreeBSD und macOS verfügbar war. Dennoch war das Unternehmen Xamarin einst der Ansicht, dass es mit einer eigenen Entwicklung in diesem Bereich Erfolg haben könnte, insbesondere weil ihm die von Microsoft angebotenen Lizenzbedingungen für viele Bereiche zu restriktiv erschienen. Seit dem 12. November 2014 begann Microsoft, Teilmengen des .NET Frameworks via GitHub unter der MIT-Lizenz zu veröffentlichen. So befinden sich dort neben dem .NET Core[5] und der offenen C#- und Visual-Basic-Compiler-Plattform Roslyn[6] auch eine in der Entwicklung befindliche, plattformübergreifende Laufzeitumgebung, die .NET Core CLR[7]. Mit diesen Projekten möchte Microsoft unter anderem die Entwicklung des Mono-Projekts unterstützen.

Mit Mono ist es möglich, Programme, welche für die Microsoft-.NET-Umgebung erstellt wurden, auch ohne Neuübersetzung unter unixähnlichen Betriebssystemen auszuführen. Der Vorteil einer solchen Crossplattform-Entwicklung besteht darin, den Komfort und Funktionsumfang der Microsoft Entwicklungsumgebung (Microsoft Visual Studio) zu nutzen. Auch SharpDevelop steht nur unter Windows zur Verfügung. Umgekehrt lassen sich mit MonoDevelop auf anderen Betriebssystemen Programme entwickeln, die auch mit Microsoft .NET lauffähig sind.

Mono bietet ab der Version 2.10 die Kompatibilität mit den nicht-Windows-spezifischen Bibliotheken von .NET-2.0. Anwendungen, die auf .NET 3.0 oder höher basieren, sind derzeit unter Mono unter Umständen nicht lauffähig, da bislang nur eine Teilmenge umgesetzt ist. Es fehlen Windows Presentation Foundation, Windows Workflow Foundation und teilweise Windows Communication Foundation.[8] Des Weiteren ist der Zugriff auf windowsspezifische Funktionalitäten mittels P-Invoke oder COM Interop, d. h. die Verwendung von Bibliotheken, die nicht in IL-Code, sondern in normalem, Prozessor-spezifischem Assemblercode vorliegen, nicht gestattet. Zwar kann auch Mono auf Bibliotheken zugreifen, die in C oder C geschrieben sind, allerdings sind die meisten dieser Bibliotheken plattformabhängig.

Aktuell können Anwendungen auf Basis des .NET-4.7.2-Profils von Mono ausgeführt werden (Stand Januar 2019). Einschränkungen gibt es jedoch in verschiedenen Teilbereichen des Frameworks.[9] Explizit ausgenommen wurde die Unterstützung der Windows Presentation Foundation, die auf absehbare Zeit nicht reimplementiert werden wird. XAML sollte im Rahmen von Moonlight unterstützt werden, dessen Entwicklung wurde allerdings eingestellt, später auch die des Original Silverlight. Im Rahmen von Xamarin Forms kam Xaml später aber trotzdem zum Einsatz.[10]

Besonderheiten von Mono

Bearbeiten

Mono implementierte auch eine Reihe von Funktionen, die sich im Namespace Mono.* befinden, beispielsweise Schnittstellen für betriebssystemnahe Funktionen unter Unix (Mono.Unix.Native) oder die Mono.Cecil.dll, mit der Änderungen an bereits kompiliertem Code vorgenommen werden können. Durch Verwendung von NuGet und dem .NET Standard sind diese auch für .NET und .NET Core nutzbar.

Des Weiteren ist die Generierung von nativem Code (aus der .exe oder .dll) mit Hilfe von mono --aot=full einfach und transparent möglich. Beim klassischen .NET ließ sich eine AOT-Kompilierung dagegen umständlich auf einem inoffiziellen Weg erreichen, indem man Tool NGEN (für das Administrator-Rechte benötigt wurden) für das Anwendungsprogramm verwendete, das Ergebnis landete dann in einem Native Image Cache mit kryptischem Dateinamen. Für .NET Core wird ab der Version 3 mit den Ready to Run-Images (R2R) eine Möglichkeit zur AOT-Kompilierung angeboten, dabei befindet sich der vorab compilierte Code in derselben Datei wie der IL-Code, auch können die benötigten Teile des Laufzeitsystems mit eingebunden werden.[11][12]

Geschichte

Bearbeiten

Das von Miguel de Icaza mitgegründete Unternehmen Ximian (am 4. August 2003 von Novell gekauft) setzte sich die Entwicklung einer Reihe von .NET-kompatiblen Entwicklungswerkzeugen zum Ziel, einschließlich eines C#-Compilers und einer Common Language Runtime für den Betrieb unter Windows, Linux, verschiedenen Unix-Derivaten sowie macOS.

Miguel de Icaza interessierte sich für die .NET-Technologie, seit im Dezember 2000 die ersten .NET-Informationen verfügbar wurden. Im Februar 2001 begann er zu Übungszwecken einen C#-Compiler der Programmiersprache in C# zu schreiben. Im April 2001 konnte er auf einer Gnome-Konferenz eine erste Version präsentieren.

Bei Ximian gab es intern viele Diskussionen über die Entwicklung von Tools zur Produktivitätssteigerung, um mehr Anwendungen in kürzerer Zeit zu erstellen und die Entwicklungskosten reduzieren zu können. Nach einer Machbarkeitsstudie entstand das Mono-Team. Wegen der begrenzten Anzahl der Mitarbeiter war es Ximian allerdings nicht möglich, einen vollständigen .NET-Ersatz zu schreiben, also wurde das Mono-Open-Source-Projekt gegründet, welches auf der O’Reilly-Konferenz im Juli 2001 bekanntgegeben wurde.

Drei Jahre später, am 30. Juni 2004, wurde Mono 1.0 veröffentlicht.

Mit der am 6. Oktober 2008 veröffentlichten Version 2.0 wurden die wichtigsten Eigenschaften von .NET 2.0 hinzugefügt und es gibt mit dem Projekt Olive auch eine Initiative, die neueren Technologien von .NET 3.0 und .NET 3.5 zu implementieren. Zudem wurde der C#-Compiler um die Sprach-Eigenschaften von C# 3.0 erweitert (hierbei handelt es sich in erster Linie um die Unterstützung von LINQ), sowie ein neuer XAML-Parser entwickelt. Allerdings weisen die Entwickler ausdrücklich darauf hin, dass die Windows Presentation Foundation wohl vorerst wegen der enormen Komplexität nicht implementiert wird. Ebenfalls mit der Version 2.0 ist nun auch ein Visual-Basic-8.0-Compiler mit an Bord.[13]

Mit der am 9. Dezember 2009 veröffentlichten Version 2.4.3 wurde – neben einigen Fehlerkorrekturen – der freie C#-Compiler mit allen wesentlichen Funktionen von C# 4.0 ergänzt.[14]

Anfang 2011 stellte der neue Novell-Eigentümer Attachmate die Weiterentwicklung des Mono-Projektes ein und entließ am 2. Mai 2011 30 Mono-Entwickler.[15] Nils Brauckmann (der neue Suse-Chef) nannte als Grund die geringe Nachfrage bei den Kunden.[16] Wenige Tage nach dem Stopp des Mono-Projekts bei Novell gründete Miguel de Icaza das Unternehmen Xamarin, das sich in Zukunft der Entwicklung von Mono widmen soll.[17] Die meisten zuvor bei Suse angestellten Mono-Entwickler wechselten zu Xamarin.

In weiterer Folge gewährte SUSE Xamarin eine unbefristete Lizenz zur Nutzung und kommerziellen Verwertung von Mono, MonoTouch für iOS und Android[18] sowie den Mono Tools for Visual Studio.[19]

Mit der Übernahme durch Microsoft im Jahr 2016 wurden die Xamarin-Tools in Microsoft Visual Studio integriert und basierend auf der Xamarin-IDE Xamarin Studio wurde Visual Studio for Mac entwickelt. Mono wurde unter das Dach der .NET Foundation gestellt und unter der MIT-Lizenz neu herausgegeben.[20]

Durch die Bereitstellung der .NET Core Plattform als Open Source unter einer kompatiblen Lizenz ist die gegenseitige Übernahme von Code für beide Projekte wesentlich vereinfacht. Seit Mai 2017 enthalten die offiziellen Pakete von Mono auch eine Version des C#-Compiler (Roslyn) sowie von MSBuild. Mit der aktuellen Version von Mono wird auch C# 8.0 vom Compiler unterstützt.[21][22]

Für das Blazor-Framework mit WebAssembly-Client im Browser kommt eine Mono-Umgebung zum Einsatz, die als WebAssembly kompiliert wurde.[23][24]

Ab der Version 5.12 werden auch IBM i und IBM AIX unterstützt.

Im August 2024 teilte Microsoft mit, das der Quellcode im ursprünglichen Repository möglicherweise archiviert wird und verwies auf zwei weiterentwickelte Abspaltungen von der WineHQ Organization und als Unterkomponente in der .NET-Laufzeitumgebung.[25][26][27]

Standardisierung und Patente

Bearbeiten

Vor der Übernahme von Xamarin durch Microsoft bestanden in der Open-Source-Szene erhebliche Bedenken gegenüber Mono, weil Teile der Klassenbibliothek möglicherweise Softwarepatente von Microsoft berührten. Microsoft hat dann mit Novell[28][29] ein gegenseitiges Patentabkommen geschlossen, welches Novell und seine Kunden vor Rechtsansprüchen Microsofts schützt. Dieses beinhaltet auch einen Patentschutz für Mono.[30][31][32] Für (fast) alle anderen Nutzer bestand das Risiko jedoch weiterhin. Die Sicht der Entwickler auf das Problem brachte Linus Torvalds auf den Punkt, als er sich durch Patentansprüche von SCO mit dem Thema konfrontiert sah: „Ich achte prinzipiell nicht auf Patente, denn das wäre Zeitverschwendung.“[33] Nicht ohne Grund sind Softwarepatente höchst umstritten und in der EU formal nicht gestattet.

Die grundlegenden Technologien sind teilweise durch Microsoft bei Ecma International und der ISO standardisiert worden. Microsoft garantiert eine Lizenzierung der ECMA-Teile auf RAND-Basis. Andere Teile, wie zum Beispiel Windows Forms, ADO.NET und ASP.NET sind hiervon jedoch ausgeschlossen.

Das Open Invention Network verteidigt Mono bei patentrechtlichen Auseinandersetzungen.

Aufgrund der Gefahr durch Patentklagen seitens Microsoft hatte auch Richard Stallman, der ideologische Führer der Freie-Software-Bewegung, vor Mono gewarnt, nachdem einige Distributionen dazu übergegangen waren, Mono in die Standardinstallation aufzunehmen.[34] Microsoft hat mittlerweile .NET und C# unwiderruflich unter die Community Promise Vereinbarung gestellt und will auf Patentklagen verzichten.[35]

Microsoft hat 2013 seine Strategie bezüglich .NET grundlegend geändert und arbeitet daran, den Quellcode von .NET komplett als Open Source offenzulegen. Dazu wurde von Microsoft, Xamarin und anderen die Stiftung .NET Foundation gegründet, welche die Rechte am .NET Framework übertragen bekommen hat. Durch die Offenlegung der Quellcodes unter der MIT-Lizenz bzw. Apache-2.0-Lizenz ist der Quellcode des .NET Frameworks nahezu beliebig – sprich auch in Closed-Source-Projekten – verwendbar. Lizenz- und patentrechtliche Auseinandersetzungen waren somit kaum noch möglich und somit auch nicht mehr zu befürchten. Microsoft und Xamarin arbeiteten seit 2015 gemeinsam daran, .NET auf unterschiedlichen Plattformen bereitzustellen.[36] Dies mündete ein in die Übernahme von Xamarin durch Microsoft 2016, was Patentklagen gegen Xamarin (und Mono) natürlich erst recht sinnlos macht.

Im Mai 2019 kündigte Microsoft an, bis November 2020 .NET Framework, .NET Core und Mono zu einer einheitlichen Plattform .NET 5.0 zusammenzuführen, wobei von Mono die Ablauffähigkeit auf iOS und Android übernommen werden soll sowie die Unterstützung von AOT-Kompilierung.[37] Dies wurde inzwischen relativiert und die vollständige Integration zunächst für .NET 6 angekündigt, dann auf Sommer 2022 verschoben ("One .NET").[38][39]

Siehe auch

Bearbeiten
  • MonoDevelop, eine mittlerweile eingestellte Entwicklungsumgebung auf Basis von Mono für Linux
  • SharpDevelop, eine mittlerweile eingestellte Open-Source-Entwicklungsumgebung für Windows, aus deren Quellcode MonoDevelop entstand
  • C#, die primäre Mono-Sprache
  • DotGNU, ein weiteres, seit Ende 2012 eingestelltes Projekt für eine quelloffene .NET-Implementierung
  • IKVM.NET

Literatur

Bearbeiten
Bearbeiten

Einzelnachweise

Bearbeiten
  1. github.com.
  2. github.com.
  3. The mono Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 18. Juli 2018).
  4. http://www.mono-project.com/
  5. .NET Core Repository (englisch) – Home repository des .NET Core Projekts
  6. Roslyn (englisch) – Home repository der Compilerplattform „Roslyn“
  7. .NET Core CLR (englisch) – Home repository der .NET Core CLR
  8. Mono Compatibility (englisch) – Meldung des Mono-Projekts vom 20. März 2011
  9. Mono-Kompatibilitätsübersicht
  10. dotnet-bot: XamlCompilationAttribute Class (Xamarin.Forms.Xaml). Abgerufen am 23. Januar 2019 (deutsch).
  11. Thraka: Neuerungen in .NET Core 3.0. Abgerufen am 9. Juli 2019 (deutsch).
  12. LakshanF: Einzeldatei-App - .NET. Abgerufen am 2. März 2022 (deutsch).
  13. .NET-Klon Mono in Version 2.0 erschienen – Artikel bei Heise online, vom 6. Oktober 2008
  14. Mono lernt C# 4.0 – Artikel bei Golem.de, vom 10. Dezember 2009
  15. Entlassungen bei Novell - Aus für Mono – Artikel beim Linux-Magazin, vom 4. Mai 2011
  16. Die neue Suse startet durch – Artikel bei Heise online, vom 19. Mai 2011
  17. Miguel de Icaza gründet Mono-Unternehmen – Artikel bei Golem.de, vom 17. Mai 2011
  18. Announcing Xamarin (englisch), Miguel de Icaza, zugegriffen: 17. Februar 2012
  19. Mono: Suse und Xamarin arbeiten zusammen – Artikel bei Heise online, vom 18. Juli 2011
  20. Mono Relicensed MIT - Mono News, vom 31. März 2016
  21. Mono 5.0 Rolls Out With Roslyn C# Compiler, Concurrent Garbage Collection, 20. Mai 2017
  22. Mono 6.4.0 Release Notes | Mono. Abgerufen am 3. Oktober 2019.
  23. Aspnet core /Blazor Framework. In: Github. Microsoft, abgerufen am 25. Juli 2018 (englisch).
  24. Laurent Samsonetti: Mono and WebAssembly - Updates on Static Compilation | Mono. Abgerufen am 9. Juni 2018 (englisch).
  25. Home | Mono. Abgerufen am 6. September 2024.
  26. Mono / Framework Mono · GitLab. Abgerufen am 6. September 2024.
  27. runtime/src/mono at main · dotnet/runtime. Abgerufen am 6. September 2024 (englisch).
  28. Microsoft kündigt Linux-Unterstützung an – Artikel bei Golem.de, vom 3. November 2006
  29. Microsoft und Novell: die Sache mit den Patenten – Artikel bei Heise online, vom 3. November 2006
  30. Joint letter to the Open Source Community (englisch) – Meldung von Novell und Microsoft
  31. Novell and Microsoft Collaborate (englisch) – FAQ zur Zusammenarbeit zwischen Microsoft und Novell
  32. Microsoft und Novell: Der Pakt im Detail – Artikel bei Golem.de, vom 3. November 2006
  33. SCO greift Linus Torvalds an – Artikel bei Heise online, vom 18. Juni 2003
  34. Richard Stallman hält Mono für gefährlich – Artikel bei Golem.de, vom 29. Juni 2009
  35. Microsoft: Keine Patentklagen wegen .NET und C# – Artikel bei Golem.de, vom 7. Juli 2009
  36. .NET Framework Blog – Announcing .NET 2015 Preview: A New Era for .NET. Microsoft, abgerufen am 13. November 2014 (englisch).
  37. heise online: Build 2019: Microsoft führt Mono und .NET Core zusammen zu .NET 5.0. Abgerufen am 6. Mai 2019.
  38. Announcing .NET 5 Preview 4 and our journey to one .NET. 19. Mai 2020, abgerufen am 20. Mai 2020 (amerikanisches Englisch).
  39. heise online: Microsoft liefert .NET 6 aus. Abgerufen am 9. November 2021.