博海拾贝 文摘 Windows的伟大之处在哪里?

Windows的伟大之处在哪里?

122.webp

作者 / 阿菊

Windows 的伟大,从来不在于它写得有多优雅,而在于它替全人类抗下了过去四十年所有的历史技术债,把自个儿活成了一个深不见底的底层泥潭,却依然能让你双击运行二十五年前的程序。

我平时在公司里,周围一帮年轻工程师人手一台 MacBook,开会时满嘴都是 Linux 内核有多纯粹,macOS 的 Unix 血统有多高贵。

年轻人都喜欢干净的东西,这太正常了。我也年轻过,当年刚入行看 Linux 源码,觉得那叫一个清爽。再回头看 Windows 的文档和逆向出来的部分结构,简直让人头皮发麻,到处都是妥协,到处都是补丁摞补丁。

但当你真正见过各种稀奇古怪的硬件外设,伺候过那些给钱极其痛快但技术栈停留在上个世纪的甲方爸爸,再去审视 Windows 的时候,心里的感觉只剩下敬畏。

先说个去年年底我亲身经历的事儿。当时是 2025 年 11 月,我被一个做军工测控的老朋友拉去救火。他们实验室有一套极其昂贵的超声波探伤设备,98 年从德国进口的,配套的控制软件运行在 Windows 98 上。现在原来的老工控机主板电容爆浆,彻底歇菜了。他们买了一台最新的搭载酷睿 Ultra 处理器、预装 Windows 11 24H2 的工作站,通过转接卡把那个巨大的 ISA 转 PCIe 采集卡插上,然后把当年那张光盘里的安装程序拷了进去。

按理说,这事儿绝无可能成功。98 年的软件,直接调的都是早就被废弃的底层接口,甚至还有直接读写硬件端口的野路子操作。现代操作系统讲求内存保护、权限隔离,这种远古软件一跑起来,系统分分钟给你甩个蓝屏或者直接静默闪退。

结果你猜怎么着。那个安装程序居然跑起来了,虽然界面分辨率小得可怜,字儿都糊在一起,但顺顺当当把文件拷进了 C 盘。接着我帮他们配了一下系统的兼容性属性,把几个老旧的动态链接库手动注册了一下,那个二十多年前的测控软件,就在 2025 年底的最新硬件上,稳稳当当地画出了超声波的波形图。

那一刻,站在旁边的几个零零后研究生眼珠子都快掉下来了,嘴里直呼这不科学。

这确实不科学,但这很 Windows。这就是我要说的核心:极致的、近乎变态的向后兼容性。

做过软件架构的同行都知道,搞技术最爽的事情就是推倒重来。你看苹果,当年从 PowerPC 切到 Intel,后来又从 Intel 切到自研的 M 系列芯片。每次切换,苹果的做法都特别霸道。先给你弄个转译层顶两年,紧接着在新系统里直接把老架构的 32 位支持一刀切掉。开发者你不跟着我改代码、不重新编译是吧?那你的软件就别在我的新电脑上跑了,用户骂也是骂你开发者不更新。苹果靠着这种铁腕手段,把历史包袱甩得干干净净,系统自然做得轻快。

Linux 呢?Linux 内核之父 Linus 虽然也天天吼着绝不破坏用户空间,但 Linux 的发行版太碎了。你在 Ubuntu 18.04 上编译的一个带图形界面的复杂商业软件,直接扔到 2026 年的 Fedora 或者 Arch Linux 上试试?光是一个 glibc 的版本依赖,或者 Wayland 和 X11 的图形协议打架,就能让你折腾两天两夜,最后报出一堆段错误,死都不知道怎么死的。

但微软不敢这么干,也不能这么干。Windows 背负的是全球几千万家企业的生产资料。医院里的 CT 机控制端、银行柜台的终端系统、工厂流水线上的 PLC 编程软件、甚至某些国家电网的调度界面。这些软件很多是十几年前的外包公司写的,源码早就丢了,写代码的人可能都已经退休去跳广场舞了,甚至连外包公司都倒闭八百回了。

如果 Windows 敢像苹果那样,说我为了系统纯洁性,明年开始全面废弃 Win32 接口,全面转向现代化的新架构。那第二天全球的工业生产和金融秩序就得瘫痪一半。

为了保住这些老软件的命,微软在 Windows 内核和应用层之间,硬生生造出了一个极其庞大的垫片系统,在技术上我们叫它 Shim 机制。

什么是 Shim?说白了就是系统在底层帮你撒谎,帮你擦屁股。

