C# na Linuxie?
Chciałem swego czasu coś pokodować w języku C#… na Linuxie. Wsparcie jest śmieszne i żenujące. Jak przeczytałem po wszystkich próbach na którymś z forum: jeden dyskutant rozmawiał kiedyś z programmerem od środowiska Mono. Powiedział mu (tłumacząc na polski) – “nie bądź głupi, myśląc, że Mono będzie w 100% kompatybilne z C# od Microsofta”. Innymi słowy – programu szczęśliwie za często nie przekompilujesz :) Chociaż ostatnio udało mi się to z jednym moim edytorem do zapisywania animacji postaci dla gier 2D.
Język jest bardzo miły podczas tworzenia aplikacji okienkowych, wszystko można uzyskać w łatwy sposób, a biblioteka .NET jest tak intuicyjna, że można przeglądać referencję i większość z niej zakodować. W przypadku Javy muszę znacznie więcej zaglądać do artykułów na internecie. Ostatnio przesiadłem się na Linux Gentoo [0]. Skoro tak fajnie z C#, to zacznę kodować w tym języku pod Linuxem! – pomyślałem.
Wyszedł Wine 1.0 – emulator programów Windows dla Linuxa (aktualnie jest już 1.1.1). Spróbujmy sił! Montuje plik od Microsofta, obraz VS2008ExpressENUX1397868.iso. Co widze w srodku? readme.txt i nic poza tym :P Probowalem takze sil z vcssetup.exe. Nic z tego, nawet instalator sie nie rozpakowal do konca. Instalacja się nie powiedzie. Przynajmniej nie teraz.
Trudno, trzeba spróbować czegoś innego. Mono [1] jest słabo rozwijającym się projektem, ale mimo to podobno w pełni obsługuje .NET Framework 2.0 i “prawie w pełni” 3.5 (język C# z nowymi featurami w wersji 3.0).
Do projektu Mono (kompilatora) jest stworzony inny – MonoDevelop – środowisko graficzne niby-przypominające SharpDevelop [2] czy Microsoft Visual C# [3]. SharpDevelop to niestety rozwiązanie windowsowe, nie działające także pod Wine, i nie udało mi się go przetestować pod kątem Linuxa. Visual C# jest po prostu pierwszy i genialny.
W MonoDevelop nie działa dobrze podpowiadanie kodu, generowanie go, a także reintepretacja poprzednich projektów z kodu na Designera. Po prostu program mający feature z mnóstwem bugów. Jakby bugów było mało, to są pewne cechy, które wręcz przeszkadzają. Designer w MonoDevelop produkuje kod zależny od Gtk#, rozwiązanie typowo linuxowe.
Nie ma natomiast wielkiego problemu z odpaleniem czegoś skompilowanego. Podczas uruchamiania programu exe z Windowsa – Mono w locie zmienia wnętrze tego pliku na swój format. Domyślam się, że tego samego pliku potem już nie uruchomimy pod Windowsem :)
Używasz Linuxa, a musisz kodować w C#? Najlepszym rozwiązaniem będzie wirtualny PC – komercyjny VMware lub darmowy VirtualBox. I tam zainstalować prawdziwego Visual C# od MS-a. Zawsze twierdziłem, że oryginalne jest lepsze, mimo że nie zawsze tak jest… :)
Podsumowując – na C# pod Linuxem szkoda nerwów JEżELI chcemy aby program był przenośny. Zdecydowanie lepiej w takim wypadku jest zająć się Javą. No, chyba że komuś zupełnie nie odpowiada biblioteka Javy :) Wtedy bardzo polecam wxWidgets [4] na platformie C++, jeszcze przy kompilatorze GCC, aby było bardzo przenośnie pod względem języka :)
[0] http://www.gentoo.org/
[1] http://www.monodevelop.com/Main_Page
[2] http://sharpdevelop.net/OpenSource/SD/
[3] http://www.microsoft.com/express/vcsharp/
[4] http://www.wxwidgets.org/