Cygwin
Z Wikipedii
Cygwin to implementacja standardu POSIX funkcji systemowych przeznaczona dla systemów Win32 (32-bitowe pełne wersje od MS Windows 95 dla x86 z wyjątkiem MS Windows CE) oraz zestaw oprogramowania w większości przeniesionego z systemów typu Unix (np. Linux, BSD). Są to głównie aplikacje działające w trybie tekstowym, ale dostępny jest również podsystem grafiki X.Org oraz graficzne środowisko biurkowe KDE. Projekt posiada wygodny w użyciu program instalacyjny.
Cygwin jest rozwijany głównie przez oddział Cygnus Solutions firmy Red Hat i dostępny na licencji GPL. Można również zakupić licencje do użycia w systemach przeznaczonych do dystrybucji pod innymi licencjami (na przykład wyłącznie w postaci skompilowanej).
Cygwin nie zastępuje w pełni np. Linuksa: nie wszystkie linuksowe aplikacje można skompilować dla Cygwina, a te, które się da, na Linuksie chodzą znacznie szybciej niż na Cygwinie. Należy go traktować jako emulator, który pozwala na używanie wielu różnych użytecznych aplikacji z rodziny POSIX na platformie Microsoft Windows – w tym także wiele z oprogramowania FLOSS.
Spis treści |
[edytuj] Kompilacja
W Cygwinie najważniejszą rzeczą jest kompilator GCC, który został specjalnie dostosowany do kompilowania aplikacji cygwinowych. Polega to na tym, że w aplikacjach dodaje się bibliotekę dynamiczną cygwin1.dll. Dostarcza ona funkcje odpowiadające funkcjom systemowym Uniksa (np. open), które używają np. cygwinowych, a nie windowsowych ścieżek do pliku. Pod Cygwinem można oczywiście również kompilować programy dla Windows z użyciem MinGW, bez biblioteki cygwin1.dll.
Jedyną niedogodnością w Cygwinie są rozszerzenia plików w Microsoft Windows – każdy plik wykonywalny musi mieć tam końcówkę .exe. W Cygwinie wiele aplikacji domyślnie sobie to rozszerzenie dodaje, ale nie zawsze jest to możliwe, np. nie wykona tego polecenie rm. Jeśli więc jakiś skrypt spodziewa się, że po kompilacji poleceniem np. gcc *.o –o program powstanie plik o nazwie „program”, to specjalnie dla Cygwina trzeba by go niestety poprawić, bo w rzeczywistości powstanie wtedy „program.exe”.
[edytuj] System plików
Jednym z najważniejszych elementów Cygwina jest wirtualny system plików bazujący na systemie plików Microsoft Windows. Najważniejszym elementem łączącym oba te systemy jest komenda mount, która jest podobna do uniksowej komendy mount i ma podobne działanie: mapuje nazwę katalogu na urządzenie, z tym, że w przypadku Cygwina tym "urządzeniem" jest katalog windowsowego systemu plików.
Po zainstalowaniu Cygwina w katalogu C:\cygwin automatycznym punktem podłączenia katalogu / (czyli root directory) Cygwina jest C:\cygwin, /etc odpowiada windowsowemu C:\cygwin\etc itd. Napędy windowsowe są z kolei dostępne pod specjalnym punktem montowania /cygdrive, a więc odpowiednikiem ścieżki C:\tmp\x w Cygwinie jest (przy domyślnych ustawieniach) /cygdrive/c/tmp/x. Wszystkie te punkty montowania można zmienić za pomocą komendy mount. Do konwersji ścieżek służy polecenie cygpath.
Z każdą wersją Cygwin posiada coraz więcej zarówno elementów charakterystycznych dla systemów POSIX-owych, jak i różnych narzędzi typowo windowsowych (jak windres czy regtool). Istnieje np. system plików /dev, choć oczywiście tylko wirtualnie: tego katalogu nie można nawet czytać, ale odwołanie np. do /dev/null, czy /dev/aux jest poprawne. Istnieje też system plików /proc oraz wprowadzony tylko dla Windows /proc/registry. Istnieją również dowiązania symboliczne, implementowane na bazie plików .lnk. Przy odpowiednich ustawieniach (tryb tylko do odczytu i ścieżka docelowa w opisie) pod Cygwinem rozszerzenie .lnk nie jest pokazywane. Cygwin dziedziczy też pewne ograniczenia windowsowego systemu plików: istnieją różne zastrzeżone nazwy, które nie mogą być nazwami plików, np. nul, aux, prn itd.
[edytuj] Prawa dostępu
Prawa dostępu do plików, użytkowników i grupy Cygwin obsługuje w zależności od systemu plików, na którym pracuje.
Jeśli systemem plików jest FAT, to prawa z tego systemu są odzwierciedlane w prawach POSIX-owych częściowo, np. bit tylko do odczytu jest odzwierciedlony w prawie do zapisu dla użytkownika. W przypadku FAT także użytkownik i grupa są stałe. Prawo do wykonywania zaś jest określane przez rozszerzenie pliku, albo przez jego pierwszy wiersz, jeśli rozpoczyna się ciągiem #!.
W przypadku rodziny Microsoft Windows NT i systemu NTFS pokazywany jest rzeczywisty użytkownik i jego grupa. Pliki /etc/passwd i /etc/group muszą zostać po instalacji wygenerowane na podstawie danych pobranych z systemu (służą do tego polecenia mkpasswd i mkgroup). Pliki wykonywalne zaś są rozpoznawane zarówno po rozszerzeniu lub zawartości, jak i po prawie do wykonywania w NTFS.
[edytuj] Środowisko X
X-serwer Cygwina, XWin, jest obecnie jednym z najlepszych X-serwerów dostępnych pod Microsoft Windows. Umożliwia zarówno uruchamianie zdalnych aplikacji, jak i uruchamianie lokalnie Cygwinowych aplikacji X-owych. Posiada również całkiem sprawnie działające biblioteki, choć jak dotąd nie wszystkie biblioteki korzystające z X-ów działają w pełni stabilnie, np. Qt, a tym samym KDE (programiści z Trolltech przyznają, że nie testowali Qt na Cygwinie, w ostatnim czasie jednak program instalacyjny Cygwina dostarcza pakiet z Qt).
Rozwijaniem środowiska X pod Cygwinem zajmuje się podprojekt Cygwin/X. Obecnie używaną implementacją protokołu X jest kod X.Org.
[edytuj] Historia
Cygwin został zapoczątkowany w 1995 r. przez Steve'a Chamberlaina, inżyniera Cygnusa, który zauważył, że zarówno Windows NT jak i 95 jako swój domyślny format używają COFF, a narzędzia GNU obsługiwały już wtedy COFF i platformę x86. Pozwalało to teoretycznie na łatwą modyfikację GCC i uzyskanie w ten sposób skrośnego kompilatora tworzącego pliki wykonywalne dla środowiska Microsoft Windows. Potwierdziło się to w praktyce, szybko powstała więc wersja prototypowa.
Kolejnym etapem była próba przeniesienia na platformę Windows samego kompilatora, lecz wymagało to przygotowania emulacji także dla skryptu konfiguracji GNU, a więc działającej powłoki w rodzaju bash, która z kolei wymagała obsługi uniksowej funkcji fork i standardowego wejścia/wyjścia. Ponieważ Windows zawiera takie mechanizmy, więc biblioteka Cygwina musiała tylko dokonywać translacji wywołań i zarządzać pewnymi danymi, takimi jak deskryptory plików.
W 1996 r. do projektu dołączyli inni programiści, ponieważ stało się jasne, że Cygwin może stać się wygodnym sposobem zapewnienia narzędzi Cygnusa do urządzeń wbudowanych dla systemów z rodziny MS Windows (poprzednio w tym celu używano DJGPP). Szczególnie atrakcyjna była możliwość złożonej skrośnej kompilacji, na przykład budowania skrośnego kompilatora Windows-na-MIPS na silnych stacjach roboczych Suna, zamiast na ówczesnych wolniejszych PC-tach. W okolicach roku 1998 Cygnus rozpoczął także samodzielną dystrybucję Cygwina.