Mono (Software) - Mono (software)

Mono
Mono-Projekt logo.svg
Mono-Architektur.svg
Diagramm der Mono-Architektur
Originalautor(en) Ximian
Entwickler .NET Foundation und Xamarin (eine Microsoft- Tochtergesellschaft)
Erstveröffentlichung 30. Juni 2004 ; Vor 17 Jahren ( 2004-06-30 )
Stabile Version
6.12.0.122  Bearbeiten Sie dies auf Wikidata / 23. Februar 2021 ; vor 7 Monaten ( 23. Februar 2021 )
Vorschauversion
6.12.0.148 / 13. August 2021 ; Vor 58 Tagen ( 2021-08-13 )
Repository
Geschrieben in C , C# , XML
Betriebssystem Windows , macOS , Linux , IBM AIX , IBM i
Plattform IA-32 , x64 , IA-64 , ARM , MIPS , PowerPC , SPARC , S390
Typ Software-Framework
Lizenz MIT-Lizenz
Webseite www .mono-project .com

Mono ist ein kostenloses und Open-Source .NET Framework- kompatibles Software-Framework . Ursprünglich von Ximian , wurde es später von Novell übernommen und wird jetzt von Xamarin , einer Tochtergesellschaft von Microsoft und der .NET Foundation, geleitet . Mono ist auf vielen Softwaresystemen lauffähig .

Geschichte