以前很多程序员写代码非常野,根本不守规矩。比如著名的游戏模拟人生第一代,当年的程序员在处理内存的时候犯了个低级错误,释放了一块内存之后,紧接着又去读取这块内存里的数据。在 Windows 95 和 98 时代,系统的内存管理很粗糙,你释放了内存,系统并不会马上收走,那块数据还在原地,所以游戏能正常跑。

但是到了 Windows XP,微软全面换装了极其严肃的 NT 内核。NT 内核是个眼里不揉沙子的主儿,内存只要释放了,立马标记为不可访问,谁敢再碰直接当场击毙,强制关闭程序。这就导致模拟人生在 XP 上一启动就崩溃。

按理说,这是游戏开发商的 Bug,跟微软没有半毛钱关系。但用户不管啊,用户花钱升级了 XP,发现自己最爱玩的游戏打不开了,他只会骂 Windows 垃圾。

微软的工程师怎么解决这个问题的?他们专门在系统里写了一段针对模拟人生的垫片代码。当系统检测到你双击运行的是模拟人生这个程序时,Windows 的内存管理器就会偷偷切换模式,专门为这个进程保留那块已经被释放的内存,延迟回收,陪着那个二十年前写出 Bug 的程序员演戏,假装自己还是当年那个粗糙的 Windows 98。

这种专门为某一个特定软件定制的擦屁股代码,在 Windows 里有多少个?不是几十个,不是几百个,而是成千上万个。

早些年 Windows 刚出 Vista 和 Win7 的时候,微软搞了个 Windows 95 兼容性测试,甚至专门买了一屋子的老旧软件光盘,雇了一大批测试员,每天的工作就是安装、运行、报错,然后内核组的工程师跟在后面,反汇编别人的软件,找出那个软件当年是怎么违规调用系统的,再在 Windows 的兼容层里写一段对应的谎言代码去迎合它。

这哪里是在写操作系统,这分明是在搞数字考古和文物修复。

更绝的是版本号的事情。当年从 Win8 跨越到 Win10 的时候,为什么中间跳过了 Win9?坊间传闻很多,但我们干底层的都知道那个最真实的黑色幽默。因为早些年有海量的第三方软件,在安装和运行的时候,会用一段极其脑残的代码来判断当前系统是不是古老的 Windows 95 或者 98。它们直接检测系统名称字符串的前缀是不是包含 Windows 9。如果微软敢把新系统命名为 Windows 9,全球至少有几十万个老软件会瞬间精神错乱,误以为自己穿越回了 1995 年,然后加载错误的底层驱动,当场暴毙。

甚至到了 Windows 10 和现在的 Windows 11,如果你用以前的老接口去向系统询问当前的版本号,Windows 默认会骗你,告诉你它是 6.2 版本(也就是 Windows 8)。除非你在程序里明确写一份清单文件,发誓说我是新软件,我能处理好高版本号,Windows 才会放心大胆地把真实的 10.0 版本号告诉你。

很多人嘲笑 Windows 注册表是个垃圾场,嘲笑 System32 文件夹里装的居然是 64 位的库,而 SysWOW64 文件夹里装的反而是 32 位的库。这种命名上的精神分裂,外行看了觉得微软的程序员是不是脑子有包。

但只要你懂一点系统演进的血泪史,你就会明白这背后的无奈与伟大。当年从 32 位向 64 位过渡的时候,无数老程序在代码里把路径写死了,非要去 System32 这个名字的文件夹里找依赖库。如果微软为了命名规范,把 64 位的库放到 System64 里,那些重新编译成 64 位但忘了改路径代码的程序全都得死。所以微软干脆做了一套文件系统的重定向机制:你是 64 位程序,你去访问 System32,我就给你真东西;你是老旧的 32 位程序,你也去访问 System32,系统在底层偷偷给你拐个弯,把你领到 SysWOW64 里去。两个世界互不干扰,全都活得好好的。

把复杂和恶心留给自己,把简单和稳定留给用户和老旧代码。这种胸怀,在商业软件史上,除了 Windows,真找不到第二家。

说到这儿,其实很多刚入行的年轻程序员,或者平时只写写前端、写写 Python 脚本的同学,可能不太能体会这种底层机制的恐怖工作量。现在的开发环境太温室了,各种框架把底层屏蔽得严严实实,导致很多人写了好几年代码,连进程怎么调度、虚拟内存怎么映射、动态链接库在操作系统里到底是怎么加载的都一头雾水。一旦遇到点底层的兼容性报错或者内存泄漏,整个人就彻底抓瞎。

