微软宣布开源WSL:Linux 与 Windows 生态的全新融合
文章目录
在微软Build 2025开发者大会上,微软宣布了一项重磅决定:正式开源Windows Subsystem for Linux(WSL)项目。这一消息标志着微软与开源社区合作的新篇章,也满足了开发者社区长达九年的期盼。
WSL的发展历程
#mermaid-svg-sNHOUbeHIdQPlYpd {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sNHOUbeHIdQPlYpd .error-icon{fill:#552222;}#mermaid-svg-sNHOUbeHIdQPlYpd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sNHOUbeHIdQPlYpd .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-sNHOUbeHIdQPlYpd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sNHOUbeHIdQPlYpd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sNHOUbeHIdQPlYpd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sNHOUbeHIdQPlYpd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sNHOUbeHIdQPlYpd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sNHOUbeHIdQPlYpd .marker.cross{stroke:#333333;}#mermaid-svg-sNHOUbeHIdQPlYpd svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sNHOUbeHIdQPlYpd .mermaid-main-font{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-sNHOUbeHIdQPlYpd .exclude-range{fill:#eeeeee;}#mermaid-svg-sNHOUbeHIdQPlYpd .section{stroke:none;opacity:0.2;}#mermaid-svg-sNHOUbeHIdQPlYpd .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-sNHOUbeHIdQPlYpd .section2{fill:#fff400;}#mermaid-svg-sNHOUbeHIdQPlYpd .section1,#mermaid-svg-sNHOUbeHIdQPlYpd .section3{fill:white;opacity:0.2;}#mermaid-svg-sNHOUbeHIdQPlYpd .sectionTitle0{fill:#333;}#mermaid-svg-sNHOUbeHIdQPlYpd .sectionTitle1{fill:#333;}#mermaid-svg-sNHOUbeHIdQPlYpd .sectionTitle2{fill:#333;}#mermaid-svg-sNHOUbeHIdQPlYpd .sectionTitle3{fill:#333;}#mermaid-svg-sNHOUbeHIdQPlYpd .sectionTitle{text-anchor:start;font-family:\'trebuchet ms\',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-sNHOUbeHIdQPlYpd .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-sNHOUbeHIdQPlYpd .grid .tick text{font-family:\"trebuchet ms\",verdana,arial,sans-serif;fill:#333;}#mermaid-svg-sNHOUbeHIdQPlYpd .grid path{stroke-width:0;}#mermaid-svg-sNHOUbeHIdQPlYpd .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-sNHOUbeHIdQPlYpd .task{stroke-width:2;}#mermaid-svg-sNHOUbeHIdQPlYpd .taskText{text-anchor:middle;font-family:\'trebuchet ms\',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-sNHOUbeHIdQPlYpd .taskTextOutsideRight{fill:black;text-anchor:start;font-family:\'trebuchet ms\',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-sNHOUbeHIdQPlYpd .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-sNHOUbeHIdQPlYpd .task.clickable{cursor:pointer;}#mermaid-svg-sNHOUbeHIdQPlYpd .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-sNHOUbeHIdQPlYpd .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-sNHOUbeHIdQPlYpd .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-sNHOUbeHIdQPlYpd .taskText0,#mermaid-svg-sNHOUbeHIdQPlYpd .taskText1,#mermaid-svg-sNHOUbeHIdQPlYpd .taskText2,#mermaid-svg-sNHOUbeHIdQPlYpd .taskText3{fill:white;}#mermaid-svg-sNHOUbeHIdQPlYpd .task0,#mermaid-svg-sNHOUbeHIdQPlYpd .task1,#mermaid-svg-sNHOUbeHIdQPlYpd .task2,#mermaid-svg-sNHOUbeHIdQPlYpd .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-sNHOUbeHIdQPlYpd .taskTextOutside0,#mermaid-svg-sNHOUbeHIdQPlYpd .taskTextOutside2{fill:black;}#mermaid-svg-sNHOUbeHIdQPlYpd .taskTextOutside1,#mermaid-svg-sNHOUbeHIdQPlYpd .taskTextOutside3{fill:black;}#mermaid-svg-sNHOUbeHIdQPlYpd .active0,#mermaid-svg-sNHOUbeHIdQPlYpd .active1,#mermaid-svg-sNHOUbeHIdQPlYpd .active2,#mermaid-svg-sNHOUbeHIdQPlYpd .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-sNHOUbeHIdQPlYpd .activeText0,#mermaid-svg-sNHOUbeHIdQPlYpd .activeText1,#mermaid-svg-sNHOUbeHIdQPlYpd .activeText2,#mermaid-svg-sNHOUbeHIdQPlYpd .activeText3{fill:black!important;}#mermaid-svg-sNHOUbeHIdQPlYpd .done0,#mermaid-svg-sNHOUbeHIdQPlYpd .done1,#mermaid-svg-sNHOUbeHIdQPlYpd .done2,#mermaid-svg-sNHOUbeHIdQPlYpd .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-sNHOUbeHIdQPlYpd .doneText0,#mermaid-svg-sNHOUbeHIdQPlYpd .doneText1,#mermaid-svg-sNHOUbeHIdQPlYpd .doneText2,#mermaid-svg-sNHOUbeHIdQPlYpd .doneText3{fill:black!important;}#mermaid-svg-sNHOUbeHIdQPlYpd .crit0,#mermaid-svg-sNHOUbeHIdQPlYpd .crit1,#mermaid-svg-sNHOUbeHIdQPlYpd .crit2,#mermaid-svg-sNHOUbeHIdQPlYpd .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-sNHOUbeHIdQPlYpd .activeCrit0,#mermaid-svg-sNHOUbeHIdQPlYpd .activeCrit1,#mermaid-svg-sNHOUbeHIdQPlYpd .activeCrit2,#mermaid-svg-sNHOUbeHIdQPlYpd .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-sNHOUbeHIdQPlYpd .doneCrit0,#mermaid-svg-sNHOUbeHIdQPlYpd .doneCrit1,#mermaid-svg-sNHOUbeHIdQPlYpd .doneCrit2,#mermaid-svg-sNHOUbeHIdQPlYpd .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-sNHOUbeHIdQPlYpd .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-sNHOUbeHIdQPlYpd .milestoneText{font-style:italic;}#mermaid-svg-sNHOUbeHIdQPlYpd .doneCritText0,#mermaid-svg-sNHOUbeHIdQPlYpd .doneCritText1,#mermaid-svg-sNHOUbeHIdQPlYpd .doneCritText2,#mermaid-svg-sNHOUbeHIdQPlYpd .doneCritText3{fill:black!important;}#mermaid-svg-sNHOUbeHIdQPlYpd .activeCritText0,#mermaid-svg-sNHOUbeHIdQPlYpd .activeCritText1,#mermaid-svg-sNHOUbeHIdQPlYpd .activeCritText2,#mermaid-svg-sNHOUbeHIdQPlYpd .activeCritText3{fill:black!important;}#mermaid-svg-sNHOUbeHIdQPlYpd .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:\'trebuchet ms\',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-sNHOUbeHIdQPlYpd :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 2017-01-01 2018-01-01 2019-01-01 2020-01-01 2021-01-01 2022-01-01 2023-01-01 2024-01-01 2025-01-01 首次宣布WSL Windows 10周年更新中首次发布 宣布WSL2 正式发布WSL2 从Windows代码库中分离 Microsoft Store首次发布0.47.1版本 WSL 1.0.0版本发布 (GA) WSL 2.0.0版本发布 宣布WSL开源 WSL1时代 WSL2时代 独立应用时代 开源时代 WSL发展时间线
WSL的故事始于2016年,当时微软在Build 2016大会上首次宣布了这一项目。WSL最初作为Windows 10周年更新的一部分发布,这在当时引起了广泛关注——微软居然在Windows中内置了一个Linux环境!
WSL 1:兼容层方案
最初的WSL(现称为WSL 1)基于一个微处理器提供程序(lxcore.sys),这使得Windows能够原生运行ELF可执行文件,并在Windows内核中实现Linux系统调用。虽然创新,但这种方法在文件系统性能和系统调用兼容性方面存在明显不足。
WSL 2:虚拟化技术革新
认识到这些限制后,微软在2019年宣布了WSL 2,并在2020年正式发布。WSL 2采用了更为彻底的方案:在轻量级实用工具虚拟机内运行完整的Linux内核。这种方法极大地提高了性能和兼容性,使得WSL能够运行更多Linux应用程序,甚至包括图形界面应用。
独立应用的发展
为了加快开发速度并更好地响应社区需求,微软在2021年将WSL从Windows代码库中分离出来,成为一个独立的应用程序。这个新的WSL首次以0.47.1版本在Microsoft Store上发布,当时仅支持Windows 11系统。
随后,微软继续完善这一\"WSL包\",直到2022年11月发布了WSL 1.0.0版本,这是第一个稳定版本,同时增加了对Windows 10的支持。
微软继续改进WSL,最终在2023年推出了WSL 2.0.0版本,引入了镜像网络、DNS隧道、代理支持、防火墙兼容性等重大改进。截至2025年5月,最新版本为WSL 2.5.7。
WSL开源:内容与范围
根据微软官方博客介绍,此次开源的WSL代码现已在GitHub上公开,开发者可以下载源代码、构建WSL、添加新功能或修复,并参与WSL的积极开发。
已开源的组件
#mermaid-svg-NuQH6pw8Ay3JH7m5 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .error-icon{fill:#552222;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .marker.cross{stroke:#333333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .cluster-label text{fill:#333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .cluster-label span{color:#333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .label text,#mermaid-svg-NuQH6pw8Ay3JH7m5 span{fill:#333;color:#333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .node rect,#mermaid-svg-NuQH6pw8Ay3JH7m5 .node circle,#mermaid-svg-NuQH6pw8Ay3JH7m5 .node ellipse,#mermaid-svg-NuQH6pw8Ay3JH7m5 .node polygon,#mermaid-svg-NuQH6pw8Ay3JH7m5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .node .label{text-align:center;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .node.clickable{cursor:pointer;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .arrowheadPath{fill:#333333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .cluster text{fill:#333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 .cluster span{color:#333;}#mermaid-svg-NuQH6pw8Ay3JH7m5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NuQH6pw8Ay3JH7m5 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} WSL项目 命令行工具 WSL服务 Linux守护进程 Plan9文件共享 wsl.exe wslconfig.exe wslg.exe wslservice.exe init启动 网络服务 端口转发
此次开源的WSL代码包括以下主要组件:
-
命令行可执行文件:与WSL交互的入口点
- wsl.exe
- wslconfig.exe
- wslg.exe
-
WSL服务:负责启动WSL虚拟机、启动发行版、挂载文件访问共享等
- wslservice.exe
-
Linux init和守护进程:在Linux中运行以提供WSL功能的二进制文件
- 用于启动的init
- 用于网络的gns
- 用于端口转发的localhost等
-
文件共享:使用WSL的Plan9服务器实现将Linux文件共享到Windows
值得注意的是,微软已经开源了以下WSL相关组件:
- microsoft/wslg:支持Wayland和X服务器相关场景的WSL图形界面
- microsoft/WSL2-Linux-Kernel:WSL 2中使用的Linux内核源代码
尚未开源的组件
某些组件仍是Windows镜像的一部分,目前尚未开源:
- Lxcore.sys:支持WSL 1的内核驱动程序
- P9rdr.sys和p9np.dll:运行\"\\wsl.localhost\"文件系统重定向的组件(从Windows到Linux)
为什么现在开源?
微软在官方博客中解释了为什么现在决定开源WSL:
\"多年来,我们非常幸运,从第一天起就拥有一个强大的社区支持WSL。我们很幸运,人们分享他们的知识,并花费无数的时间来帮助追踪错误,找到实现新功能和改进WSL的最佳方法。
如果没有社区的支持,WSL就不可能有今天的成就。即使无法访问WSL的源代码,人们也能够做出重大贡献,最终成就WSL的今天。
这就是为什么我们今天对WSL开源感到无比兴奋。我们已经看到社区在没有源代码的情况下为WSL做出了巨大的贡献,我们迫不及待地想看到,在社区能够直接为项目贡献代码之后,WSL将如何发展。\"
据Windows与设备部门副总裁Pavan Davuluri透露,开源WSL的过程之所以花费了这么长时间,是因为需要进行重大的架构调整,将WSL从Windows主代码库中解耦出来。
这也回应了WSL GitHub仓库中第一个问题(Issue #1):\"这个项目会开源吗?\"这个问题现在终于被关闭了。
WSL的技术架构与工作原理
WSL 2的工作原理
#mermaid-svg-wpYbaDevMBsQQf0Y {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wpYbaDevMBsQQf0Y .error-icon{fill:#552222;}#mermaid-svg-wpYbaDevMBsQQf0Y .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wpYbaDevMBsQQf0Y .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-wpYbaDevMBsQQf0Y .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wpYbaDevMBsQQf0Y .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wpYbaDevMBsQQf0Y .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wpYbaDevMBsQQf0Y .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wpYbaDevMBsQQf0Y .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wpYbaDevMBsQQf0Y .marker.cross{stroke:#333333;}#mermaid-svg-wpYbaDevMBsQQf0Y svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wpYbaDevMBsQQf0Y .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wpYbaDevMBsQQf0Y .cluster-label text{fill:#333;}#mermaid-svg-wpYbaDevMBsQQf0Y .cluster-label span{color:#333;}#mermaid-svg-wpYbaDevMBsQQf0Y .label text,#mermaid-svg-wpYbaDevMBsQQf0Y span{fill:#333;color:#333;}#mermaid-svg-wpYbaDevMBsQQf0Y .node rect,#mermaid-svg-wpYbaDevMBsQQf0Y .node circle,#mermaid-svg-wpYbaDevMBsQQf0Y .node ellipse,#mermaid-svg-wpYbaDevMBsQQf0Y .node polygon,#mermaid-svg-wpYbaDevMBsQQf0Y .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wpYbaDevMBsQQf0Y .node .label{text-align:center;}#mermaid-svg-wpYbaDevMBsQQf0Y .node.clickable{cursor:pointer;}#mermaid-svg-wpYbaDevMBsQQf0Y .arrowheadPath{fill:#333333;}#mermaid-svg-wpYbaDevMBsQQf0Y .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wpYbaDevMBsQQf0Y .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wpYbaDevMBsQQf0Y .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-wpYbaDevMBsQQf0Y .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-wpYbaDevMBsQQf0Y .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wpYbaDevMBsQQf0Y .cluster text{fill:#333;}#mermaid-svg-wpYbaDevMBsQQf0Y .cluster span{color:#333;}#mermaid-svg-wpYbaDevMBsQQf0Y div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wpYbaDevMBsQQf0Y :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}#mermaid-svg-wpYbaDevMBsQQf0Y .taskClass>*{fill:#f9f!important;stroke:#333!important;stroke-width:1px!important;}#mermaid-svg-wpYbaDevMBsQQf0Y .taskClass span{fill:#f9f!important;stroke:#333!important;stroke-width:1px!important;} Windows操作系统 轻量级Hyper-V虚拟机 Linux内核 文件系统 网络服务 Ubuntu Debian Kali Linux
WSL 2的核心是一个轻量级的Hyper-V虚拟机,其中运行着完整的Linux内核。这种方法不仅提供了卓越的性能,还确保了与原生Linux的高度兼容性。以下是WSL 2的关键特点:
- 虚拟化技术:使用轻量级实用工具虚拟机运行真正的Linux内核
- 文件系统性能:比WSL 1提供更快的文件系统操作
- 完整的系统调用兼容性:确保更多Linux应用能够正常运行
- 图形界面支持:通过WSLG支持Linux图形应用程序
- 资源管理:支持内存回收、GPU加速等功能
与Windows集成
WSL 2提供了与Windows系统的深度集成:
- 文件系统访问:可以通过
\\\\wsl$\\\\
访问Linux文件,同时在Linux内可通过/mnt/c/
访问Windows文件 - 网络集成:共享Windows的网络连接,支持localhost转发
- GPU支持:支持使用Windows GPU进行机器学习工作负载
使用WSL进行开发的实例
在WSL中使用.NET开发C#应用程序
以下是在WSL的Ubuntu发行版中使用.NET开发简单C#应用程序的示例:
// 文件:Program.cs// 这是一个在WSL中运行的简单C#程序// 演示了如何访问Windows和Linux文件系统using System;using System.IO;using System.Diagnostics;namespace WSLDemo{ class Program { static void Main(string[] args) { Console.WriteLine(\"WSL与Windows集成演示程序\"); // 检测是否在WSL环境中运行 bool isWsl = File.Exists(\"/proc/sys/kernel/osrelease\") && File.ReadAllText(\"/proc/sys/kernel/osrelease\").ToLower().Contains(\"microsoft\"); Console.WriteLine($\"是否在WSL环境中运行: {isWsl}\"); if (isWsl) { // 获取WSL发行版信息 string distroInfo = File.ReadAllText(\"/etc/os-release\"); Console.WriteLine(\"当前WSL发行版信息:\"); Console.WriteLine(distroInfo); // 访问Windows文件系统 Console.WriteLine(\"\\n访问Windows文件系统:\"); string windowsPath = \"/mnt/c/Windows\"; if (Directory.Exists(windowsPath)) { var windowsFiles = Directory.GetFiles(windowsPath, \"*.exe\", SearchOption.TopDirectoryOnly); Console.WriteLine($\"Windows目录中的exe文件数量: {windowsFiles.Length}\"); } // 演示跨系统进程调用 Console.WriteLine(\"\\n从WSL调用Windows命令:\"); Process process = new Process(); process.StartInfo.FileName = \"cmd.exe\"; process.StartInfo.Arguments = \"/c ver\"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); string output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); Console.WriteLine(output); } Console.WriteLine(\"程序执行完毕。按任意键退出...\"); Console.ReadKey(); } }}
要在WSL中编译和运行此程序,请按照以下步骤操作:
-
首先在WSL中安装.NET SDK:
# 添加Microsoft包仓库wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debsudo dpkg -i packages-microsoft-prod.deb# 安装SDKsudo apt-get updatesudo apt-get install -y apt-transport-httpssudo apt-get updatesudo apt-get install -y dotnet-sdk-7.0
-
创建并编译程序:
# 创建新项目mkdir WSLDemocd WSLDemodotnet new console# 将上面的代码复制到Program.cs# 编译和运行dotnet run
这个示例展示了WSL如何同时利用Linux和Windows的优势,为开发者提供无缝的混合环境。
WSL的主要优势
开发者为什么选择WSL?
以下是开发者选择WSL的主要原因:
-
无需虚拟机或双启动系统:直接在Windows中运行Linux环境,无需配置复杂的虚拟机或担心双启动系统的问题
-
与Windows的无缝集成:
- 从Linux访问Windows文件系统
- 从Windows访问Linux文件系统
- 共享网络配置和localhost端口
-
轻量级:比传统虚拟机占用更少的资源,启动速度更快
-
支持多种Linux发行版:可以同时运行多个不同的Linux发行版(如Ubuntu、Debian、Fedora等)
-
图形应用支持:通过WSLg可以运行Linux图形应用程序
-
GPU加速:支持在Linux环境中使用Windows GPU,特别适合机器学习工作负载
WSL在企业中的应用
Microsoft在Build 2025上还宣布了WSL的多项企业级功能:
-
Microsoft Defender for Endpoint的WSL 2支持:现已正式推出,企业可以使用Microsoft Defender监控WSL环境
-
Intune功能集成:允许通过Intune管理WSL设置,并基于Linux发行版的状态强制执行条件访问方案
-
Microsoft Entra ID集成:即将推出的功能,使Microsoft的身份验证库(MSAL)能够与WSL安全通信,让用户可以使用Windows上的Entra ID凭据自动登录WSL中的应用程序
WSL的未来发展
微软在最近的更新中透露了WSL的未来发展方向:
即将推出的功能
-
WSL设置GUI应用程序:为了帮助用户自定义、管理和查看WSL中可用的设置,微软正在开发一个WSL设置GUI应用程序,使配置WSL变得更加直观和简单
-
Dev Home集成:微软正在开发\"环境\"功能,允许用户在Dev Home中管理、启动和创建新的开发环境,包括WSL发行版
-
内存、存储和网络改进:
- 自动将WSL存储的内存释放回Windows
- 改进网络功能,默认启用DNS隧道
- 实验性功能如自动磁盘空间回收和镜像网络模式,支持IPv6等新功能
社区贡献的重要性
微软强调,WSL的成功很大程度上归功于社区的支持和贡献。即使在没有源代码访问权限的情况下,开发者社区也为推动WSL的发展做出了巨大贡献。现在通过开源,微软希望促进更多创新和改进。
开始使用WSL
如果你还没有使用过WSL,以下是快速入门的步骤:
安装WSL
在Windows 10版本2004及更高版本或Windows 11上,安装WSL非常简单:
# 管理员权限运行PowerShellwsl --install
此命令将:
- 启用必要的Windows功能
- 下载并安装最新的Linux内核
- 将WSL 2设为默认版本
- 安装Ubuntu发行版(默认)
安装其他Linux发行版
你可以通过Microsoft Store或命令行安装其他Linux发行版:
# 列出可用的发行版wsl --list --online# 安装特定发行版wsl --install -d Debian
WSL基本命令
# 列出已安装的发行版wsl --list --verbose# 设置默认的WSL版本wsl --set-default-version 2# 设置特定发行版使用的WSL版本wsl --set-version # 设置默认发行版wsl --set-default # 启动特定发行版wsl -d # 以特定用户身份启动wsl -d -u # 运行特定命令wsl -d
结论
微软宣布开源WSL标志着Windows和Linux两大生态系统之间的界限进一步模糊化。这不仅体现了微软拥抱开源的战略转变,也为开发者社区提供了更多参与和贡献的机会。
随着越来越多的开发者依赖跨平台开发环境,WSL已成为Windows系统上不可或缺的工具。通过开源WSL,微软让开发者能够深入了解其工作原理、贡献新功能,并根据自己的需求进行自定义。
我们期待看到开源后的WSL如何继续发展,以及社区将如何塑造其未来。无论是提高性能、增强与Windows的集成还是添加新功能,WSL的开源将为开发者提供更多可能性。
相关资源链接
- WSL GitHub仓库
- WSL文档网站
- WSL开源文档站点
- 微软官方博客关于WSL开源的公告
- WSL安装指南
- WSL发行版比较