MonoCzęsto, gdy porównywane są technologie ASP.NET czy PHP, czy języki programowania Java i C# pada cała lista za i przeciw tym rozwiązaniom. Siłą PHP i Javy jest to , że reprezentują rozwiązania, które działają prawie wszędzie. Jest to zwykle argument przeciw rozwiązaniom .NET, ponieważ one działają tylko pod systemem operacyjnym Windows.
Jednak w czasie takiej dyskusji zawsze pojawi się fan, który będzie bronił swojej technologii i powie “Pod Linux-em jest Mono więc .NET też działa na wiele platform”. Za każdym razem gdy, widzę takie twierdzenie zastanawiam się jak bardzo jest ono zgodne z prawdą. Fakt możesz w Mono napisać aplikację ASP.NET pod Linux-em, ale czy w tym jest jakiś haczyk..
Gdy firmy zaczynają projekty często zastanawiają się w jakiej technologii je pisać. Często pytanie o to, czy nasz projekt w technologii X będzie działał wszędzie decyduje o jej wyborze.
Nie mówimy więc tutaj tylko o agresywnych dyskusjach, która technologia jest najlepsza, mówimy tu też o czystym biznesie.
Ten kontr argument “Mono” staje się wtedy częścią dużej dyskusji, ponieważ nie ukrywajmy C# i platforma .NET to przyszłość i łatwo się w niej programuje. Dla niektórych rozwiązanie Mono jest ziemią obiecaną, bo kochają równocześnie język C# i systemy Linux , a ci panowie też mogą się ze sobą dogadać.
Mono nie jest odpowiedzią i co teraz
Wyobraźmy sobie biznesową prezentację, w której jeden z nieprzygotowanych pracowników próbuje podkreślić, dlaczego dany projekt musi być napisany w .NET i w C#. W jednym slajdzie podkreśla, że jak chcemy celować też pod systemy Linux do po prostu przeniesiemy magicznie to wszystko do Mono. Podważenie tego argumentu nie wymaga dużego wysiłku.
- .NET jest implementacją CLI stworzoną przez firmę Microsoft natomiast Mono jest implementacją CLI firmy Novell. Różne firmy różne rozwiązania.
- W przypadku Javy OpenJDK i wszyscy jego dostawcy JVM zdały oficjalne egzaminy firmy Sun Oracle upewniając ,że te rozwiązania działają poprawnie.
- Mono śledzi nowe wydania .NET i próbuje go ciągle doganiać. Na jakim poziomie jest platforma Mono.
- Czy wszystkie elementy GUI (Windows Forms) poprawnie działają? To nie są te same elementy graficzne, co na systemie Windows.
- Firma nie chce być zależna od frameworku OpenSource jako ich oficjalnego planu B.
Zacznijmy więc od punktu pierwszego i go rozbudujmy. Spróbujmy pomóc naszemu nieprzygotowanymi pracownikowi i bez lania wody wytłumaczymy wszystkim, jaka jest rzeczywistość.
Fakty
Mono i .NET reprezentują dwie różne implementacje tego samego standardu. Mono nigdy nie ogłosił , że jest przenośny z platformą .NET. Mono też nie jest klonem .NET. Dla niektórych dużym zaskoczeniem jest to, że za rozwiązaniem Mono stoi firma Novell.
Fakt , że w ogóle platforma Mono istnieje zawdzięczamy temu ,że język programowania C# jest otwartym standardem. Czyli język C# nie jest ściśle powiązany z platformą .NET.
Nie ma żadnych informacji o tym, czy Microsoft udostępnia jakiekolwiek narzędzie do walidacji spójności implementacji. Jeśli tak jest, to zapewne programiści Mono tego narzędzia używają.
Pogram MonoDevelop pod systemem Apple. Kod C#
Mono zawsze jest trochę do tyłu z platformą .NET. W dawnych czasach Mono długo zastygało z poprzednimi wersjami .NET ,obecnie już tak nie jest.
Obecnie Mono może uruchomić kod C# w wersji 4.0.
Ostatnio nawet Microsoft nadał wszystkim bibliotekom DLR licencję Apache 2.0, czyli stały się one produktami Open Source. Dzięki temu Mono bez problemu może używać języków jak IronPython i IronRuby.
Język F# też stał się produktem open source.
Microsoft regularnie wypuszcza wersje CTP z nowymi bajerami platformy .NET więc programiści Mono potrafią w błyskawicznym czasie być na bieżąco z platformą .NET.
Istnieje wiele bibliotek, które zostały w pełni napisane w Mono i są używane w platformie .NET.
Aplikacje WinForms nie są całkowicie przenośne. Jest to technologia specyficzna dla .NET i nie jest ona częścią CLI.
CLI nie określa, jak grupa dodatków ma działać.
Najprościej mówiąc, gdybyś chciał napisać projekt w WinForms z myślą o rozwiązaniu cross-platform. Najlepiej by było zacząć od rozwiązania Mono i z bibliotekami GTK#. Mono oferuje wrapper-a na istniejącej API Winforms, co daje możliwość portowania aplikacji WinForms bez konieczność pisania ich od nowa.
WPF nie istnieje w platformie Mono. Żadna grupa nie pracuje nad jego implementacją. Na pocieszenie powiem , że Java też ma problem z zaawansowanymi graficznie aplikacjami.
Silverlight działa w Mono pod projektem MoonLight.
ASP.NET istnieje i działa na bibliotekach GTK#.
Mono oferuje też narzędzie do sprawdzenia poziomu migracyjności twojego kodu. Mono Migration Analyser (MoMA) podkreśla, jakie funkcjonalności nie mogą być użyte w Mono (P/Invokes).
Podsumowanie
Twierdzenie , że platforma .NET jest cross-platfroma jest więc fałszywe. Aplikacja Windows napisana w .NET, z automatu nie zadziała pod systemem Linux.
Jednak Mono w dużym stopniu upraszcza proces migracji kodu pomiędzy platformami.
Jeśli bardzo zależy ci na napisaniu takiej aplikacji od zera to wiedz ,że platforma Mono może być zainstalowana pod systemem Windows, co oznacza ,że twoja aplikacja napisana Mono będzie działać wszędzie.
Projekty Mono mogą być otworzone w Visual Studio, jeśli nie jesteś dużym fanem programu MonoDevelop. To prawie perfekcyjny klon tylko brakuje mu różnych dodatków, z których słynie Visual Studio.