如果你也有这种感觉,觉得自己像是在空中楼阁上写代码,基础虚得很,我建议你抽空去看看这份资料:你缺失的计算机基础课:168 页重讲十门课。前阵子我带团队里几个刚毕业的校招生,发现他们计算机组成原理和操作系统这块欠账太多,讲个内核态和用户态的切换都费劲,我就把这个扔给他们当内部读物了。里面把大学里那些原本枯燥得要死的十门核心专业课,用特别接地气的工程视角重新捋了一遍,总共就 168 页,干货密度极大。哪怕你不是写 C++ 底层的,把它翻完,你再看我现在讲的 Windows 这些神级操作,立马就能品出里面的门道来。

咱们接着往下深挖。如果说兼容性是 Windows 软实力上的极致妥协,那么 Windows 的内核架构,也就是 NT 内核,则是硬实力上的巅峰造极。

现在网上有个特别流行的误区,觉得 Windows 天天蓝屏(虽然这几年其实很少见了),肯定是因为它内核设计得烂,不如 Linux 稳健。

这纯粹是外行看热闹。我可以非常负责任地告诉大家,Windows 所采用的 NT 内核,其设计的超前性、工程的严谨度,在人类操作系统历史上是排得上号的神作。

这事儿得追溯到上世纪 80 年代末。那时候比尔盖茨意识到 DOS 这套东西是个玩具,撑不起未来的企业级市场,于是他干了一件极其正确的事:从 DEC 公司挖来了传奇架构师大卫·卡特勒。

卡特勒是个什么人?在 VMS 操作系统领域,他就是神。这老哥脾气极其暴躁,代码洁癖严重,看不上当时市面上几乎所有的系统,尤其鄙视 Unix,觉得 Unix 的设计过于简陋,很多机制都是拼凑出来的。

盖茨给了卡特勒最高权限和花不完的预算,让他从零开始,写一个能够统治未来几十年的新一代操作系统内核。这就是 Windows NT(New Technology)。

卡特勒带队写出来的 NT 内核,是个什么怪兽呢?它是一个混合内核,但骨子里有着极强的微内核设计思想,而且从最底层开始,就是完全面向对象的。

注意,我说的面向对象,不是指用 C++ 写代码。事实上 NT 内核主要是用 C 语言写的。但是卡特勒在 C 语言里,硬生生手搓了一套无比精密的对象管理器。在 Windows 的内核视角里,世间万物皆对象。进程是对象,线程是对象,文件是对象,连一段内存、一个同步锁、一个硬件设备,全都是结构体封装好的对象,有着严格的引用计数、权限控制和安全描述符。

这比 Linux 那个万物皆文件的理念,在复杂系统的管理上,要先进和细腻得多。

举个最直观的例子,异步 I/O(输入输出)。做后端高并发开发的大佬肯定都懂这个概念的重要性。

在 Linux 的世界里,很长一段时间里是没有真正完美的内核级异步 I/O 的。以前大家用 select,后来用 epoll,本质上都是多路复用,还是得自己去读写数据。直到最近这几年,Linux 才搞出了一个叫 io_uring 的新特性,把一帮做后端的程序员激动得热泪盈眶,到处发文章吹性能提升了多少多少倍。

因为 Linux 引以为傲的这个新玩意儿,它的核心思想和实现效果,Windows 在三十年前的 NT 3.5 时代就已经做到了极致,名字叫 IOCP(输入输出完成端口)。

卡特勒在设计 NT 内核的第一天,就规定所有的底层 I/O 操作必须天生就是异步的,通过 IRP(I/O 请求包)在驱动栈里流转。IOCP 不仅能做到极致的异步读写,它甚至直接在内核层面把线程池的调度都给你管起来了。哪个线程刚处理完数据,CPU 缓存还是热的,内核就直接把下一个任务塞给这个线程,连线程上下文切换的开销都给你省到了骨子里。

所以在很长一段时间里,大型端游的服务器,比如早年的魔兽世界部分节点,还有很多对并发延迟要求极高的金融交易系统,跑在 Windows Server 上,底层的网络模型用的全是 IOCP,稳得一批,性能根本不输同时期的 Linux。

再说说图形系统。为什么同样是高刷显示器,很多人觉得 Windows 的鼠标指针移动起来就是比 Linux 桌面跟手,甚至比 macOS 在某些场景下还要利落?

这背后是 Windows 在图形子系统上经历过的刮骨疗毒。

在 Windows NT 3.5 之前,遵循微内核的学院派设计,图形界面(GDI 和 User 模块)是放在用户态作为一个独立进程跑的。这样做好处是安全,图形界面崩了,系统内核不会死。但坏处是什么?慢!画一个按钮,移动一下鼠标,数据要在用户态和内核态之间来回拷贝,进程上下文切换频繁得像走马灯。那时候的硬件根本扛不住这种折腾。

