Windows Subsystem for Linux (WSL)、Cooperative Linux (coLinux) 和 Cygwin 之间有什么区别?

Rin*_*han 43 cygwin windows-subsystem-for-linux

还有人记得coLinux吗?我记得几年前它用于 SpeedLinux 和 Portable Ubuntu。

很清楚 coLinux 在做什么,以某种方式在 Windows 之上运行 Linux,但可以使用真正的 linux 分区。与此同时,cygwin 正在重新编译 Linux 应用程序以在 Windows 上使用。

但是WSL?WSL 更接近 coLinux 还是 Cygwin?

编辑 2020/06/16 以增加更多混乱,现在有了 WSL2。但据我目前所知,它只是一个虚拟机。

Bob*_*Bob 43

WSL 比 Cygwin 更接近 coLinux。


请记住,Unix、POSIX 和 Linux 是不同的东西

Cygwin 是一个 POSIX 兼容层,它运行在Win32 子系统之上。它与Linux几乎没有任何关系;它可以广泛地被视为“只是另一个类 Unix”,其中移植程序需要重新编译和可能的源代码修改,并且任何需要非 POSIX Linux 特定功能的东西都可能无法工作。

WSL 1被设计为与 Linux 适当的ABI兼容。它并没有使用真正的Linux内核,但兼容,使得编译Linux程序可以无需重新编译或翻译上运行。WSL 是 NT 内核的一部分,因此独立于 Win32 子系统而存在。这类似于旧的 SUA,尽管它是 NT 内核之上的 POSIX(不是 Linux!)子系统。

WSL 2尚不可用,它将在轻量级 VM 上运行真正的 Linux 内核。它承诺与 WSL 1 类似的 Windows 集成,但具有真正的 Linux 内核(因此内核模块、文件系统等应该可以工作)。

coLinux 运行一个真实的(虽然经过修改)Linux 内核。在 Windows 端,它作为提供内存管理和 I/O 访问的驱动程序存在。从概念上讲,它最接近虚拟机,但主机和“来宾”之间的集成更紧密。


从程序的角度来看,WSL 和 coLinux 看起来与在原始硬件上运行的真实 Linux 内核大致相同。WSL(目前)有更多限制和怪癖,但在 x86_64 上也有第一方 (Microsoft) 支持和 wotks。coLinux 和 WSL 2 是真正的 Linux 内核,因此它们的行为就像 Linux,而 WSL 1 是 ABI 的洁净室实现。

Cygwin 看起来并不比 FreeBSD 更接近 Linux。

  • 在命令行提示符下,Cygwin 看起来更接近 Linux,而不是 FreeBSD 对 Linux,因为它提供了 Linux 系统上通常可用的 GNU 用户空间命令,而不是 FreeBSD 命令。 (13认同)
  • @RinaldoJonathan 就我个人而言,我更喜欢 WSL 方法。IMO coLinux 方法相对脆弱(两个内核之间的接口定义不佳)。事实上,我会在 coLinux 上使用完整的 VM。但这确实取决于您的需要。 (3认同)
  • 我确实同意 colinux 现在更好。很遗憾没有人将它移植到 x86-64。 (2认同)

Not*_*1ds 6

Bob 的回答很好,但我只想添加一个关于 WSL2 的澄清细节。

...现在有 WSL2。但据我目前了解,它只是一个虚拟机。

WSL2 更像是 Docker(以及其他容器化技术),而不是 VM 本身。是的,WSL2子系统(称为“虚拟机平台”的部分)正在轻量级虚拟机中运行,但我们无法访问实际的 VM 本身。相反,该虚拟机用于在自己的命名空间中运行“发行版”(我倾向于称其为“实例”)。

每个 WSL2 实例都有一个单独的:

  • PID命名空间
  • 挂载命名空间
  • IPC命名空间
  • 悉尼科技大学命名空间
  • WSLg 系统分发(仅限 Windows 11)

但是,它们都与父 WSL2 VM 共享以下内容(因此彼此共享):

  • 用户命名空间
  • 网络命名空间
  • Cgroup命名空间
  • 设备树(除了/dev/pts
  • CPU/内核/内存/交换(显然)
  • /init二进制(但不是进程)

更多阅读:《Containerization with LXC》一书中有一个很棒的章节,详细解释了这里涉及的许多概念。目前它是 Packt 上的免费示例章节。