Various tools which provide functionality similar to a Linux on Windows

Cygwin (32-bit)

Cygwin (32-bit)

  -  1.2 MB  -  Open Source
  • Latest Version

    Cygwin 3.5.3 (32-bit) LATEST

  • Review by

    Daniel Leblanc

  • Operating System

    Windows 7 / Windows 8 / Windows 10 / Windows 11

  • User Rating

    Click to vote
  • Author / Product

    Cygwin Team / External Link

  • Filename


Cygwin is a collection of tools which provide a Linux look and feel environment for Windows. Cygwin is a DLL (cygwin1.dll) which acts as a Linux API layer providing substantial Linux API functionality. The Cygwin DLL currently works with all recent, commercially released x86 32 bit and 64-bit versions of Windows. Download Cygwin for Windows PC Now!

The Cygwin distribution contains thousands of packages from the Open Source world including most GNU tools, many BSD tools, an X server, and a full set of X applications. If you're a developer you will find tools, headers, and libraries allowing to write Windows console or GUI applications that make use of significant parts of the POSIX API. The software allows easy porting of many Unix programs without the need for extensive changes to the source code. This includes configuring and building most of the available GNU or BSD software, including the packages included with the app distribution themselves. They can be used from one of the provided Unix shells like bash, tcsh, or zsh.

The app can be expected to run on all modern, released versions of Windows. State January 2016 this includes Windows Vista, Windows Server 2008, and all later versions of Windows up to Windows 10 and Windows Server 2016. The 32-bit version of the app also runs in the WOW64 32 bit environment on released 64-bit versions of Windows, the 64-bit version of course only on 64 bit Windows. Keep in mind that the tool can only do as much as the underlying OS supports. Because of this, the program will behave differently, and exhibit different limitations, on the various versions of Windows.

Corinna Vinschen is the current project lead. Corinna is a senior Red Hat engineer. Corinna is responsible for the app library and maintains a couple of packages, for instance, OpenSSH, OpenSSL, and a lot more. Yaakov Selkowitz is another Red Hat engineer working on the Cygwin project. He's the guy behind the current build and packaging system and maintains by far the most packages in the Cygwin distribution. Jon Turney is the developer and maintainer of the app X server and a couple of related packages.

Many thanks to everyone using the tools for their many contributions in the form of advice, bug reports, and code fixes. Keep them coming!

Also Available: Cygwin (64-bit)

  • Cygwin 3.5.3 (32-bit) Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

    Cygwin 3.5.3 (32-bit) Screenshot 1
  • Cygwin 3.5.3 (32-bit) Screenshot 2
  • Cygwin 3.5.3 (32-bit) Screenshot 3
  • Cygwin 3.5.3 (32-bit) Screenshot 4

What's new in this version:

Cygwin 3.5.3 (32-bit)
- Fix the problem that console setup accesses shared memory which is already unmapped due to race condition. To avoid this issue, shared console memory will be kept mapped if it belongs to CTTY.
- Fix a race issue between console open() and close() which is caused by state mismatch between con.owner and console attaching state
- Fix a problem that select() call for write-side of a pipe possibly hangs with non-cygwin reader
- Avoid recalling offline files if the file is not explicitely opened for reading or writing data
- Don't skip inadvertently some local SAM accounts on domain member machines
- Revert ill-advised optimization of glob(3) in case of caseinsensitive globbing

Cygwin 3.5.1 (32-bit)
- Fix exit code for non-cygwin process running in console. The bug was introduced in 3.5.0.
- Make the interface names handled by if_nametoindex() and if_indextoname() consistent with that of if_nameindex()
- Revert error handling for non-Cygwin child processes to use Cygwin's error mode by default. Resetting the error mode to the OS default error mode is now possible by using the new CYGWIN environment variable option "winjitdebug".
- Fix handle leak in pty master which occurs when non-cygwin process is started in pty
- Fix the problem that VMIN and VTIME does not work at all in console
- Fix a bug that cannot handle consoles more than 32, rather than 64
- Fix gettimeofday not checking for a NULL pointer
- Fix two bugs in strptime, error checking of invalid numerical input and %p handling
- Fix newgrp(1) group handling. Only allow groups already in the user token, as Windows doesn't allow otherwise
- Fix getgrent enumeration of local SAM accounts on domain member machines

