用WSL打造一个轻便的Linux开发环境
Linux在开发中的很多方便特性是Windows无法比拟的(例如好用的包管理器,简单的环境变量配置等等)。但是Linux在生态支持上相比Windows仍然有所欠缺,因此直接装双系统也会面临诸多不便。此外,虚拟机的解决方案也太”重“。
WSL(Windows Subsystem for Linux)是一个运行在Windows当中的子系统,是在Windows环境中使用Linux的一个相对轻量级的解决方案(配置简单,资源占用低),可以视作是对软件兼容性和开发易用性的一个折中。微软也在对WSL进行持续的开发投入,让WSL变得更加完善。
WSL和WSL2的比较
WSL有两个大版本,二者主要区别如下:
Feature | WSL 1 | WSL 2 |
---|---|---|
Integration between Windows and Linux | ✅ | ✅ |
Fast boot times | ✅ | ✅ |
Small resource foot print compared to traditional Virtual Machines | ✅ | ✅ |
Runs with current versions of VMware and VirtualBox | ✅ | ✅ |
Managed VM | ❌ | ✅ |
Full Linux Kernel | ❌ | ✅ |
Full system call compatibility | ❌ | ✅ |
Performance across OS file systems | ✅ | ❌ |
目前微软开发的开发支持更多针对WSL2,一些新特性也只有WSL2能得到支持(例如运行Linux GUI程序,GPU加速等),但是WSL并没有被放弃。
二者在很多方面有着不同,对新接触WSL的人而言比较重要的区别主要在如下几点:
- WSL没有完整的Linux内核,而WSL有,某些依赖于Linux内核的操作在WSL中可能无法完成(例如某些网络功能,直接调用硬件等)
- WSL对跨系统的文件操作性能更好(尤其是大量小文件的读写方面),而WSL2在Linux系统中的文件性能更好
- WSL没有独立的网络配置,子系统和宿主使用相同的IP和端口,而WSL2拥有独立的IP和端口
- 当前版本下WSL对资源占用相对较低,CPU性能相对更好
- Windows任务管理器中可以显示WSL中的进程,而无法显示WSL2中的进程(真的有人会用任务管理器管理WSL进程吗)
二者的不同特性决定了它们的不同使用方式。
如果你只是厌倦了Windows中cmd、PowerShell这些工具的功能孱弱和语法孤岛,并享受Linux上方便的开发环境配置,日常使用以操作Windows中的文件为主(虽然这听起来很非主流但确实很爽),此外不需要用到完整Linux内核才能支持的功能,那么WSL是一个很好的解决方案。
如果你需要用到完整Linux内核中的一些特性(例如进行一些网络开发和调试),以及想使用上述的只有WSL2才支持的一些新特性,那么你必然会选择WSL2。
因此,WSL和WSL2并无绝对好坏之分(至少目前阶段仍然如此),关键是要找准自身需求。当然,你完全可以安装多个Linux发行版,某些发行版用于简单替代Windows开发环境,另外的则用于一些对WSL2独有特性的需求。
更多关于WSL和WSL2的区别和比较可以参考:
Comparing WSL 1 and WSL 2 | Microsoft Docs
互操作性
Windows中的磁盘和文件在WSL中挂载在 /mnt/*
,可以直接使用Linux中的命令对Windows系统中的文件进行操作。
但是Windows中的文件权限在WSL中默认都是777,这在某些场景下可能会带来麻烦。
另外,考虑到WSL和WSL2在文件系统方面的不同特性,在WSL中可以比较简单地直接访问Windows中的文件,而对于WSL2,最好还是直接将文件放在Linux目录中而不是挂载目录。
WSL中可以可以执行Windows命令,甚至能将Windows和Linux命令结合起来:
1 | C:\temp> dir | wsl grep git |
不过互操作性有时候也会导致一些混乱,好在可以禁用互操作性。
更多内容参考微软官方文档:
Windows interoperability with Linux | Microsoft Docs
安装WSL
关于安装过程微软官方文档中已经有非常详细的说明:
Install WSL on Windows 10 | Microsoft Docs
关于WSL和WSL的版本管理与切换可以参考:
Set Your Distribution Version to WSL 1 or WSL 2 | Microsoft Docs
从WSL切换到WSL2的过程中可能需要额外安装一些程序,按照提示完成即可
在WSL中使用VS Code
直接在终端中编辑代码对大部分人来说是一件痛苦的事情,但是可以通过VS Code结合一些插件,在VS Code中打开WSL中的项目,提升开发效率。
微软官方文档中给出了开发环境的配置方法:
Get started using VS Code with WSL | Microsoft Docs
在WSL中,输入 code .
就可以调用Windows系统中的VS Code打开当前文件夹,剩下的操作几乎和在本地开发没有任何区别(如果你使用的是WSL2,在打开本地的大型项目时可能会感到一些卡顿)
在WSL2中运行Linux GUI程序
NOTE: 仅Windows 11 + WSL2 支持
具体过程微软官方文档同样说得非常详细,这里只总结大致流程:
- 安装显卡的WSL驱动
- 运行
wsl --update
更新WSL - 安装并运行Linux GUI程序
Run Linux GUI apps with WSL | Microsoft Docs
在WSL2中使用GPU加速
NOTE: 仅Windows(Build 20150 or higher) + WSL2 支持
2020年发布这一新功能,参考开发者博客:
GPU accelerated ML training inside the Windows Subsystem for Linux - Windows Developer Blog
微软官方文档上给出了开发指南:
GPU acceleration in WSL | Microsoft Docs
IPv6支持
WSL2目前还不支持IPv6,要使用IPv6特性只能使用WSL1(直接用宿主机的IP和端口号)