微软宣布开源WSL:Linux 与 Windows 生态的全新融合


在微软Build 2025开发者大会上,微软宣布了一项重磅决定:正式开源Windows Subsystem for Linux(WSL)项目。这一消息标志着微软与开源社区合作的新篇章,也满足了开发者社区长达九年的期盼。

WSL的发展历程

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的积极开发。

已开源的组件

WSL项目
命令行工具
WSL服务
Linux守护进程
Plan9文件共享
wsl.exe
wslconfig.exe
wslg.exe
wslservice.exe
init启动
网络服务
端口转发

此次开源的WSL代码包括以下主要组件:

  1. 命令行可执行文件:与WSL交互的入口点

    • wsl.exe
    • wslconfig.exe
    • wslg.exe
  2. WSL服务:负责启动WSL虚拟机、启动发行版、挂载文件访问共享等

    • wslservice.exe
  3. Linux init和守护进程:在Linux中运行以提供WSL功能的二进制文件

    • 用于启动的init
    • 用于网络的gns
    • 用于端口转发的localhost等
  4. 文件共享:使用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的工作原理

Windows操作系统
轻量级Hyper-V虚拟机
Linux内核
文件系统
网络服务
Ubuntu
Debian
Kali Linux

WSL 2的核心是一个轻量级的Hyper-V虚拟机,其中运行着完整的Linux内核。这种方法不仅提供了卓越的性能,还确保了与原生Linux的高度兼容性。以下是WSL 2的关键特点:

  1. 虚拟化技术:使用轻量级实用工具虚拟机运行真正的Linux内核
  2. 文件系统性能:比WSL 1提供更快的文件系统操作
  3. 完整的系统调用兼容性:确保更多Linux应用能够正常运行
  4. 图形界面支持:通过WSLG支持Linux图形应用程序
  5. 资源管理:支持内存回收、GPU加速等功能

与Windows集成

WSL 2提供了与Windows系统的深度集成:

  1. 文件系统访问:可以通过\\wsl$\<DistroName>\访问Linux文件,同时在Linux内可通过/mnt/c/访问Windows文件
  2. 网络集成:共享Windows的网络连接,支持localhost转发
  3. 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中编译和运行此程序,请按照以下步骤操作:

  1. 首先在WSL中安装.NET SDK:

    # 添加Microsoft包仓库
    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    
    # 安装SDK
    sudo apt-get update
    sudo apt-get install -y apt-transport-https
    sudo apt-get update
    sudo apt-get install -y dotnet-sdk-7.0
    
  2. 创建并编译程序:

    # 创建新项目
    mkdir WSLDemo
    cd WSLDemo
    dotnet new console
    
    # 将上面的代码复制到Program.cs
    
    # 编译和运行
    dotnet run
    

这个示例展示了WSL如何同时利用Linux和Windows的优势,为开发者提供无缝的混合环境。

WSL的主要优势

开发者为什么选择WSL?

以下是开发者选择WSL的主要原因:

  1. 无需虚拟机或双启动系统:直接在Windows中运行Linux环境,无需配置复杂的虚拟机或担心双启动系统的问题

  2. 与Windows的无缝集成

    • 从Linux访问Windows文件系统
    • 从Windows访问Linux文件系统
    • 共享网络配置和localhost端口
  3. 轻量级:比传统虚拟机占用更少的资源,启动速度更快

  4. 支持多种Linux发行版:可以同时运行多个不同的Linux发行版(如Ubuntu、Debian、Fedora等)

  5. 图形应用支持:通过WSLg可以运行Linux图形应用程序

  6. GPU加速:支持在Linux环境中使用Windows GPU,特别适合机器学习工作负载

WSL在企业中的应用

Microsoft在Build 2025上还宣布了WSL的多项企业级功能:

  1. Microsoft Defender for Endpoint的WSL 2支持:现已正式推出,企业可以使用Microsoft Defender监控WSL环境

  2. Intune功能集成:允许通过Intune管理WSL设置,并基于Linux发行版的状态强制执行条件访问方案

  3. Microsoft Entra ID集成:即将推出的功能,使Microsoft的身份验证库(MSAL)能够与WSL安全通信,让用户可以使用Windows上的Entra ID凭据自动登录WSL中的应用程序

WSL的未来发展

微软在最近的更新中透露了WSL的未来发展方向:

即将推出的功能

  1. WSL设置GUI应用程序:为了帮助用户自定义、管理和查看WSL中可用的设置,微软正在开发一个WSL设置GUI应用程序,使配置WSL变得更加直观和简单

  2. Dev Home集成:微软正在开发"环境"功能,允许用户在Dev Home中管理、启动和创建新的开发环境,包括WSL发行版

  3. 内存、存储和网络改进

    • 自动将WSL存储的内存释放回Windows
    • 改进网络功能,默认启用DNS隧道
    • 实验性功能如自动磁盘空间回收和镜像网络模式,支持IPv6等新功能

社区贡献的重要性

微软强调,WSL的成功很大程度上归功于社区的支持和贡献。即使在没有源代码访问权限的情况下,开发者社区也为推动WSL的发展做出了巨大贡献。现在通过开源,微软希望促进更多创新和改进。

开始使用WSL

如果你还没有使用过WSL,以下是快速入门的步骤:

安装WSL

在Windows 10版本2004及更高版本或Windows 11上,安装WSL非常简单:

# 管理员权限运行PowerShell
wsl --install

此命令将:

  1. 启用必要的Windows功能
  2. 下载并安装最新的Linux内核
  3. 将WSL 2设为默认版本
  4. 安装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的开源将为开发者提供更多可能性。

相关资源链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰茶_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值