Windows下的Linux环境-Cygwin


Cygwin是许多自由软件的集合,最初由Cygnus Solutions开发,用于各种版本的Microsoft Windows上,运行UNIX类系统。其主要目的是通过重新编译,将POSIX系统(例如Linux、BSD,以及其他Unix系统)上的软件移植到Windows上。Cygwin移植工作在Windows NT系列上比较好,在Windows 9x上相对差一些。目前Cygwin由Red Hat等负责维护,采用GPLv3协议授权。它也是一个可以在 Windows 上拥有 Linux 般体验的集成环境,其通过重新编译,将 POSIX 系统上的软件移植到 Windows 上;其包括了一组库,该库在 Win32 系统下实现了 POSIX 系统调用的 API,还有一套 GNU 开发工具集(比如 GCC 与 GDB),这样可以进行简单的软件开发,此外有一些 UNIX 系统下的常见程序,并且支持 X Window System。

Cygwin:Get that Linux feeling - on Windows
A large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows.
A DLL (cygwin1.dll) which provides substantial POSIX API functionality.

Cygwin包括了一套库,该库在Win32系统下实现了POSIX系统调用的API;还有一套GNU开发工具集(比如GCC、GDB),这样可以进行简单的软件开发;还有一些UNIX系统下的常见程序。2001年,新增了X Window System。
另外还有一个名为MinGW的库,可以跟Windows本地的MSVCRT库(Windows API)一起工作。MinGW占用内存、硬盘空间都比较少,能够链接到任意软件,但它对POSIX规范的实现没有Cygwin库完备。但糟糕的是,Cygwin不支持Unicode。实际上,除了当前Windows系统以及OEM codepages,Cygwin对其他字符集都不支持。
Red Hat规定,Cygwin库遵守GNU General Public License,但也可以跟符合开源定义的自由软件链接。Red Hat另有价格不菲的许可协议,这样使用Cygwin库的专属软件,就可以进行再发布。
2016年06月25日,Red Hat宣布,Cygwin 库的下一个版本将采用LGPL v3许可证。我们知道Cygwin库之前采用的是GPL许可证,采用更宽松的LGPL后将方便企业在其产品中使用Cygwin。Cygwin库是Cygwin项目 的核心,Cygwin项目目的是让Windows系统运行原生Linux程序,但在微软推出Linux兼容子系统后该项目看起来可能有点重叠了。
使用Cygwin,Linux程序需要重新编译,但使用Linux子系统Linux程序可以不用修改直接运行。
Cygwin库切换到LGPLv3许可证
2022年10月下旬消息,使用Cygwin,Linux程序需要重新编译,但使用Linux子系统Linux程序可以不用修改直接运行。Red Hat宣布Cygwin库的下一个版本将采用LGPL v3许可证。Cygwin库之前采用的是GPL许可证,采用更宽松的LGPL后将方便企业在其产品中使用Cygwin。Cygwin库是Cygwin项目 的核心,Cygwin项目的目的是让Windows系统运行原生Linux程序,但在微软推出Linux兼容子系统后该项目看起来可能有点重叠了。
最新版本:1.7
新版本增加了对 Windows 7 和 Windows Server 2008 R2的支持,以及其他方面的一些改进。
最新版本:3
v3.5.4 现已于2024年8月下旬发布,该版本主要是一个错误修复版本。更新内容包括有:
修复 3.5.3 中的回归问题,如果文件由另一个进程以独占方式打开,则无法为 stat(2) 打开文件
修复 3.5.0 中引入的从 DOS 命令行读取代理对(即 unicode 字符 >= 0x10000)时的回归问题
修复 3.5.0 中引入的 pthread::once () 回归问题(即破坏互斥锁的竞争问题)
修复针对 cygwin DLL 的 ldd 命令有时会挂起的问题
修复当 pty master 停止读取时 pty slave 会在写入时挂起的问题
修复会话之间控制台中共享名称的冲突
修复 LC_MESSAGE 宽字符数据中的偏差
改进管道缓冲区即将被填满时的写入管道行为。
v3.6.1 现已于2025年4月中旬发布,这是一个错误修复版本。更新内容包括有:
Console mode 恢复到以前的模式
在调用信号处理程序之前清除 sigdeleyed 中的方向标志
Getlocalename_l:修复崩溃并根据 final POSIX-1.2024 docs 处理 LC_ALL
在 SA_ONSTACK 情况下,将上下文复制到 call_signal_handler () 中的备用信号堆栈区域,因为无法从信号处理程序访问正常堆栈区域上的本地复制上下文
修复在 Cygwin DLL 或非 Cygwin DLL 上调用 dlopen/dlclose 时的引用计数
修复使用 RTLD_NODELETE dlopen/dlclose DLL 时的引用计数
不允许将来自 BUILTIN、NT AUTHORITY、NT SERVICE 域的帐户作为 POSIX ACL 中的 USER entry。仅允许 USER_OBJ、GROUP_OBJ 和 GROUP
适应 Windows 异常处理中影响软件生成异常的变更
打开 /dev/ptmx 次数过多时返回 EMFILE
将 pthread::atforkchild () 移至 fork::child () 的末尾。这修复了 cmake (>= 3.29.x) 中子进程失败的问题。
不要在 dladdr 中增加 DLL 引用计数
修复自 cygwin 3.5.5 以来已损坏的控制台的 tcsetattr ()
尝试在两个(或更多)线程 / 进程中同时创建同一个文件时修复缓存的 DOS 属性
修复在 pthread_key 的析构函数中调用 pthread_key_create 时出现的死锁。
官方主页:http://www.cygwin.com/

