Windows Bash和Cygwin之间有什么区别?

Windows Bash 和 Cygwin 之间有什么区别?

Windows 最新的更新带来了“Linux”Bash,但是它与 Cygwin 之间有哪些不同之处可能会使你选择其中之一呢?


1我认为Windows Bash在Microsoft方面更好地集成和支持。 - Panther
2我认为这个问题是相关的,因为Windows Bash是一个由Canonical支持的产品。它可能不相关,因为可能更多是意见而不是支持。 - Panther
2个回答

Cygwin是一个很棒的工具,如果你想完全在Windows中生活,并且想要使用bash脚本来驱动/自动化Windows任务的话。然而,Cygwin无法运行未经修改的Linux二进制文件。
这就是WSL的作用所在:
Windows子系统(WSL)是Windows内核的一个新层,旨在提供与Linux内核ABI高度兼容的功能。这使得原生、未经修改的Linux ELF64二进制文件可以在WSL上运行。
这就是WSL如何能够运行真正的Ubuntu用户空间发行版以及您从apt-get下载的任何软件包或其他地方的.deb软件包,而无需进行任何更改。
WSL的目的是让在Windows上工作的开发人员能够运行许多依赖于Linux二进制文件、特性、行为、文件系统布局、进程模型等的工具和项目。
虽然WSL在实施上仍处于早期阶段,但我们正在努力改进系统调用的广度和深度,以不断提高WSL运行越来越多的工具,并支持日益增长的Ruby、Java、node等软件包和项目的能力。

更新:2017年09月07日

自上述内容发布以来,我们已经推出了Windows 10创意者更新,该更新极大地提高了WSL与您想要/需要运行的许多工具的兼容性。

开发工作也一直在持续进行,我们在过去几个月中一直在发布Win10 Insiders版本,为即将在2017年10月发布的秋季创作者更新(FCU)做准备。

在FCU中,我们正在添加能够并行安装和运行多个发行版的功能:目前可用的有Ubuntu、openSUSE和SLES,Fedora和其他发行版也将陆续推出。WSL现在还支持USB串行通信,以及挂载USB存储和网络共享,同时还对系统调用进行了进一步改进,提高了与更多工具的兼容性。


更新:2019-08-22

自首次宣布和发布WSL(Windows Subsystem for Linux)以来,过去几年一直非常忙碌。我们不仅通过商店为多个发行版提供支持,还宣布了WSL v1.0。 希望对您有帮助。

在Build 2019大会上,我们宣布了全新的Windows终端这里是终端会话视频),以及WSL 2这里是WSL 2会话视频),这引入了在Windows上运行Linux的全新方法。

如需更多详细信息和未来更新,请定期访问Windows命令行博客,我们会发布大量相关新闻。


