Logo programu | |
| Autor | Xamarin (wcześniejXimian przejęty później przezNovell) oraz społeczność Mono |
|---|---|
| Pierwsze wydanie | 30 czerwca 2004 |
| Aktualnawersja stabilna | 6.12.0.206 (13 lutego 2024) [±] |
| Aktualnawersja testowa | 6.12.0.184 (4 sierpnia 2022) [±] |
| Platforma sprzętowa | x86,x86-64,ARM,MIPS,PowerPC,SPARC,IA-64 |
| System operacyjny | Windows,GNU/Linux,OS X,Unix,BSD,Solaris,iOS,Android,Windows Phone |
| Rodzaj | środowisko uruchomieniowe |
| Licencja | GPLv2,LGPLv2 iMIT |
| Strona internetowa | |
Mono – zestaw narzędzi umożliwiający uruchamianie programów stworzonych dla platformy.NET Framework, w skład których wchodzi między innymikompilator językaC# oraz środowisko CLR (Common Language Runtime).
Celem Mono jest nie tylko umożliwienie uruchamiania aplikacji stworzonych dla platformy Microsoft .NET na różnych platformach, ale również umożliwienie twórcom oprogramowania dla systemuGNU/Linux znacznie szerszego rozwoju[1].
Mono może być uruchamiane na wielu systemach operacyjnych, włączając w toAndroida,Windows Phone, większośćdystrybucji GNU/Linuksa,BSD,OS X,Windows,Solaris. Wspierane są również konsole do gier, takie jak:PlayStation 3,Nintendo Wii iXbox 360.
Logiem Mono jest głowa małpy widziana z profilu. Z języka hiszpańskiegomono oznacza właśnie małpę.
Historia Mono sięga roku 2000, w którym toMicrosoft opublikował .NET Framework, określając go jako „nową platformę bazującą na internetowych standardach”[2]. W grudniu tego roku CLI, czyliCommon Language Infrastructure, została ogłoszona jako otwarty standardECMA-335[3], otwierając tym samym drogę do powstania niezależnych i otwartychimplementacji tego standardu[4].
Miguel de Icaza z firmyXimian zauważył, że w platformie .NET drzemie potencjał, który umożliwi zwiększenie produktywności powstającego kodu i ułatwi pracę programistów. Dodatkowo umożliwi ona tworzenie aplikacji wieloplatformowych bez konieczności korzystania z natywnego języka dla danej platformy. W związku z tym rozpoczęto prace nad przygotowaniem implementacji platformy .NET dla systemu Linux. Wkrótce okazało się, że projekt ten jest zbyt obszerny, aby poradziła sobie z nim niewielka garstka programistów. W związku z tym, 19 lutego 2001 roku, na konferencjiO’Reilly ogłoszono rozpoczęcie prac nad otwartym projektem Mono.
Po trzech latach pracy, 30 stycznia 2004 roku opublikowano Mono 1.0. Z małego projektu, którego początkowym założeniem było stworzenie platformy programistycznej dla desktopowej wersji systemu Linux, stało się ono platformą programistyczną, która umożliwiała uruchamianie aplikacji przystosowanych dla środowiska .NET Framework na szerokiej gamie platform sprzętowych i na wielu systemach operacyjnych, wliczając w tosystemy wbudowane.
Po tym, jak w kwietniu 2011 rokuNovell został wykupiony przezAttachmate i rozpoczęła się fala zwolnień pracowników Novella, istnienie i dalszy rozwój projektu Mono stanął pod znakiem zapytania. 16 maja 2011 roku po tym, jak został zwolniony z firmy Novell, Miguel de Icaza ogłosił na swoim blogu, że prace nad Mono będą kontynuowane przez firmęXamarin, którą właśnie założył. Grupa, która w Novellu pracowała nad projektem Mono, została zatrudniona w Xamarinie. Wtedy też pojawiła się informacja, że Xamarin będzie nie tylko kontynuował prace nad Mono w swojej pierwotnej formie, ale również stworzy od podstaw port komercyjnego środowiska .NET dla systemy iOS i Android, gdyż Novell posiadał prawa doMonoTouch dla iOS iMono for Android dla systemu mobilnego firmyGoogle.
Po tym wpisie na blogu głównego twórcy Mono pojawiło się wiele komentarzy na temat dalszego rozwoju projektu, gdyż MonoTouch i Mono for Android były własnością Attachmate, które przejęło Novella. Nowej inicjatywie zarzucano, że pojawią się trudności z udowodnieniem tego, że nie będzie ona bezpośrednio wykorzystywać technologii, które zostały wcześniej opracowane przez tych samych pracowników, którzy tworzyli je w Novellu.
Jednak w lipcu 2011 roku Novell będący już częścią Attachmate i Xamarin zawarły porozumienie, w którym udzielono wieczystej licencji na Mono, MonoTouch i Mono for Android firmie Xamarin. Dzięki temu Xamarin może oficjalnie wykorzystywać wcześniejsze prace i gospodarować całym projektem.
Wersja 3.2.1 (wydana w sierpniu 2013 roku) oferuje podstawowe API .NET Framework, wsparcie dla językówVisual Basic.NET iC# w wersjach 2.0, 3.0 i 4.0, technologięLINQ to Objects,XML iSQL.
W chwili obecnejC# 4.0 jest domyślnie wykorzystywany przez kompilator językaC# dostępny w Mono. Dodatkowo wspierany jestgraficzny interfejs programowania aplikacjiWindows Forms 2.0, ale jego implementacja nie jest jeszcze kompletna. Obecnie głównym celem Mono jest zapewnienie pełnego wsparcia dla wszystkich udogodnień .NET 4.0 takich jak WF (Windows Workflow Foundation) oraz w pewnym stopniu WCF (Windows Communication Foundation). Wyjątkiem jest tutaj WPF (Windows Presentation Foundation), który nie jest wspierany ze względu na ogrom pracy, jaki należałoby włożyć, aby funkcjonował on poprawnie.
Część z funkcjonalności .NET Framework będących w fazie rozwoju jest częścią subprojektu Mono, któremu nadano nazwę Olive. W projekcie Mono znalazło się również miejsce dla kompilatora i środowiska uruchomieniowegoVisual Basic .NET. Pracami nad portem VB.NET zajmuje sięRolf Bjarne Kvinge.
W skład projektu Mono wchodzi również otwarta implementacja technologiiSilverlight, która nazwana zostałaMoonlight. Jest ona dostępna od wersji Mono 1.9. Moonlight 1.0, które wspiera API Silverlight 1.0 zostało udostępnione w 20 stycznia 2009 roku. Moonlight 2.0 daje możliwości Silverlight 2.0 oraz część z funkcjonalności Silverlight 3.0. Wersja preview Moonlight 3.0, ogłoszona w lutym 2010 roku, dodała wsparcie Silverlight w wersji 3. Jednak rozwój Moonlight został oficjalnie zakończony 29 maja 2012 roku. Oficjalnym powodem była decyzja Miguela, który stwierdził, iż istnieją dwa czynniki, które powodują, że dalszy rozwój skazany jest na porażkę – sztuczne ograniczenia Microsoft, które powodują, że Silverlight jest bezużyteczny przy tworzeniu aplikacji nakomputery osobiste oraz brak wystarczającej popularności w Internecie, która napędzałaby dalszy rozwój.
Sam rozwój Silverlight został porzucony przez Microsoft w 2012 roku.
Mono składa się z trzech grup komponentów:
Główne komponenty zawierają kompilator C#, wirtualną maszynę dla CLI oraz główne biblioteki klas .NET. Bazują one na standardachEcma-334 iEcma-335, przez co Mono jest wolną i otwartą wirtualną maszyną CLI.
Oba standardy na których bazuje projekt mono, zostały udostępnione przez Microsoft jako OSP (Open Specification Promise), czyli zobowiązanie Microsoft do otwartego rozpowszechniania specyfikacji.
Stos rozwojowy Mono/Linux/GNOME dostarcza narzędzi i aplikacji deweloperskich z wykorzystaniem istniejącego środowiska GNOME oraz wolnych i otwartych bibliotek kodu. W jego skład wchodzą:
Gtk# umożliwia integrację aplikacji tworzonych w Mono z pulpitemGnome jako aplikacji natywnych. Bibliotekibaz danych dostarczają możliwość połączenia z najpopularniejszymi bazami danych, takimi jak:db4o,Firebird,Microsoft SQL Server (MSSQL),MySQL,ODBC,Oracle,PostgreSQL,SQLite oraz z innymi popularnymi silnikami baz danych. O tym, jakie bazy danych są obsługiwana twórcy projektu informują na bieżąco na swojej stronie internetowej.
Stos zgodności z produktami firmy Microsoft zapewnia możliwość portowania aplikacji MS.NET Framework do systemuGNU/Linux. Ta część umożliwia wykorzystanieADO.NET,ASP.NET iWindows Forms. Komponenty te nie są ustandaryzowane przezEcma, część z nich możliwa była do udostępnienia dzięki umowom między Novellem a Microsoftem.
Główne komponenty Mono zawierają;
Środowisko uruchomieniowe Mono zawiera silnik, który umożliwia tłumaczenie kodu bitowego ECMA CIL do kodu natywnego, który może zostać wykonany na różnych architekturach procesorów:ARM, MIPS (jedynie wersji 32-bit), SPARC, PowerPC, S390 (w trybie 64-bit), x86, x86-64 I IA-64 w trybie 64-bit.
Generator kodu może działać w trzech trybach:
Począwszy od wersji Mono 2.6, istnieje możliwość takiej konfiguracji środowiska, aby używaćLLVM (ang. Low Level Virtual Machine –maszyna wirtualna niskiego poziomu) jako głównego silnika generowania kodu, zamiast silnika Mono. Ta funkcjonalność jest bardzo przydatna w przypadku programów wykorzystujących duże zasoby komputera oraz w przypadku, gdy szybkość i wydajność wykonania kodu jest ważniejsza niż wydajność uruchomienia aplikacji.
Od Mono w wersji 2.7 Preview nie ma już potrzeby wyboru silnika generującego kod w trakcie konfiguracji, gdyż może on zostać wybrany jako parametr startowy środowiska (jako jedna z dwóch opcji startowych: –llvm lub –nollvm). Dzięki temu w szybki sposób można wybrać potrzebny w danej chwili generator kodu.
Od Mono 2.8 dostarczane były 2 wersjegarbage collectora: wielopoziomowy garbage collector (generational collector) oraz konserwatywnygarbage collector Bohema (Bohem conservative collector).
Przed wersją Mono 3.1.1 domyślny garbage collector (Bohem-Demers-Weiser GC) zawierał kilka poważnych ograniczeń w stosunku do komercyjnych silników GC zaimplementowanych w środowiskach takich jak maszyna wirtualna Javy czy .NET Framework.
Użycie garbage collectora w długo działających aplikacjach serwerowych może powodować poważne błędy, ze względu na fakt, iż silniki GC mogą wywoływać chwilowe wycieki pamięci w niektórych typach aplikacji.
W październiku 2010 roku zaprezentowano garbage collector nowej generacji – Sgen-GC (Simple Generational Garbage Collector). Stał się on integralną częścią Mono 3.1.1 i jest on tam domyślnym silnikiem GC. W wersjach Mono 2.8 – 3.1.0 może on zostać wybrany przez użytkownika jako silnik garbage collectora poprzez argument, z którym zostanie uruchomione środowisko (–gc=sgen). Nowy garbage collector ma wiele udogodnień w stosunku do swoich poprzedników, w szczególności do najbardziej rozpowszechnionego sinika CG Bohema. Wykorzystuje on mechanizm generational garbage collection.
Biblioteki klas dostarczają kompleksowy zestaw narzędzi do tworzenia aplikacji. Są one w większości napisane w języku C#, ale zgodnie ze specyfikacją CLS (Common Language Specification) mogą one zostać użyte w którymkolwiek języku dostępnym na platformę .NET. Biblioteki klas zebrane są wprzestrzenie nazw i opublikowane w postaci współdzielonych bibliotek zebrane w większe zestawy.Odwoływanie się do jakichkolwiek klas .NET Framework powoduje właśnie wywołanie wspomnianych bibliotek.
Przestrzenie nazw (ang.namespaces) są mechanizmem logicznego zebrania podobnych do siebie klas w hierarchiczną strukturę. Dzięki temu o wiele łatwiej uniknąć jest konfliktów w nazewnictwie. Przestrzenie nazw zaimplementowane są z wykorzystaniem notacji słów oddzielonych kropkami, dzięki czemu zawsze wiadomo, z której przestrzeni nazw w danej chwili się korzysta. Dodatkowo w większości przypadków nadrzędną przestrzenią nazw jest przestrzeń System, więc podrzędne przestrzenie otwierane są jako System.IO (dla operacji wejścia/wyjścia) czy System.Net (dla elementów składowych .NET Framework). Oczywiście istnieje o wiele więcej nadrzędnych przestrzeni nazw, jak na przykład Accessibility czy Windows.
MonoDevelop jest darmowym,zintegrowanym środowiskiem programistycznym dla środowiska graficznegoGNOME, które zostało zaprojektowane do współpracy z językiemC# i innymi językami .NET, takimi jakNemerle,Boo iJava (poprzezIKVM.NET). Dodatkowo wspiera ono takie języki jakC,C++,Python, Java czyVala.
Początkowo MonoDevelop było portem środowiskaSharpDevelop doGtk#, ale później wyewoluowało w narzędzie, które miało sprostać potrzebom bardzo szybko rozrastającej się społeczności użytkowników. Obecnie IDE zawiera system zarządzania klasami, wbudowaną pomoc, uzupełnianie kodu, programStetic umożliwiający tworzenie interfejsu użytkownika, wsparcie dla projektów i zintegrowany debugger.
PrzeglądarkaMonoDoc daje dostęp do dokumentacji API i do przykładowego kodu. Dokumentacja wykorzystuje stylwiki, umożliwiając dostęp do edycji i poprawek dla każdego użytkownika.
MonoTouch iMono for Android są implementacjami Mono dla smartfonów opartych na systemachiOS iAndroid. Są one wydane jedynie na licencji komercyjnej, za którą należy zapłacić.
Xamarin.iOS (wcześniej nazywane MonoTouch) jest biblioteką, która umożliwia programistom tworzenie aplikacji w językuC# opartych na platformie .NET, które można uruchomić na urządzeniach firmyApple, takich jak:iPhone,iPod czyiPad. Bazuje ona na frameworku Mono i powstaje przy współpracy firmyXamarin z firmąNovell.
Niestety poprzez architekturę systemu na urządzeniach wyprodukowanych przez firmę Apple, aplikacje nie mogą wykorzystywać kompilatoraJIT. Wynika to z faktu, że jądro systemuiOS nie umożliwia uruchomienia maszyny wirtualnej. Aplikacje tworzone z użyciem bibliotek zawartych wXamarin.iOS są kompilowane do kodu maszynowego, który może zostać zinterpretowany przeziPada,iPhone’a czyiPoda.
W składXamarin.iOS wchodzą:
Xamarin Studio używane jest jako domyślne IDE, ale korzystając z systemuMac OS X można użyć programuXcode i wbudowanego w niego symulatora systemuiOS.
Od kwietnia do września 2010 roku, dalsze losyMonoTouch stanęły pod znakiem zapytania. Powodem tego były zapowiedziane przez Apple nowe warunki dla twórców aplikacji, które jednoznacznie zabraniały korzystania z innych języków niżC,C++ czyObjective-C na tej platformie oraz zakazywały stosowania dodatkowej warstwy wirtualizacji pomiędzy platformą iOS a aplikacjami. Te same restrykcje miały objąć również inne technologie, jak na przykładUNITY. Jednak we wrześniu 2010 roku Apple zniosło te restrykcje i umożliwiło dalszy rozwój projektu.
Xamarin.Android (pierwotnie znano jakoMono for Android) zostało stworzone przez firmęNovell, a następnie rozwinięte przez firmęXamarin jako implementacja Mono dla smartfonów bazujących na systemieAndroid.
Pierwsze wydanie pojawiło się 6 kwietnia 2011 roku. Mono for Android zostało stworzone, aby umożliwić twórcom oprogramowania w znacznie łatwiejszy sposób pisanie multiplatformowych aplikacji, które mogą zostać uruchomione na urządzeniach mobilnych.
W wywiadzie udzielonym dlaH-Online, Miguel de Icaza powiedział:
Our vision is to allow developers to reuse their engine and business logic code across all mobile platforms and swapping out the user interface code for a platform-specific API.
Słowa te utorowały drogę do rozwoju implementacji platform .NET dla system Android.
W sierpniu 2010 roku rzecznik firmy Microsoft,Tom Hanrahan pracujący wMicrosoft Open Source Technology Centre odniósł się do pozwu sądowego wniesionego przeciwko Google, które używało w AndroidzieJavy rozwijanej przezOracle:
The type of action Oracle is taking against Google over Java is not going to happen. If a .NET port to Android was through Mono it would fall under the Microsoft Community PromiseAgreement.
Przyczyniło się to do szybkiego rozwoju implementacji .NET dla Androida.
W składXamarin.Android wchodzą:
Mono współpracuje zsystemami operacyjnymiGNU/Linux,UNIX,Mac OS X,Solaris,FreeBSD,OpenBSD,NetBSD,Wii,PlayStation 3,iOS,Android iMicrosoft Windows.
Możliwe jest uruchamianie aplikacji przeznaczonych dla .NET. Z platformą Mono mogą być używane m.in.kompilatory następującychjęzyków programowania:C#,Java,Boo,Nemerle,Visual Basic.NET,Python,JavaScript,Oberon,PHP,Object Pascal,Lua orazCobra.