Unix dla Windows

Cygwin i Interix to rozwiązania, umożliwiające przenoszenie aplikacji między systemami Windows i Unix.

Cygwin i Interix to rozwiązania, umożliwiające przenoszenie aplikacji między systemami Windows i Unix.

Przenoszenie aplikacji między różnymi platformami jest trudnym zadaniem dla programisty. Każda platforma ma własny zestaw funkcji i narzędzi. Twórcy oprogramowania zwykle starają się w taki sposób tworzyć aplikacje, by moduły zależne od systemu operacyjnego były wydzielone i by można było łatwo je zastąpić. Co jednak zrobić, gdy takiego podziału nie ma lub gdy aplikacja opiera się na cechach właściwych dla określonej platformy?

Cygwin za darmo

Pakiet Cygwin zawiera narzędzia niezbędne do kompilacji na platformie Windows programów pisanych dla Linuxa. Skompilowany program może działać zarówno na Windows 95/98, jak i na NT/2000. Cygwin jest dostępny bezpłatnie na zasadach open source.

Podstawą działania pakietu Cygwin jest specjalna biblioteka DLL, która emuluje jądro (kernel) Unixa. Tworzony jest specjalny segment dzielonej pamięci (jądro musi mieć dostęp do pamięci każdego z procesów), którą następnie wykorzystują wszystkie wątki aplikacji unixowej przeniesione na Windows. Dzięki temu aplikacje Cygwin mogą działać na Windows 95/98. Powoduje to jednak, że poszczególne programy unixowe nie są izolowane - mogą np. omyłkowo odwoływać się do tych samych obszarów pamięci.

Główną zaletą pakietu Cygwin jest ogromna liczba opcji, pozwalających precyzyjnie sterować poziomem "zgodności" narzędzi z określonymi standardami. Nie można jednak stwierdzić, że Cygwin jest w 100% zgodny np. z określonym poziomem Posix. Twórcy pakietu zrezygnowali z zapewnienia kompatybilności w wielu dziedzinach (np. w przypadku plików tekstowych znakiem końca linii jest para CR/LF, a nie pojedynczy znak, jak na Unixie). Problemy mogą pojawiać się także w związku ze sposobem tworzenia wielu procesów z poziomu Cygwin.

Płatny Interix

Interix 2.2 jest rozwiązaniem komercyjnym. Jest to produkt firmy Softway Systems, przejętej przez Microsoft. Początkowo pakiet był określany mianem OpenNT.

Interix oparty jest na zupełnie innej koncepcji niż Cygwin. Windows NT/2000 ma budowę modułową, gdzie podstawą jest Windows NT Kernel. Na bazie tego jądra implementowane są podsystemy udostępniające API dla programistów. Jądro dostarcza podstawowe usługi systemowe np. związane z obsługą sprzętu. Podsystemem jest np. Win32 lub podsystem OS/2. Właśnie w ten sposób Interix implementuje usługi systemowe Unixa. Dzięki temu każdy z procesów jest izolowany, a ponadto nie ma problemów związanych z wydajnością. Podsystem Interix działa tak szybko, jak Win32. Cygwin w rzeczywistości tłumaczy każde odwołanie do API Unixa na odpowiedni kod działający pod kontrolą Win32.

Interix jest w pełni zgodny ze standardem POSIX.1 i POSIX.2, zarówno jeśli chodzi o zbiór dostępnych funkcji dla programisty, jak i zbiór narzędzi. Środowisko Interix bardzo przypomina Unixa. Można korzystać z różnych powłok systemowych (Kern, Tcsh czy gnu bash), programu awk itp. Możliwe jest także to, by na platformie NT otwartych było wiele sesji różnych użytkowników (przy użyciu funkcji Telnet, rlogin itp.) Można uruchamiać daemon (specjalne usługi systemowe) czy odwoływać się do urządzeń przy użyciu nazw unixowych.

Interix pozwala także na administrowanie NT przy użyciu standardowych narzędzi unixowych - dodawanie obsługi kolejnych użytkowników, przydzielanie uprawnień do plików itp. Należy podkreślić, że podsystem Interix działa obok podsystemu Win32. Można zarówno wywoływać aplikacje Win32 z poziomu Interix, jak i z poziomu Win32 odwołać się do powłoki Interix. Do wymiany informacji między podsystemami mogą służyć gniazdka, potoki, pamięć dzielona itp. Te dwa systemy są izolowane. Aplikacja Win32 nie może zakłócić działania procesów Interix i na odwrót.

Microsoft Interix 2.2 zawiera także obsługę XWindows (serwer X11R6.3, klient X11R5, podstawowy zestaw czcionek i menedżer OSF/Motif 1.2.4 z bibliotekami). Obejmuje także obsługę standardu OpenGL. Oprócz tego w pakiecie znajdują się narzędzia dla programistów (debugger gdb, kompilator GNU gcc, analizatory leksykalne itp.) z niezbędnymi bibliotekami. Zaimplementowano m.in. bibliotekę curses i ODBC. Oprócz kompilatora gcc, można skorzystać z kompilatora Microsoft Visual C. Jednak aby kompilować kod C++, należy korzystać z kompilatora GNU - g++.

Interix pozwala, by w oddzielnym podsystemie kompilować i uruchomić aplikację, działającą pod kontrolą Unixa. Bez większych trudności można zapewnić komunikację z aplikacją Win32. Co ciekawsze, można też zamknąć funkcjonalność aplikacji Unixa w obiekcie COM, który będzie dostępny z poziomu Win32. Dzięki temu bardzo łatwo można wykorzystać przetwarzanie danych po stronie Unixa, a wyniki przenieść np. do Excela.

Interix ma zasadniczą wadę - aplikacja działa tylko i wyłącznie na Windows NT (od wersji 3.51) lub Windows 2000. Jeżeli program ma działać na platformie Windows 95/98, konieczne jest użycie innego rozwiązania, np. Cygwin.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200