WSL到底是微软的好心还是阴谋?——我认真扒了扒背后的逻辑

我第一次用WSL的时候,心情很复杂。

Windows里跑一个完整的Ubuntu,不需要虚拟机,不需要双系统,打开终端就是Linux。最离谱的是文件系统直接互通——你在Windows桌面创建个文件,WSL里cd /mnt/c/Users/就能看到。

作为一个经常要在Windows和Linux之间横跳的开发者,我当时第一反应是:微软牛逼。

但很快我就想起了微软在90年代干过的事——“Embrace, Extend, Extinguish”(拥抱、扩展、消灭)。

然后我又看到了Linus Torvalds的态度。有人问他怎么看WSL,他基本就是一句话:微软不可能是在做慈善,它加Linux支持一定有自己的算盘。

所以问题来了:WSL这事,到底是微软转性了开始真心支持开源,还是换了个更高明的玩法?

先看看WSL到底是什么

WSL有两个版本。

WSL1是2016年推出的。它的原理比较「取巧」——不是虚拟机,而是在Windows内核里实现了一个Linux系统调用翻译层。当Linux程序调用fork(),翻译层把它转成Windows NT内核能理解的东西。优缺点都很明显:启动快、内存省,但兼容性差,很多Linux程序跑不了。

WSL2是2020年来的。这次微软不装了——直接跑一个完整的Linux内核,但把它塞进一个轻量化Hyper-V虚拟机里。兼容性拉到接近100%,Docker直接能用,GPU算力也能透传。

从技术角度看,这是个工程上相当漂亮的方案。但从商业角度看——微软为什么要在自己的操作系统里塞竞争对手的东西?

微软的「好心」——真的有

话说在前头,不要二极管。微软确实做了对开发者友好的事。

第一个事实:微软真的开源了很多东西。 VS Code是开源的,TypeScript是开源的,.NET Core是开源的,连PowerShell都开源了。你可以在GitHub上看到微软的账号下有一万多仓库。这个数据不会骗人。

第二个事实:WSL确实帮开发者省了很多事。 以前在Windows上搞开发,要么忍受Cygwin的一堆破兼容问题,要么双系统来回重启,要么虚拟机吃内存。WSL让「Windows上原生Linux命令行」变成了日常操作,这一点不管你怀不怀疑微软的动机,客观上它就是好用的。

第三个事实:Azure上Linux虚拟机占比超过50%。 微软很早就看明白了——服务器端Linux已经统治了。与其逼用户用Windows Server,不如让你在Azure上随便跑Linux,微软赚订阅费比你跑什么系统重要得多。

从这个角度看,WSL是微软的新时代战略:不再逼你用Windows全家桶,而是保证你留在Windows桌面上。 只要你还用Windows当主力机,Linux只是辅助工具,微软就赢了。

然后我们谈谈「阴谋」

但Linus的怀疑也不是没道理。

看看时间线:2014年纳德拉上任CEO,微软开始大规模拥抱开源。同一年,Docker刚刚爆火,开发者社区里「Mac + Linux服务器」正在成为标配。如果你是一个2014年的新入行程序员,你身边十个推荐有八个会跟你说「买Mac吧」。

这才是微软真正害怕的事:开发者用户正在流失。

开发者群体看起来小,但他们是「意见领袖」。一个公司的CTO用Mac,整个团队大概率跟着用Mac。大学生看网上的教程全是Mac终端截图,他买电脑就会默认跳过Windows。这种流失一旦形成惯性,Windows在专业用户中的基本盘就动摇了。

WSL就是微软的反击:你不就是想跑Linux命令吗?给你。Docker、Python、Node.js、git、vim——Linux上有的你直接在Windows上跑,不用换系统。

更妙的是这一招有多「毒」:

如果你用了WSL开发,你会同时锁定在Windows生态里。 WSL跑得再好,它也是Windows的一个功能,你没法把它单独拎出来装到别的系统上。你在WSL里配置的开发环境、装的包、写的脚本,都绑在Windows这台机器上。切到纯Linux或者Mac,这些配置全部作废。

这就叫:给你Linux的自由,但把你的数据留在Windows上。

「Embrace, Extend, Extinguish」的新版本?

90年代微软对Java、Netscape玩过这招。先兼容你,然后在兼容的基础上加一堆只有Windows能用的「扩展」,最后你发现你的项目和工具链已经深度依赖微软了——想走都走不掉。

WSL是不是同样的套路?

有一说一,不像

当年的EEE策略的核心是:微软先做兼容,然后在兼容层上添加Windows专属的API,逼着开发者写出「只能在Windows上跑」的代码。而WSL做的事情正相反——它给你的是一个标准的Linux内核,你跑的是标准的Linux程序,不存在「WSL专属API」让你脱离不了。

但有一件事是值得警惕的:WSL本身不是开放标准。 它是微软的闭源产品。WSL1的pico进程、WSL2的轻量化Hyper-V——这些技术实现完全是微软自己的。如果某天微软决定改变WSL的策略(比如砍掉WSL1只保留WSL2、或者反之),你没有替代方案,只能跟着走。

这个风险不是「微软会故意破坏WSL」,而是「微软可能会把WSL引向对自己有利但对你未必最优的方向」。比如未来的WSL3可能跟Azure深度捆绑,本地开发环境自动同步云端——听着很方便,但也意味着你的工具链更加依赖微软云。

我的结论:不是好心,也不是阴谋,是生意

我自己用了三年WSL,说实话真挺好用的。一个wsl --install就能搭好开发环境,比我以前装双系统不知道方便了多少。

但你要问我是不是微软「良心发现」了——那肯定不是。

微软就是一家公司,公司的逻辑永远是利益驱动。2014年之前微软的利益是「Windows统治一切」,所以它攻击Linux、攻击开源。2014年之后微软的利益是「云服务增长+保留桌面用户」,所以它支持Linux、拥抱开源。

不是微软变善良了,是它的商业模式变了。

Linus说得对——微软不是在支持开源社区,它是在支持「对微软有利的那部分开源」。WSL让Linux更好用了吗?对在Windows上用Linux的人来说是的。但WSL让Linux独立生态更强大了吗?恐怕没有——它反而让更多开发者停在Windows上,没有迁移到纯Linux桌面。

这就像超市给你发优惠券——它是真的让你省了钱,但它也是真的希望你多来消费。两者不矛盾。

作为开发者,我觉得最好的态度是:享受WSL带来的便利,同时保持自己的技术栈可移植。 用WSL开发没问题,但你的代码、你的配置、你的工作流,应该也能在纯Linux上无缝跑起来。你可以接受微软的好处,但别让自己只能活在微软的围墙里。

毕竟WSL的终极目标是让你「在Windows上用Linux」。

而Linux的终极目标是让你「根本不需要Windows」。

这两句话不冲突——只是看你是消费者,还是商品。

一名痴迷于计算机技术的学生~