Cygwin 3.5.0 (32-bit)
- Drop support for Windows 7, Windows 8, Server 2008 R2 and Server 2012
- Console devices (/dev/consN) are now accessible by processes attached to other consoles or ptys. Thanks to this new feature, GNU screen and tmux now work in the console.
- newgrp(1) tool
- cygcheck has new options searching for available packages in the cygwin distro, as well as getting extended info on available and installed packages
- fnmatch(3) and glob(3) now support named character classes, equivalence class expressions, and collating symbols in the search pattern, i.e., [:alnum:], [=a=], [.aa.].
- Introduce /dev/disk directory with various by-* subdirectories which provide symlinks to disk and partition raw devices:
- by-drive/DRIVE_LETTER ->  ../../sdXN
- by-label/VOLUME_LABEL ->  ../../sdXN
- by-id/BUSTYPE-[VENDOR_]PRODUCT_[SERIAL|0xHASH][-partN] -> ../../sdX[N]
- by-partuuid/MBR_SERIAL-OFFSET -> ../../sdXN
- by-partuuid/GPT_GUID -> ../../sdXN
- by-uuid/VOLUME_SERIAL -> ../../sdXN
- by-voluuid/MBR_SERIAL-OFFSET -> ../../sdXN
- by-voluuid/VOLUME_GUID -> ../../sdXN

- The subdirectories by-drive and by-voluuid are Cygwin specific
- Introduce /proc/codesets and /proc/locales with information on supported codesets and locales for all interested parties.  Locale(1) opens these files and uses the info for printing locale info like any other process could do.
- Add support for GB18030 codeset
- Add support for lseek flags SEEK_DATA and SEEK_HOLE, a GNU extension
- New API calls: posix_spawn_file_actions_addchdir_np, osix_spawn_file_actions_addfchdir_np
- New API calls: c8rtomb, c16rtomb, c32rtomb, mbrtoc8, mbrtoc16, mbrtoc32
- New API call: close_range (available on FreeBSD and Linux)
- New API call: fallocate (Linux-specific)
- Implement OSS-based sound mixer device (/dev/mixer)

- posix_spawnp no longer falls back to starting the shell for unrecognized files as execvp.  For the reasoning
- FIFOs now also work on NFS filesystems
- Enable automatic sparsifying of files on SSDs, independent of the "sparse" mount mode
- When RLIMIT_CORE is more than 1MB, a core dump file which can be loaded by gdb is now written on a fatal error. Otherwise, if it's greater than zero, a text format .stackdump file is written, as previously
- The default RLIMIT_CORE is now 0, disabling the generation of core dump or stackdump files

- Fix arc4random reseeding after fork(2)

Cygwin 3.4.10 (32-bit)
- Fix missing term in __cpuset_zero_s() prototoype in sys/cpuset.h
- Fix hang in process initialization if cwd is unreadable
- Let feraiseexcept actually raise an exception
- Make random(3) family of functions thread-safe
- Updates to profiler and gmondump: error display mechanics, buffer sizing, and output formatting
- Align behaviour of rand(3) to ISO C
- Fix posix_fallocate(3) return value in case of being called on other than regular files
- Reset sparseness in case open(2) has been called with O_CREAT|O_TRUNC on sparse files

Cygwin 3.4.9 (32-bit)
- Fix a bug introduced in cygwin 3.4.0 that switch_to_nat_pipe flag is not cleared properly when non-cygwin app is terminated in the case where pseudo console is not activated.
- For the time being, disable creating special files using mknod/mkfifo on NFS.
- Fix segfault when too many command line args are specified.
- Fix build problems in terms of sys/cpuset.h.

Cygwin 3.4.8 (32-bit)
- Make <sys/cpuset.h> safe for c89 compilations.
- Make gcc-specific code in <sys/cpuset.h> compiler-agnostic.
- Fix AT_EMPTY_PATH handling in fchmodat and fstatat if dirfd referres to a file other than a directory
- Rename internal macros _NL_CTYPE_OUTDIGITSx_MB/WC to GLibc compatible _NL_CTYPE_OUTDIGITx_MB/WC.
- Fix memory leak in printf() regarding gdtoa-based _ldtoa_r().
- Fix a bug introduced in cygwin 3.4.5 that open_shared() does not set access permissions as requested by its argument.

Cygwin 3.4.7 (32-bit)
- Fix CPU_SET(3) macro type mismatch by making the macros type-safe.
- Kill(1): don't print spurious error message.
- Align behaviour of dirname in terms of leading slashes to POSIX.
- Fix reading CONIN$ in non cygwin apps when stdin is not a pty.
- Fix bug in cygheap allocation size computation after fork.
- Fix return value of ilogbl(NaN).
- Fix error handling in readlinkat.
- Fix return code and errno set by renameat2, if oldfile and newfile
- refer to the same file, and the RENAME_NOREPLACE flag is set.

