2025年3月,Linux 6.14发布。
更新日志里混着几十个驱动补丁,不起眼地多了一个叫ntsync的驱动。它创建了一个/dev/ntsync设备节点,干一件事:在Linux内核里直接实现Windows NT的同步原语。
节点用的信号量、互斥体、事件,全是Windows的那套。原生Linux程序调用它,零收益。
The Register当时的评价是:「NTSYNC对Linux内核来说,是一种相当不寻常的增强。」
一个对Linux自身毫无用处的驱动,被Linus Torvalds无异议合并进了主线。
这不是翻译,是器官移植
要理解这件事的重量,得先搞清楚Wine在干什么。
Wine不是模拟器。这个名字本身是个递归缩写:Wine Is Not an Emulator。它是一个翻译层,把Windows的系统调用翻译成Linux能理解的等价物。你在Linux上运行一个Windows游戏,游戏说「我要等这个信号量」,Wine就把这句话翻译成Linux的futex或者eventfd。
干了三十年翻译,一直有个问题:翻不准。
Windows的同步原语是一套有状态的对象模型。NtWaitForMultipleObjects的wait-for-all模式要求「所有对象同时满足条件,然后原子地一次性全部获取」。Linux的futex是通用的等待/唤醒机制,根本不在同一个抽象层上。
打个比方:Windows说「等这三盏灯同时亮了,一起按三个开关」,Linux只有「等一盏灯亮,按一个开关」的积木。Wine用这些积木拼出了近似方案,但总有些场景拼不准,死锁、微卡顿、特定游戏诡异地崩溃,根子都在这里。
2018年,esync用eventfd绕过了Wine的转发瓶颈,但每个同步对象吃一个文件描述符,游戏容易撞fd上限。2019年,fsync用futex加速更快,但依赖一个从未合入主线的内核补丁,只有CachyOS、Proton-GE等定制版能用。两个方案都是「更好的翻译」,不是正确的语义。
然后一个人追了四年
Elizabeth Figura,CodeWeavers工程师。
esync是她写的。fsync的Wine侧是她写的。ntsync内核驱动也是她写的。Linux Plumbers Conference 2023上台演讲的是她,LKML上从v1到v7迭代七轮补丁的还是她。
四年,四代方案,同一个问题:怎么让Windows同步原语在Linux上既快又对。
前三代都是「用Linux的积木拼得更像Windows」,esync用eventfd,fsync用futex。第四代换了个思路:不拼了,直接在内核里造Windows的零件。
ntsync的核心设计很简洁:暴露/dev/ntsync字符设备,Wine打开它,通过ioctl创建和管理NT同步对象。每个对象由一个自旋锁保护,wait-for-all走设备级锁,最多64个对象(NT自身限制)。优化重心放在wait-for-any,因为wait-for-all在实际游戏里极罕见。
模块化,自包含,不改内核核心代码,不碰任何原生Linux路径。CONFIG_NTSYNC=m,可加载,你不想用就不编译。
Linus没有提出异议。它安静地待在角落里,只有Wine需要它的时候才会醒来。
ntsync的性能数据很夸张:对比无加速的vanilla Wine,尘埃3(Dirt 3)从110帧涨到860帧,+678%。小缇娜的奇幻之地(Tiny Tina's Wonderlands)从130到360帧,+177%。
然后SteamOS 3.7.20 Beta里加入了ntsync驱动。
5%不是起点,是结果
2026年3月,Linux在Steam的市占率首次突破5%,是macOS的两倍多。
这不是某个单一突破的功劳,是一整条链的闭合:内核有了ntsync,Wine 11.0原生支持,Proton 11.0 Beta将其作为默认后端,SteamOS加入ntsync驱动,Fedora 44自动为Wine/Steam用户启用模块。从内核到用户空间到发行版到游戏前端,全线贯通。
Windows 10在2025年10月停止免费支持,一批用户被推向Linux。Steam Deck出货量持续增长。Proton兼容性越来越成熟。反作弊虽然还是痛点(1166款带反作弊游戏仅194款支持Linux),但技术障碍已不是墙,是门槛。
缺了任何一条,5%都不会发生。ntsync不是起点,是拼图里最后一块形状特殊的碎片。
两条路,在内核分叉
这段历史里有一组对称的讽刺。
微软从WSL1(翻译层:把Linux系统调用翻译成Windows等价物)走到了WSL2(虚拟机:直接跑一个完整的Linux内核)。翻译层不够用,那就包一个完整的OS进来。
Wine从翻译层(把Windows API翻译成Linux等价物)走到了ntsync(在Linux内核里直接实现Windows语义)。翻译层不够用,那就把对方OS的语义种进自己的内核。
一个在做减法,退回虚拟化。一个在做加法,深入内核级兼容。
两条路确认了同一件事:翻译层的天花板是真实存在的。要么虚拟化整个操作系统,要么把对方的操作系统语义搬进自己的内核。中间地带永远在漏。
The Register说得好:「WSL1跟Wine的相似度,远高于它跟WSL2的相似度。」微软自己走过Wine的路,然后回头了。Wine没有回头,它继续往内核深处走。
不是一个内核驱动的故事
ntsync只是个基层驱动,几千行代码,在内核的角落里安静地存在着。
但它被合进来这件事本身在说:Linux内核不再只服务Linux了。
十年前,内核社区对「为了Wine改内核」持普遍怀疑。fsync的补丁被拒绝合并,理由之一就是「这只是为了Windows兼容」。NTSYNC最终被接受,因为Valve用几百万Steam Deck用户证明了一件事:Linux游戏不是爱好者的玩具,是有商业规模的生态。社区没变心,是现实变了。
Linus从来不以攻击微软为使命。2003年他对纽约时报说:「我真的不是要搞垮微软,那只会是一个完全无意中的副作用。」更早的1997年他也说过:「我没想成为微软的威胁,主要是因为我不觉得微软是竞争对手。」是微软不断给用户制造离开的理由。ntsync做的,是让那些离开的人在Linux上找到一个真正对味的家。
器官是别人的,身体是自己的。跑起来就行。