Windows为何演变成如今的样子:从开发者视角看历代Windows的演进

· · Windows, Windows应用程序开发, 兼容性, OS历史, Win32, .NET, 信息安全

1. 前言

说起Windows的历史,很多时候都是以外观变化来讲述的。

出现了开始菜单。 加入了Aero效果。 变成了开始屏幕。 任务栏的位置变了。 边角变圆润了。

当然,这些也都是Windows的历史。

不过,从Windows应用程序开发者的角度来看,真正重大的变化并不仅仅是界面设计。更重要的其实是这些变化:

  • 操作系统的稳定性
  • 内存保护
  • 权限管理
  • 驱动程序模型
  • 32位/64位支持
  • 与COM、ActiveX、Win32 API的兼容性
  • .NET Framework与.NET
  • UAC
  • Windows Update
  • 安全功能
  • 应用商店程序与桌面程序的共存
  • WSL
  • TPM、Secure Boot
  • 高DPI、多显示器
  • 混合架构CPU与省电控制

Windows并不是单纯靠改变外观来演进的操作系统,而是一款在尽可能让旧应用程序继续运行的同时,逐步提升稳定性、安全性、性能与硬件支持能力的操作系统。这正是Windows既有趣、又令人头疼的地方。

本文不打算把历代Windows当作单纯的年表来回顾,而是要从Windows应用程序开发者的视角,重新审视这些变化。

2. Windows的历史,也是两条脉络汇合的历史

要理解Windows的历史,首先应该把握的是,Windows大体上存在两条脉络。

一条是在家用电脑上普及开来的Windows 95/98/Me脉络。 另一条是意识到企业与商用用途而成长起来的Windows NT/2000脉络。

这两条脉络,在Windows XP时大幅汇合。

MS-DOS / Windows 3.xWindows 95 / 98 / Me家用电脑・易用性・外围设备Windows NT / 2000商用・稳定性・权限管理Windows XP家用与商用的整合Windows Vista / 7UAC・WDDM・安全强化Windows 8 / 8.1触控・应用商店・云端Windows 10持续更新・WSL・兼容与现代化Windows 11安全标准・现代硬件

如果不了解这条脉络,就会对Windows现在的样子感到有些难以理解。

为什么老旧的API还留着。 为什么会存在管理员权限方面的问题。 为什么32位应用程序现在还能运行。 为什么直接写入Program Files会出问题。 为什么在驱动程序或外围设备上会遇到麻烦。

这些与其说是单纯的设计失误,不如说是Windows长期背负现实中PC使用场景所带来的结果。

3. Windows 95/98:让家用电脑走向普及的时代

Windows 95是一款决定了现代Windows操作方式的操作系统。

开始菜单。 任务栏。 最小化、最大化、关闭按钮。 即插即用(Plug and Play)。 网络功能。 接入互联网的入口。

如今看来理所当然的操作方式,在这个时期已经基本成形。

从开发者视角来看,Windows 95/98的时代,是PC从「只有少数专业人士才会用的机器」变成「家庭和职场中普通使用的工具」的时代。

安装应用程序。 连接打印机。 用调制解调器上网。 从CD-ROM安装软件。 使用数码相机或USB设备。

这类使用方式一下子普及开来。

到了Windows 98,互联网、USB、DVD、多媒体、家庭网络等要素进一步增强。

不过,这个时代的Windows仍残留着源自DOS的不稳定性。

某个应用程序拖垮整个操作系统。 驱动程序质量不好就会出现蓝屏(BSOD)。 DLL版本不一致,导致其他应用程序崩溃。 重启一下就好了,这种莫名其妙的经验之谈到处流传。

对经历过那个时代的人来说,Windows既方便,同时也带着一点让人害怕的地方。

4. Windows Me:家用DOS系Windows的最后挣扎

Windows Me是一款很难评价的操作系统。

通常被说成是「不稳定的Windows」。 事实上,很多人对它并没有太好的印象。

不过,Windows Me也做过一些新的尝试。

System Restore(系统还原)。 System File Protection(系统文件保护)。 AutoUpdate(自动更新)。 数字媒体功能。 家庭网络。

也就是说,如今Windows中理所当然的「坏了就恢复」「保护重要文件」「自动执行更新」这类思路,当时其实已经能看到雏形。

只不过,就底层而言,它仍是家用DOS系Windows的最终形态。

