# Cygwin

Mit Cygwin [ˈsɪɡwɪn] lassen sich Computerprogramme, die üblicherweise unter POSIX-Systemen wie GNU/Linux, BSD und Unix laufen, auf das Betriebssystem Windows von Microsoft portieren. Es ist eine Kompatibilitätsschicht, die die Unix-API für verschiedene Versionen von Windows zur Verfügung stellt, auf deren Basis eine Vielzahl von Programmen aus der Unix-Welt unter Windows übersetzt werden kann.
Cygwin wurde ursprünglich von der Firma Cygnus Solutions programmiert und seit deren Übernahme durch die Softwarefirma Red Hat erfolgt dort die Weiterentwicklung.

## Funktionsweise

Kern von Cygwin ist eine DLL (cygwin1.dll), die ein Pendant der Unix-Systemaufrufe zur Verfügung stellt, bzw. solche auf die entsprechenden Funktionen der Windows-API übersetzt. Die mit Cygwin portierten Programme sind normalerweise nicht ohne diese Umgebung lauffähig, da sie gegen die Cygwin-DLL gelinkt werden und somit von dieser abhängig sind.

## Funktionalitäten

Während Pakete für Cygwin zunächst noch umständlich per Hand portiert werden mussten, gibt es für Entwickler mit Cygport heute auch ein eigenes Build- und Paketverwaltungsprogramm, das sich grob an Gentoos Portage orientiert. Pflege und Updates einer Installation und ihrer Pakete erfolgen für normale Anwender über ein einfaches Setup-Programm mit Windows-Oberfläche.
Es gibt mit Cygwin/X auch eine Portierung des X.Org-Servers auf die Cygwin-Umgebung, so dass unter Microsoft Windows ein kompletter X-Server bereitsteht.
Durch den portierten X-Server ist es möglich, entweder UNIX/Linux-Programme, die für Windows kompiliert wurden, lokal auf dem Windows-Rechner auszuführen (Ausführen von startxwin.bat), oder aber Programme, die auf einem Unix- oder Linuxrechner ausgeführt werden, auf Windows darzustellen; auch kann man sich, ausgehend von dem Windows-Rechner, auf dem Unix-Rechner einloggen (Ausführen von startxdmcp.bat).
Dies kann für Privatanwender und Programmierer interessant sein, die Windows und Unix/Linux gleichzeitig einsetzen.
Lokale Partitionen werden mit /cygdrive/c, /cygdrive/d etc. angesprochen. Auf Windows-Freigaben kann mit //host/share/file zugegriffen werden.
Auch ein SSH-Server ist durch Cygwin möglich, der unter Windows als Service installiert werden kann. Häufig wird Cygwin auch genutzt, um Bash-Prozeduren zu programmieren, die dann automatisierte Systemfunktionen erfüllen können. Dazu gehören unter anderem lokale oder entfernte Datensicherungen auf andere Unix-Systeme. Eine ähnliche Funktionalität wie Cygwin realisierte Microsoft mit dem Services-für-Unix-Paket (SFU) und dessen Nachfolger Windows Subsystem for Linux.

## Geschichte

Cygwin begann im Jahr 1995 als ein Projekt von Steve Chamberlain, einem Cygnus-Entwickler. Ihm war aufgefallen, dass auf PCs mit Intel-x86-CPUs, die Windows NT und Windows 95 als Betriebssystem hatten, in der Regel COFF als Objekt-Dateiformat benutzt wurde. Außerdem war ihm aufgefallen, dass die GNU-Compiler (GCC) bereits Unterstützung für x86 und COFF in Zusammenhang mit der C-Bibliothek newlib boten. Also sollte es, so seine Folgerung, – zumindest in der Theorie – nicht allzu schwierig sein, den GCC neu auszurichten, um damit einen weiteren Cross-Compiler zu schaffen, der dann unmittelbar ausführbare Dateien für die Windows-Plattform lauffähig erzeugt. In der Praxis war die Aufgabe mit einem gewissen Aufwand verbunden, den Chamberlain schließlich erfolgreich meisterte, so dass erste Beispielprogramme erzeugt und getestet werden konnten.
Als Nächstes sollte auch der Compiler selbst dazu gebracht werden, auf einem Windows-System zu laufen; dazu mussten zunächst einige Basiskomponenten der üblichen GNU-Konfiguration, diverse Shell-Skripte sowie die Bash-Shell selbst auf dem Windows-System in einer Emulation lauffähig gemacht werden. Das Win32-API von Windows enthielt bereits zahlreiche sehr ähnliche Funktionen, sodass das Gros der verwendeten Systemaufrufe lediglich angepasst werden musste. Dies mündete in diversen Cygwin-Bibliotheken, sogenannten DLLs, die direkt auf dem Windows-System aufsetzten, aber nach oben hin die für Unix typischen Dienste (APIs) anboten.
Bis 1996 fanden sich einige weitere Entwickler, die sich dem Projekt anschlossen, insbesondere weil langsam klar wurde, dass es sich lohnen könnte, Unix-Anwendungen unter Verwendung der Cygwin-Komponenten für Windows-Systeme anzubieten (Frühere Unix-zu-Windows Portierungen basierten zumeist auf der Entwicklungsumgebung DJGPP). Etwa 1998 begann Cygnus damit, Cygwin gewinnbringend zu vermarkten. Mittlerweile wird Cygwin als freie Software im Rahmen der GPL angeboten und zugleich unter Federführung von Red Hat weiterentwickelt.
Im Juni 2016 gab Red Hat bekannt, dass ab Version 2.5.2 die Cygwin-DLL nicht mehr unter GPLv3, sondern unter LGPLv3 veröffentlicht wird. Daher kann die Cygwin-DLL ab dieser Version auch für proprietäre Programme eingesetzt werden. Vorher musste dafür eine Lizenz bei Red Hat erworben werden. Weiterhin vereinfacht diese Änderung die Einreichung von Patches durch externe Entwickler, da keine Copyright-Vereinbarung mit Red Hat mehr erforderlich ist.