
微软的 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.exe
、wslconfig.exe
和wslg.exe
。 - 负责启动 WSL 虚拟机、管理发行版、挂载文件共享等功能的核心服务,例如
wslservice.exe
。 - 在 Linux 环境下运行的 init 和各类守护进程,用于支持 WSL 的完整功能,包括
init
(启动管理)、gns
(网络服务)、localhost
(端口转发)等。 - 支持将 Linux 文件共享给 Windows 的 plan9 服务器实现,即
plan9
。
要深入了解各个模块,可以查阅 https://wsl.dev。
其实,微软之前就已经开源了一些 WSL 相关项目,比如:
- microsoft/wslg:为 WSL 提供 Wayland 和 X 服务器支持,用于运行图形界面应用。
- microsoft/WSL2-Linux-Kernel:WSL 2 所使用的 Linux 内核源码。
不过,由于一些组件属于 Windows 系统镜像的一部分,尚不开源,包括:
Lxcore.sys
:WSL 1 的内核层驱动。P9rdr.sys
和p9np.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。在这里,你可以深入了解项目结构、参与讨论、提交修复或贡献新功能。
最新评论
你当前登录的用户不是管理员账户(没在administrators组中)?
奇怪,为啥我已经右键以管理员运行uup_download_windows了cmd里还提示我需要管理员权限运行
valeo@DESKTOP-BHEH91Q:~$ sudo systemctl is-active docker System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down 这个问题怎么解呀各路大神
Win11更改任务栏为顶部,把03改成01操作后没变化,在此操作发现注册表又还原回为03。 也就是说改注册表也是改不了,不知道为什么WIN11要把这个功能去掉,又影响了什么,一个系统升级改来改去。