功能上想引入现代化的元素。 但操作系统本身的底层能力还不够扎实。

这中间的落差,我认为正是Windows Me之所以显得棘手的原因。

从开发者视角看,Windows Me告诉我们一个道理:「要承载新的体验,就必须改变操作系统本身的地基」。

而这个答案,就是与NT系列的整合。

5. Windows NT/2000:商用Windows的地基

在家用Windows之外,还存在着Windows NT系列的脉络。

NT系列从一开始就强烈意识到商用场景。

稳定性。 内存保护。 权限管理。 服务(Services)。 网络。 企业内部管理。

这条脉络的重要成果,就是Windows 2000。

Windows 2000在吸收Windows 95/98所积累的易用性的同时,把NT系列的稳定性与管理能力推到了前台。

对开发者来说重要的是,从这个时期开始,Windows逐渐从「崩溃也没办法的家用操作系统」,转变为更强调「支撑业务运转的平台」这一属性。

以Windows服务(Service)的形式常驻运行。 记录到事件日志(Event Log)中。 考虑用户权限。 在网络域中被统一管理。 与共享文件夹、打印机协同工作。

这些如今在商用应用程序开发中理所当然的前提,正是在NT系Windows的语境下逐步培育出来的。

6. Windows XP:家用与商用的整合

Windows XP在Windows的历史上,是一款尤为重要的操作系统。原因并不只是因为它受欢迎,而是因为家用Windows的脉络,与商用Windows NT系列的脉络,在这里以实用的形式实现了整合。

通过Windows XP,家用电脑也能够以NT系列的稳定性为前提,这是非常大的变化。

在此之前的家用Windows,应用程序或驱动程序一旦出问题,很容易连带让整个操作系统变得不稳定。 XP之后,至少在底层架构上,可以以更稳定的NT系列为前提。

另一方面,XP被使用了相当长的时间。这既是好事,也带来了难题。正因为长期使用,企业系统、内部工具、ActiveX、COM组件、老旧外围设备、业务专用软件,大量沿用了XP时代的前提。

也就是说,XP既是现代Windows的原型,同时也是延续至今的遗留资产(legacy)的起点之一。

对Windows应用程序开发者而言,XP带来的教训可以归结为一句话。

操作系统被使用的时间越长,应用程序的前提假设也会留存得越久。

这既是兼容性的问题,也是业务持续性的问题。

7. Windows Vista:常被当作失败之作,却是重要的转折点

Windows Vista有时会被说成是评价不高的操作系统。

太卡。 警告太多。 驱动不兼容。 应用程序跑不动。 还是XP更好用。

就当时的用户体验而言,这些评价确实有其原因。

不过,从Windows应用程序开发者的视角来看,Vista是一个重要的转折点。

尤其重要的是以下这些:

  • UAC
  • WDDM
  • Aero/Desktop Window Manager
  • 新的驱动程序模型
  • 安全强化
  • 64位环境的普及
  • 对写入Program Files和Windows文件夹的限制
  • 应用程序清单(Application Manifest)

Vista把「为了安全使用而带来的不便」引入了Windows。

在那之前的Windows中,以管理员权限运行早已变得过于理所当然。 应用程序把配置文件写在与可执行文件相同的文件夹里。 随意写入注册表的系统区域。 安装程序本身、应用程序主体都以管理员权限为前提。

这类做法并不罕见。

Vista之后,这种做法变得难以为继。

应用程序该把配置写在哪里? 每个用户各自的数据要放在AppData吗? 所有用户共用的数据要放在ProgramData吗? 需要管理员权限的操作,该在何处、如何向用户说明?

如果不考虑这些,应用程序就无法再以Windows应用程序应有的规范方式运行。

从用户角度来看,Vista或许带来了麻烦。但从长远来看,这是Windows走向现代安全模型过程中必经的一道门槛。

8. Windows 7:把Vista的底子变得实用的操作系统

Windows 7被人们记住为完成度非常高的一款Windows。

它把Vista引入的重大变化,打磨成了更轻量、更易用、更稳定的形态。

作为商用Windows也很受欢迎,在Windows应用程序开发现场,长期被当作基准环境使用。

Windows 7的重点,与其说是「思路上的重大变革」,不如说是「实用层面的完成度」。

它保留了Vista引入的UAC、WDDM等方向,同时改善了用户体验。

对开发者而言,随着Windows 7的普及,以Vista之后的设计为前提的应用程序开发,变得越来越现实可行。