Cygwin 3.4.6 (32-bit)
- Fix a problem that fsync returns EINVAL for block device.
- Don't reject valid server and share names when mounting.
- Create directories with correctly umask-filtered default ACEs.
- Don't accidentally drop the default ACEs when chmod'ing directories.

Cygwin 3.4.3 (32-bit)
- Fix path handling to make sure virtual drives are never treated as symlinks.
- Revert incorrect optimization of wmemset()

Cygwin 3.4.1 (32-bit)
- This is a bugfix release.
- Fix a backward incompatibility problem in the definition of the base type of the stdio type FILE. This requires that C++ binaries compiled under Cygwin 3.4.0 having a public facing interface using
- FILE need to be recompiled.
- Fix an error introduced into the build process, resulting in `gcc -pg' becoming disfunctional.
- Fix performance degradation of non-cygwin pipe.

Cygwin 3.4.0 (32-bit)
- Drop support for Vista and Server 2008.
- Drop support for 32 bit Windows and WOW64.
- Allow to run with full ASLR enabled and enable on Cygwin DLL by default.
- Remove any special handling for the .com filename suffix. It has to be used always explicitely.
- Add code to handle setrlimit(RLIMIT_AS).
- Add code to handle signal masks in /proc//status.
- Handle UDP_SEGMENT and UDP_GRO socket options.

Cygwin 3.3.6 (32-bit)
- Fix an issue that command "cmd /c script -c cmd" crashes if it is issued in console of Windows 7.
- Fix killpg failing because the exec'ing as well as the exec'ed process are not in the pidlist for a brief moment.
- Fix mknod (64-bit only), whose definition didn't match its prototype.
- Fix a regression that prevented Cygwin from starting if cygwin1.dll is in the root directory.
- Handle setting very long window title correctly in console.
- Fix a bug of poll() that it returns event which is not inquired if events are inquired in multiple pollfd entries on the same fd at the same time.
- Fix a console problem that the text longer than 1024 bytes cannot be pasted correctly.
- Fix a pty problem that pty failed to switch I/O pipe to that for native apps if *.bat or *.cmd is executed directly from cygwin shell.
- Fix a problem that prevented some symbolic links to /cygdrive/C,/cygdrive/./c, /cygdrive//c, etc. from working.
- Fix a path handling bug that could cause a non-existing file to be treated as the current directory.
- Fix a crash in newlocale.

Cygwin 3.3.5 (32-bit) (32-bit)
- Fix a bug that accessing UNC path mounted to a drive letter using
- SMB3.11 fails with error "Too many levels of symbolic links.".
- Fix a console bug that escape sequence IL/DL (CSI Ps L, CSI Ps M) does not work correctly at the last line.
- Fix a problem that ENABLE_INSERT_MODE and ENABLE_QUICK_EDIT_MODE flags are cleared if cygwin is started in console.
- Fix an issue that cmd.exe also is terminated along with the cygwin app started from the cmd.exe if the cygwin app is terminated by Ctrl-C.
- Fix deadlock caused when keys are typed in pty while a lot of text output.
- Fix a problem that the console mode for input is not set correctly when non-cygwin app is started with stdin redirected.
- Fix some problems such as:
- 1) If output of non-cygwin app and input of cygwin app are connected by a pipe, Ctrl-C has to be sent twice to stop apps when the cygwin app does not read stdin at the moment.
- 2) In cmd.exe started from cygwin shell, if output of non-cygwin app and input of cygwin app are connected by a pipe, Ctrl-C can never terminate the apps.
- Fix exit code when non-cygwin app is terminated by Ctrl-C.
- Fix a bug that the order of the console key inputs are occasionally swapped, especially when CPU load is high.
- Fix a problem that fsync() flushes the console input buffer unlike linux. fsync() should return EINVAL for special files such as tty.
- Fix a formatting problem in gmondump where all displayed addresses are mistakenly prefixed with "0x0x". Fix man pages for gmondump and ssp.
- Fix crash on pty master close in Windows 7.
- Avoid deadlock of non-cygwin pipe writer which occurs when the other cygwin pipe writers exist if the pipe is created by system account or the pipe creator is running as service.

Cygwin 3.3.4 (32-bit)
- Fix a bug in fhandler_dev_clipboard::read() that the second read fails with 'Bad address'.
- Convert UNC path prefix back to drive letter in symlink_info::check(). This solves the following issues:
- Fix a bug in pty code that input is wrongly sent to io_handle_nat rather than io_handle while neither read() nor select() is called after the cygwin app is started from non-cygwin app.
- Avoid a crash when NtQueryInformationProcess returns invalid handle data.
- Ignore INHERIT ACEs when reading the DACL of non-directory files.
- Fix an "Invalid argument" problem in posix_spawn on i686.
- Fix handling of AAAA records in Cygwin resolver code using native windows calls. Also fix various bugs in the resolver.
- Fix a problem creating a dir "foo", if a file (but not a Cygwin symlink) "foo.lnk" already exists.
- Fix double free for archetype, which is caused when open() fails.
- Fix a permission problem when writing DOS attributes on Samba.

Cygwin 3.3.3 (32-bit)
- Make sure that "X:" paths are not handled as absolute DOS paths in fstatat and other calls. "X:/" still is handled as absolute path.

- issue that new pipe code doesn't handle size zero pipe which may be created by non-cygwin apps
- showing DLL version info from native Windows tools
- Handle Unicode surrogate pairs in console. Cygwin console does not handle surrogate pairs correctly at the moment. Fix issue that running bash in Windows Terminal and inserting an emoji does not work as expected.
- long-standing problem that fchmod or facl on newly created files screw up the DOS file attributes
- issue that pipe read()/write() occasionally returns a garbage length when NtReadFile/NtWriteFile returns STATUS_PENDING in non- blocking mode
- two bugs in raise(2)
- regression in printf introduced with Cygwin 3.3.2

Cygwin 3.3.1  (32-bit)
- Change log not available for this version

Cygwin 3.2.0 (32-bit)
- Revamped pseudo console support. Conditionally activating it only when a non-cygwin application is run
- New C11 threads API: call_once, cnd_broadcast, cnd_destroy, cnd_init, cnd_signal, cnd_timedwait, cnd_wait, mtx_destroy, mtx_init, mtx_lock, mtx_timedlock, mtx_trylock, mtx_unlock, thrd_create, thrd_current, thrd_detach, thrd_equal, thrd_exit, thrd_join, thrd_sleep, thrd_yield, tss_create, tss_delete, tss_get, tss_set.
- In cygwin console, new thread which handles special keys/signals such as Ctrl-Z (VSUSP), Ctrl- (VQUIT), Ctrl-S (VSTOP), Ctrl-Q (VSTART) and SIGWINCH has been introduced. There have been a long standing issue that these keys/signals are handled only when app calls read() or select(). Now, these work even if app does not call read() or select().
- Fchmodat(2) now has limited support for the AT_SYMLINK_NOFOLLOW flag.
- Cygwin now recognizes native Windows AF_UNIX sockets (as regular files, not as socket files). This allows tools like 'ls' and 'rm' to work.

- Allow ~5000 child processes per process on 64 bit, ~1200 child processes per process on 32 bit. So far, only 256 child processes per process were supported
- A few FAQ updates
- Have tmpfile(3) make use of Win32 FILE_ATTRIBUTE_TEMPORARY via open(2) flag O_TMPFILE
- Utilize Windows 10 1809 FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE flag to allow simpler unlink of files with DOS readonly flags set
- Getdtablesize(3), sysconf(_SC_OPEN_MAX), and getrlimit(RLIMIT_NOFILE) now return the true limit on the number of open descriptors, 3200. Previously they returned the current size of Cygwin's internal file descriptor table, which can grow dynamically.
- Facl(2) now fails with EBADF on a file opened with O_PATH
- Allow to start Windows Store executables via their "app execution aliases". Handle these aliases (which are special reparse points) as symlinks to the actual executables.

- Iterate at least 4 times over pthread_key_t destructors per POSIX
- The pthread_yield declaration in pthread is now visible by default or when defining _BSD_SOURCE, too
- Fix SEGV in modfl call
- Fix a collision of offical and internally used file flags
- Fix assertion failure on an invalid path under /proc//fd/
- Fix crash on stat(2)'ing /dev/ptmx on 32 bit
- Fix return value of sqrtl on negative infinity
- Fix a path handling problem if there is a WSL symlink in PATH
- Fix a bug in fstatat(2) on 32 bit that could cause it to return garbage
- Fix the errno when a path contains .. and the prefix exists but is not a directory
- Fix the return value when ptsname_r(3) is called with a bad file descriptor
- Fix path handling in case the Cygwin installation dir is accessed via a Windows junction point.
- Fix potential handle leaks when dup'ing descriptors
- Fix a bug that could cause fstat(2) to return incorrect results on a FIFO
- Fix some system calls on AF_LOCAL sockets that are not socket files
- Fix access to block devices under /proc/sys

Cygwin 3.1.7 (32-bit)
- Fix acl_get_* functions in 32-bit Cygwin (pointer sign extension)
- Fix select/poll issue in case a socket connect call fails.
- Fix multiple reader support for FIFOs
- Fix an mmap issue that could cause failure with errno EFBIG
- Fix the behavior of C++ apps after an unhandled exception (64-bit only)

Cygwin 3.1.6 (32-bit)
- This is mainly a bugfix release

What changed:

Bug Fixes:
- Fix IPPROTO_TCP option handling, especially in terms of TCP_MAXSEG
- Fix a buffer overrun in Cygwin-internal string comparison
- Fix microcode registry lookup for /proc/cpuinfo output

Cygwin 3.1.4 (32-bit)
- Allow symlinks to be opened with O_PATH | O_NOFOLLOW
- Allow the pathname argument to readlinkat(2) to be an empty string, provided the dirfd argument refers to a symlink opened with O_PATH | O_NOFOLLOW. The readlinkat call then operates on that symlink.
- Support the Linux-specific AT_EMPTY_PATH flag for fchownat(2) and fstatat(2)
- Allow AF_LOCAL sockets to be opened with O_PATH
- <signal.h>: New macro _NSIG replacing NSIG. NSIG is now only visible to MISC builds, as on Linux
- The new locale modifier @cjksingle allows enforcing of single-width character property for usually double-widthed characters. This will be supported by upcoming mintty releases. For the reasoning, see

Bug Fixes:
- Define CPU_SETSIZE, as on Linux
- Fix a regression that prevented the root of a drive from being the Cygwin installation root
- Many fixes in new pseudo console support

Cygwin 3.1.2 (32-bit)
- Change log not available for this version

Cygwin 3.1.1 (32-bit)
- This is a bugfix release. Due to an oversight, Cygwin 3.1.0 does not run on Windows Vista and Windows Server 2008. Cygwin 3.1.1 fixes that

Cygwin 3.0.7 (32-bit)
- Change log not available for this version

Cygwin 3.0.6 (32-bit)
- Change log not available for this version

Cygwin 3.0.5 (32-bit)
- Fix /proc/version after uname change
- Addresses:
- Fix a crash in wcsxfrm_l if destination size is 0.
- Addresses:
- Fix a problem in process enumeration which led to `ps -W' showing Cygwin processes twice and potentially with incorrect Windows PID. Addresses: Report on IRC