到了 NT 4.0,卡特勒做出了一个违背学院派教条、但极具工程魄力的决定:把图形子系统直接塞进内核里,搞出了那个著名的 win32k.sys。

当时全世界的计算机学者都在骂微软疯了,说这破坏了操作系统的安全边界,是历史倒退。但结果呢?Windows 的图形性能瞬间起飞,直接奠定了后来 PC 游戏帝国的基石。

当然,这也带来了副作用。以前显卡厂商写驱动水平参差不齐,显卡驱动跑在内核态,一旦驱动写了个空指针,整个内核跟着一起陪葬,这就是大家熟知的蓝屏。当年 Windows XP 和 Win7 时代的蓝屏,微软自己做过统计,超过 70%都是第三方硬件驱动,尤其是显卡和网卡驱动写得太烂导致的,根本不是 Windows 内核自己的错。微软替猪队友背了几十年的锅。

为了解决这个问题,微软从 Vista 开始推 WDDM(Windows 显示驱动模型),经过 Win10 到现在的 Win11,这套模型已经进化到了 WDDM 3.2 以上。微软硬是把显卡驱动里那些容易出错的复杂计算剥离回了用户态,只在内核里留一个极小的通信壳子。现在你在 Windows 11 上玩黑神话悟空或者跑本地大模型,就算显卡算力过载导致驱动崩了,你会发现屏幕只是黑一下,闪一秒钟,然后马上恢复正常,游戏可能退出了,但系统绝对不会蓝屏。这就是操作系统的自我进化,在保证极致性能的同时,把安全性重新找了回来。

讲完兼容性,讲完内核,咱们再来看看 Windows 伟大之处的第三个维度:它对全世界千奇百怪硬件的绝对统治力,也就是它的 HAL(硬件抽象层)和 WDF(驱动框架)。

很多果粉喜欢吹 macOS 稳定,省电,软硬件结合得好。这话没错,但你得看前提。苹果总共才几款电脑?几款芯片?主板是自己画的,CPU 是自己设计的,连固态硬盘的颗粒和内存都是焊死在主板上特挑的。macOS 只需要伺候好这屈指可数的十几种硬件组合就行了,这叫温室里的花朵,做不好才叫见鬼。

Windows 面对的是什么局面?那简直是硬件界的原始丛林。

CPU 有 Intel 的,有 AMD 的,现在到了 2026 年,高通的骁龙 X 系列、甚至联发科和英伟达搞的 ARM 架构 PC 芯片也全面杀进来了。显卡有英伟达、AMD、Intel 三家打架。主板有华硕、微星、技嘉,还有华强北不知名小作坊用二手芯片拼出来的寨板。外设就更离谱了,从几万块钱的专业音频接口、工业激光切割机,到拼多多上九块九包邮的杂牌 USB 鼠标、十年前停产的某款小众手写板。

不管你把什么牛鬼蛇神的硬件插到电脑上,用户的唯一期望就是:叮咚一声响,右下角转个圈,然后就能直接用。

为了实现这简简单单的叮咚一声,微软构建了人类历史上最庞大的硬件兼容生态和驱动分发网络(Windows Update)。

在系统底层,Windows 用一套极其严密的设备树和即插即用管理器,把硬件的物理特性彻底抽象化。它发明了 WDF 驱动开发框架,把原本极其复杂的底层中断处理、DMA 内存直接访问、电源状态切换(比如睡眠、休眠、唤醒)全部封装成了标准套路。哪怕是一个三流硬件小厂刚招进来的二流程序员,只要照着微软的模板填空,也能写出一个勉强能用、不至于把系统搞崩的驱动程序。

而且微软为了防止这些猪队友乱来,还搞了极其严格的 WHQL 认证和驱动签名机制。你想让你的驱动进 Windows 内核?可以,把代码和包发过来,微软的自动化测试机房里跑几万个测试用例,用自带的 Driver Verifier 工具对你的驱动进行各种极限施压,故意制造内存不足、I/O 乱序等恶劣环境。只有扛过这一套酷刑的驱动,微软才给你盖章签名,允许你在用户的电脑上静默安装。

这种苦活累活,苹果不屑于干,Linux 社区没人给钱也没法系统性地干。只有微软,像个老妈子一样,既当爹又当妈,还要当警察,把整个 PC 硬件产业链收拾得服服帖帖。没有 Windows 在底层把这套标准扛起来,今天的 PC 硬件根本不可能这么便宜、这么百花齐放,咱们可能还活在买个鼠标都得看电脑牌子的垄断时代。