比如,会采用这样的思路:

  • 以普通用户权限即可运行为前提
  • 把需要管理员权限的操作拆分到安装程序或独立进程中
  • 合理区分配置文件的存放位置
  • 逐步关注高DPI与多显示器
  • 具备让32位应用程序在64位Windows上运行的前提
  • 确认驱动程序与外围设备的兼容性

可以说,Windows 7在Windows应用程序开发中,扮演了从「XP时代的做法」过渡到「Vista之后的做法」的现实桥梁。

9. Windows 8/8.1:急转向触控时代

Windows 8是一款相当大胆的操作系统。

开始屏幕。 动态磁贴(Live Tiles)。 Windows应用商店(Windows Store)。 触控操作。 超级按钮(Charms)。 云端联动。

这是一款不仅关注PC,也强烈关注平板电脑的Windows。

就方向而言,我认为并没有错。

智能手机与平板电脑迅速普及,PC也有必要引入触控与商店应用程序的理念。

只不过,对传统桌面用户来说,变化来得太急。

开始菜单看起来消失了。 整个屏幕会切换。 在以鼠标和键盘为主的办公电脑上,操作场景变化太大。

结果,Windows 8成了一款评价两极的操作系统。

从开发者视角来看,Windows 8强化了「Windows上会有多种应用程序模型共存」这一现实。

传统的Win32桌面应用程序。 .NET Framework应用程序。 WPF应用程序。 商店应用程序。 WinRT。 以触控为前提的UI。

在同一个Windows上,开始并存多种不同的做法。

这既带来了理解上的复杂性。 但同时,这也正是Windows的特色所在。

引入新事物。 但不会立刻抛弃旧事物。

这种态度,一直延续到了Windows 10之后。

10. Windows 10:作为服务的Windows

Windows 10最大的特点,就是Windows从「每隔几年就换一次操作系统」,变成了「持续更新的操作系统」。

Windows as a Service。 功能更新(Feature Update)。 累积更新(Cumulative Update)。 Windows Defender的强化。 Microsoft Edge。 WSL。 虚拟化相关功能。 与云端的联动。

在Windows 10上,操作系统本身持续更新变成了理所当然的前提。

这对用户、对开发者来说,都是重大的变化。

过去,就像Windows XP、Windows 7那样,可以长期以某个特定的操作系统版本作为基准。 但Windows 10之后,即便同样是Windows 10,版本也各不相同。

1507、1511、1607、1703、1709、1809、1903、2004、21H2、22H2。

虽然不需要逐一关注这些细微差异,但开发者必须具备「Windows会持续更新」这一前提意识。

这也影响了测试方面的思路。

  • Windows Update之后是否会出问题
  • 安全功能的强化是否会导致安装程序卡住
  • 是否与杀毒软件产生冲突
  • 是否过度依赖.NET Framework或运行时(Runtime)的特定状态
  • 现有的外围设备或驱动程序在最新Windows上是否仍能正常运行
  • 与WSL或虚拟化功能共存时是否存在问题

Windows 10是一款在保持兼容性的同时,致力于应对现代化这一极具Windows特色的难题的操作系统。

11. Windows 11:安全标准与现代硬件的时代

Windows 11在外观上也有所变化。

居中显示的任务栏。 带圆角的界面。 新的开始菜单。 Snap Layouts(贴靠布局)。 新版Microsoft Store。

不过,从开发者视角来看,更重要的是安全标准与硬件前提的变化。

Windows 11把TPM 2.0、UEFI、Secure Boot、支持DirectX 12的GPU、WDDM 2.0驱动程序等列为了系统要求。

这并不是单纯地淘汰老旧电脑,而是为了让操作系统的安全功能、可靠性、可更新性以及现代硬件能力成为前提所做出的判断。

当然,对于还在使用老旧电脑或老旧外围设备的现场来说,这是个令人头疼的问题。不过,若要让Windows今后仍能持续作为安全的业务基础平台,势必要在某个时间点提高前提条件。

对开发者来说,Windows 11展示出了这样的时代特征:

  • 以安全功能为前提
  • 以高DPI、多屏幕、触控、触控笔、语音输入等为前提
  • 关注GPU与显示驱动程序的代际差异
  • 关注像P核心/E核心那样的混合架构CPU
  • 考虑省电设置与后台运行带来的影响
  • 考虑与云账户、管理策略之间的关系

