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」。
这两句话不冲突——只是看你是消费者,还是商品。