答案1
我以前只在 Windows 2008 上使用过 Windows SFU,但我相信它是基于 Interix 的。我偶尔也使用过 cygwin,但次数不多,所以如果我在这里说了明显错误的话,请大家纠正我。
- 类似 Unix 的感觉:Interix 赢了。环境感觉更加“完整”。我不知道该怎么说。Interix 与 win32 子系统一起运行,而 cygwin 则在其上运行。因此,interix 是 Windows 内核领域的“一等公民”。和之类的东西
ps
运行df
良好。 - 表现:由于没有进行任何重大的性能测试,我猜测Interix 也赢了。同样,它运行在较低级别。您不只是运行带有 POSIX 兼容性 DLL 链接的 Win32 应用程序。
- 软件包/随机软件:Cygwin 之所以能赢得这场竞争,有两个原因。首先,cygwin 更为人熟知。许多 Unixy 软件都支持它的怪癖。您还可以从 GUI 安装程序中非常轻松地安装东西。Interix(我相信)没有内置任何类似的东西。当然,您可以下载一些东西,使用 gcc(我认为您可以预先构建)进行编译,然后祈祷它能正常工作,但这有点像将软件移植到任何其他 Unix 变体(如 Solaris 或 AIX)上 - 有些东西会正常工作,其他东西会试图咬断您的腿并杀死您的孩子。
- 与 Windows 应用和工具集成:说实话,这两种方式在这方面都不太好。如果你有一个在 cygwin 或 Interix 中运行的 Apache 服务器,那么当然,它将能够通过 TCP 与 Win32 程序进行通信,但这就是它所能达到的极限。我相信,在 interix 中,你可以终止 Win32 程序并使用 ps 列出它们,但不确定你是否可以在 cygwin 中做到这一点。使用这两种方式,你都可以使用 Windows 任务管理器来终止程序。
- 与虚拟机集成:针对您共享主目录的示例,答案是肯定的。您可以使用 samba 来实现这一点,我相信 NFS 也可以在 Interix 上运行,以实现更 unixy 的功能。不过,您找不到任何不错的 GUI 或任何可以为您完成工作的东西。cygwin 和 Interix 都允许您访问常规文件系统。
- 用户群规模:我想说,Cygwin 在这方面胜出。很难找到经过测试和开发可以在 Interix 上运行的东西,而大多数开源东西似乎都支持 cygwin 作为编译平台。
如果您有一份支持 Interix 的 Windows 操作系统(如您所说,企业版、终极版或服务器版),那么尝试一下也没什么坏处。这是一个感觉非常完整的环境。如您所说,Cygwin 可以在所有系统上运行,而且更出名,支持也更好,但我觉得它有点像肮脏的黑客。不过有些人经常使用它。
答案2
/*meta note-我讨厌评论太短*/
我基本同意安德鲁斯的回答,但有几点意见。我在 Windows 下用 SUA/SFU(不,它们不一样,但很接近)替换了许多 unix 系统。
- 性能 - SUA 比 unix 服务快得多,但 SFU 也不逊色,两者通常都比 cygwin 快(但并非总是如此)
- 集成 - 集成是 SFU/SUA 的重点,technet 网站上有很多关于您可以做什么和不能做什么的文档。Cygwin 旨在在 Windows 上运行 *nix 命令 - 而不是让两者协作。请参阅Windows 中的 Unix/Linux 互操作性组件(SUA、IdMU、NFS 等)
- 用户基础 - 我认为 interix 方面比 cygwin 方面有更多可行的、受支持的解决方案,而且兼容性问题也比 cygwin 方面少得多。http://www.suacommunity.com/(工具仓库)。Cygwin 可能具有更多的整体安装,因为它非常适合“我需要一个 unix shell”解决方案。Cygwin 运行命令,SUA 是一个与 windows 对等的 unix 环境。
答案3
无法对 JimB 的回答发表评论,因此在此进行讨论,特别是关于 Windows 集成的问题。Cygwin 基于 Win32,而不是在其自己的子系统中运行,虽然速度较慢,但提供了更好的 Windows 集成。它甚至允许在同一个程序中使用 Windows 和 UNIX API,从而实现 Cygwin X 服务器或 mintty 终端等功能。
如果您为 Cygwin 的“ps”指定 -W 选项,它确实会列出 Windows 进程,而“kill -f”将终止它们。Windows 程序可以从 Cygwin 内部调用,并使用所有常用机制(如管道)与 Cygwin 程序连接在一起。(我不知道在 Interix 中是否可以这样做。)
支持 Windows 样式的路径,包括正斜杠和反斜杠。Cygwin 1.7 将 UTF-8 设为默认字符集,并且 Windows 的 UTF-16 文件名会自动翻译,因此任何语言的文件名都可以在 Cygwin 中正确显示。我不知道 Interix 在这里做什么,但找不到任何支持 Unicode 的证据。
其他集成功能包括“cygstart”实用程序,用于打开文件,就像在资源管理器中双击文件一样,以及用于访问 Windows 剪贴板的 /dev/clipboard 设备。
答案4
类似 UNIX 的“感觉”非常主观。我投票给 CygWin,因为它有 CygWin/X Xwindows 服务器,具备所有必要的功能。SFU 有基本的 X11 工具,但为时已晚。许多人(包括我)都是因为需要 X11 服务器而接触 CygWin 的。在完整性方面,CygWin 也处于更有利的位置,因为它是开源的,并且许多 GNU 或 GPL 许可的软件都移植到了它上面。我见过的 CygWin 商业产品很少,而只见过一种需要 Windows NT 的 UNIX 服务的产品,之后就再也没有了。YMMV。
封装可用性CygWin 显然胜出,这受以下几个因素影响: - 入门成本较低:使用 CygWin 的“任何 Windows”与 SFU/SUA 的服务器级许可证。某些功能可用于 Windows 的桌面版本,但价格更高,且不含服务器组件; - 开源与闭源,更重要的是公开可用的文档。过去,甚至命令列表和提供的 API 也仅供 MSDN 订阅者使用,Microsoft 网站上几乎没有任何信息。相比之下,GNU 工具集有详尽的文档,可在线获取,也可作为手册页获取; - 命名和实现更改令人困惑。早期版本使用的是 MKS 工具包,后来被废弃了。从 SFU 重命名为 SUA 在营销团队眼中可能看起来不错,但会让没有经验的用户感到困惑。
表现- 有人可能会说 Interix 更接近内核,因此代码运行路径更短。真正的问题是它有多大影响,这重要吗?对于大多数程序来说,差异只有几个百分点,可以忽略不计。当然,可以举一个 I/O 繁重的人工示例。我更愿意将此类负载放在本机 UNIX 上,因为它比本机 Windows 和 Windows 上的 UNIX 附加组件都快。随着负载的增加,许多人从 Windows 迁移到 UNIX,而我不知道从 CygWin 转换到 Interix(或反之亦然)的例子。寻求的是 UNIX 兼容性,而不是 UNIX 性能,所以我把它放在列表的末尾。