Windows应用程序的性能与稳定性,已经不再单纯由代码决定。

操作系统版本、更新状态、安全设置、电源设置、CPU配置、驱动程序、权限、外围设备,这些都需要一并纳入运行环境来考量。

12. 从开发者视角看Windows的演进

如果从开发者视角大致梳理历代Windows,就会呈现如下表格。

时代 代表性Windows 作为操作系统的变化 对开发者的影响
家用电脑普及 Windows 95/98 开始菜单、任务栏、即插即用、支持互联网 安装程序、DLL、外围设备、网络支持变得重要
家用DOS系的尾声 Windows Me System Restore、AutoUpdate、数字媒体 让人看到承载新功能需要操作系统的底层能力
商用基础平台 Windows NT/2000 稳定性、权限管理、服务、网络管理 商用应用程序、常驻处理、事件日志、权限设计变得重要
整合的成功 Windows XP 家用与商用的整合、NT系的普及化 以XP为前提的大量商用资产随之诞生
安全转折点 Windows Vista UAC、WDDM、驱动程序模型、64位 以管理员权限为前提的设计难以为继
实用化 Windows 7 Vista的改进、稳定性、商用普及 Vista之后的做法在实务中落地生根
触控与商店 Windows 8/8.1 开始屏幕、商店应用程序、云端联动 Win32与新应用程序模型的共存成为课题
持续更新 Windows 10 Windows as a Service、Defender强化、WSL 需要以操作系统持续更新为前提进行测试
现代硬件 Windows 11 TPM、Secure Boot、界面革新、现代CPU/GPU 需要涵盖安全、电源、CPU、驱动程序的整体设计

从这张表可以看出,Windows并不是简单地「变新」。它在承接旧有兼容性的同时,逐步应对新的安全性与新的硬件。

因此,在Windows应用程序开发中,光看最新的API是不够的。

也许还残留着老旧的COM组件。 也许还留有使用ActiveX的业务流程。 也许需要32位DLL。 也许打印机驱动或USB设备比较老旧。 也许需要在没有管理员权限的情况下使用。 也许Windows Update之后行为会发生变化。

这就是Windows。

很麻烦。

但这份麻烦,同时也是Windows长期承担现实业务的证明。

13. 在Windows应用程序开发中,了解历史为何有用

了解Windows的历史,实务中的看法会有所不同。

比如,当应用程序无法启动时。

不能简单地说一句「这是bug」就了事。

也许是32位/64位的问题。 也许缺少必要的.NET Framework。 也许缺少VC++运行库(Runtime)。 也许COM注册出了问题。 也许是UAC导致写入失败。 也许被杀毒软件拦住了。 也许受到老旧打印机驱动的影响。 也许是高DPI造成界面错乱。 也许是Windows Update前后的行为差异。 也许是省电设置导致性能发挥不出来。

在Windows应用程序开发中,不能只盯着应用程序本身,还必须观察整个运行环境。

这确实麻烦。但正因如此,打造能在实际现场稳定运行的软件,才更具价值。

14. 实务中应该核对的清单

在现有Windows应用程序的改造或新开发中,只要事先掌握以下这些要点,就能安心不少。

  • 目标操作系统是Windows 10,还是Windows 11
  • 若是Windows 10,其支持、ESU、LTSC的处理情况如何
  • 是32位应用程序,还是64位应用程序
  • 是否依赖32位DLL或COM组件
  • 能否在没有管理员权限的情况下完成常规操作
  • 是否把配置写入了Program Files
  • 用户各自的数据是否放在AppData、公共数据是否放在ProgramData
  • 是否已经把需要UAC提权的操作独立出来
  • 安装程序、更新处理、卸载处理是否安全
  • .NET Framework、.NET、VC++运行库等依赖关系是否明确
  • 在高DPI、多显示器、远程桌面环境下界面是否不会错乱
  • 打印机、USB设备、串口通信、摄像头等外围设备是否存在兼容性问题
  • 是否具备在Windows Update之后仍能确认运行情况的机制
  • 是否已确认与Windows Defender或第三方安全软件之间的兼容性
  • 是否考虑到省电设置或CPU配置差异可能带来的性能变化
  • 出错时是否会留下日志,并能从现场回收相关情况

这份清单不只是单纯的开发技巧,而是Windows所积累下来的历史本身。

