Cygwin

Cygwin
Original author(s)Steve Chamberlain, Cygnus Solutions
Developer(s)Cygnus Solutions, Red Hat, Cygwin project volunteers
Initial releaseOctober 18, 1995; 29 years ago (1995-10-18)
Stable release
3.5.4-1[1] Edit this on Wikidata / 25 August 2024; 3 months ago (25 August 2024)
Repository
Written inC/C++
Operating systemMicrosoft Windows
TypePOSIX standard utilities, POSIX standard library, C standard library, compatibility layer
LicenseGPLv3, LGPLv3[2]
Websitecygwin.com Edit this on Wikidata

Cygwin (/ˈsɪɡwɪn/ SIG-win)[3] 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 many 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.[4]

The terminal emulator Mintty 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 is released under the GNU Lesser General Public License version 3.[6] It was originally developed by Cygnus Solutions,[7][8] 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.[9]

The brand motto is "Get that Linux feeling – on Windows", although Cygwin doesn't have Linux in it.[10]

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 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]

From June 23, 2016, the Cygwin library version 2.5.2 was licensed under the GNU Lesser General Public License (LGPL) version 3.[17]

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.[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 consists of two parts:

  1. A dynamic-link library in the form of a C standard library that acts as a compatibility layer for the POSIX API and
  2. A collection of software tools and applications that provide a Unix-like look and feel.[4]

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.[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-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.[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, 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.

See also

Notes

  1. ^ Not to be confused with the current GnuWin32 project.

References

  1. ^ "cygwin 3.5.4-1". August 25, 2024. Retrieved August 27, 2024.
  2. ^ "Cygwin Licensing Terms". Archived from the original on July 28, 2012. Retrieved December 15, 2022.
  3. ^ 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.
  4. ^ a b "Cygwin FAQ". cygwin.com. Archived from the original on May 7, 2021. Retrieved January 7, 2021.
  5. ^ "Cygwin". www.cygwin.com. Archived from the original on November 21, 2015. Retrieved November 21, 2015.
  6. ^ "Cygwin library now available under GNU Lesser General Public License". Red Hat. Archived from the original on June 24, 2016. Retrieved June 23, 2016.
  7. ^ "A brief history of the Cygwin project". Cygwin. February 2, 2018. Archived from the original on January 8, 2020. Retrieved January 10, 2020.
  8. ^ "Cygwin32: A Free Win32 Porting Layer for UNIX Applications". USENIX. August 3, 1998. Archived from the original on January 11, 2020. Retrieved January 10, 2020.
  9. ^ "(Solved) Linux Subsystem vs Cygwin vs MobaXterm". Tech Help Forum by How-To Geek. January 24, 2017. Archived from the original on February 20, 2023. Retrieved March 15, 2019.
  10. ^ "Cygwin". www.cygwin.com. Retrieved March 11, 2024.
  11. ^ "Cygwin Unites Unix and Windows Apps". Google Books. November 15, 1999. Archived from the original on February 20, 2023. Retrieved January 13, 2020.
  12. ^ Delorie, DJ (February 17, 1999). "fyi: who does what". Cygwin (Mailing list). Archived from the original on February 14, 2004. Retrieved January 13, 2020.
  13. ^ Noer, Geoffrey (February 19, 1999). "A partial goodbye..." Cygwin (Mailing list). Archived from the original on February 2, 2004. Retrieved January 13, 2020.
  14. ^ Faylor, Christopher (March 31, 2004). "Changing jobs". Cygwin (Mailing list). Archived from the original on September 6, 2015. Retrieved January 13, 2020.
  15. ^ Faylor, Christopher (July 31, 2014). "Christopher Faylor – Withdrawing from the project". Cygwin (Mailing list). Archived from the original on December 17, 2014. Retrieved May 2, 2015.
  16. ^ "Cygwin Notables". www.cygwin.com. Retrieved September 10, 2024.
  17. ^ "Cygwin library now available under GNU Lesser General Public License". www.redhat.com. Archived from the original on June 16, 2021. Retrieved May 27, 2021.
  18. ^ Turney, Jon (November 25, 2022). "Cygwin x86 end-of-life". Retrieved September 14, 2023.
  19. ^ "Cygwin Ports". Archived from the original on May 11, 2015. Retrieved May 2, 2015.
  20. ^ Delorie, DJ (April 17, 2000). "New Cygwin Net Release". Cygwin (Mailing list). Archived from the original on December 20, 2014. Retrieved January 10, 2020.
  21. ^ "What are the licensing terms?". Cygwin. Archived from the original on July 28, 2012.
  22. ^ 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.
  23. ^ "Cygwin FAQ: How is fork() implemented?". cygwin.com. Archived from the original on October 20, 2010. Retrieved October 10, 2010.
  24. ^ "Highlights of Cygwin Functionality: Process Creation". Archived from the original on December 30, 2014. Retrieved December 24, 2014.
  25. ^ Blake, Eric (January 15, 2009). "Bash doesn't launch the applications directly". Cygwin (Mailing list). Archived from the original on June 13, 2011. Retrieved October 10, 2010.
  26. ^ "Installing and Updating Cygwin Packages". Cygwin. Archived from the original on January 10, 2020. Retrieved January 11, 2020.
  27. ^ "Cygwin Package List". Cygwin. Archived from the original on February 5, 2016. Retrieved January 11, 2020.