MSYS2和Cygwin之间的区别

63

传统上,MSYS bash被认为不如Cygwin bash。前者是MinGW中的辅助工具,旨在运行autoconf脚本。但现在有了MinGW-w64和MSYS2。后者带有一个类似于pacman的软件包管理器和优雅的shell,如zsh,因此我想知道模拟层是否仍存在差距。

虽然MinGW*应用程序是Windows本机可执行文件,但MSYS2软件需要类似于Cygwin的POSIX仿真层。至少对于普通用户而言,很难发现两者之间的区别。

  • 这两个仿真层之间有哪些功能性差异(如果有)?
  • 哪个仿真更快(更有效)?

1
如果不是意见,您还在寻找什么样的好处呢? - Scimonster
1
@Scimonster 我正在寻找能够使两个项目之一更符合POSIX标准的技术和实现细节,而不是个人使用经验。例如,项目x是否基于cygwin.dll,而不是项目x是否使用舒适的pacman安装程序。我认为后者只是关于你喜欢什么的观点。 - antonio
2
好奇心使我认为询问三个分支与派生项目有何不同的问题太过宽泛:stackoverflow.com/q/25019057。由于提问者本身说:“我对改进这个问题的任何建议都持开放态度。我觉得它可以更好。”,所以我只关注了最新的分支(MSYS2),提供了更多背景信息。相比之下,三个分支的问题是合理的,而我的问题似乎不合适。 - antonio
4
为什么当下面的问题被接受时,这个主题被认为过于宽泛?https://dev59.com/NXRA5IYBdhLWcg3w8iol?rq=1 - David Scott Kirby
2个回答

79

传统上,MSYS bash一直表现不佳,主要是因为Cygwin保持了积极的发展,而MSYS没有。MSYS从Cygwin版本1.3.3分叉而来,并且从未重新同步,而MSYS2定期与Cygwin项目同步。

我们没有“像Pacman那样甜美的软件包管理器”,我们尽可能直接重新编译了Arch Linux的pacman软件包管理器。

MSYS2没有cygwin.dll,但它有msys-2.0.dll,它可以做同样的事情(以及更多)。具体来说,运行Windows本机软件时,看起来像路径和PATH环境变量的参数会转换为Windows形式。

至于它是否更慢,我预计差别很小,但由于额外的转换工作,MSYS2可能会稍微慢一点。然而,有机会你将在MSYS2中运行更多的Windows本机软件(例如MinGW-w64编译器)而不是在Cygwin中,所以这将让MSYS2更有优势。


26
值得一提的是,Ray Donnelly 是 MSYS2 的开发人员。因此他的回答应被视为非常可靠的。希望在不久的将来,类似的信息将会被添加到 msys2.github.iogithub.com/msys2 - antonio
3
这里有一个关于 SF 的链接:https://sourceforge.net/p/msys2/wiki/How%20does%20MSYS2%20differ%20from%20Cygwin/ - Nick Westgate
1
https://github.com/msys2/msys2/wiki/How-does-MSYS2-differ-from-Cygwin 是 Nick 链接的更新位置。 - anishpatel

12
据我所知,MSYS2是Cygwin的一个分支,其主要目标是提供使用MinGW-w64软件包的可能性。这个目标是以牺牲可用软件总数为代价实现的。可以比较一下MSYS2Cygwin的软件列表。
基本上就是这样。因此,如果你不需要在MinGW-w64下编译某些东西,你几乎没有理由使用MSYS2而不是原始的Cygwin。

+1 我看到 MSYS2 不包含 cygwin.dll。这是否意味着它的工具更有效?如果我有针对 Linux 的源代码(但假设不使用 X),Cygwin 是否比 MSYS2 更可能构建它? - antonio
8
MSYS2 只是将 cygwin.dll 命名为另一个名称,其工作方式与 Cygwin 相同。使用 Cygwin 撰写的代码更可能在 Cygwin 上正常运行而非 MSYS2 上。MSYS2 真的不适合创建 MSYS2 程序,除了那些属于 MSYS2 的程序。MSYS2 主要用于使用类 Unix 工具创建 Windows “本地”程序。特别是它被设计用于运行 GNU autoconf 的configure 脚本。 - Ross Ridge
6
虽然你不需要在MinGW-w64下编译任何东西,但你几乎没有理由使用MSYS2而不是原始的Cygwin。我认为你把事情本末倒置了!我们使用MSYS2来通过GNU风格的工具编译本机Windows程序。在很多方面上,MinGW-w64只是这个实现细节中的一个编译器。使用MSYS2的原因是它的本地构建系统,而不是特定的编译器...当然,这个编译器使所有这些成为可能 :-) - underscore_d
4
MSYS2可以从C++编译Windows Python扩展,但Cygwin无法。 - Contango

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接