1 <sect1 id="ov-new1.7"><title>What's new and what changed in Cygwin 1.7</title>
3 <sect2 id="ov-new1.7.8"><title>What's new and what changed from 1.7.7 to 1.7.8</title>
5 <itemizedlist mark="bullet">
8 Drop support for Windows NT4 prior to Service Pack 4.
12 Reinstantiate Cygwin's ability to delete an empty directory which is the
13 current working directory of the same or another process. Same for any
14 other empty directory which has been opened by the same or another process.
18 Cygwin now ships the C standard library fenv.h header file, and implements the
19 related APIs (including GNU/glibc extensions): feclearexcept, fedisableexcept,
20 feenableexcept, fegetenv, fegetexcept, fegetexceptflag, fegetprec, fegetround,
21 feholdexcept, feraiseexcept, fesetenv, fesetexceptflag, fesetprec, fesetround,
22 fetestexcept, feupdateenv, and predefines both default and no-mask FP
24 <ulink url="http://www.gnu.org/software/libc/manual/html_node/Arithmetic.html">
25 GNU C Library manual</ulink> for full details of this functionality.
29 Support for the C99 complex functions, except for the "long double"
30 implementations. New APIs: cacos, cacosf, cacosh, cacoshf, carg, cargf, casin,
31 casinf, casinh, casinhf, catan, catanf, catanh, catanhf, ccos, ccosf, ccosh,
32 ccoshf, cexp, cexpf, cimag, cimagf, clog, clogf, conj, conjf, cpow, cpowf,
33 cproj, cprojf, creal, crealf, csin, csinf, csinh, csinhf, csqrt, csqrtf, ctan,
38 Fix the width of "CJK Ambiguous Width" characters to 1 for singlebyte charsets
39 and 2 for East Asian multibyte charsets. (For UTF-8, it remains dependent on
40 the specified language, and the "@cjknarrow" locale modifier can still be used
45 The strerror_r interface now has two flavors; if _GNU_SOURCE is
46 defined, it retains the previous behavior of returning char *
47 (but the result is now guaranteed to be NUL-terminated); otherwise
48 it now obeys POSIX semantics of returning int.
52 /proc/sys now allows unfiltered access to the native NT namespace. Access
53 restrictions still apply. Direct device access via /proc/sys is not yet
54 supported. File system access via block devices works. For instance
55 (note the trailing backslash!)
57 bash$ cd /proc/sys/Device/HarddiskVolumeShadowCopy1/
62 Other new APIs: llround, llroundf, madvise, pthread_yield.
63 Export program_invocation_name, program_invocation_short_name.
64 Support TIOCGPGRP, TIOCSPGRP ioctls.
71 <sect2 id="ov-new1.7.7"><title>What's new and what changed from 1.7.6 to 1.7.7</title>
73 <itemizedlist mark="bullet">
76 Partially revert the 1.7.6 change to set the Win32 current working directory
77 (CWD) always to an invalid directory, since it breaks backward compatibility
78 too much. The Cygwin CWD and the Win32 CWD are now kept in sync again, unless
79 the Cygwin CWD is not usable as Win32 CWD. See the reworked
80 <xref linkend="pathnames-win32-api"></xref> for details.
84 Make sure to follow the Microsoft security advisory concerning DLL hijacking.
85 See the <ulink url="http://www.microsoft.com/technet/security/advisory/2269637.mspx">Microsoft Security Advisory (2269637) "Insecure Library Loading Could Allow Remote Code Execution"</ulink> for details.
89 Allow to link against -lbinmode instead of /lib/binmode.o. Same for
90 -ltextmode, -ltextreadmode and -lautomode.
91 See <xref linkend="textbin-devel"></xref> for details.
98 <sect2 id="ov-new1.7.6"><title>What's new and what changed from 1.7.5 to 1.7.6</title>
100 <itemizedlist mark="bullet">
103 Add new mount options "dos" and "ihash" to allow overriding Cygwin default
104 behaviour on broken filesystems not recognized by Cygwin.
108 Add new mount option "bind" to allow remounting parts of the POSIX file
109 hirarchy somewhere else.
113 Ttys and ptys are handled as securable objects using file-like permissions
114 and owner/group information. <command>chmod</command> and
115 <command>chown</command> now work on ttys/ptys. A new mechanism is used
116 to propagate pty handles safely to other processes, which does not require
121 Pass on coresize settings made with setrlimit(2). This allows shells to
122 disable creating stackdump files in child processes via
123 <screen>ulimit -c 0</screen> in bash or <screen>limit coredumpsize 0</screen>
128 Locale categories contain all localization strings additionally as wide-char
129 strings. locale(1) prints these values just as on Linux. nl_langinfo(3)
130 allows to fetch them.
134 New interfaces mkostemp(3) and mkostemps(3) are added.
138 New virtual file /proc/filesystems.
142 clock_gettime(3) and clock_getres(3) accept CLOCK_MONOTONIC.
146 DEPRECATED with 1.7.7: Cygwin handles the current working directory entirely
147 on its own. The Win32 current working directory is set to an invalid path to
148 be out of the way. [...]
155 <sect2 id="ov-new1.7.5"><title>What's new and what changed from 1.7.3 to 1.7.5</title>
157 <itemizedlist mark="bullet">
160 Support for DEC Backarrow Key Mode escape sequences (ESC [ ? 67 h, ESC [ ? 67 l)
168 <sect2 id="ov-new1.7.3"><title>What's new and what changed from 1.7.2 to 1.7.3</title>
170 <itemizedlist mark="bullet">
173 Support for GB2312/EUC-CN. These charsets are implemented as aliases to GBK.
174 GB2312 is now the default charset name for the locales zh_CN and zh_SG, just
179 Modification and access timestamps of devices reflect the current time.
186 <sect2 id="ov-new1.7.2"><title>What's new and what changed from 1.7.1 to 1.7.2</title>
188 <itemizedlist mark="bullet">
190 <listitem><para>Localization support has been much improved.</para>
192 <itemizedlist mark="bullet">
195 Cygwin now handles locales using the underlying Windows locale
196 support. The locale must exist in Windows to be recognized.
197 Locale aliases from the file /usr/share/locale/locale.alias are also
198 allowed, as long as their replacement is supported by the underlying Windows.
202 New tool "locale" to fetch locale information and default locales based on
203 the Windows default settings as well as lists of all supported locales
208 Default charset for locales without explicit charset is now chosen
209 from a list of Linux-compatible charsets.
213 For instance: en_US -> ISO-8859-1, ja_JP -> EUC-JP, zh_TW -> Big5.
217 Added support for the charsets GEORGIAN-PS, PT154, and TIS-620.
221 Support for the various locale modifiers to switch charsets as on Linux.
225 Default charset in the "C" or "POSIX" locale has been changed back
226 from UTF-8 to ASCII, to avoid problems with applications
227 expecting a singlebyte charset in the "C"/"POSIX" locale. Still use
228 UTF-8 internally for filename conversion in this case.
232 LC_COLLATE, LC_MONETARY, LC_NUMERIC, and LC_TIME localization is
233 enabled via Windows locale support. LC_MESSAGES is enabled via a big
234 table with localized strings.
238 fnmatch(3), regcomp(3), regexec(3) calls are now multibyte-aware.
242 printf(3), wprintf(3) families of functions now handle the grouping
243 flag, the apostrophe <literal>'</literal>, per POSIX-1.2008. The
244 integer portion of the result of a decimal conversion (%i, %d, %u, %f,
245 %F, %g, %G) will be formatted with thousands' grouping characters.
249 strftime(3), wcsftime(3), and strptime(3) now handle the E and O format
250 modifiers to print/scan alternative date and time representations or to
251 use alternative digits in locales which support this. Additionally these
252 functions now also support the padding modifiers '0' and '+', as well as
253 a field width per POSIX-1.2008.
265 Support open(2) flags O_CLOEXEC and O_TTY_INIT flags. Support fcntl
266 flag F_DUPFD_CLOEXEC. Support socket flags SOCK_CLOEXEC and SOCK_NONBLOCK.
267 Add new Linux-compatible API calls accept4(2), dup3(2), and pipe2(2).
268 Support the signal SIGPWR.
271 <listitem><para>Enhanced Windows console support.</para>
273 <itemizedlist mark="bullet">
276 The console's backspace keycode can be changed using 'stty erase'.
280 Function keys send distinguished escape sequences compatible with rxvt.
281 Keypad keys send distinguished escape sequences, xterm-style.
285 Support of combining Alt and AltGr modifiers in console window
286 (compatible with xterm and mintty), so that e.g. Alt-@ sends ESC @
287 also on keyboards where @ is mapped to an AltGr combination.
291 Report mouse wheel scroll events in mouse reporting mode 1000 (note:
292 this doesn't seem to work on all systems, assumedly due to driver
293 interworking issues).
294 Add mouse reporting mode 1002 to report mouse drag movement.
295 Add mouse reporting mode 1003 to report any mouse movement.
296 Add focus event reporting (mode 1004), compatible with xterm and mintty.
300 Add escape sequences for not bold (22), not invisible (28), not
301 blinking (25) (compatible with xterm and mintty).
305 Support VT100 line drawing graphics mode in console window (compatible
306 with xterm and mintty).
314 Handle native DOS paths always as if mounted with "posix=0,noacl".
318 Handle UNC paths starting with slashes identical to /cygdrive paths.
319 In other words, use the /cygdrive mount flags for these paths as well.
323 Recognize NWFS filesystem and workaround broken OS call.
327 New support for eXtensible Data Record (XDR) encoding and decoding,
328 as defined by RFCs 1014, 1832, and 4506. The XDR protocol and
329 functions are useful for cross-platfrom data exchange, and are
330 commonly used as the core data interchange format for Remote
331 Procedure Call (RPC) and NFS.
338 <sect2 id="ov-new1.7-os"><title>OS related changes</title>
340 <itemizedlist mark="bullet">
343 Windows 95, 98 and Me are not supported anymore. The new Cygwin 1.7 DLL
344 will not run on any of these systems.
348 Add support for Windows 7 and Windows Server 2008 R2.
355 <sect2 id="ov-new1.7-file"><title>File Access related changes</title>
357 <itemizedlist mark="bullet">
360 Mount points are no longer stored in the registry. Use /etc/fstab and
361 /etc/fstab.d/$USER instead. Mount points created with mount(1) are only
362 local to the current session and disappear when the last Cygwin process
363 in the session exits.
367 Cygwin creates the mount points for /, /usr/bin, and /usr/lib
368 automatically from it's own position on the disk. They don't have to be
369 specified in /etc/fstab.
373 If a filename cannot be represented in the current character set, the
374 character will be converted to a sequence Ctrl-X + UTF-8 representation
375 of the character. This allows to access all files, even those not
376 having a valid representation of their filename in the current character
377 set. To always have a valid string, use the UTF-8 charset by
378 setting the environment variable $LANG, $LC_ALL, or $LC_CTYPE to a valid
379 POSIX value, for instance in Cygwin.bat like this:
383 set LC_CTYPE=en_US.UTF-8
389 PATH_MAX is now 4096. Internally, path names can be as long as the
390 underlying OS can handle (32K).
394 struct dirent now supports d_type, filled out with DT_REG or DT_DIR.
395 All other file types return as DT_UNKNOWN for performance reasons.
399 The CYGWIN environment variable options "ntsec" and "smbntsec" have been
400 replaced by the per-mount option "acl"/"noacl".
404 The CYGWIN environment variable option "ntea" has been removed without
409 The CYGWIN environment variable option "check_case" has been removed in
410 favor of real case-sensitivity on file systems supporting it.
414 Creating filenames with special DOS characters '"', '*', ':', '<',
415 '>', '|' is supported.
419 Creating files with special DOS device filename components ("aux",
420 "nul", "prn") is supported.
424 File names are case sensitive if the OS and the underlying file system
425 supports it. Works on NTFS and NFS. Does not work on FAT and Samba
426 shares. Requires to change a registry key (see the User's Guide). Can
427 be switched off on a per-mount basis.
431 Due to the above changes, managed mounts have been removed.
435 Incoming DOS paths are always handled case-insensitive and get no POSIX
436 permission, as if they are mounted with noacl,posix=0 mount flags.
440 unlink(2) and rmdir(2) try very hard to remove files/directories even if
441 they are currently accessed or locked. This is done by utilizing the
442 hidden recycle bin directories and marking the files for deletion.
446 rename(2) rewritten to be more POSIX conformant.
450 access(2) now performs checks using the real user ID, as required by
451 POSIX; the old behavior of querying based on effective user ID is
452 available through the new faccessat(2) and euidaccess(2) APIs.
456 Add st_birthtim member to struct stat.
460 File locking is now advisory, not mandatory anymore. The fcntl(2) and
461 the new lockf(2) APIs create and maintain locks with POSIX semantics,
462 the flock(2) API creates and maintains locks with BSD semantics. POSIX
463 and BSD locks are independent of each other.
467 Implement atomic O_APPEND mode.
471 New open(2) flags O_DIRECTORY, O_EXEC and O_SEARCH.
475 Make the "plain file with SYSTEM attribute set" style symlink default
476 again when creating symlinks. Only create Windows shortcut style
477 symlinks if CYGWIN=winsymlinks is set in the environment.
481 Symlinks now use UTF-16 encoding for the target filename for better
482 internationalization support. Cygwin 1.7 can read all old style
483 symlinks, but the new style is not compatible with older Cygwin
488 Handle NTFS native symlinks available since Vista/2008 as symlinks (but
489 don't create Vista/2008 symlinks due to unfortunate OS restrictions).
493 Recognize NFS shares and handle them using native mechanisms. Recognize
494 and create real symlinks on NFS shares. Get correct stat(2) information
495 and set real mode bits on open(2), mkdir(2) and chmod(2).
499 Recognize MVFS and workaround problems manipulating metadata and handling
504 Recognize Netapp DataOnTap drives and fix inode number handling.
508 Recognize Samba version beginning with Samba 3.0.28a using the new
509 extended version information negotiated with the Samba developers.
513 Stop faking hardlinks by copying the file on filesystems which don't
514 support hardlinks natively (FAT, FAT32, etc.). Just return an error
515 instead, just like Linux.
519 List servers of all accessible domains and workgroups in // instead of
520 just the servers in the own domain/workgroup.
524 Support Linux-like extended attributes ([fl]getxattr, [fl]listxattr,
525 [fl]setxattr, [fl]removexattr).
529 New file conversion API for conversion from Win32 to POSIX path and vice
530 versa (cygwin_conv_path, cygwin_create_path, cygwin_conv_path_list).
534 New openat family of functions: openat, faccessat, fchmodat, fchownat,
535 fstatat, futimesat, linkat, mkdirat, mkfifoat, mknodat, readlinkat,
536 renameat, symlinkat, unlinkat.
540 Other new APIs: posix_fadvise, posix_fallocate, funopen, fopencookie,
541 open_memstream, open_wmemstream, fmemopen, fdopendir, fpurge, mkstemps,
542 eaccess, euidaccess, canonicalize_file_name, fexecve, execvpe.
549 <sect2 id="ov-new1.7-net"><title>Network related changes</title>
551 <itemizedlist mark="bullet">
554 New implementation for blocking sockets and select on sockets which is
555 supposed to allow POSIX-compatible sharing of sockets between threads
560 send/sendto/sendmsg now send data in 64K chunks to circumvent an
561 internal buffer problem in WinSock (KB 201213).
565 New send/recv option MSG_DONTWAIT.
569 IPv6 support. New APIs getaddrinfo, getnameinfo, freeaddrinfo,
570 gai_strerror, in6addr_any, in6addr_loopback. On IPv6-less systems,
571 replacement functions are available for IPv4. On systems with IPv6
572 enabled, the underlying WinSock functions are used. While I tried hard
573 to get the functionality as POSIXy as possible, keep in mind that a
574 *fully* conformant implementation of getaddrinfo and other stuff is only
575 available starting with Windows Vista/2008.
579 Resolver functions (res_init, res_query, res_search, res_querydomain,
580 res_mkquery, res_send, dn_comp, dn_expand) are now part of Cygwin.
581 Applications don't have to link against minires anymore. Actually, this
582 *is* the former libminires.a.
586 rcmd is now implemented inside of Cygwin, instead of calling the WinSock
587 function. This allows rsh(1) usage on Vista/2008 and later, which
588 dropped this function from WinSock.
592 Define multicast structures in netinet/in.h. Note that fully conformant
593 multicast support is only available beginning with Vista/2008.
597 Improve get_ifconf. Redefine struct ifreq and subsequent datastructures
598 to be able to keep more information. Support SIOCGIFINDEX,
599 SIOCGIFDSTADDR and the Cygwin specific SIOCGIFFRNDLYNAM. Support real
600 interface flags on systems supporting them.
604 Other new APIs: bindresvport, bindresvport_sa, gethostbyname2,
605 iruserok_sa, rcmd_af, rresvport_af. getifaddrs, freeifaddrs,
606 if_nametoindex, if_indextoname, if_nameindex, if_freenameindex.
610 Add /proc/net/if_inet6.
617 <sect2 id="ov-new1.7-device"><title>Device related changes</title>
619 <itemizedlist mark="bullet">
622 Reworked pipe implementation which uses overlapped IO to create more
623 reliable interruptible pipes and fifos.
627 The CYGWIN environment variable option "binmode" has been removed.
631 Improved fifo handling by using native Windows named pipes.
635 Detect when a stdin/stdout which looks like a pipe is really a tty.
636 Among other things, this allows a debugged application to recognize that
637 it is using the same tty as the debugger.
641 Support UTF-8 in console window.
645 In the console window the backspace key now emits DEL (0x7f) instead of
646 BS (0x08), Alt-Backspace emits ESC-DEL (0x1b,0x7f) instead of DEL
647 (0x7f), same as the Linux console and xterm. Control-Space now emits an
648 ASCII NUL (0x0) character.
652 Support up to 64 serial interfaces using /dev/ttyS0 - /dev/ttyS63.
656 Support up to 128 raw disk drives /dev/sda - /dev/sddx.
660 New API: cfmakeraw, get_avphys_pages, get_nprocs, get_nprocs_conf,
661 get_phys_pages, posix_openpt.
668 <sect2 id="ov-new1.7-posix"><title>Other POSIX related changes</title>
670 <itemizedlist mark="bullet">
673 A lot of character sets are supported now via a call to setlocale().
674 The setting of the environment variables $LANG, $LC_ALL or $LC_CTYPE
675 will be used. For instance, setting $LANG to "de_DE.ISO-8859-15" before
676 starting a Cygwin session will use the ISO-8859-15 character set in the
677 entire session. The default locale in the absence of one of the
678 aforementioned environment variables is "C.UTF-8".
682 The full list of supported character sets: "ASCII", "ISO-8859-x" with x
683 in 1-16, except 12, "UTF-8", Windows codepages "CPxxx", with xxx in
684 (437, 720, 737, 775, 850, 852, 855, 857, 858, 862, 866, 874, 1125, 1250,
685 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258), "KOI8-R", "KOI8-U",
686 "SJIS", "GBK", "eucJP", "eucKR", and "Big5".
692 Allow multiple concurrent read locks per thread for pthread_rwlock_t.
696 Implement pthread_kill(thread, 0) as per POSIX.
700 New API for POSIX IPC: Named semaphores: sem_open, sem_close,
701 sem_unlink. Message queues: mq_open, mq_getattr, mq_setattr, mq_notify,
702 mq_send, mq_timedsend, mq_receive, mq_timedreceive, mq_close, mq_unlink.
703 Shared memory: shm_open, shm_unlink.
707 Only declare expected functions in <strings.h>, don't include
708 <string.h> from here.
712 Support for WCONTINUED, WIFCONTINUED() added to waitpid and wait4.
716 New APIs: _Exit, confstr, insque, remque, sys_sigabbrev, posix_madvise,
717 posix_memalign, reallocf, exp10, exp10f, pow10, pow10f, lrint, lrintf,
718 rint, rintf, llrint, llrintf, llrintl, lrintl, rintl, mbsnrtowcs,
719 strcasestr, stpcpy, stpncpy, wcpcpy, wcpncpy, wcsnlen, wcsnrtombs,
720 wcsftime, wcstod, wcstof, wcstoimax, wcstok, wcstol, wcstoll, wcstoul,
721 wcstoull, wcstoumax, wcsxfrm, wcscasecmp, wcsncasecmp, fgetwc, fgetws,
722 fputwc, fputws, fwide, getwc, getwchar, putwc, putwchar, ungetwc,
723 asnprintf, dprintf, vasnprintf, vdprintf, wprintf, fwprintf, swprintf,
724 vwprintf, vfwprintf, vswprintf, wscanf, fwscanf, swscanf, vwscanf,
732 <sect2 id="ov-new1.7-sec"><title>Security related changes</title>
734 <itemizedlist mark="bullet">
737 Getting a domain user's groups is hopefully more bulletproof now.
741 Cygwin now comes with a real LSA authentication package. This must be
742 manually installed by a privileged user using the /bin/cyglsa-config
743 script. The advantages and disadvantages are noted in
744 http://cygwin.com/ml/cygwin-developers/2006-11/msg00000.html
748 Cygwin now allows storage and use of user passwords in a hidden area of
749 the registry. This is tried first when Cygwin is called by privileged
750 processes to switch the user context. This allows, for instance, ssh
751 public key sessions with full network credentials to access shares on
756 New options have been added to the mkpasswd and mkgroup tools to ease
757 use in multi-machine and multi-domain environments. The existing
758 options have a slightly changed behaviour.
765 <sect2 id="ov-new1.7-misc"><title>Miscellaneous</title>
767 <itemizedlist mark="bullet">
770 New ldd utility, similar to Linux.
774 New link libraries libdl.a, libresolv.a, librt.a.
778 Fallout from the long path names: If the current working directory is
779 longer than 260 bytes, or if the current working directory is a virtual
780 path (like /proc, /cygdrive, //server), don't call native Win32 programs
781 since they don't understand these paths.
785 On the first usage of a DOS path (C:\foo, \\foo\bar), the Cygwin DLL
786 emits a scary warning that DOS paths shouldn't be used. This warning
787 may be disabled via the new CYGWIN=nodosfilewarning setting.
791 The CYGWIN environment variable option "server" has been removed.
792 Cygwin automatically uses cygserver if it's available.
796 Allow environment of arbitrary size instead of a maximum of 32K.
800 Don't force uppercase environment when started from a non-Cygwin
801 process. Except for certain Windows and POSIX variables which are
802 always uppercased, preserve environment case. Switch back to old
803 behaviour with the new CYGWIN=upcaseenv setting.
807 Detect and report a missing DLL on process startup.
811 Add /proc/registry32 and /proc/registry64 paths to access 32 bit and 64
812 bit registry on 64 bit systems.
816 Add the ability to distinguish registry keys and registry values with
817 the same name in the same registry subtree. The key is called "foo" and
818 the value will be called "foo%val" in this case.
822 Align /proc/cpuinfo more closly to Linux content.
826 Add /proc/$PID/mounts entries and a symlink /proc/mounts pointing to
827 /proc/self/mounts as on Linux.
831 Optimized strstr and memmem implementation.
835 Remove backwards compatibility with old signal masks. (Some *very* old
836 programs which use signal masks may no longer work correctly).
840 Cygwin now exports wrapper functions for libstdc++ operators new and
841 delete, to support the toolchain in implementing full C++ standards
842 conformance when working with shared libraries.
846 Different Cygwin installations in different paths can be run in parallel
847 without knowing of each other. The path of the Cygwin DLL used in a
848 process is a key used when creating IPC objects. So different Cygwin
849 DLLs are running in different namespaces.
853 Each Cygwin DLL stores its path and installation key in the registry.
854 This allows troubleshooting of problems which could be a result of
855 having multiple concurrent Cygwin installations.