把时间拉回到现在,2026 年。

如果你仔细观察这几年的 Windows,你会发现这个年近四十的老家伙,不仅没有像很多人预言的那样老态龙钟被时代淘汰,反而焕发出了一种让人害怕的吞噬能力。

以前程序员为什么骂 Windows?因为命令行太难用,没有好用的包管理器,编译开源项目跟渡劫一样。

微软看在眼里,直接给你来了一套组合拳。先是搞出了 PowerShell,这东西刚出来的时候大家都嫌它语法啰嗦。但你用深入了就会发现,Linux 的 Shell 传过来传过去全都是纯文本字符串,你想从里面抠个数据还得用 awk、sed 去写正则表达式,稍微换个格式脚本就崩了。而 PowerShell 完全继承了 NT 内核的思想,它在命令行里传递的全是活生生的.NET 对象!你想拿一个进程的 CPU 占用率,直接点一下属性就出来了,根本不用切字符串。在自动化运维的工程严谨性上,这其实是降维打击。

接着,微软发现大家还是喜欢 Linux 的开发环境。行,打不过我就把你吞了。于是 WSL2(Windows 的 Linux 子系统)横空出世。

到了今天,WSL2 已经成熟到了令人发指的地步。它不是模拟器,它是微软直接用自家的 Hyper-V 轻量级虚拟化技术,在 Windows 底层跑了一个真正的、微软自己维护编译的 Linux 内核。你在 Windows 上写代码,底层跑着 Docker,调用着本机的 RTX 5090 显卡算力,文件在两个系统之间无缝读写,甚至 Linux 里的图形界面程序都能直接无缝画在 Windows 的桌面上。

我身边至少有一半以前死磕 MacBook 和 Ubuntu 桌面版的全栈和 AI 算法工程师,这两年默默地换回了装满大内存和顶级显卡的 Windows 台式机或者移动工作站。原因很简单:Windows 上,你既能拥有全球最强的游戏娱乐生态、最完美的 Office 办公套件、最顶级的显卡驱动支持,同时敲个命令就能瞬间进入世界上最好用的 Linux 开发环境。这种全都要的爽感,其他任何一个操作系统都给不了你。

更别提这两年 AI 浪潮下,微软搞的 Windows Copilot Runtime 和 DirectML。大家都在聊大模型本地部署,聊 AI PC。在苹果生态里,你只能用它的统一内存跑 CoreML;在 Linux 下,你得被英伟达的 CUDA 版本和各种 Python 环境折磨得死去活来。而在 Windows 上,微软直接通过 DirectX 的底层扩展,搞出了一套统一的硬件加速层。不管你的电脑里插的是 N 卡、A 卡,还是 CPU 自带的 NPU,软件开发者只要调用 Windows 的标准接口,就能把本地的算力压榨干净。

写到这里,差不多也快收尾了。

回头看 Windows 这几十年,它确实不完美。它的设置面板到现在还没把老旧的控制面板彻底替换干净,偶尔更新完还是会把某些人的打印机搞罢工,系统体积越来越庞大,里面塞满了你可能一辈子都用不到的冷门组件。

但正是这些看似臃肿、分裂、甚至有些丑陋的细节,构成了 Windows 最真实的勋章。

它不像学术界实验室里造出来的艺术品,它更像是一座在运行了四十年的重工业城市。这座城市的地底下,埋着上世纪八十年代铺设的铸铁水管,九十年代拉的铜芯电缆,二十一世纪初的光纤,以及今天最新的量子通信管道。为了不让地面上几十亿居民的生活停摆哪怕一秒钟,市政工程队从来没有机会把城市推平重建,他们只能在夜深人静的时候,钻进狭窄发臭的下水道里,用最复杂的转接头,把生锈的老铁管和最新的纳米材料管子严丝合缝地焊在一起。

地面上的人踩着平整的柏油路,刷着最新的短视频,玩着光追全开的 3A 大作,跑着最前沿的 AI 模型,偶尔因为井盖响了两声而抱怨这城市基建真烂。

但只有我们这些曾经掀开过井盖、往底下看了一眼的人才知道,能让这样一个跨越了近半个世纪、承载着人类几乎所有数字遗产的庞然大物,在今天依然平稳、高速地运转着,这本身就是计算机工程史上最伟大的奇迹。

来源:知乎日报

本文来自网络,不代表博海拾贝立场,转载请注明出处:https://www.bohaishibei.com/post/114052/
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
Telegram
返回顶部