| Screenshot | Cygwin X11 rootless WinXP.png |
|---|---|
| Author | Steve Chamberlain, Cygnus Solutions |
| Developer | Cygnus Solutions, Red Hat, Cygwin project volunteers |
| Released | October 18, 1995 (age 30) |
| Operating system | Microsoft Windows |
| Programming language | C/C++ |
| Genre | POSIX standard utilities, POSIX standard library, C standard library, compatibility layer |
| License | GPLv3, LGPLv3[1] |
Cygwin (/ˈsɪɡwɪn/ SIG-win)[2] is a free and open-source Unix-like environment and command-line interface (CLI) for Microsoft Windows. The project also provides a software repository containing open-source packages. Cygwin allows source code for Unix-like operating systems to be compiled and run on Windows. Cygwin provides native integration of Windows-based applications.
The terminal emulator mintty is the default command-line interface provided to interact with the environment. 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 is released under the GNU Lesser General Public License version 3.[3] It was originally developed by Cygnus Solutions,[4][5] which was later acquired by Red Hat (now part of IBM), to port the GNU 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 DLL.[6]
The brand motto is "Get that Linux feeling – on Windows", although Cygwin doesn't have Linux in it.[7]
History
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 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 configure shell script run.
Initially, Cygwin was called Cygwin32.[5][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.[8] Subsequent versions have not been released, instead relying on continued open source releases.
Geoffrey Noer was the project lead from 1996 to 1999.[9][10] Christopher Faylor was lead from 1999 to 2004; he left Red Hat and became co-lead with Corinna Vinschen.[11][12] Corinna Vinschen has been the project lead from mid-2014 to date (as of September, 2024).[13]
From June 23, 2016, the Cygwin library version 2.5.2 was licensed under the GNU Lesser General Public License (LGPL) version 3.[14]
Description
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.[15] 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,[16] 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"[17] 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.[18]
Cygwin consists of two parts:
- A dynamic-link library in the form of a C standard library that acts as a compatibility layer for the POSIX API and
- A collection of software tools and applications that provide a Unix-like look and feel.[19]
Cygwin supports POSIX symbolic links, representing them as plain-text files with the system attribute set. Cygwin 1.5 represented them as Windows Explorer shortcuts, 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.[20]
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-8 Unicode 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.[21][22][23]
Cygwin's default user interface is the bash shell running in the mintty terminal emulator.[24] The DLL also implements pseudo terminal (pty) devices, and Cygwin ships with a number of terminal emulators that are based on them, including 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, it is provided by cross-compilers contributed by the MinGW-w64 project.
Software packages
Cygwin's base package selection is approximately 100MB,[25] 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).[26] 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.
Notes
References
- ^ "Cygwin Licensing Terms". Archived 2012-07-28 at the Wayback Machine. Retrieved 2022-12-15.
- ^ Hall, Larry (2004-09-14). "Re: How do you pronounce it?". Archived 2011-08-30 at the Wayback Machine. Retrieved 2007-10-10.
- ^ "Cygwin library now available under GNU Lesser General Public License". Red Hat. Archived 2016-06-24 at the Wayback Machine. Retrieved 2016-06-23.
- ^ "A brief history of the Cygwin project". Cygwin. 2018-02-02. Archived 2020-01-08 at the Wayback Machine. Retrieved 2020-01-10.
- ^ "Cygwin32: A Free Win32 Porting Layer for UNIX Applications". USENIX. 1998-08-03. Archived 2020-01-11 at the Wayback Machine. Retrieved 2020-01-10.
- ^ "(Solved) Linux Subsystem vs Cygwin vs MobaXterm". Tech Help Forum by How-To Geek. 2017-01-24. Archived 2023-02-20 at the Wayback Machine. Retrieved 2019-03-15.
- ^ "Cygwin". www.cygwin.com. Retrieved 2024-03-11.
- ^ "Cygwin Unites Unix and Windows Apps". Google Books. 1999-11-15. Archived 2023-02-20 at the Wayback Machine. Retrieved 2020-01-13.
- ^ Delorie, DJ (1999-02-17). "fyi: who does what". Archived 2004-02-14 at the Wayback Machine. Retrieved 2020-01-13.
- ^ Noer, Geoffrey (1999-02-19). "A partial goodbye...". Archived 2004-02-02 at the Wayback Machine. Retrieved 2020-01-13.
- ^ Faylor, Christopher (2004-03-31). "Changing jobs". Archived 2015-09-06 at the Wayback Machine. Retrieved 2020-01-13.
- ^ Faylor, Christopher (2014-07-31). "Christopher Faylor – Withdrawing from the project". Archived 2014-12-17 at the Wayback Machine. Retrieved 2 May 2015.
- ^ "Cygwin Notables". www.cygwin.com. Retrieved 2024-09-10.
- ^ "Cygwin library now available under GNU Lesser General Public License". www.redhat.com. Archived 2021-06-16 at the Wayback Machine. Retrieved 2021-05-27.
- ^ Turney, Jon (November 25, 2022). "Cygwin x86 end-of-life". Retrieved 2023-09-14.
- ^ "Cygwin Ports". Archived 11 May 2015 at the Wayback Machine. Retrieved 2 May 2015.
- ^ Delorie, DJ (2000-04-17). "New Cygwin Net Release". Archived 2014-12-20 at the Wayback Machine. Retrieved 2020-01-10.
- ^ "What are the licensing terms?". Cygwin. Archived 2012-07-28 at the Wayback Machine.
- ^ "Cygwin FAQ". cygwin.com. Archived 2021-05-07 at the Wayback Machine. Retrieved 2021-01-07.
- ^ Vinschen, Corinna (2016-01-16). "Updated: Cygwin 2.4.0-1". Archived 2020-01-11 at the Wayback Machine. Retrieved 2020-01-11.
- ^ "Cygwin FAQ: How is fork() implemented?". cygwin.com. Archived October 20, 2010 at the Wayback Machine. Retrieved October 10, 2010.
- ^ "Highlights of Cygwin Functionality: Process Creation". Archived December 30, 2014 at the Wayback Machine. Retrieved Dec 24, 2014.
- ^ Blake, Eric (January 15, 2009). "Bash doesn't launch the applications directly". Archived June 13, 2011 at the Wayback Machine. Retrieved October 10, 2010.
- ^ "Chapter 2: Setting Up Cygwin". cygwin.com. Retrieved 2025-03-17.
- ^ "Installing and Updating Cygwin Packages". Cygwin. Archived 2020-01-10 at the Wayback Machine. Retrieved 2020-01-11.
- ^ "Cygwin Package List". Cygwin. Archived 2016-02-05 at the Wayback Machine. Retrieved 2020-01-11.