11我已经使用Cygwin多年了。WSL是一个非常棒的想法,大部分情况下运行良好... 但是在目前阶段,它的文件访问速度非常慢。我可以说是难以忍受的慢。使用类似GIT这样的中等规模操作,需要30秒以上的时间,而在Cygwin上则只需不到一秒。希望他们能够解决这个问题。 - Damien Sawyer
9磁盘性能是一个已知的问题:我们正在为Win10 CU进行一些性能改进,并将在2017年后期推出更加显著的改进。 - Rich Turner
3太棒了。迫不及待了。这将是一个很棒的产品 :-) - Damien Sawyer
我仍在等待对USB设备的支持,这是我最大的遗憾之一。 - Martijn van Wezel
2@DamienSawyer 这已经过去6个月了。你的网速投诉有减少还是仍然如之前一样? - WinEunuuchs2Unix
@RichTurner 你写得好像你是微软内部人士一样?如果是的话,你能否对我下面关于安装WSL所需的Windows版本发表评论? - WinEunuuchs2Unix
2@WinEunuuchs2Unix - 我还没有注意到/听说有任何改进。要知道,我并没有真正使用它,而是一直坚持使用Cygwin(和运行bash的Docker容器)。我想,如果它有所改善,技术媒体上会有公告,届时我会再试一试。 - Damien Sawyer
1如果我有机会使用64位的Windows 10,我会进行一些性能研究,并尽量记得在这个帖子上回复一个答案。 - WinEunuuchs2Unix
1@WinEunuuchs2Unix - 我是WSL和Windows控制台的PM。请在https://twitter.com/richturn_ms上关注我。 - Rich Turner
WSL的磁盘性能还不如我们所希望的。我们正在努力改进未来发布的东西。要进行与相同硬件上的本地Linux的性能比较,请参阅Phoronix的精彩测试:http://www.phoronix.com/scan.php?page=article&item=ubuntu-wsl-opensuse&num=1 - Rich Turner
@MartijnvanWezel - 请看一下我们最近的内部构建版本:我们现在支持USB串行通信 :) - Rich Turner
很遗憾,我在三四年前放弃了Twitter,在六七年前也放弃了Facebook。但很高兴在这里看到你为Ubuntu社区提供信息。大多数开发者都回避公共论坛,而你却积极参与其中。 - WinEunuuchs2Unix
@WinEunuuchs2Unix 很遗憾听到这个消息:尽管Twitter有时候可能会让人有点...咳咳...分心,但是关注那些你感兴趣并且尊重的人至少能帮助你及时了解那些变化如此迅速以至于很难记录下来的事情!;) 同时,请密切关注我们的博客网站https://blogs.msdn.microsoft.com/commandline,在那里我经常发布重要功能和分享有关WSL/Console的酷炫信息。 - Rich Turner
1@RichTurner 谢谢你的博客链接。我已经将它添加到我的“bash”书签栏中了。尽管应该忽略Twitter上的干扰,但不幸的是,我是那种会追查错误事实并试图指出真相的人。在那个无序的环境中,这样的努力是徒劳的。最好逃离战场。 - WinEunuuchs2Unix
3@RichTurner,那我就开始更新啦 :D - Martijn van Wezel
我过去的24小时都在狂看第九频道和其他由msdn赞助的视频。我已经订购了一台新的Win 10笔记本电脑,并且非常想安装WSL以及第三方X窗口应用程序,以便将我一年的bash工作移植过来。问题:十月已经到了,但我找不到秋季创作者更新的发布日期? - WinEunuuchs2Unix
根据我们上周的博客文章(https://blogs.msdn.microsoft.com/commandline/2017/10/11/whats-new-in-wsl-in-windows-10-fall-creators-update/),FCU明天开始发货! - Rich Turner
你的回答有更新吗?现在已经过去了将近两年。(顺便说一句,对你最初的回答点个赞)。 - Richard Erickson
1@RichardErickson - 上面已经添加了最新的更新 - 请务必关注我们的博客,或者在Twitter上关注我,以获取最新的Terminal / WSL新闻。;) - Rich Turner
你打算什么时候实现 USB 支持,@RichTurner? - Martijn van Wezel
@RichTurner 感谢您的更新。我在 Twitter 上私信了您一条具体的留言。 - Richard Erickson
@MartijnvanWezel - 我们在1703版本中添加了USB串口和USB存储支持。团队正在努力改进WSL2的USB支持。 - Rich Turner
很高兴你加入了,但我不仅代表自己说,目前它并不像我们期望的那样运作。 - Martijn van Wezel
我相信团队会很感激在他们的代码库中提供更详细的错误报告:https://github.com/microsoft/wsl - Rich Turner
@WinEunuuchs2Unix 如果你有时间并且使用的是Windows 10,我现在非常希望能得到那些基准测试结果,我想要确定当前的WSL2是否仍然比Cygwin在I/O方面更慢。 - Hashim Aziz
@Hashim 我听说 WSL2 要到 2020 年 5 月才会发布? - WinEunuuchs2Unix
@WinEunuuchs2Unix 我错了,你大部分是对的,它目前预计将在四月份发布。我把内测版本的发布和正式发布搞混了。等到实际发布还有一个月左右的时间,等待一下来进行基准测试是有道理的。 - Hashim Aziz
@Hashim 无论如何,WSL2在虚拟机中运行真正的Linux内核要比WSL 1快得多。有趣的是,微软是否具有动态CPU分配(例如,在我的8 CPU系统上将1到7个CPU平衡分配给Windows或Linux,以满足最大需求)和RAM分配(例如,在我的8 GB系统上,将RAM平衡分配给最需要的部分,并让其他系统利用更多SWAP)。 - WinEunuuchs2Unix
它绝对比WSL更快,但我更关心与Cygwin相比的速度。多年来我一直在使用Cygwin,现在我正在考虑是否应该用WSL2来替代它。 - Hashim Aziz
1@hashim WSL和Cygwin是两种不同的工具。WSL允许您在Windows上运行原始未修改的ELF64 Linux二进制文件。使用WSL,您可以运行整个Linux发行版以及通过apt/zypper等安装在该发行版上的任何内容。Cygwin是一组已重新编译为在Windows上运行的GNU工具。Cygwin不能直接运行ELF64 Linux二进制文件 - 但是,它可以运行Windows应用程序和工具,因为Cygwin二进制文件本身就是Windows可执行文件。此外,您可以根据需要选择适当的工具来运行它们。 - Rich Turner
@RichTurner,我不确定你为什么觉得有必要向我解释那么多,当我已经在上面提到过,我已经大量使用Cygwin超过5年了。现在真正的问题是,WSL2是否足够成熟,能够显著改善WSL,并使其I/O速度最终与Cygwin相媲美。 - Hashim Aziz
1@Hashim。我解释了上面的内容,因为即使是有经验的Cygwin用户也经常问“WSL有什么意义,我已经可以在Cygwin中运行grep”(或类似的问题)。很高兴你对两者都有全面的经验。当访问发行版文件系统内的文件时,WSL2磁盘IO性能接近于本机Linux,该文件系统是以EXT4格式化的VHDX。当访问存储在Windows文件系统中的文件时,由于需要遍历9P协议服务器,会对性能产生影响。 - Rich Turner

Windows Subsystem for Linux