15. Windows不是老旧,而是层层叠加而成

Windows常被说成「老旧」。的确,它确实有老旧的部分。

有Win32 API。 有COM。 有注册表(Registry)。 有DLL方面的问题。 有老旧的控件。 也有为了兼容性而保留下来的行为。

不过,如果只是简单地把它当作老旧而舍弃,就无法看清Windows的本质。Windows是一款在承接旧事物的同时,不断叠加新事物的操作系统。与其说它是一座整理得井井有条的花园,不如说它更像一座持续增建改建的巨大城市。

有新建的大厦。 也有老旧的小巷。 地下埋着过去留下的管线。 也有便利的高速公路。 工厂、医院、学校、政府机关,都在这座城市里运转着。

开发者,就是在这座城市里打造应用程序。

因此,只了解最新的道路是不够的。 也需要稍微了解,那些老旧的道路为什么还留着。

16. 总结

Windows的历史,并不仅仅是外观上的历史。它是一段在保持兼容性的同时,如何逐步提升稳定性、安全性、性能与硬件支持能力的历史。

Windows 95/98把PC推广到了家庭与职场。 Windows NT/2000培育出了作为商用操作系统的稳定性与管理能力。 Windows XP把这两者整合到了一起。 Windows Vista成为了安全性与驱动程序模型上的重大转折点。 Windows 7让这次转变变得实用化。 Windows 8朝触控与应用商店这个新方向迈出了一步。 Windows 10让「持续更新的Windows」这一模式落地生根。 Windows 11则进一步推进了安全标准与现代硬件的支持。

Windows并不是一座整理得完美无瑕的理想乐园。它是一个庞大而复杂的平台,一边背负着现实业务、老旧资产、外围设备、安全要求以及新硬件,一边持续运转至今。

正因如此,在Windows应用程序开发中,不能只看「当下的Windows」,理解从过去延续至今的设计理念与兼容性历史,同样十分重要。

不要轻率地舍弃老旧资产。 但也要应对新的安全性与运行环境。

正是在这样的平衡之上,才有了今天的Windows。而在此基础上打造出能够确实运行的软件,至今仍然具有重大的价值。

参考资料

共享相同标签的最新文章。可以围绕相近的主题进一步加深理解。

常见问题

汇总了咨询这一主题时常见的问题。

为什么Windows XP在Windows的历史中如此重要?
因为家用Windows(95/98/Me)的脉络,与商用Windows NT/2000的脉络,在XP上终于以实用的形式整合到了一起。这使得家用电脑也能够以NT系列的稳定性为前提。另一方面,XP被使用的时间非常长,因此企业系统、ActiveX、COM组件、老旧外围设备等大量沿用了XP时代的前提,这也成为延续至今的遗留资产(legacy)的起点之一。
Windows Vista是一次失败吗?
当时的用户体验确实存在「太卡」「警告太多」「驱动不兼容」等负面评价的理由,但从开发者视角来看,这是一个重要的转折点。UAC、WDDM、新的驱动程序模型、64位环境的普及,以及对Program Files写入的限制等机制被引入,使得以管理员权限为前提的应用程序设计方式难以再行得通。可以说,这是Windows走向现代安全模型过程中必经的一道门槛。
Windows 10对开发者来说改变了什么?
最大的变化是,Windows从「每隔几年就要换新的操作系统」变成了「持续更新的操作系统」(Windows as a Service)。即便同样是Windows 10,从1507到22H2版本也各不相同,因此长期以某个特定OS版本为基准的思路已经不再适用。开发时需要在「Windows会持续更新」的前提下进行测试,例如Windows Update之后是否会出问题、安全功能强化是否会导致安装程序卡住等。
Windows 11的系统要求为什么被提高了?
Windows 11把TPM 2.0、UEFI、Secure Boot、支持DirectX 12的GPU、WDDM 2.0驱动程序等列为了系统要求。这并不是单纯地淘汰老旧电脑,而是为了让操作系统的安全功能、可靠性、可更新性以及现代硬件功能成为前提所做出的判断。为了让Windows今后仍能持续作为安全的业务基础平台,势必要在某个时间点提高前提条件。

作者简介

本文作者的个人简介页面。

Go Komura

小村软件有限公司 代表

以 Windows 软件开发、技术咨询与故障排查为中心,擅长难以复现的故障调查,以及既有资产仍在运行的项目。

返回博客列表