Cygwin 3.0.3 (32-bit)
- Change log not available for this version

Cygwin 3.0.1 (32-bit)

- New API: secure_getenv

Bug Fixes:
- Relax fork child permissions to avoid a potential fork failure
- Fix Command-line argument handling of kill(1) in terms of negative PID. Addresses: report on IRC
- Fix an accidentally introduced O_TEXT handling of pipes inherited from native Windows processes
- Re-enable creating user token from scratch in seteuid to allow user context switch on old systems not supporting MsV1_0S4ULogon

Cygwin 2.10.0 (32-bit)

- New open(2) flags O_TMPFILE and O_NOATIME
- scanf/wscanf now handle the POSIX %m modifier
- scanf now handles the %l[ conversion
- Improved hostprogs compatibility for cross-compiling the Linux kernel
- New headers: <asm/bitsperlong.h>, <asm/posix_types.h>
- Built-in implementation of Stack Smashing Protection compiler feature
- New APIs: __stack_chk_fail, __stack_chk_guard
- Built-in implementation of POSIX.1-2001 message catalog support
- New APIs: catclose, catgets, catopen. New tool: gencat
- New APIs: sigtimedwait, wmempcpy

What changed:
- Standard headers no longer use macros to support K&R C
- confstr(3) and getconf(1) accept LFS_CFLAGS, LFS_LDFLAGS, etc
- The __always_inline and __nonnull macros in <sys/cdefs.h> are now compatible with glibc
- Feature Test Macros improvements in <fcntl.h>, <limits.h>, <netdb.h>, <strings.h>, and <unistd.h>

Bug Fixes:
- Fix a problem in unlink on NFS
- Addresses: Shows up in GAWK testsuite test "testext"
- Fix errno setting bug in posix_fadvise and posix_fallocate
- Fix two bugs in the limit of large numbers of sockets
- Fix a fork failure with private anonymous mmaps
- Remove a call to fflush from ftell{o}, which may result in wrong offsets
- Fix file pointer computation after short writes on block devices