我已经在Windows 10下使用WSL几个月了。终于,我可以启动Windows进行游戏,同时仍然可以访问bash提示符并运行CLI和许多GUI程序。虽然有一些限制,比如没有熟悉的Linux内核虚拟目录,但在双启动机器上共享相同的Bash脚本需要进行规划。

有很多我希望看到改进的地方,但就目前而言,我可以接受它一年左右。

闭源

需要记住的一件事是,微软是一个封闭系统,你不会像在Linux上那样享受到第三方编写更新的繁忙。但总体来说,你购买一台新笔记本电脑时,它都会预装Windows 10,所以至少可以说它是“免费”的:)

Cygwin由Red Hat Linux控制,后者也不是以免费提供东西而闻名。他们的“免费”Linux发行版Fedora对某些人来说似乎是一个"测试场"

维护周期

Cygwin有15年的更新历史。值得注意的是,自2003年以来,同一位项目经理一直在任职。有很多全职维护人员和更多的志愿贡献者。
WSL每年春季和秋季提供两次重大更新。每周还会向开发者订阅列表中的用户提供小型更新。尽管微软有资源投入数千人进行WSL开发,但你可以用手指头数出团队成员的数量。
速度问题
关于WSL的速度问题,你会看到很多抱怨。例如,在Windows 10上,屏幕绘制比Ubuntu 16.04慢很多倍,也就是说,在Windows 10上你实际上可以看到光标移动。

WSL bash startup.gif

WSL Bash启动画面的绘制大约需要5秒钟。相比之下,在Ubuntu 16.04中,同样的启动画面只需要大约1.5秒钟。

Ubuntu terminal splash.gif

Cygwin在Bash方面有其自己的速度投诉

以下是原始帖子,供历史参考。

对于 Windows 10 Home 来说,如果是32位的Windows系统,就意味着无法运行64位的Ubuntu / Windows子系统,正如微软在这里告诉我们的:(windows Linux subsystem in win10 HOME BASIC)。

能够在Windows上运行Ubuntu并享受其对Nvidia的卓越游戏支持,简直像是梦想成真。但在你冲出去购买新的(或二手的)笔记本电脑之前,请确保它是安装了Windows 10 64位版本,而不是32位的家庭版,如果你想在Windows下原生地运行Ubuntu / Linux相关内容。在微软的网站上,他们实际上将Windows周年纪念版作为运行Windows子系统的先决条件。


然而,如果你不想花200美元以上购买Windows 10,并且你有一台运行Windows 8.1 64位的旧笔记本电脑,就像我一样,还有一台运行Windows Vista 64位的更旧的笔记本电脑,那么Cygwin就是答案。
Cygwin支持更多版本的Windows(正如他们的网站所列出的):
引用: Cygwin可以在所有现代发布的Windows版本上运行。截至2016年1月,这包括Windows Vista、Windows Server 2008以及所有后续版本的Windows,包括Windows 10和Windows Server 2016。Cygwin的32位版本也可以在已发布的64位Windows版本的WOW64 32位环境中运行,当然,64位版本只能在64位Windows上运行。
请记住,Cygwin只能做到底层操作系统所支持的功能。因此,Cygwin在不同版本的Windows上的行为和限制可能会有所不同。

2问题是Cygwin和Bash for Windows之间的区别是什么。你的回答中甚至没有提到Cygwin。请说明这个回答如何解答问题。 - Seth
@Seth我指出了WSL是特定版本的,而Cygwin可以在所有支持的Windows版本上运行。谢谢你指出我的疏忽。 - WinEunuuchs2Unix
1我们已经非常明确地表示,WSL 需要 64 位的 Windows,并且可以在除了当前 LTSB 之外的每个 Windows 10 版本中使用 - WSL 将被添加到下一个 LTSB 版本中。WSL 也将包含在于2017年秋季发布的 Windows Server 中。 - Rich Turner
1@RichTurner 你的网站清楚地说明了。对我来说不清楚的是(并不是你的错),为什么这个卖家销售一台搭载i7四核心7700处理器、Nvidia 1050显卡和12GB系统内存以及Windows 10家庭版的笔记本电脑。有人删除了原始链接,但在这里可以找到。他们没有明确说明它是32位的。你是说每个Windows 10都是64位的吗? - WinEunuuchs2Unix
1卖家将其作为一台游戏电脑销售。由于大多数玩家不需要Win10专业版的额外功能,他们选择了Home版本,以免让客户为他们可能不需要的东西付费。Windows 10也有32位版本供那些需要的人使用,但如果有人销售具有大于4GB内存并安装32位操作系统的机器,我会感到非常惊讶,因为操作系统和运行的应用程序将无法访问超过4GB的任何内容。 - Rich Turner
@RichTurner 我在新蛋网站上看到了同款笔记本电脑,上面标明是Windows Home 64位。我猜斯台普尔的网站设置人员可能只是为了节省空间或者不让他们那些刻板印象的消费者感到困惑,所以省略了64位这一部分。无论如何,我已经加强了对更强大的GPU(GTX 1070)的搜索。 - WinEunuuchs2Unix