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

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

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

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

但是 WSL?WSL 更接近 coLinux 或 Cygwin 吗?

编辑 2020/06/16 更令人困惑的是,现在有了 WSL2。但据我目前的了解,它只是一个虚拟机。

答案1

WSL 比 Cygwin 更接近 coLinux。


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

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

WSL 1旨在澳大利亚商业信息局-与 Linux 兼容。它确实不是使用真正的 Linux 内核,但是兼容的这样,为 Linux 编译的程序就可以在其上运行,而无需重新编译或转换。WSL 是 NT 内核的一部分,因此独立于 Win32 子系统而存在。这类似于较旧的 SUA,尽管那是 NT 内核之上的 POSIX(不是 Linux!)子系统。

WSL 2,在轻量级虚拟机上运行真正的 Linux 内核。它承诺与 WSL 1 类似,但具有真正的 Linux 内核(因此内核模块、文件系统等应该可以工作)。它还有适当的 GUI 支持(在 Windows 10 Build 19044+ 或 Windows 11 上)但访问 Windows 文件系统时 I/O 性能会降低与 WSL 1 相比

coLinux 运行一个真正的(虽然经过修改)Linux 内核。在 Windows 方面,它作为提供内存管理和 I/O 访问的驱动程序存在。从概念上讲,它最接近虚拟机,但主机和“客户机”之间的集成更紧密。coLinux 自 2011 年以来没有发布任何版本,我也没有在他们的 SourceForge 页面上看到任何活动;它可能被视为一个已死的项目。


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

从程序的角度来看,Cygwin 与 Linux 的相似度并不比 FreeBSD 更高。

答案2

鲍勃的回答很棒,但我只想在 WSL2 上添加一个澄清细节。

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

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

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

  • PID 命名空间
  • 挂载命名空间
  • IPC 命名空间
  • UTS 命名空间
  • WSLg 系统分发(仅限 Windows 11)

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

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

更多阅读:有一个伟大的篇章在书里使用 LXC 进行容器化详细解释了这里涉及的许多概念。它目前是 Packt 的免费示例章节。

相关内容