Cygwin:Get that Linux feeling - on Windows
A large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows.
A DLL (cygwin1.dll) which provides substantial POSIX API functionality.

Cygwin包括了一套库,该库在Win32系统下实现了POSIX系统调用的API;还有一套GNU开发工具集(比如GCC、GDB),这样可以进行简单的软件开发;还有一些UNIX系统下的常见程序。2001年,新增了X Window System。
另外还有一个名为MinGW的库,可以跟Windows本地的MSVCRT库(Windows API)一起工作。MinGW占用内存、硬盘空间都比较少,能够链接到任意软件,但它对POSIX规范的实现没有Cygwin库完备。但糟糕的是,Cygwin不支持Unicode。实际上,除了当前Windows系统以及OEM codepages,Cygwin对其他字符集都不支持。
Red Hat规定,Cygwin库遵守GNU General Public License,但也可以跟符合开源定义的自由软件链接。Red Hat另有价格不菲的许可协议,这样使用Cygwin库的专属软件,就可以进行再发布。
2016年06月25日,Red Hat宣布,Cygwin 库的下一个版本将采用LGPL v3许可证。我们知道Cygwin库之前采用的是GPL许可证,采用更宽松的LGPL后将方便企业在其产品中使用Cygwin。Cygwin库是Cygwin项目 的核心,Cygwin项目目的是让Windows系统运行原生Linux程序,但在微软推出Linux兼容子系统后该项目看起来可能有点重叠了。
使用Cygwin,Linux程序需要重新编译,但使用Linux子系统Linux程序可以不用修改直接运行。
Cygwin库切换到LGPLv3许可证
2022年10月下旬消息,使用Cygwin,Linux程序需要重新编译,但使用Linux子系统Linux程序可以不用修改直接运行。Red Hat宣布Cygwin库的下一个版本将采用LGPL v3许可证。Cygwin库之前采用的是GPL许可证,采用更宽松的LGPL后将方便企业在其产品中使用Cygwin。Cygwin库是Cygwin项目 的核心,Cygwin项目的目的是让Windows系统运行原生Linux程序,但在微软推出Linux兼容子系统后该项目看起来可能有点重叠了。
最新版本:1.7
新版本增加了对 Windows 7 和 Windows Server 2008 R2的支持,以及其他方面的一些改进。
最新版本:3
v3.5.4 现已于2024年8月下旬发布,该版本主要是一个错误修复版本。更新内容包括有:
修复 3.5.3 中的回归问题,如果文件由另一个进程以独占方式打开,则无法为 stat(2) 打开文件
修复 3.5.0 中引入的从 DOS 命令行读取代理对(即 unicode 字符 >= 0x10000)时的回归问题
修复 3.5.0 中引入的 pthread::once () 回归问题(即破坏互斥锁的竞争问题)
修复针对 cygwin DLL 的 ldd 命令有时会挂起的问题
修复当 pty master 停止读取时 pty slave 会在写入时挂起的问题
修复会话之间控制台中共享名称的冲突
修复 LC_MESSAGE 宽字符数据中的偏差
改进管道缓冲区即将被填满时的写入管道行为。
v3.6.1 现已于2025年4月中旬发布,这是一个错误修复版本。更新内容包括有:
Console mode 恢复到以前的模式
在调用信号处理程序之前清除 sigdeleyed 中的方向标志
Getlocalename_l:修复崩溃并根据 final POSIX-1.2024 docs 处理 LC_ALL
在 SA_ONSTACK 情况下,将上下文复制到 call_signal_handler () 中的备用信号堆栈区域,因为无法从信号处理程序访问正常堆栈区域上的本地复制上下文
修复在 Cygwin DLL 或非 Cygwin DLL 上调用 dlopen/dlclose 时的引用计数
修复使用 RTLD_NODELETE dlopen/dlclose DLL 时的引用计数
不允许将来自 BUILTIN、NT AUTHORITY、NT SERVICE 域的帐户作为 POSIX ACL 中的 USER entry。仅允许 USER_OBJ、GROUP_OBJ 和 GROUP
适应 Windows 异常处理中影响软件生成异常的变更
打开 /dev/ptmx 次数过多时返回 EMFILE
将 pthread::atforkchild () 移至 fork::child () 的末尾。这修复了 cmake (>= 3.29.x) 中子进程失败的问题。
不要在 dladdr 中增加 DLL 引用计数
修复自 cygwin 3.5.5 以来已损坏的控制台的 tcsetattr ()
尝试在两个(或更多)线程 / 进程中同时创建同一个文件时修复缓存的 DOS 属性
修复在 pthread_key 的析构函数中调用 pthread_key_create 时出现的死锁。
官方主页:http://www.cygwin.com/