Cygwin consists of a collection of various tools and libraries aimed to provide a Linux-like environment on Windows Operating System. It acts as an emulation layer, making it possible to run native Linux applications on Microsoft Windows.
Run apps developed for Linux on Windows
Originally developed by Cygnus Solutions, but acquired in 2000 by Red Hat, Cygwin is mostly bent on providing programmers with a simple way to provide Windows compatibility for applications that were originally developed for Linux environments. A few examples of Unix applications ported successfully are KDE, GNOME and Apache.
Components included in the package
Cygwin consists of a DLL whose purpose is to provide POSIX API functionality and a collection of utilities that are able to accommodate the Unix look and feel on Windows computers. Components such as syslogd, inetd, crond and several such daemons are deployed as services, thus making it possible for Windows to behave in a Linux manner.
Tweaks during the installation process
Being such a complex application, a sophisticated installation is expected. Deployment requires several user interventions, as well as a working Internet connection for downloading files from dedicated servers.
Users are advised to pay attention to the packages they select during setup; the more components, the longer the installation process. By default, the selection is minimal and includes only the bash shell, as well as core utilities, which are common in Unix command-line.
Other components, such as terminals (mintty, util-linux), text utilities (grep, diff, patch), shells (dash, zsh, tcsh), servers (Apache, PostgreSQL, OpenSSH) and other development-related utilities are available in optional packages.
However, the default selection should be enough for compiling source code in order to produce GUI or console applications that are compatible with Windows. After all, the beauty of Cygwin comes from the fact that developers need not make extensive changes to the code, but few adjustments and additions.