Najlepsze z dwóch światów - Cygwin vs Services for Unix-based Applications pod Windows 7

Wykorzystuj moc powłoki
Powyższa rada pochodząca z "Pragmatycznego Programisty" zapewne jest oczywista dla użytkowników systemu UNIX, jednak osoby pracujące pod Windowsem często nie zdają sobie sprawy, jak wielkim usprawnieniem jest dobry zestaw narzędzi konsolowych. Powszechnie wiadomo, że procesor poleceń CMD.EXE nie grzeszy funkcjonalnością, jednak istnieją sposoby poszerzenia możliwości systemu Windows w zakresie aplikacji konsolowych. Użytkownicy wersji Enterprise lub wyższych systemu Windows Vista i Windows 7 dysponują funkcją Subsystem for Unix-based Applications (w skrócie SUA, znane też jako SFU lub Interix). Ten element systemu komunikuje się bezpośrednio z jądrem systemu Windows i pozwala aplikacjom Uniksowym działać obok zwykłych aplikacji systemu Windows. Ponieważ API Uniksa działa tutaj równolegle do WinAPI można powiedzieć, że system rozdwaja się i po części staje się Uniksem - narzędzia z tego systemu działają na Windowsie natywnie, bez pośredniej emulacji. SUA pod Windows 7 SUA pod Windows 7 radzi sobie zarówno w tradycyjnej konsoli jak i z aplikacjami X-Window. Po aktywacji i ściągnięciu potrzebnego pakietu SUA zawiera jedynie podstawowy zestaw narzędzi. Całą resztę - w sumie ponad 400 różnych programów - możemy pobrać ze strony SUA Community. Wśród dostępnych aplikacji znajdziemy m.in. ls, awk, grep, perl, ssh, xterm czy vim. SUA nie zawiera serwera X - ten ostatni musimy ściągnąć sami. Istnieją darmowe i płatne alternatywy; ja obecnie korzystam z Xming. Użytkownicy innych wersji systemu Windows 'skazani' są na pakiet Cygwin. Korzystałem z niego pod Windows 2000 i Windows 2003 Server; pakiet ten spisywał się znakomicie. W dużym skrócie, Cygwin to zestaw DLLek emulujących interfejs unikowych bibliotek C i zapewniający kompatybilność z POSIX. W oparciu o nie skompilowano całą masę przeróżnych narzędzi unikowych - począwszy od coreutils i binutils, przez interpretery Perla, Pythona, kompilator TeX, na narzędziach i Window Managerach dla X-Window skończywszy. Dostępnych składników systemu jest wielokrotnie więcej niż w przypadku SUA. Całość wyposażona jest w dość wygodny (aczkolwiek niezbyt prosty w obsłudze) instalator pozwalający w dowolnej chwili aktualizować lub wgrywać nowe pakiety. Cygwin pod Windows 2000 Xterm'y Cygwina pracujące równolegle z aplikacjami Windows 2000. Konstelacja Iridium w aplikacji pod Cygwinem Aplikacja X-Window składająca się z dwóch programów nie wchodzących w skład pakietu Cygwin, lecz ściągniętych i skompilowanych osobno ze źródeł. Używałem Cygwina przez liceum oraz początek studiów i mogę powiedzieć, że - po odrobinie zabawy w upiększanie i dostosowywanie - jest to wspaniałe narzędzie. Niestety, pod systemem Windows 7 występuje poważny problem z działaniem aplikacji Cygwinowych - zgaduję, że jest to spowodowane randomizacją przestrzeni adresowej wprowadzoną wraz z Windows Vista. Częstość i przypadkowość awarii praktycznie dyskwalifikuje Cygwina jako narzędzie pod Windows 7; chyba, że ktoś zna metodę jak doprowadzić produkt Cygnusa do ładu. Cechą wspólną obydwu pakietów jest konieczność rekompilacji każdego dodatkowego narzędzia, którego zechcemy używać - uniksowe binarki nie mogą 'tak po prostu' uruchamiać się pod Windowsem. Ponadto domyślnie oba posiadają nieaktualne zestawy narzędzi - na przykład GCC starsze niż kierunek, na którym studiuję. Wybija się tutaj SUA - narzędzia ściągane z SUA Community są stosunkowo nowe. Pod Cygwinem jednak dostępnych narzędzi jest dużo więcej - wliczając brakujący w SUA serwer X. W obecnej chwili mam też małe problemy z uruchomieniem kolorowania kodami ANSI Escape w xterm'ie pod SUA - z Cygwinem nie było tego problemu. Alternatywą dla powyższych dwóch rozwiązań jest pakiet Perl Power Tools będący implementacją podstawowych narzędzi Uniksa w języku Perl. Inną opcją jest też pakiet UWIN. Pod Windowsem mamy też oczywiście PowerShell'a; jest to narzędzie oparte o zupełnie inne założenia niż system Unix. Różnica ta daje mu możliwości, z którymi warto się zapoznać. Ktoś mógłby zapytać: dlaczego nie zainstalować Linuksa na wirtualnej maszynie? Otóż nawet istnienie współdzielonych folderów nie daje tej swobody użycia narzędzi UNIX przy pracy nad projektami w systemie Windows. W przypadku wirtualnej maszyny mamy wyraźne rozdzielenie systemu-gospodarza i systemu-gościa; mieszanie funkcjonalności obu systemów przy pracy nad jednym projektem, choć technicznie możliwe, jest dosyć skomplikowane. Chociaż SUA w obecnej chwili wymaga Windowsów w wersji dostępnej dla niewielu, warto być świadomym istnienia tego pakietu - może przyjść czas, w którym będzie on dostępny także na tańszych wersjach systemu, może też przyjdzie zetknąć się z nim w pracy zawodowej. Niezależnie od tego, które z omówionych narzędzi jest dla nas dostępne warto zastanowić się, czy nasze obecne i przyszłe projekty nie mogłyby skorzystać z potęgi narzędzi Uniksowych pod systemem Windows. PS. Tak, przesiadłem się na Windows 7 :).