Cygwin
| Company type | Open-source software project |
|---|---|
| Industry | Software, Compatibility layer |
| Founded | 1995 |
| Founder | Steve Chamberlain |
| Products | POSIX compatibility layer, GNU development toolchain, Cygwin DLL |
| Owner | Red Hat (part of IBM) |
| Website | https://www.cygwin.com/ |
Cygwin () is a no-cost, open-source runtime environment and command-line interface (CLI) that emulates a Unix-like system on Microsoft Windows. It provides access to a repository of open-source software packages, allowing Unix-based source code to be compiled and executed within Windows while maintaining seamless integration with native Windows applications.
The standard command-line interface utilizes the terminal emulator mintty. Cygwin’s filesystem layout replicates traditional Unix directory structures, including directories such as /bin, /home, /etc, /usr, and /var.
Distributed under the terms of the GNU Lesser General Public License version 3, Cygwin was initially created by Cygnus Solutions, which was subsequently acquired by Red Hat (now part of IBM). The project’s original goal was to port the GNU toolchain, including the GNU Compiler Collection (GCC), to the Win32 platform. Rather than rewriting these tools for the Windows runtime, Cygwin established a POSIX-compliant environment through a dedicated dynamic-link library (DLL).
The project’s slogan, "Get that Linux feeling – on Windows", highlights its mission to deliver Unix-like functionality within the Windows ecosystem.
History
Cygwin originated in 1995, founded by Steve Chamberlain, an engineer at Cygnus who recognized that Windows NT and 95 employed COFF as their object file format and that GNU already supported both x86 architecture and COFF. His objective was to adapt GCC to generate executables compatible with Windows. Chamberlain successfully bootstrapped the compiler on Windows to simulate a Unix environment and facilitate running GNU configure scripts.
Initially called Cygwin32, the "32" suffix was removed after Microsoft claimed the Win32 trademark, leaving the name as simply Cygwin.
In 1999, Cygnus marketed Cygwin 1.0 as a commercial product; subsequent releases have been exclusively open source.
From 1996 until 1999, Geoffrey Noer directed the project. He was succeeded by Christopher Faylor from 1999 to 2004, who later co-led alongside Corinna Vinschen. Since mid-2014 (as of September 2024), Vinschen has served as the lead maintainer.
On June 23, 2016, version 2.5.2 of the Cygwin library was re-licensed under the GNU Lesser General Public License (LGPL) version 3.
Description
Cygwin is offered in two variants: a comprehensive 64-bit edition and a streamlined 32-bit edition, with the latter receiving its final update in 2022. The core consists of a library that maps POSIX system call API functions onto corresponding Windows system calls, enabling numerous Unix-compatible applications to operate on Windows platforms. Included is a GNU development toolchain featuring tools such as GCC and GDB. Significant software projects like the X Window System, K Desktop Environment 3, GNOME, Apache, and TeX have been successfully ported to run under Cygwin. Additionally, services such as inetd, syslogd, sshd, and Apache can be installed as native Windows services. Applications compiled with Cygwin gain full access to Windows APIs and libraries.
Installation is managed via Cygwin’s setup utility, which retrieves packages from online repositories.
The Cygwin API library is licensed under the GNU Lesser General Public License version 3 or later, with special exceptions permitting linkage with any free and open-source software compliant with the Open Source Definition.
Cygwin comprises two main elements:
- A dynamic-link library that serves as a POSIX API compatibility layer
- A collection of software utilities and applications that provide a Unix-like environment
POSIX symbolic links are supported by representing them as plain-text files marked with specific system attributes. Earlier releases utilized Windows shortcuts for this purpose but transitioned away from them to improve performance and adhere more closely to POSIX standards. The system also identifies NTFS junction points and symbolic links as POSIX links but does not create them itself. Furthermore, it supports POSIX-compliant access control lists (ACLs) through its API.
Technical details
A version of the Unix mount command tailored specifically for Cygwin allows Windows directories to be mounted as "filesystems" within the Unix directory hierarchy. Initial mount points can be specified in /etc/fstab, following a Unix-like approach but substituting Windows paths for device names. By default, filesystems are mounted in binary mode, though an alternative text mode is available that automatically converts line endings between LF and CRLF formats.
Starting with Cygwin 1.7, comprehensive POSIX locale support was introduced, with UTF-8 Unicode set as the standard encoding.
The fork system call is fully supported, although it does not utilize copy-on-write optimization.
Cygwin's primary user interface is the bash shell operating within the mintty terminal emulator. The underlying DLL provides support for pseudo terminal (pty) devices, and Cygwin also offers additional terminal emulators such as rxvt/urxvt and xterm. The included GCC compiler supports extensions for generating Windows DLLs and configuring programs to run in either windowing or console modes. Since 2014, cross-compilers from the MinGW-w64 project have enabled building applications without relying on the Cygwin POSIX compatibility layer.
Software packages
The core Cygwin installation occupies approximately 100MB and contains the bash and dash shells along with essential file and text manipulation utilities. Users can obtain further packages through the Cygwin setup tool ("setup-x86_64.exe" for 64-bit systems). Previously, the Cygwin Ports initiative provided additional software such as GNOME, KDE 3, MySQL, and PHP; however, most of these have been incorporated into official Cygwin distributions, leading to the discontinuation of Ports maintenance. The environment also includes GTK+ and Qt graphical libraries.
Graphical Unix applications can be displayed on the Windows desktop either locally or remotely using the Cygwin/X project.