The terminal emulatorMintty is the default command-line interface (CLI) provided to interact with the environment.[5] The Cygwin installation directory layout mimics the root file system of Unix-like systems, with directories such as /bin, /home, /etc, /usr, and /var.
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 librarynewlib. He thought that it would be possible to retarget GCC and produce a cross compiler generating executables that could run on Windows. A prototype was later developed. Chamberlain bootstrapped the compiler on a Windows system, to emulate Unix to let the GNU configureshell script run.
Initially, Cygwin was called gnuwin32.[note 1] When Microsoft registered the trademark Win32, the "32" was dropped to simply become Cygwin.
In 1999, Cygnus offered Cygwin 1.0 as a commercial product.[11] Subsequent versions have not been released, instead relying on continued open source releases.
Geoffrey Noer was the project lead from 1996 to 1999.[12][13] Christopher Faylor was lead from 1999 to 2004; he left Red Hat and became co-lead with Corinna Vinschen.[14][15] Corinna Vinschen has been the project lead from mid-2014 to date (as of September, 2024).[16]
Cygwin is provided in two versions: the full 64-bit version and a stripped-down 32-bit version, whose final version was released in 2022.[18] Cygwin consists of a library that implements the POSIX system call API in terms of Windows system calls to enable the running of a large number of application programs equivalent to those on Unix systems, and a GNU development toolchain (including GCC and GDB). Programmers have ported the X Window System, K Desktop Environment 3, GNOME,[19]Apache, and TeX. Cygwin permits installing inetd, syslogd, sshd, Apache, and other daemons as standard Windows services. Cygwin programs have full access to the Windows API and other Windows libraries.
Cygwin programs are installed by running Cygwin's "setup"[20] program, which downloads them from repositories on the Internet.
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.[21]
Cygwin supports POSIX symbolic links, representing them as plain-text files with the system attribute set. Cygwin 1.5 represented them as Windows Explorershortcuts, but this was changed for reasons of performance and POSIX correctness. Cygwin also recognises NTFS junction points and symbolic links and treats them as POSIX symbolic links, but it does not create them. The POSIX API for handling access control lists (ACLs) is supported.[22]
Technical details
A Cygwin-specific version of the Unix 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).
Cygwin 1.7 introduced comprehensive support for POSIX locales, and the UTF-8Unicode encoding became the default.
The fork system call for duplicating a process is fully implemented, but the copy-on-write optimization strategy could not be used.[23][24][25]
The Cygwin DLL contains a console driver that emulates a Unix-style terminal within the Windows console. Cygwin's default user interface is the bash shell running in the Cygwin console. The DLL also implements pseudo terminal (pty) devices. Cygwin ships with a number of terminal emulators that are based on them, including mintty, rxvt/urxvt, and xterm. The version of GCC that comes with Cygwin has various extensions for creating Windows DLLs, such as specifying whether a program is a windowing or console-mode program. 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], it is provided by cross-compilers contributed by the MinGW-w64 project.
Software packages
Cygwin's base package selection is approximately 100MB,[26] containing the bash (interactive user) and dash (installation) shells and the core file and text manipulation utilities. Additional packages are available as optional installs from within the Cygwin "setup" program and package manager ("setup-x86_64.exe" – 64 bit).[27] The Cygwin Ports project provided[when?] additional packages that were not available in the Cygwin distribution itself. Examples included GNOME, K Desktop Environment 3, 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. Cygwin ships with GTK+ and Qt.
The Cygwin/X project allows graphical Unix programs to display their user interfaces on the Windows desktop for both local and remote programs.
^Hall, Larry (September 14, 2004). "Re: How do you pronounce it?". Cygwin (Mailing list). Archived from the original on August 30, 2011. Retrieved October 10, 2007.
^ ab"Cygwin FAQ". cygwin.com. Archived from the original on May 7, 2021. Retrieved January 7, 2021.
^"Cygwin". www.cygwin.com. Archived from the original on November 21, 2015. Retrieved November 21, 2015.
^Delorie, DJ (February 17, 1999). "fyi: who does what". Cygwin (Mailing list). Archived from the original on February 14, 2004. Retrieved January 13, 2020.
^Noer, Geoffrey (February 19, 1999). "A partial goodbye..."Cygwin (Mailing list). Archived from the original on February 2, 2004. Retrieved January 13, 2020.
^Faylor, Christopher (March 31, 2004). "Changing jobs". Cygwin (Mailing list). Archived from the original on September 6, 2015. Retrieved January 13, 2020.
^Delorie, DJ (April 17, 2000). "New Cygwin Net Release". Cygwin (Mailing list). Archived from the original on December 20, 2014. Retrieved January 10, 2020.
^Vinschen, Corinna (January 16, 2016). "Updated: Cygwin 2.4.0-1". Cygwin Announcements (Mailing list). Archived from the original on January 11, 2020. Retrieved January 11, 2020.