Cygwin

Cygwin – kolekcja narzędzi wolnego i otwartego oprogramowania, które udostępniają programom działającym pod systemem Windows funkcjonalność przypominającą system Linux, a także biblioteka dla systemu Windows standardu POSIX. Aplikacje używają głównie interfejsu tekstowego, ale dostępny jest również podsystem grafiki X.Org oraz graficzne środowiska GNOME i 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 kompilować i uruchamiać w środowisku Cygwin, ponadto efektywność ich działania spada w porównaniu do efektywności wykonania zapewnianej przez środowisko natywne. Można go traktować jako emulator, który pozwala na wykorzystywanie wielu aplikacji z rodziny POSIX na platformie Microsoft Windows – w tym także oprogramowania FLOSS.

Kompilacja 
Najważniejszym elementem w Cygwinie jest kompilator GCC, który został specjalnie dostosowany do kompilowania aplikacji cygwinowych. Do aplikacji kompilowanych pod Cygwinem dodaje się bibliotekę dynamiczną cygwin1.dll, która dostarcza funkcji odpowiadających funkcjom systemów Unix (np. open). Funkcje te używają cygwinowych, a nie windowsowych ścieżek do pliku.
Pod Cygwinem można również kompilować programy dla Windows z użyciem MinGW, bez biblioteki cygwin1.dll.

Jedną z niedogodności w Cygwinie są rozszerzenia plików w Microsoft Windows – każdy plik wykonywalny musi mieć końcówkę .exe. W Cygwinie wiele aplikacji dodaje to rozszerzenie domyślnie, ale nie zawsze jest to możliwe, np. nie wykona tego polecenie rm.
Przykładowo, jeśli jakiś skrypt spodziewa się, że po kompilacji (np. poleceniem gcc *.o –o program) powstanie plik o nazwie „program”, to specjalnie dla Cygwina należy go poprawić, bo w rzeczywistości powstanie plik „program.exe”.

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 komendy mount z systemów Unix 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, 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.

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, lub przez jego pierwszy wiersz, jeśli rozpoczyna się ciągiem #!.

W przypadku rodziny 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.

Środowisko X 
X-serwer Cygwina, XWin 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.

Historia 
Cygwin został zapoczątkowany w 1995 r. przez Steve'a Chamberlaina, inżyniera Cygnus Solutions, który zauważył, że zarówno Windows NT jak i 95 jako swój domyślny format plików wykonywalnych 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 cross-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 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 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 kompilacji skrośnej, na przykład budowania cross-kompilatora Windows-na-MIPS na silnych stacjach roboczych Suna, zamiast na ówczesnych wolniejszych PC.
W okolicach roku 1998 firma Cygnus Solutions rozpoczęła także samodzielną dystrybucję Cygwina.

Zobacz też 
 MinGW
 Interix

Przypisy

Linki zewnętrzne 
 Strona domowa Cygwina

Emulacja
Oprogramowanie na licencji GNU GPL
Wolne oprogramowanie napisane w C