1. 先搞清楚你问的到底是哪个问题
先说个扎心的事实:绝大多数人在选型之前,根本没想清楚自己要在 Linux 环境里干嘛。有人想要一个和 Windows 并列的独立系统来学运维,有人只是想跑个 Python 脚本却不想装双系统,还有人就是看着终端敲命令的样子很酷才动了心思。这三个需求,对应的答案完全不同。
我见过不少一开始就装双系统的人,装完 Ubuntu 之后一个月都没怎么进过 Linux 那边,硬盘倒是被 GRUB 引导占掉一块;也见过坚持用虚拟机跑 Linux 做嵌入式开发的人,最后被串口和 USB 设备透传给折磨到崩溃。这些都不是方案不好,是人选错了。
这篇文章就把双系统、虚拟机、WSL 这三条路的底细全部摊开讲一遍。不吹不黑,直接从原理、性能、适用场景、坑点、学习成本这些角度对比,最后给你一个可以直接照着选的决策流程。适合的人群很明确:想在 Windows 电脑上做 Linux 开发或学习的朋友,包括刚接触 Linux 的大学生、运维新人、后端开发、嵌入式开发者,已经被某个方案卡得难受准备换路的人也可以参考。
先说结论放在前面,预防有的人读不完:日常开发和学习,WSL2 是性价比最高的选择;需要完整 Linux 内核或图形界面的桌面场景,虚拟机更稳;想要极致的硬件性能体验、长期作为主力系统使用,双系统不可替代。下面逐步拆解这个结论是怎么来的。
2. 三种方案不是"同一个物种",原理决定了上限
很多人把三个方案放在一起比较,但其实它们在计算机体系结构里的层级完全不同,搞清楚这一点,很多困惑会迎刃而解。
2.1 双系统:硬件直接归 Linux 所有
双系统是三个方案里最"硬核"的一个。它的本质是:一块硬盘(或者多块硬盘)上同时安装了 Windows 和 Linux 两套操作系统,通过引导管理器(最常见的是 GRUB)在开机时让你选择进入哪一个。你选择进入 Linux 之后,整个机器的 CPU、内存、显卡、声卡、网卡等硬件资源就全部由 Linux 系统接管了,Windows 在那个时刻是彻底不运行的、甚至不占用任何资源。
这意味着,Linux 系统可以 100% 使用整个物理硬件的能力。尤其是对内存的大小、CPU 的核心频率、磁盘的读写吞吐,以及一些特殊硬件(比如独立 NVIDIA 显卡的 CUDA 计算)的访问,是完全没有中间层的。从性能角度看,双系统是原生性能,没有任何损耗。
但代价也很沉重:你同时只能运行其中一个系统。如果正在 Linux 里写代码,突然要处理一个只有 Windows 能打开的文件或者数字证书、U 盾之类的环境,就必须整套切换、重启。这个体验上的撕裂感,往往是很多人装了双系统之后又卸掉的最大原因。
2.2 虚拟机:模拟整台电脑,与宿主隔离
虚拟机(这里主要指 VMware Workstation、VirtualBox 这类 Type-2 虚拟机)的思路是:在 Windows 这个宿主操作系统上安装一个虚拟化软件,由这个软件去申请一部分 CPU、内存、磁盘资源,然后虚拟出一整套完整的 PC 硬件(虚拟网卡、虚拟显卡、虚拟硬盘、虚拟主板),再在这套虚拟硬件上安装 Linux 系统。
原理上,虚拟机里运行的 Linux 和物理机上安装的 Linux 几乎没有区别,它有完整的 Linux 内核、完整的图形桌面、完整的设备管理器。好处是隔离性极强:Linux 系统只是宿主 Windows 上的几个文件而已,坏了随时可以删除重建,备份就是复制几个文件,跟 Windows 本体互不干扰。
但代价同样明显:虚机里面的所有硬件操作,都要经过虚拟化层转发,再由宿主 Windows 调用真实硬件。CPU 密集的任务有硬件辅助虚拟化(Intel VT-x / AMD-V)的加持,损失不大;但磁盘 I/O、图形渲染、USB 设备直通这些链路,会有可见的性能损耗。而且虚拟软件要预先分配内存,如果你分配给 Linux 虚拟机 4GB,那这 4GB 内存在虚拟机运行期间是背着"虚拟化税"的。
2.3 WSL:把 Linux 内核变成 Windows 的一个组件
WSL 就容易被人误解了。很多人以为 WSL 和虚拟机差不多,只是更轻一点。实际上原理差得很远。
WSL 分成两个大版本。WSL1 是一个系统调用翻译层:它不走虚拟化,直接读取 Linux 的可执行文件(ELF 格式),然后把 Linux 内核发出的系统调用翻译成 Windows 的系统调用,用 Windows 内核来执行。这套方案启动极快、内存占用极低,但兼容性不完整,因为并不是每一个 Linux 系统调用都能一一对应到 Windows 上。
WSL2 则换了一个思路:它用微软自己造的轻量级实用虚拟机(基于 Hyper-V 架构)来跑一个完整的、真正的 Linux 内核。你没有看错,WSL2 底层也是虚拟机,只是微软把它极度优化和精简了——没有 BIOS 自检、没有 GRUB 启动菜单、没有完整的设备模拟,启动时间从冷启动到进入命令行只需要 1 到 2 秒。Windows 通过一个叫"Plan 9 文件系统协议"的机制,把 Windows 的盘符(C:\、D:\)挂载到 WSL 里的 /mnt/c、/mnt/d 上,让你能直接读取 Windows 文件;反过来,Linux 的根文件系统则放在一个名为 ext4.vhdx 的虚拟磁盘文件里。
所以准确地说,WSL2 是"挂着虚拟机技术的原生体验",它在启动速度和资源开销上碾压传统虚拟机,同时又拥有完整的 Linux 内核,兼容性比 WSL1 强得多。
搞清楚这三层原理之后,我们再谈选型就有基础了:双系统的本质是资源独占,虚拟机的本质是资源隔离,WSL 的本质是资源按需分配的深度集成。
3. 真实工作流下的差异:没有最强,只有最合适
原理讲完了,来说点实际的。我把日常开发学习里最常遇到的六个场景拉出来逐个对比,帮你看清楚每个方案在真实工作流里的表现。
3.1 日常命令行的体验和速度
如果你需要的是一个开箱即用的 Linux shell 环境,用来跑跑 Git 命令、SSH 登录服务器、用 awk/sed/grep 处理文本、用 Python/Python3 跑个脚本,WSL2 的体验在三个方案里是最好的。
冷启动一个 Ubuntu 终端,在 WSL2 里基本是一瞬间的事。我实测过一台配置中等的笔记本(i5-12 代 + 16GB 内存),WSL2 从输入 wsl 到看到 shell 提示符,1.5 秒左右;VMware 里起一个 Ubuntu Server 虚拟机,从开机到登录命令界面,大约 15 到 20 秒;双系统的话,得按开机键加上系统启动,随配置和硬盘速度不同,通常 20 到 40 秒。
而且 WSL2 与 Windows 的集成能力是虚拟机比不了的:你可以直接explorer.exe .从 WSL 里打开 Windows 资源管理器;可以直接code .调用 Windows 那边安装的 VSCode 打开当前目录;Windows 和 Linux 的剪贴板互通,在网络层面,WSL2 也是直接共享 Windows 的网络配置,访问内网服务和工作环境(比如连数据库、连公司的跳板机)不需要额外配置。
3.2 编译与计算:性能损耗到底有多大
如果是编译大型项目、跑深度学习训练、做科学计算这类 CPU/GPU 密集型任务,性能差异就会暴露出来。
双系统拥有全部的 CPU 核数、全量内存、原生的硬件访问权限,性能是最完整的,没有任何损耗。
虚拟机(VMware)的性能跟配置强相关。CPU 性能通过 VT-x 辅助之后,损耗一般在 5%~15% 左右;内存带宽损耗更小;磁盘 I/O 的损耗就比较大了,普通 SATA 固态硬盘在虚拟化层之后,4K 随机读写的性能可能会掉 20%~40%。跑编译任务时遇到完全用满多核的场景,差距能直观感觉到。
WSL2 的情况跟虚拟机相似但略有不同。因为 WSL2 的实用性虚拟机比较精简,CPU 损耗大约也在 5%~15%,和 VMware 差不多。需要特别注意的是文件系统的性能:如果你在 WSL2 的 Linux 文件系统(~/ 目录)里编译,好好的,性能接近原生;但如果你在 /mnt/c 下的 Windows 目录里编译,也就是跨文件系统操作,性能会急剧下降。这是因为跨文件系统通信要走 9P 协议,协议本身的开销很大。很多 WSL2 用户项目突然编译特别慢,十有八九就是把项目放在了 Windows 盘里,而不是 ~ 目录下。这是一个非常典型的坑,后面我会专门再说。
3.3 图形界面和桌面应用
双系统的图形体验,是另外两个方案永远追不上的。你在 Linux 桌面环境里打开 GNOME、KDE、输入法、浏览器,全部走的是原生驱动,尤其是显卡驱动装好之后,动画流畅度和视频播放体验和 Windows 下没有区别。
虚拟机里想用 Linux 桌面也不是不行,VMware 自带 VMware Tools 增强驱动,VirtualBox 有增强功能包,装好之后支持不错的 3D 加速,日常办公和开发是流畅的。但如果你要跑 Android 模拟器这类需要嵌套虚拟化的应用,或者需要 GPU 直通(NVIDIA vGPU 技术)来进行图形算法开发,那虚拟机的默认模式就不够了,得折腾 PCIe 直通的超纲玩法,门槛陡增。
WSL2 从 2021 年开始支持 WSLg(Windows Subsystem for Linux GUI),可以在 Windows 桌面里直接跑 Linux 的图形程序。体验比虚拟机还顺滑,因为它是直接用 RDP 协议做的远程桌面集成,程序窗口会直接出现在 Windows 桌面上,可以直接用。但 WSLg 只适合轻量级的图形应用:跑个 GTK 程序、Eclipse、Gedit 没问题,要想在 WSLg 里玩完整的 GNOME 桌面,或者跑需要 GPU 大量参与的软件,体验就比较勉强了,偶尔还有渲染延迟和输入法焦点的问题。
3.4 嵌入式开发与硬件设备连接
这是一个容易被忽略但杀伤力巨大的差异。
做嵌入式开发的朋友,经常要连 USB 转串口调试线、JTAG 下载器、USB 摄像头等外设。在 VMware 里,你可以通过"USB 设备直连"功能把物理机的 USB 设备挂载给虚拟机里的 Linux,操作上没问题,但每次虚拟机焦点切换、USB 插拔之后,设备常常会重连或者需要重新选择,体验比较碎。VirtualBox 的 USB 支持稍弱一些,需要装扩展包。
在 WSL2 里,USB 设备的直连曾是长久的痛点。直到微软推出了 usbipd-win 这个工具,才实现了把 Windows 上的 USB 设备共享给 WSL2 使用。不过这个工具在 Linux 那边需要 usbip 内核模块支持,遇到不支持的设备或者对时序要求极高的调试器(比如部分 JTAG),偶尔会遇到连接不稳定的情况。
双系统在这方面一劳永逸:只要 Linux 内核识别了这个硬件设备,它就是原生工作的,没有中间层,稳定性最高。
3.5 Docker 容器:WSL2 的主场优势
关于 Docker,我的态度很明确:WSL2 是目前在 Windows 上跑 Docker 最舒服的方案。
Windows 上跑 Docker 的三种常见方式,我逐个说下真实体感:Docker Desktop with WSL2 后端,用的是 WSL2 的实用虚拟机承载 Docker Engine,镜像构建、容器启动速度都不错,而且和 Windows 的 Docker CLI 无缝集成;另一种是直接在 VMware 虚拟机里装一个带 Docker 的 Linux 环境,适合需要模拟生产环境的完整功能时使用,但是启动整套虚拟机要占 4~8GB 内存,只为跑个容器有点重;还有一种是 Windows 容器模式,跟 Linux 容器是两个生态位,日常开发基本不碰。
如果你在 WSL2 里手工装了 Docker Engine(不装 Docker Desktop),那性能还可以再提高一点,而且不需要 Docker Desktop 的商业授权限制。但要注意,WSL2 的 Docker 在跨盘挂载时会踩文件系统性能的坑,最好把容器的数据卷都配置在 Linux 文件系统侧。
3.6 游戏
游戏输赢论不是一个纯粹的技术问题,但确实是很多人的真实需求。Linux 游戏生态这些年靠 Proton/Steam Play 已经好了很多,很多 Windows 游戏在双系统的 Linux 里能流畅跑。如果你只在 Windows 上玩游戏,那根本不需要 Linux 环境,这篇文章你都不用看下去。三者之间:
- 双系统:Windows 打游戏,Linux 干活,物理分离,互不影响。
- 虚拟机(VMware/VirtualBox):没法用完整 GPU 直通的情况下,游戏体验非常差,绝大多数大型 3D 游戏根本没法流畅跑。
- WSL2:它只是一个用于开发的工具环境,不是一个游戏运行平台,显卡驱动支持有限,不建议碰游戏。
4. 选型决策框架:不同角色的答案并不相同
有了前面的实地对比,我来给一套可以直接照着填的决策框架。你不用全部理解原理,只需要回答三个问题,答案指向基本上就水落石出。
问题一:你使用 Linux 的频率和强度有多高?
- 每天都要用、一用就几个小时、做主开发环境的人,考虑双系统或强配置虚拟机。
- 偶尔用一下、跑个命令完成一个任务就切回 Windows 的人,WSL2 是最优选。
问题二:你需要用到完完整整的 Linux 内核和完整 GUI 吗?
- 需要完整桌面体验、内核模块开发、内核实验(比如自己编译内核、用 QEMU 做内核调试)、GPU 计算等,双系统最合适。
- 只需要命令行开发和服务器管理,WSL2 足够了。
- 需要一个可控、可快照、方便回滚的完整 Linux 环境,虚拟机是最优选。
问题三:你对硬件资源的预算(内存/磁盘/GPU)是什么?
- 机器标配 8GB 或 16GB 内存,你同时要开浏览器、IDE、数据库,那别碰虚拟机,WSL2 是唯一不占太多资源的选择。
- 机器有 32GB 以上内存,希望在 Windows 和 Linux 之间有明确隔离,请用 VMware。
- 机器有独立显卡,主打 AI 或渲染类任务,双系统是唯一能 100% 吃满显卡性能的。
我把不同角色的直接推荐列表放在这里,大家可以自行查找坐标:
| 使用者 | 首选方案 | 备选方案 | 说明 |
|---|---|---|---|
| 后端开发(写接口/调服务) | WSL2 | VMware | 命令行够用,I/O 省心 |
| 前端开发(Node/Vite) | WSL2 | 双系统 | 文件 I/O 频繁,放 Linux 盘 |
| 运维/DevOps/SRE | WSL2 | VMware | Docker 支持友好 |
| 嵌入式开发 | 双系统 | VMware(USB直通) | 双系统对硬件对接最稳 |
| 内核/驱动开发 | 双系统 | VMware(嵌套虚拟化) | WSL2 不适合改内核 |
| 深度学习/AI 训练 | 双系统 | VMware(GPU直通太折腾) | 用原生驱动 |
| 学生/初学者(学 Linux 命令) | WSL2 | VMware | 门槛最低、不容易劝退 |
| 坚持要用完整 Linux 桌面 | VMware | 双系统 | 虚拟机方便快照 |
| 日常办公为主,偶尔跑 Linux 程序 | WSL2 | 不折腾 | 别为偶尔需求装双系统 |
5. 决定用 WSL2 的话,安装和配置有哪些容易翻车的点
如果你最终选中了 WSL2,那这一节是为你准备的。WSL2 虽然开箱体验好,但实际安装和初期配置阶段的坑也不少。这不是一篇 WSL2 的全量教程,但我会把最常踩的几个点列出来,都是真实高频问题。
5.1 安装 WSL2 的正确姿势
以 Windows 10 21H2 以上版本或 Windows 11 为例,最省事的办法是管理员权限打开 PowerShell 或 Windows Terminal,直接运行:
wsl --install这个命令会自动启用"适用于 Linux 的 Windows 子系统"和"虚拟机平台"这两个 Windows 功能,然后默认下载安装 Ubuntu,一切正常的话重启一次即可。这是微软在 2022 年之后力推的标准安装方式。
注意几个坑:
- 不要在旧教程的引导下去"控制面板 → 启用或关闭 Windows 功能"里手动勾选。手动开启功能没问题,但如果你只勾了"适用于 Linux 的 Windows 子系统"而没勾"虚拟机平台",装的还是 WSL1,后面用
wsl --set-version转 2 时还容易报错。 - 命令行敲
wsl --install之后,如果长时间卡在下载阶段,通常是因为访问微软服务器网络问题。可以检查一下是不是代理工具干扰了下载。还有一种可能是 Windows 更新没有装到最新累积补丁,老版本的 WSL 服务有问题。 - 安装完重启之后,首次启动 Ubuntu 会让你设置用户名和密码。这里要注意:这个 Linux 用户名和 Windows 用户名不是一回事,Linux 里创建的账户默认不在 sudo 组里,需要在创建之后的首次会话里手动附加 sudo 权限。Ubuntu 官方 WSL 镜像一般会自动把第一个创建的用户加入 sudo 组,但如果你手动换了发行版(比如直接装 Kali),很可能没有这个便利。
5.2 WSL1 和 WSL2 之间的切换
很多人以为装了 WSL 就是 WSL2,其实不一定。用wsl -l -v命令可以查看当前各发行版的 WSL 版本:
wsl -l -v输出中 VERSION 列是 1 或 2。如果是 1,在确保 Windows 功能"虚拟机平台"已开启的情况下,执行:
wsl --set-version Ubuntu 2这个转换过程需要一点时间,本质上是把原本的系统调用翻译模式替换为实用虚拟机模式,系统文件本身不受影响。
如果你使用的发行版很老,或者 Windows 系统版本太旧,转换时可能报"WSL 2 需要更新其内核组件"。这个错误是 WSL2 的内核组件太老导致的,运行一次:
wsl --update即可解决。如果你看到错误信息 "your version of windows subsystem for linux (wsl) is too old",大概率也需要这个命令。
5.3 迁移默认的 Linux 系统盘位置
WSL2 的 ext4.vhdx 默认存放在 C 盘的用户目录下,比如C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu...\LocalState\ext4.vhdx。如果你的 C 盘是 256GB 的小固态,用不了多久这个文件就会膨胀到几十 GB——因为 WSL2 里的 vhdx 虚拟磁盘文件,不会随着里面文件删除而自动缩容,只会越涨越大。
最好的办法是安装之后立刻把整个发行版导出并迁移到其他盘。步骤是:
wsl --shutdown wsl --export Ubuntu D:\wsl\ubuntu-backup.tar wsl --unregister Ubuntu wsl --import Ubuntu D:\wsl\ubuntu E:\wsl\ubuntu-backup.tar注意,--unregister会彻底删除原发行版和里面所有数据,所以必须先--export备份。另外,用--import方式恢复的发行版,默认登录用户是 root,需要到 /etc/wsl.conf 里配置:
[user] default=你的用户名然后重启 WSL 才恢复普通用户登录。
这是一个我强烈建议新用户早点做的事,等到 C 盘满了再折腾,迁移成本会高很多。
5.4 配置文件 .wslconfig 的调优
在C:\Users\你的用户名\.wslconfig文件里可以控制 WSL2 的资源分配。默认情况下,WSL2 会最多占用物理内存的 50% 或 8GB(取较小者),4 核 CPU。对内存大户来说,可以自定义:
[wsl2] memory=6GB processors=4 swap=2GB localhostForwarding=true如果你机器只有 16GB 内存,同时开 Windows 开发环境和 WSL2,我建议 memory 不要给超过 8GB,否则 Windows 这边内存吃紧会拖慢整体体验。如果你经常在 WSL2 里跑编译,可以稍微调大;如果只是跑跑命令行,默认值就够了。
.wslconfig修改后必须执行wsl --shutdown(不是 exit,是彻底关闭 WSL 实例)再重新打开终端才能生效。
6. 决定用虚拟机的话,几个比选型和排错的经验
虚拟机这条路线,我说一个总原则:如果你不是非要用 Oracle VirtualBox 不可,首选 VMware Workstation Pro(或者它的免费个人版)。我这样推荐的道理是:VMware 的 USB 直通能力、GPU 加速能力、磁盘性能、和 Windows 的集成(比如文件夹共享)在 Windows 平台上比 VirtualBox 稳定得多。VirtualBox 这些年有过不少虚拟机 4K 对齐、USB 设备重连的问题,调试起来很费时间。
VMware 的基本设置里有三个关键点:
- 虚拟机内存不要超过物理内存的一半,否则 Windows 宿主会很卡。
- 磁盘类型选择"预分配"(而不是"动态分配")虽然创建时慢一点、占的空间大一点,但后续虚拟机运行时的磁盘 I/O 性能明显更好。如果你不需要"以后有可能缩小磁盘"这种功能,直接选预分配。
- 处理器设置里如果 CPU 是 6 核以上,给虚拟机分配 4 核通常比直接分 6 核更稳定——虚拟化调度也要给 Windows 宿主留足空间。
另外一个非常容易忽略的问题:虚拟机里的 Ubuntu 默认如果装了"open-vm-tools-desktop",它会自动调整分辨率、剪贴板互通、拖拽文件等能力。但如果你的虚拟机系统一直装不上增强工具,往往是因为 Linux 内核头文件缺失。先执行:
sudo apt update sudo apt install build-essential linux-headers-$(uname -r)然后再装增强工具,成功率会高很多。
虚拟机还有一个极其好用的特性:快照(Snapshot)。在改动系统配置、装大型软件之前打一个快照,翻车之后一秒钟回滚,这种安全感是双系统和 WSL 都给不了的。这个特性特别适合学习阶段,比如你练习 Linux 分区、配置网络、折腾服务,不管在哪个环节挂掉了,回滚就是一条命令的事。
7. 决定用双系统的话,这些血泪教训值得提前知道
双系统是所有方案里"上限最高、下限也最低"的。装好了一切顺畅,装不好的话,不仅 Linux 没进成,连 Windows 引导都给你整没。
当然安全合规问题是底线问题,但技术风险也是要明确的:安装双系统存在引导损坏、分区误删导致数据丢失的风险,动手前请务必先备份重要文件。
以下是我整理出的最实用的几条双系统操作经验:
- 分区规划:在 Windows 里操作。建议先在 Windows 的"磁盘管理"里给 Linux 预留一块未分配空间(不小于 80GB),不要用第三方分区工具去强行压缩正在使用的分区,容易把 Windows 搞崩。进入 Ubuntu 安装界面后,选择"与 Windows 共存"或者手动分区时,对准你预留的那块未分配空间来创建分区。
- Swap 分区的大小:如果你不是搞休眠恢复功能的老手,Swap 设成跟内存一样大就够了,甚至可以不设。现代 Linux 用 swapfile 替代 swap 分区很成熟。
- 引导安装位置:这个非常重要。Ubuntu 安装时引导程序(GRUB)会默认安装到整块硬盘的主引导记录(MBR)或 EFI 引导分区(ESP)。如果你有两个硬盘,建议把引导装到 Linux 所在的那块硬盘上,这样 Windows 和 Linux 两块盘互不干扰。如果只有一个硬盘,装进 ESP 分区即可,GRUB 会自动识别 Windows 引导项,开机时弹出系统选择菜单。
- Windows 引导修复:如果哪天装完 Linux 后发现 Windows 进不去了(通常是因为 GRUB 没有正确识别 Windows 引导项),不要去重装系统,先在 Linux 里执行
sudo update-grub,重新扫描分区引导项。如果 GRUB 整个消失了(比如被 Windows 的启动修复覆盖了),可以用 Ubuntu 安装盘的“试用”模式进入 Live 环境,然后用 boot-repair 工具修复。修复命令大致是sudo add-apt-repository ppa:yannubuntu/boot-repair+sudo apt update+sudo apt install boot-repair。 - 时间错乱问题:双系统下 Windows 和 Linux 看待硬件时钟(RTC)的方式不同(一个把 RTC 当本地时间,一个当 UTC 时间),导致切换系统之后时间会差 8 小时。解决办法是在 Windows 里执行:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_QWORD /f然后重启。这是让 Windows 把 RTC 按 UTC 处理,跟 Linux 保持一致。或者反过来,在 Linux 里执行timedatectl set-local-rtc 1。
8. 我用 WSL2 一年多之后,又换回了 VMware 的真实原因
这部分不是劝退,而是想告诉你选型是会随着需求动态变化的。
我在很长一段时间里都是坚定的 WSL2 用户,它让我在 Windows 下可以舒服地写 Go、写 Dockerfile、跑 K8s 集群。但它有一个让我最终放弃的致命伤:当我要调试一个需要完整 Linux 桌面环境的图形程序时,WSLg 的体验始终差一口气。另外,WSL2 和 Windows 的文件系统分隔带来的边界问题也让人头疼——我经常要在 Windows 的 IDE 和 WSL2 的构建环境之间做文件交换,一旦项目依赖多了,跨文件系统访问慢的问题就放大了。
后来我换回 VMware Workstation,在一台 32GB 内存的机器上给 Ubuntu 虚拟机分 16GB,磁盘预分配 120GB,用起来整个人的心情好多了。快照、克隆、随时暂停恢复,这些功能对开发流程的帮助是无价的。而且 VMware 的性能损耗,在 32GB 内存的机器上几乎感知不到——日常编译差距也就 10% 左右,换来的是完整的桌面环境和高稳定性,给我的回报是远超那 10% 的。
现在我的电脑上 VMware 和 WSL2 并存:WSL2 用来跑快速的小任务,VMware 里的 Ubuntu 用来跑需要完整 GUI、长时间运行的开发环境。两者互不冲突,共生得非常愉快。
所以你看,不同方案从来不是单选题,它更像是一种动态匹配游戏。你当前的目标、机器配置、使用习惯决定你该选谁,而过半年以后它可能又变了。这很正常,关键在于搞清楚每个方案的边界在哪里,以及你自己的场景究竟更吃哪一头。
最后再分享一个重要技巧:无论选哪个方案,都请养成给当前工作目录写一个 README 的习惯,把环境路径、启动命令、依赖版本记录清楚。尤其是在 WSL2 这种跨文件系统场景下混过一阵子的人,你会感激这个习惯的——它帮你省下大量"我上次到底在哪个环境跑的"这类定位时间。