|Steve Chamberlain, Cygnus Solutions
|Cygnus Solutions, Red Hat, Cygwin project volunteers
|October 18, 1995
3.5.0-1 / 1 February 2024
|POSIX standard utilities, POSIX standard library, C standard library, compatibility layer
Cygwin (// SIG-win) is a Unix-like environment and command-line interface for Microsoft Windows.
The terminal emulator Mintty is the default command-line interface provided to interact with the environment. The Cygwin installation's directory layout mimics the root file system of Unix-like systems, with directories such as /bin, /home, /etc, /usr, and /var.
In addition to providing many Unix utilities and a Unix look and feel, Cygwin allows source code designed for Unix-like operating systems to be compiled and run on Windows with minimal modification.
Cygwin provides native integration of Windows-based applications. Thus it is possible to launch Windows applications from the Cygwin environment, as well as to use Cygwin tools and applications within the Windows operating context.
Cygwin consists of two parts:
Cygwin is free and open-source software, released under the GNU Lesser General Public License version 3. It was originally developed by Cygnus Solutions, which was later acquired by Red Hat (now part of IBM), to port the Linux toolchain to Win32, including the GNU Compiler Suite. Rather than rewrite the tools to use the Win32 runtime environment, Cygwin implemented a POSIX-compatible environment in the form of a dynamic-link library (DLL).
The brand motto is "Get that Linux feeling – on Windows".
Cygwin began in 1995 as a project of Steve Chamberlain, a Cygnus engineer who observed that Windows NT and 95 used COFF as their object file format, and that GNU already included support for x86 and COFF, and the C library newlib. He thought it would be possible to retarget GCC and produce a cross compiler generating executables that could run on Windows. This proved practical and a prototype was developed.
Next Chamberlain bootstrapped the compiler on a Windows system, sufficiently emulating Unix to let the GNU configure shell script run. A Bourne shell-compatible command interpreter, such as bash, was needed and in turn a fork system call emulation and standard input/output. Windows includes similar functionality, so the Cygwin library just needed to provide a POSIX-compatible application programming interface (API) and properly translate calls and manage private versions of data, such as file descriptors.
Initially, Cygwin was called gnuwin32 (not to be confused with the current GnuWin32 project). The name was changed to Cygwin32 to emphasize Cygnus' role in creating it. When Microsoft registered the trademark Win32, the 32 was dropped to simply become Cygwin.
By 1996, other engineers had joined in, focusing on making Cygwin useful at hosting Cygnus' embedded tools on Windows systems (the previous strategy had been to use DJGPP). It was especially attractive because it was possible to do a three-way cross-compile, for instance to use a hefty Sun Microsystems workstation to build, say, a Windows-x-MIPS cross-compiler, which was faster than using the PC at the time. In 1999, Cygnus offered Cygwin 1.0 as a commercial product. Subsequent versions have not been released, instead relying on continued open source releases.
Geoffrey Noer was the project lead from 1996 to 1999. Christopher Faylor was lead from 1999 to 2004 when he left Red Hat and became co-lead with Corinna Vinschen until Faylor withdrew from active participation in the project mid-2014. Corinna Vinschen has been the project lead from mid-2014 to date (as of March 30, 2023).
From June 23, 2016 the Cygwin library version 2.5.2 was licensed under the GNU Lesser General Public License (LGPL) version 3.
The Cygwin environment is provided in two versions; the full 64-bit version and a stripped down 32-bit version whose final version was released in 2022. Cygwin consists of a library that implements the POSIX system call API in terms of Windows system calls to enable running of a large number of application programs equivalent to those on Unix systems, and a GNU development toolchain (including GCC and GDB) to allow software development. Programmers have ported many Unix, GNU, BSD and Linux programs and packages to Cygwin, including the X Window System, K Desktop Environment 3, GNOME, Apache, and TeX. Cygwin permits installing inetd, syslogd, sshd, Apache, and other daemons as standard Windows services, allowing Microsoft Windows systems to emulate Unix and Linux servers.
Cygwin programs are installed by running Cygwin's "setup" program, which downloads the necessary program and feature package files from repositories on the Internet. Setup can install, update, and remove programs and their source code packages. A complete installation will take in excess of 90 GB of hard disk space, but usable configurations may require as little as 1 or 2 GB.
Efforts to reconcile concepts that differ between Unix and Windows systems include:
mount command allows mounting Windows paths as "filesystems" in the Unix file space. Initial mount-points can be configured in
/etc/fstab, which has a format very similar to Unix systems, except that Windows paths appear in place of devices. Filesystems can be mounted in binary mode (by default), or in text mode, which enables automatic conversion between LF and CRLF endings (which only affects programs that open files without explicitly specifying text or binary mode).
C: appears as
/cygdrive prefix can be changed. Windows network paths of the form
\\HOST\SHARE\FILE are mapped to
//HOST/SHARE/FILE. Windows paths can also be used directly from Cygwin programs, but many programs do not support them correctly, hence this is discouraged.
/proc file-systems are provided.
/proc/registry provides direct filesystem access to the registry.
/etc/group are provided that include pointers to the Windows equivalent SIDs (in the Gecos field), allowing for mapping between Unix and Windows users and groups.
The version of gcc that comes with Cygwin has various extensions for creating Windows DLLs, specifying whether a program is a windowing or console-mode program, adding resources, etc. Support for compiling programs that do not require the POSIX compatibility layer provided by the Cygwin DLL used to be included in the default
gcc, but as of 2014[update] is provided by cross-compilers contributed by the MinGW-w64 project.
Cygwin is used for porting many popular pieces of software to the Windows platform. It is used to compile Sun Java, LibreOffice, Apache OpenOffice and web server software like Lighttpd and Hiawatha.
The Cygwin API library is licensed under the GNU Lesser General Public License version 3 (or later) with an exception to allow linking to any free and open-source software whose license conforms to the Open Source Definition (less strict than the Free Software Definition).
Cygwin's base package selection is fairly small (about 100 MB), containing little more than the bash (interactive user) and dash (installation) shells and the core file and text manipulation utilities expected of a Unix command line. Additional packages are available as optional installs from within the Cygwin Setup program and package manager ("setup-x86_64.exe" – 64bit). These include (from over 12000 others):
The Cygwin/X project contributes an implementation of the X Window System that allows graphical Unix programs to display their user interfaces on the Windows desktop. This can be used with both local and remote programs. Cygwin/X supports over 500 packages including major X window managers, desktop environments, and applications, for example:
In addition to the low-level Xlib/XCB libraries for developing X applications, Cygwin ships with various higher-level and cross-platform GUI frameworks, including GTK+ and Qt.
The Cygwin Ports project provided[when?] many additional packages that were not available in the Cygwin distribution itself. Examples included GNOME and K Desktop Environment 3 as well as the MySQL database and the PHP scripting language. Most ports have been adopted by volunteer maintainers as Cygwin packages, and Cygwin Ports are no longer maintained.