WSL、SFU、SUA/Interix、POSIX 子系统和 Cygwin 之间有什么区别

ita*_*ton 7 windows cygwin sua windows-subsystem-for-linux

我确实在msdn 博客上找到了很多有关LinuxWindows 子系统(WSL) 工作原理的信息。我知道它基于将 Linux 系统调用实时转换为 NT 系统调用,因此可以运行未经修改的 ELF 二进制文件。

WSL 是一个 NT 子系统,Microsoft POSIX 子系统、UNIX 的 Windows 服务 (SFU) 和基于 Unix 的应用程序的子系统 (SUA) / Interix 也是如此。

另一方面,Cygwin 是一个位于 Win32 子系统之上的应用程序。

在博客上它说需要为 SUA 重新编译程序。由于 SUA 是(我如何理解它)SFU 的继任者,而 SFU 又是 POSIX 子系统的继任者。所以我假设所有这些都需要重新编译的二进制文件。

如果是这样,那么 WSL 的那些前辈与 Cygwin 有何不同?

我正在寻找前面提到的系统/程序以及它们如何在“幕后”工作之间的比较。(具体来说 WSL 与其后继者有何不同)

PS:现在需要删除一些链接,因为我在 SU 上的声誉将我限制为 2

小智 5

关于SUA/SFU 和Interix,是有区别的。维基百科对此进行了很好且广泛的解释: Microsoft POSIX 子系统Interix

Interix 是 POSIX 子系统之上的 BSD 实现。您可以将其替换为其他实现,例如 GNU Debian 或 NetBSD(已完成)。SUA (2005) 开放了 POSIX 子系统,因此您可以通过 NT 调用对其进行扩展,甚至可以运行混合的 Posix/Win32 应用程序。

不幸的是,微软从未发布合适的开发工具,甚至外包了支持。有一个论坛,用户可以在开发和其他事情上互相帮助。支持公司提供了一个包含各种二进制包的存储库。最终,微软停止了资助,当支持公司关闭论坛时,几乎所有有关 Interix 的信息都消失了。

简而言之:SUA Posix 应用程序非常快,可能是 Windows 上运行的最高效的应用程序。但它们的开发很痛苦,涉及侵入 NT 和 Posix 系统文件,即很有趣。


use*_*686 4

Interix/SFU/SUA 是一个轻量级子系统,仅用 Unix libc \xe2\x80\x93 之类的东西替换用户空间Win32 层,即使有用于某些任务的“子系统驱动程序”(psxss),它仍然使用 Windows PE ( .exe)可执行文件,libc 仍然使用 NT 内核系统调用,Interix 进程看起来几乎完全像 Win32 或本机进程,并且它们具有相同的文件系统访问权限。

\n\n

Cygwin 类似但更简单;它完全作为 Win32之上的用户空间运行时库构建(偶尔有 NT 调用)。因此,Cygwin 应用程序实际上只是使用非常奇怪的 libc 的 Win32 应用程序。

\n\n

相比之下,WSL 甚至比 SUA \xe2\x80\x93 更广泛,Lxss 驱动程序重新实现了 Linux 内核系统调用而不是用户空间库函数,并且可以运行未修改的 ELF 二进制文件(默认的 WSL 系统是 Ubuntu)。WSL 环境大部分是独立的,实际上是一个“用户模式 ​​Linux”虚拟机,与主机操作系统的交互非常少。虽然 WSL 进程显示在共享进程树中,但您不能直接运行 /bin/sh \xe2\x80\x93 您必须启动整个 WSL 系统,这是在bash.exe幕后完成的。(有一篇关于此的博客文章。)

\n