Mono-Stand auf der OSCON 2009 in San Jose, Kalifornien
Veröffentlichungsverlauf
Datum Ausführung Anmerkungen
2004-06-30 1.0 C# 1.0-Unterstützung
2004-09-21 1.1
2006-11-09 1,2 C# 2.0- Unterstützung
2008-10-06 2.0 Die APIs von Mono entsprechen jetzt .NET 2.0. Stellt die Compiler von C# 3.0 und Visual Basic 8 vor. Neue Mono-spezifische APIs: Mono.Cecil, Mono.Cairo und Mono.Posix. GTK# 2.12 wird veröffentlicht. Das Gendarme-Verifizierungstool und der Mono Linker werden eingeführt.
2009-01-13 2.2 Mono stellt seine JIT-Engine auf eine neue interne Darstellung um, die ihm einen Leistungsschub verleiht und SIMD- Unterstützung im Mono.Simd Mono.Simd-Namespace einführt.
Mono führt die Full Ahead of Time- Kompilierung ein, die es Entwicklern ermöglicht, vollständig statische Anwendungen zu erstellen, und stellt den C#-Compiler als Service und die C# Interactive Shell (C# REPL) vor.
2009-03-30 2.4 Diese Version poliert größtenteils alle Funktionen, die in 2.2 ausgeliefert wurden, und bildete die Grundlage für die langfristige Unterstützung von Mono in SUSE Linux.
2009-12-15 2.6 Die Mono-Laufzeit kann jetzt LLVM als Backend für die Codegenerierung verwenden und diese Version führt Mono-Co-Routinen, den Mono Soft Debugger und das CoreCLR-Sicherheitssystem ein, die für Moonlight und andere webbasierte Plugins erforderlich sind.
In der Klassenbibliothek System.IO.Packaging, WCF-Client, WCF-Server, LINQ to SQL-Debüt. Die Interactive Shell unterstützt die automatische Vervollständigung und LINQ to SQL unterstützt mehrere Datenbank-Back-Ends. Das xbuild-Buildsystem wird eingeführt.
2010-09-22 2,8 Standardmäßig .NET 4.0-Profil, C# 4.0- Unterstützung, Garbage Collector der neuen Generation, einschließlich Parallel Extensions , WCF-Routing, CodeContracts , ASP.NET 4.0, löscht die 1.0-Profilunterstützung; die LLVM-Engine ist so abgestimmt, dass sie 99,9 % des gesamten generierten Codes unterstützt, zur Laufzeit wählbares llvm und gc; enthält Dynamic Language Runtime , MEF , ASP.NET MVC 2, OData Client Open-Source-Code von Microsoft;. Wird zur Version 3.0
2011-02-15 2.10
2012-10-18 3.0 C# 5.0- Unterstützung, asynchrone Unterstützung, Upgrade der asynchronen Basisklassenbibliothek und MVC4 – Teilweise, keine Unterstützung für asynchrone Funktionen.
2013-07-24 3.2 Der Standard-Garbage Collector ist jetzt der SGEN anstelle von Boehm
2014-03-31 3.4
2014-08-12 3.6
2014-09-04 3.8
2014-10-04 3.10
2015-01-13 3.12
2015-04-29 4.0 Standardmäßig das .NET 4.5-Profil und nur .NET 4.5-Assemblys, standardmäßig C# 6.0. Erste Version zur Integration von Microsoft Open-Source-.NET Core-Code
2017-05-10 5.0 Auslieferung des Roslyn C#-Compilers zur Aktivierung der C#7-Unterstützung; Versand von msbuild und veraltete xbuild für bessere Kompatibilität; Aktivieren des gleichzeitigen SGen Garbage Collectors, um die in GC verbrachte Zeit zu reduzieren; Einführung des AppleTLS-Stack auf macOS für HTTPS-Verbindungen; Kontinuierliche Fortschritte bei der Konvergenz der .NET-Klassenbibliothek; libjpeg im macOS-Paket aktualisiert
2017-07-14 5.2 Unterstützung für .NET Standard 2.0, starke Assemblynamen und experimentelle Standardschnittstellenmember.
2017-10-05 5,4 Die JIT-Laufzeit unterstützt jetzt die gleichzeitige Methodenkompilierung und verschiedene andere Leistungsoptimierungen;
2018-02-01 5,8 Anfänglicher WebAssembly- Port; Modi für den SGen GC; Enthält Roslyns csi (C# interaktiv) REPL-Tool
2018-02-26 5.10 Der Interpreter ist jetzt in der Standardinstallation enthalten; Runtime unterstützt jetzt Standardschnittstellenmethoden; WebAssembly gilt jetzt als zuverlässig; Unterstützung für .NET 4.7.1 / C# 7.2 / F# 4.1
2018-05-08 5.12 Portierung auf IBM AIX/i; enthält jetzt VB.NET- Compiler; Option zur Verwendung von Jemalloc
2018-08-07 5.14 Großes Windows.Forms- Update zur Verbesserung der Kompatibilität mit .NET
2018-10-08 5.16 Hybrid Suspend Garbage Collector; Unterstützung von Clientzertifikaten; C# 7.3-Unterstützung
2018-12-21 5,18 .NET 4.7.2-Unterstützung; mehr CoreFX- Code wird verwendet
2019-07-17 6.0 C#-Compiler verwendet standardmäßig Version C# 8.0 RC; Verschiedene Stabilitätsverbesserungen in der Debugger-Unterstützung; Mono Interpreter ist vollständig und stabil
2019-09-23 6.4 C#-Compiler-Unterstützung für C# 8-Sprachversion; .NET-Standard 2.1-Unterstützung
2019-12-10 6.6 .NET 4.8-Referenzassemblys hinzugefügt
2020-01-15 6.8 Diverse Bugfixes
2020-05-19 6.10 Diverse Bugfixes
2020-11-24 6.12 Diverse Bugfixes

Als Microsoft im Juni 2000 sein .NET Framework zum ersten Mal ankündigte , wurde es als "eine neue Plattform basierend auf Internetstandards" beschrieben, und im Dezember desselben Jahres wurde die zugrunde liegende Common Language Infrastructure als offener Standard "ECMA-335" veröffentlicht das Potenzial für eigenständige Implementierungen. Miguel de Icaza von Ximian glaubte, dass .NET das Potenzial habe, die Produktivität der Programmierer zu steigern, und begann zu untersuchen, ob eine Linux-Version machbar sei. Da sie erkannten, dass ihr kleines Team nicht erwarten konnte, ein vollständiges Produkt zu entwickeln und zu unterstützen, starteten sie am 19. Juli 2001 auf der O'Reilly- Konferenz das Open-Source-Projekt Mono .

Nach dreijähriger Entwicklung wurde Mono 1.0 am 30. Juni 2004 veröffentlicht. Mono entwickelte sich von seinem anfänglichen Fokus einer Entwicklerplattform für Linux-Desktopanwendungen zur Unterstützung einer breiten Palette von Architekturen und Betriebssystemen - einschließlich eingebetteter Systeme.

Novell erwarb Ximian im Jahr 2003. Nachdem Novell im April 2011 von Attachmate übernommen worden war, kündigte Attachmate Hunderte von Entlassungen für die Novell-Belegschaft an, was die Zukunft von Mono in Frage stellte.

Am 16. Mai kündigte Miguel de Icaza in seinem Blog an, dass Mono weiterhin von Xamarin unterstützt werde , einem Unternehmen, das er nach seiner Entlassung von Novell gegründet hatte. Auch das ursprüngliche Mono-Team war in die neue Firma umgezogen. Xamarin plante, weiter an Mono zu arbeiten und hatte geplant, die proprietären .NET-Stacks für iOS und Android von Grund auf neu zu schreiben , da Novell zu dieser Zeit noch MonoTouch und Mono für Android besaß. Nach dieser Ankündigung wurde die Zukunft des Projekts in Frage gestellt, da MonoTouch und Mono für Android in direkter Konkurrenz zu den bestehenden kommerziellen Angeboten standen, die jetzt im Besitz von Attachmate sind , und wenn man bedenkt, dass das Xamarin-Team Schwierigkeiten haben würde zu beweisen, dass es keine Technologien verwendet, die es zuvor entwickelt hat als sie von Novell für die gleiche Arbeit angestellt wurden. Im Juli 2011 gab Novell, jetzt eine Tochtergesellschaft von Attachmate, und Xamarin jedoch bekannt, dass es Xamarin eine unbefristete Lizenz für Mono, MonoTouch und Mono für Android erteilt hat, die offiziell die Leitung des Projekts übernahm.

Aktueller Stand und Roadmap

Die aktuelle Version von Mono ist 6.0.0 (Stand August 2019). Diese Version bietet die Kern- API von .NET Framework und Unterstützung für Visual Basic.NET und C# 7.0. LINQ to Objects , XML und SQL sind Teil der Distribution. Windows Forms 2.0 wird ebenfalls unterstützt, aber nicht aktiv weiterentwickelt, und daher ist seine Unterstützung für Mono unvollständig. Version 4.0 war die erste Version, die den ursprünglichen Microsoft-Quellcode enthält, der von Microsoft als Teil des .NET Core- Projekts veröffentlicht wurde.

Ab dem 14. Januar 2021 bietet Mono vollständige Unterstützung für alle Funktionen in .NET 4.7 mit Ausnahme von Windows Presentation Foundation (WPF) (die das Mono-Team aufgrund des Arbeitsaufwands nicht unterstützen möchte) und Windows Workflow Foundation (WF) und mit nur eingeschränkter Unterstützung für Windows Communication Foundation (WCF) und den asynchronen ASP.NET-Stack. System.Web und WCF sind jedoch Kandidaten für eine "fast sofortige" Portierung von der .NET-Referenzquelle zurück zu Mono. Einige fehlende Teile von .NET Framework werden in einem experimentellen Mono-Unterprojekt namens Olive entwickelt .

Das Mono-Projekt hat auch einen Visual Basic .NET- Compiler und eine Laufzeitumgebung erstellt, die zum Ausführen von VB.NET-Anwendungen entwickelt wurde. Es wird derzeit von Rolf Bjarne Kvinge entwickelt.

Mondlicht

Eine Open-Source-Implementierung von Microsoft Silverlight namens Moonlight ist seit Mono 1.9 enthalten. Moonlight 1.0, das die Silverlight 1.0-APIs unterstützt, wurde am 20. Januar 2009 veröffentlicht. Moonlight 2.0 unterstützt Silverlight 2.0 und einige Funktionen von Silverlight 3.0. Eine Vorschauversion von Moonlight 3.0 wurde im Februar 2010 angekündigt und enthält Updates zur Unterstützung von Silverlight 3.

Das Moonlight-Projekt wurde am 29. Mai 2012 aufgegeben. Zwei Faktoren besiegelten laut Miguel das Schicksal des Projekts: Microsoft fügte "künstliche Einschränkungen" hinzu, die es "für die Desktop-Programmierung nutzlos machten", und die Technologie hatte auf der Netz. Darüber hinaus wurde Silverlight selbst von Microsoft bis 2012 eingestellt.

Monokomponenten

Mono besteht aus drei Komponentengruppen:

  1. Kernkomponenten
  2. Mono/Linux/GNOME-Entwicklungsstack
  3. Microsoft-Kompatibilitätsstapel

Zu den Kernkomponenten gehören der C#-Compiler, die virtuelle Maschine für die Common Language Infrastructure und die Kernklassenbibliotheken. Diese Komponenten basieren auf den Standards Ecma-334 und Ecma-335 , wodurch Mono eine standardkonforme, kostenlose Open-Source-CLI- Virtual Machine bereitstellen kann . Microsoft hat eine Erklärung veröffentlicht, die beide Standards unter ihrer Community Promise-Lizenz abdeckt .

Der Mono/Linux/GNOME-Entwicklungsstack bietet Werkzeuge für die Anwendungsentwicklung, während das vorhandene GNOME und freie und Open-Source- Bibliotheken verwendet werden. Dazu gehören: Gtk# für die Entwicklung von grafischen Benutzeroberflächen (GUI), Mozilla-Bibliotheken für die Arbeit mit der Gecko-Rendering-Engine , Unix-Integrationsbibliotheken (Mono.Posix), Datenbank-Konnektivitätsbibliotheken, ein Sicherheitsstack und die XML-Schemasprache RelaxNG . Mit Gtk# können Mono-Anwendungen als native Anwendungen in den Gnome-Desktop integriert werden. Die Datenbankbibliotheken bieten Konnektivität zur objektrelationalen Datenbank db4o , Firebird , Microsoft SQL Server (MSSQL), MySQL , Open Database Connectivity (ODBC), Oracle , PostgreSQL , SQLite und vielen anderen. Das Mono-Projekt verfolgt die Entwicklung von Datenbankkomponenten auf seiner Website.

Der Microsoft-Kompatibilitätsstapel bietet einen Weg zum Portieren von Windows .NET-Anwendungen auf Linux . Zu dieser Komponentengruppe gehören unter anderem ADO.NET , ASP.NET und Windows Forms . Da diese Komponenten nicht durch die Ecma- Standards abgedeckt sind, unterliegen einige von ihnen weiterhin Patentängsten und Bedenken .

Framework-Architektur

Zu den Hauptkomponenten von Mono gehören:

Codeausführungs-Engine

Die Mono-Laufzeit enthält eine Codeausführungs-Engine, die ECMA- CIL- Bytecodes in nativen Code übersetzt und eine Reihe von Prozessoren unterstützt: ARM , MIPS (nur im 32-Bit-Modus), SPARC , PowerPC , S390 (im 64-Bit-Modus), x86 , x86-64 und IA-64 für 64-Bit-Modi.

Der Codegenerator ist in drei Modi verfügbar:

  • Just-in-Time-Kompilierung (JIT): Die Laufzeit wandelt ECMA-CIL-Bytecodes in nativen Code um, während der Code ausgeführt wird.
  • Ahead-of-Time-Kompilierung (AOT): Dieser Code wandelt die ECMA-CIL-Bytecodes (normalerweise in einer .exe- oder .dll-Datei zu finden) um und generiert nativen Code, der in einer Betriebssystem-, Architektur- und CPU-spezifischen Datei (für eine foo. exe-Datei, würde es foo.exe.so unter Linux erzeugen). Dieser Betriebsmodus kompiliert den größten Teil des Codes, der normalerweise zur Laufzeit ausgeführt wird. Es gibt einige Ausnahmen wie Trampoline und andere Verwaltungscodes, für die das JIT immer noch erforderlich ist, sodass AOT-Bilder nicht vollständig eigenständig sind.
  • Vollständige statische Kompilierung: Dieser Modus wird nur auf einer Handvoll Plattformen unterstützt und führt den Ahead-of-Time-Kompilierungsprozess noch einen Schritt weiter und generiert alle benötigten Trampoline, Wrapper und Proxys in einer statischen Datei, die statisch in eine Datei eingebunden werden kann Programm und macht ein JIT zur Laufzeit komplett überflüssig. Dies wird auf Apples iOS- , Sonys PlayStation 3 und Microsofts Xbox 360- Betriebssystemen verwendet.

Ab Mono 2.6 ist es möglich, Mono so zu konfigurieren, dass LLVM als Codegenerierungs-Engine anstelle von Monos eigener Codegenerierungs-Engine verwendet wird. Dies ist nützlich für hohe Rechenlasten und andere Situationen, in denen die Ausführungsleistung wichtiger ist als die Startleistung.

Ab der Vorschau von Mono 2.7 ist es nicht mehr erforderlich, bei der Konfiguration eine Engine der anderen vorzuziehen. Die Codegenerierungs-Engine kann beim Start mit den Befehlszeilenargumenten --llvmoder ausgewählt werden --nollvmund ist standardmäßig auf die schnell startende Mono-Codegenerierungs-Engine eingestellt.

Ab Mono 5.18 ist die Unterstützung für LLVM eine Standardkonfigurationsoption. Frühere Versionen erforderten einen speziellen LLVM-Fork, aber jetzt kann mono auf seinen eigenen Codegenerator zurückgreifen, wenn es auf etwas stößt, das nicht von LLVM verarbeitet wird.

Müllsammler

Ab Mono 2.8 wird die Mono-Laufzeit mit zwei Garbage Collector ausgeliefert : einem Generational Collector und dem Boehm-Demers-Weiser Conservative Garbage Collector . Der Garbage Collector von Boehm kann bei bestimmten Anwendungsklassen Speicherlecks aufweisen , was ihn für einige Serveranwendungen mit langer Laufzeit ungeeignet macht. Mono wechselte in Version 3.1.1 zu Simple Generational GC (SGen-GC) als Standardkollektor.

Der Garbage Collector von SGen hat viele Vorteile gegenüber einem herkömmlichen konservativen Scanner. Es verwendet generationsübergreifende Garbage Collection, bei der neue Objekte von einem Kindergarten zugewiesen werden. Während des Garbage-Collection-Zyklus werden alle Objekte, die überlebt haben, in einen Speicherpool der älteren Generation migriert. Die Idee dahinter ist, dass viele Objekte vergänglich sind und schnell gesammelt werden können und nur eine Handvoll Objekte langfristige Objekte sind, die für die gesamte Lebensdauer der Anwendung leben. Um die Leistung zu verbessern, weist dieser Kollektor jedem Thread Speicherpools zu, damit Threads neue Speicherblöcke zuweisen können, ohne sich mit anderen Threads koordinieren zu müssen. Die Migration von Objekten aus dem Kindergarten in die alte Generation erfolgt durch Kopieren der Daten aus dem Kindergarten in den Pool der alten Generation und Aktualisieren aller Live-Zeiger, die auf die Daten zeigen, um auf den neuen Standort zu zeigen. Dies kann bei großen Objekten teuer werden, daher verwendet Monos SGen einen separaten Speicherpool für große Objekte (Large Object Section) und verwendet einen Mark-and-Sweep-Algorithmus für diese Objekte.

Klassenbibliothek

Die Klassenbibliothek bietet umfassende Funktionen für die Anwendungsentwicklung. Sie sind hauptsächlich in C# geschrieben, können aber aufgrund der Common Language Specification von jeder .NET-Sprache verwendet werden. Die Klassenbibliothek ist in Namespaces strukturiert und wird in gemeinsam genutzten Bibliotheken, den sogenannten Assemblys, bereitgestellt. Die Rede von .NET Framework bezieht sich in erster Linie auf diese Klassenbibliothek.

Namensräume und Assemblys

Namespaces sind ein Mechanismus zum logischen Gruppieren ähnlicher Klassen in einer hierarchischen Struktur. Dies verhindert Namenskonflikte. Die Struktur wird mit durch Punkte getrennten Wörtern implementiert, wobei der häufigste Namespace der obersten Ebene System ist, z. B. System.IO und System.Net. Es gibt auch andere Top-Level-Namespaces, wie z. B. Barrierefreiheit und Windows. Ein Benutzer kann einen Namensraum definieren, indem er Elemente innerhalb eines Namensraumblocks platziert.

Assemblys sind die physische Verpackung der Klassenbibliotheken. Dies sind DLL-Dateien, genau wie (aber nicht zu verwechseln mit) gemeinsam genutzten Win32-Bibliotheken. Beispiele für Assemblys sind mscorlib.dll, System.dll, System.Data.dll und Accessibility.dll. Namespaces werden oft auf mehrere Assemblys verteilt und eine Assembly kann aus mehreren Dateien bestehen.

Common Language Infrastructure und Common Language Specification

Die Common Language Infrastructure (CLI), wie sie von der Common Language Runtime (CLR) implementiert wird, wird von der ausführbaren Mono-Datei implementiert. Die Runtime kompiliert und führt .NET-Anwendungen aus. Die gemeinsame Sprachinfrastruktur wird durch den ECMA-Standard definiert. Um eine Anwendung auszuführen, müssen Sie die Runtime mit den entsprechenden Parametern aufrufen.

Die Common Language Specification (CLS) ist in Kapitel 6 von ECMA-335 spezifiziert und definiert die Schnittstelle zur CLI, wie Konventionen wie die zugrunde liegenden Typen für Enum. Der Mono-Compiler generiert ein CLS-konformes Image. Dies ist die gemeinsame Zwischensprache. Die Mono Runtime nimmt dieses Image und führt es aus. Der ECMA-Standard definiert formal eine Bibliothek, die dem CLS als Framework entspricht.

Verwalteter und nicht verwalteter Code

Innerhalb einer nativen .NET/Mono-Anwendung wird der gesamte Code verwaltet ; das heißt, es wird durch die Art der Speicherverwaltung und Thread-Sicherheit der CLI bestimmt. Andere .NET- oder Mono-Anwendungen können Legacy-Code verwenden, der als nicht verwaltet bezeichnet wird, indem die System.Runtime.InteropServices-Bibliotheken zum Erstellen von C#-Bindungen verwendet werden. Viele Bibliotheken, die mit Mono ausgeliefert werden, verwenden diese Funktion der CLI, z. B. Gtk# .

Monospezifische Innovationen

Mono hat in einigen Bereichen mit neuen Erweiterungen der C#- und CLI-Kernspezifikationen Innovationen eingeführt:

  • C#-Compiler als Dienst (Verwenden Sie den C#-Compiler als Bibliothek).
  • Interaktive C#-Shell.
  • SIMD- Unterstützung als Teil des Mono.SIMD-Namespace, in dem Methodenaufrufe an spezielle Vektortypen direkt auf die zugrunde liegenden CPU-SIMD-Befehle des Prozessors abgebildet werden.
  • Vollständige statische Kompilierung von .NET-Code (verwendet auf Mono/iPhone, Mono/PS3).
  • Mono- Coroutinen (wird verwendet, um Micro-Threading-Code und Fortsetzungen zu implementieren , hauptsächlich für Spieleentwickler).
  • Montageeinspritzung in Live-Prozesse.
  • Verwendung von LLVM als JIT-Backend.
  • Cxxi und CppSharp direkte Interop mit C++-Code und -Bibliotheken.

Darüber hinaus ist Mono auf einer Vielzahl von Betriebssystemen und Architekturen verfügbar.

System Anforderungen

Windows 7, Windows 8, Windows 8.1, Windows 10, macOS oder Linux

Ähnliche Projekte

Mehrere Projekte erweitern Mono und ermöglichen es Entwicklern, es in ihrer Entwicklungsumgebung zu verwenden. Zu diesen Projekten gehören:

Plattformübergreifend:

  • Banshee Media Player (stilled), ein plattformübergreifender Musik-Media-Player, der mit Mono und Gtk# erstellt wurde, und auch ein Treiber für Dutzende von C#-basierten Bibliotheken und Projekten für die Medienverwaltung.
  • Beagle (ungewartet), ein Suchsystem für Unix-Systeme.
  • Gecko#, Bindings zum Einbetten der in Mozilla ( Gecko ) verwendeten Layout-Engine .
  • Gtk# , C#-Wrapper um die zugrunde liegenden GTK- und GNOME- Bibliotheken, in C geschrieben und unter Linux, MacOS und Windows verfügbar.
  • Mono Migration Analyzer (MoMA) , ein Tool, das Windows .NET-Entwicklern hilft, Bereiche in ihrem Code zu finden, die möglicherweise nicht plattformübergreifend sind und daher in Mono unter Linux und anderen Unixen nicht funktionieren. Seit Mono 2.8 (2013) nicht aktualisiert; Verwenden Sie stattdessen den .NET Portability Analyzer (dotnet-apiport) von Microsoft.
  • MonoCross , ein plattformübergreifendes Modell-Ansicht-Controller- Entwurfsmuster, bei dem das Modell und der Controller plattformübergreifend geteilt werden und die Ansichten für jede Plattform für eine optimierte Benutzeroberfläche einzigartig sind. Das Framework erfordert Xamarin.iOS und Xamarin.Android.
  • MvvmCross , ein plattformübergreifendes Model View ViewModel- Framework, das Xamarin.iOS und Xamarin.Android zum Entwickeln mobiler Apps verwendet.
  • MonoDevelop eine quelloffene und plattformübergreifende integrierte Entwicklungsumgebung, die das Erstellen von Anwendungen für ASP.NET, Gtk#, Meego, MonoTouch und Silverlight/Moonlight unterstützt.
  • Moonlight (eingestellt), eine Implementierung von Silverlight , die Mono verwendet.
  • OpenTK , eine verwaltete Bindung für OpenGL, OpenCL und OpenAL.
  • QtSharp , C#-Bindungen für das Qt-Framework .
  • Resco MobileBusiness , eine plattformübergreifende Entwicklerlösung für mobile Clients.
  • Resco MobileCRM , eine plattformübergreifende Entwicklerlösung für mobile Clients, die mit Microsoft Dynamics CRM synchronisiert ist .
  • ServiceStack ist ein leistungsstarkes Open-Source-.NET-REST-Webservice-Framework, das die Entwicklung von XML-, JSON- und SOAP-Webservices vereinfacht.
  • SparkleShare ist eine Open-Source-Client-Software, die Cloud-Speicher- und Dateisynchronisierungsdienste bereitstellt.
  • Tao (abgelöst von OpenTK), eine Sammlung von Grafik- und Spielebindungen (OpenGL, SDL, GLUT, Cg).
  • Xwt , ein GUI-Toolkit, das API-Aufrufe nativen Plattformaufrufen der zugrunde liegenden Plattform zuordnet , eine einheitliche API auf verschiedenen Plattformen verfügbar macht und es ermöglicht, dass die grafischen Benutzeroberflächen auf verschiedenen Plattformen ein natives Erscheinungsbild haben. Es ermöglicht das Erstellen von GUI- basierten Desktopanwendungen, die auf mehreren Plattformen ausgeführt werden, ohne dass Code für verschiedene Plattformen angepasst werden muss. Die Xwt-API ist auf jeder unterstützten Plattform einem Satz nativer Steuerelemente zugeordnet. Funktionen, die auf bestimmten Plattformen nicht verfügbar sind, werden durch die Verwendung nativer Widgets emuliert, was im Xwt-Kontext als Hosting bezeichnet wird. Xwt wurde teilweise als GUI-Toolkit (neben GTK#) bei der Entwicklung des Xamarin Studio verwendet . Unterstützte "Backend"-Engines sind: WPF- Engine und Gtk-Engine (mit Gtk# ) unter Windows , Cocoa-Engine (mit MonoMac) und Gtk-Engine (mit Gtk#) unter Mac OS X und Gtk-Engine (mit Gtk#) unter Linux .

Mac OS:

  • Cocoa# – Wrapper um das native macOS-Toolkit ( Cocoa ) (veraltet).
  • Monobjc – eine Reihe von Bindungen für die macOS-Programmierung.
  • MonoMac – neuere Bindungen für die macOS-Programmierung, basierend auf dem MonoTouch-API-Design.

Mobile Plattformen:

  • MonoDroid. Mono für das Android-Betriebssystem. Mit Bindungen für die Android-APIs.
  • MonoTouch . Mono für iPhone, iPad und iPod Touch. Mit Bindungen an die iOS-APIs.

Fenster:

Andere Implementierungen

Microsoft hat eine Version von .NET 2.0, die jetzt nur für Windows XP verfügbar ist , die als Shared Source CLI (Rotor) bezeichnet wird . Die Shared Source License von Microsoft kann den Bedürfnissen der Community nicht genügen (sie verbietet ausdrücklich die kommerzielle Nutzung).

Das stillgelegte Portable.NET- Projekt der Free Software Foundation .

MonoEntwickeln

MonoDevelop ist eine kostenlose integrierte GNOME- Entwicklungsumgebung, die hauptsächlich für C# und andere .NET-Sprachen wie Nemerle , Boo und Java (über IKVM.NET ) entwickelt wurde, obwohl sie auch Sprachen wie C , C++ , Python und Vala unterstützt . MonoDevelop war ursprünglich eine Portierung von SharpDevelop auf Gtk#, hat sich aber seitdem weiterentwickelt, um die Bedürfnisse von Mono-Entwicklern zu erfüllen. Die IDE umfasst Klassenverwaltung, integrierte Hilfe, Codevervollständigung, Stetic (einen GUI-Designer), Projektunterstützung und einen integrierten Debugger.

Der MonoDoc-Browser bietet Zugriff auf API-Dokumentation und Codebeispiele. Der Dokumentationsbrowser verwendet eine Inhaltsverwaltung im Wiki-Stil, die es Entwicklern ermöglicht, die Dokumentation zu bearbeiten und zu verbessern.

Xamarin.iOS und Xamarin.Android

Xamarin.iOS und Xamarin.Android, beide von Xamarin entwickelt , sind Implementierungen von Mono für iPhone und Android- basierte Smartphones. Zuvor nur für die kommerzielle Lizenzierung verfügbar, nach der Übernahme von Xamarin durch Microsoft im Jahr 2016 wurde die Mono-Laufzeit selbst unter der MIT-Lizenz neu lizenziert und sowohl Xamarin.iOS als auch Xamarin.Android werden kostenlos und Open Source bereitgestellt .

Xamarin.iOS

Veröffentlichungsverlauf
Datum Ausführung Anmerkungen
2009-09-14 MonoTouch 1.0 Erstveröffentlichung
2010-04-05 MonoTouch 2.0 iPad- Unterstützung
2010-04-16 MonoTouch 3.0 Unterstützung für iPhone 4
2011-04-06 MonoTouch 4.0 iOS-4-Unterstützung
2011-10-12 MonoTouch 5.0 iOS 5-Unterstützung
2012-09-19 MonoTouch 6.0 iOS 6-Unterstützung
2013-02-20 Xamarin.iOS 6.2 Visual Studio-Unterstützung
2013-07-24 Xamarin.iOS 6.4 .NET 4.5 Async/Await-Unterstützung
2013-06-19 Xamarin.iOS 7.0 XCode 5 und iOS 7 Unterstützung
2014-09-10 Xamarin.iOS 8.0 Unterstützung für iOS 8 und Xcode 6
2015-09-16 Xamarin.iOS 9.0 Unterstützung für iOS 9 und Xcode 7
2016-09-13 Xamarin.iOS 10.0 Unterstützung für iOS 10 und Xcode 8
2017-09-19 Xamarin.iOS 11.0 Unterstützung für iOS 11 und Xcode 9
2018-09-14 Xamarin.iOS 12.0 Unterstützung für iOS 12 und Xcode 10
2019-09-13 Xamarin.iOS 13.0 Unterstützung für iOS 13 und Xcode 11
2020-09-20 Xamarin.iOS 14.0 Unterstützung für iOS 14 und Xcode 12

Xamarin.iOS (früher MonoTouch genannt) ist eine Bibliothek, mit der Entwickler C#- und .NET-basierte Anwendungen erstellen können, die auf iPhone-, iPod- und iPad-Geräten ausgeführt werden. Es basiert auf dem Mono-Framework und wurde in Zusammenarbeit mit Novell entwickelt. Im Gegensatz zu Mono-Anwendungen werden xamarin.iOS-"Apps" zu Maschinencode kompiliert, der speziell auf das Apple iPhone und iPad ausgerichtet ist . Dies ist notwendig, da der iOS-Kernel verhindert, dass Just-in-Time-Compiler auf dem Gerät ausgeführt werden.

Der xamarin. IOS-Stack besteht aus:

  • Compiler
    • C# aus dem Mono-Projekt
    • Compiler von Drittanbietern wie Oxygene von RemObject können auch auf Xamarin.iOS abzielen
  • .NET-Kernbibliotheken
  • Entwicklungs-SDK:
    • Linker – wird verwendet, um nur den Code zu bündeln, der in der endgültigen Anwendung verwendet wird
    • mtouch – der native Compiler und das Tool zum Bereitstellen auf dem Zielgerät
    • Interface Builder- Integrationstools
  • Bibliotheken, die die nativen CocoaTouch-APIs binden
  • Xamarin Studio-IDE

Als primäre IDE wird Xamarin Studio verwendet, es wurden jedoch zusätzliche Links zu Xcode und dem iOS-Simulator geschrieben.

Von April bis Anfang September 2010 wurde die Zukunft von MonoTouch in Frage gestellt, als Apple neue Begriffe für iPhone-Entwickler einführte, die es ihnen anscheinend verbieten, in anderen Sprachen als C, C++ und Objective-C zu entwickeln , und die Verwendung einer Zwischenschicht zwischen den iOS-Plattform und iPhone-Anwendungen. Dies machte die Zukunft von MonoTouch und anderen Technologien wie Unity unsicher. Dann, im September 2010, hob Apple diese Beschränkung auf und erklärte, dass sie die Sprachbeschränkungen lockern würden, die sie Anfang des Jahres eingeführt hatten.

Xamarin.Android

Xamarin.Android (früher bekannt als Mono für Android), ursprünglich von Novell entwickelt und von Xamarin fortgeführt , ist eine proprietäre Implementierung von Mono für Android- basierte Smartphones. Es wurde erstmals am 6. April 2011 veröffentlicht. Mono für Android wurde entwickelt, um Entwicklern zu ermöglichen, einfacher plattformübergreifende Anwendungen zu schreiben, die auf allen mobilen Plattformen laufen. In einem Interview mit H-Online erklärte Miguel de Icaza: "Unsere Vision ist es, Entwicklern zu ermöglichen, ihren Engine- und Geschäftslogikcode auf allen mobilen Plattformen wiederzuverwenden und den Code der Benutzeroberfläche gegen eine plattformspezifische API auszutauschen."

Im August 2010 erklärte ein Microsoft-Sprecher, Tom Hanrahan vom Microsoft Open Source Technology Center, in Bezug auf die Klage von Oracle gegen Google wegen der Verwendung von Java durch Android: Wenn eine .NET-Portierung für Android über Mono erfolgen würde, würde sie unter das Microsoft Community Promise Agreement fallen."

Der xamarin.Android-Stack besteht aus den folgenden Komponenten:

  • Mono-Laufzeit
  • Ein Android-UI-Designer
  • Bibliotheken:
    • Core-.NET-Klassenbibliotheken
    • Bibliotheken, die die nativen Android-/Java-APIs binden
  • SDK-Tools zum Verpacken, Bereitstellen und Debuggen
  • Integration von Xamarin Studio und Visual Studio 2010 zum Entwerfen der Benutzeroberfläche, Remotedebuggen und Bereitstellen.

Lizenz

Mono ist von Xamarin doppelt lizenziert , ähnlich wie andere Produkte wie Qt und die Mozilla Application Suite . Monos C#-Compiler und -Tools werden unter der GNU General Public License (nur GPLv2) veröffentlicht (ab Version 2.0 von Mono ist der Mono C#-Compiler-Quellcode auch unter der MIT X11 License verfügbar ), die Laufzeitbibliotheken unter der GNU Lesser General Public Lizenz (nur LGPLv2) und die Klassenbibliotheken unter der MIT-Lizenz . Dies sind alles freie Software und Open-Source-Lizenzen und daher ist Mono freie und Open-Source-Software .

Die Lizenz des C#-Compilers wurde von der GPL in die MIT X11-Lizenz geändert, um die Wiederverwendung des Compilercodes in einigen Fällen zu ermöglichen, in denen die GPL dies verhindert hätte:

  • Monos Compiler als Service
    • Die interaktive Mono-Shell
    • Der einbettbare C#-Compiler von Mono
  • Monos Implementierung des dynamischen C# 4.0-Binders.
  • Integrierter Parser und AST- Graph von MonoDevelop

Am 18. März 2016 wurde die Übernahme von Xamarin durch Microsoft offiziell abgeschlossen. Am 31. März 2016 kündigte Microsoft auf der Microsoft Build an , Mono auch in Szenarien, in denen zuvor eine kommerzielle Lizenz erforderlich war, vollständig unter der MIT -Lizenz neu zu lizenzieren , und Microsoft erklärte, dass sie keine "anwendbaren Patente" geltend machen werden Parteien, die "Mono verwenden, verkaufen, zum Verkauf anbieten, importieren oder vertreiben". Außerdem wurde bekannt gegeben, dass Xamarin das Mono-Projekt zur .NET Foundation beigetragen hat.

Mono- und Microsoft-Patente

Software entwickelt mit Mono

Banshee Mediaplayer

Viele Programme, die eine Reihe von Anwendungen abdecken, wurden mit der Anwendungsprogrammierschnittstelle (API) von Mono und C# entwickelt. Einige Programme, die für den Linux-Desktop geschrieben wurden, sind Banshee , Beagle , F-Spot , Gbrainy , Docky / GNOME Do , MonoTorrent , Pinta und Tomboy . Das Programm Logos 5 Bible Study Software (OS X Version) wurde für MacOS geschrieben.

Eine Reihe von Videospielen, wie Der Sims 3 und Second Life (für ihre Skriptsprachen ), Open virtuellen Welt - Server oder mit dem eingebauten Spielen Unity oder monogame Game - Engines , auch die Verwendung von Mono machen. OpenRA bündelt sein Apple Disk Image und Linux AppImages mit Mono und entfernt im Wesentlichen fast alle Abhängigkeiten aus dem Spiel.

Siehe auch

Verweise

Zitate

Quellen

Externe Links