系统极客一直在努力
专注操作系统及软件使用技能

微软 WSL 正式开源,组件架构与发展历程回顾

Windows Subsystem for Linux

微软的 Windows Subsystem for Linux(简称 WSL)正式开源啦!为 GitHub 上 Microsoft/WSL 仓库的第一个问题——「Will this be Open Source?」画上了圆满的句号。

现在,所有人都可以在 GitHub 上查看 Microsoft/WSL 的核心代码,你可以下载并自行编译 WSL,提交修复、添加新功能,真正参与到 WSL 的开发中来。

WSL 组件架构简介

WSL 由多个关键组件组成,其中有些运行在 Windows 系统中,有些则运行在 WSL 2 的轻量级虚拟机环境里。整体架构如下图所示:

WSL 组件架构
WSL 组件架构

主要的代码模块包括:

  • 与 WSL 交互的命令行工具,比如wsl.exewslconfig.exewslg.exe
  • 负责启动 WSL 虚拟机、管理发行版、挂载文件共享等功能的核心服务,例如wslservice.exe
  • 在 Linux 环境下运行的 init 和各类守护进程,用于支持 WSL 的完整功能,包括init(启动管理)、gns(网络服务)、localhost(端口转发)等。
  • 支持将 Linux 文件共享给 Windows 的 plan9 服务器实现,即plan9

要深入了解各个模块,可以查阅 https://wsl.dev

其实,微软之前就已经开源了一些 WSL 相关项目,比如:

不过,由于一些组件属于 Windows 系统镜像的一部分,尚不开源,包括:

  • Lxcore.sys:WSL 1 的内核层驱动。
  • P9rdr.sysp9np.dll:负责\wsl.localhost文件系统的重定向功能,用于实现 Windows 对 Linux 文件的访问。

WSL 发展历程回顾

WSL 1 初现

WSL 最早于 2016 年 Microsoft Build 开发者大会上宣布,并随「Windows 10 周年更新」正式亮相。

  • 最初的 WSL 基于 pico 进程架构,使用了一个名为lxcore.sys的组件,让 Windows 能够原生运行 ELF 格式的可执行文件。
  • 同时,它还在 Windows 内核中实现了 Linux 系统调用。这套架构也就是我们今天所熟知的 WSL 1(目前依然被支持)。

WSL 2 诞生

随着时间的推移,开发团队发现:要想实现与原生 Linux 环境更高程度的兼容性,最好的方式就是直接依赖 Linux 内核本身。于是,WSL 2 诞生了,并在 2019 年正式对外发布。

在 WSL 持续演进的过程中,用户社区也在不断壮大。功能方面也陆续引入了许多重磅特性,比如:

  • GPU 支持
  • 通过 wslg 运行图形界面应用
  • 对 systemd 的原生支持

WSL 项目独立

随着需求和功能的不断增加,微软意识到:必须加快 WSL 的更新节奏,不能再依赖 Windows 主系统版本的发布周期。

  • 因此,在 2021 年将 WSL 迁移到了一个独立的代码仓库,并以 0.47.1 版本(于当年 7 月)首次上架 Microsoft Store。这个版本仅支持 Windows 11,标记为预览版,主要面向愿意尝鲜的早期用户。
  • 随后,开发团队不断完善这个独立的「WSL 包」。2022 年 11 月,WSL 1.0.0 版本发布,首次支持 Windows 10,标志着独立 WSL 项目正式稳定上线。

为了让所有用户都能用上独立的 WSL 包,逐步取代 Windows 自带的版本。从那时起,WSL 团队开始持续优化体验。Windows 11 24H2 就是首个支持平滑迁移至「新 WSL 包」的正式版本。

当然,为了方便过渡,wsl.exe依然被内置在 Windows 系统中,方便用户在需要时自动下载最新版本的 WSL 包。

在不断完善的过程中,WSL 又迎来一个重要节点——WSL 2.0.0,带来了多项重大升级,包括:

  • 镜像网络
  • DNS 隧道
  • 会话 0 支持
  • 代理功能
  • 内置防火墙

WSL 成长中的社区力量

WSL 能够一路走来,持续进化、不断完善,离不开一代又一代社区成员的热心参与和无私奉献。从最早的种子用户,到后来踊跃反馈问题、参与测试的开发者,再到深入研究、答疑解惑、探索新功能的技术大拿……正是这些人的坚持与热情,为 WSL 的发展注入了源源不断的动力。

即使在 WSL 源码尚不开放的阶段,社区也通过各种方式做出了重要贡献。可以说,没有这样一个活跃且富有创造力的社区,就没有今天的 WSL。

正因如此,微软才把 WSL 开源。过去,大家只能通过黑盒逆向、猜测实现方式来参与改进;如今,代码已经公开,期待看到更多社区成员直接为 WSL 贡献代码,共同塑造 WSL 的未来。

如何参与 WSL 贡献

如果你对 WSL 的实现原理充满好奇,或者对某个具体功能的代码特别感兴趣,想动手参与改进,可以访问 WSL 的官方项目页面:microsoft/WSL。在这里,你可以深入了解项目结构、参与讨论、提交修复或贡献新功能。

赞(2)
分享到

评论 抢沙发