Windows 95兼容性黑科技:微软如何悄悄修补第三方代码

本文揭秘微软在Windows 95时代解决软件兼容性的独特方案,包括应用程序兼容性数据库、检测字符串机制,以及获得厂商授权后直接修补第三方程序的创新做法,这些技术奠定了微软在操作系统市场的成功基础。

微软如何应对Windows 95的兼容性问题

自操作系统诞生之初,如何让重要软件在Windows上正常运行就一直困扰着微软。兼容性始终是重中之重。

在Windows 3.1时代,情况相对简单。当应用程序共享相同文件名时,需要用户自行告知系统具体是哪个应用。微软资深工程师Raymond Chen举例说明了C:\MAIL\MAIL.EXE的情况:可能是Microsoft Mail?也可能是cc:Mail for MS-DOS?

APPS.INF文件告诉Windows如何处理应用程序,但区分文件名相同的应用仍需用户介入。那确实是个更简单的时代。

应用程序兼容性数据库的革新

Windows 95通过其应用程序兼容性数据库将兼容性处理提升到了新高度。操作系统行为可根据兼容性标志进行调整,微软甚至会在简单的操作系统调整无法解决深层问题时,自动修补程序。

修补他人代码本质上存在风险。Chen表示:“出于安全考虑,Windows 95团队在需要修补程序时都会获得厂商的书面许可。”

“协商内容包括问题的详细信息以及修补方式。作为交换,团队要求厂商提供受影响的产品版本信息(如能发送这些版本进行分析更好),并承诺在下一版本中修复问题,因为下一版本将无法受益于此补丁。”

检测机制的技术细节

如何识别需要打补丁的应用程序?Windows 95没有依赖用户告知系统文件信息,而是使用注册表中存储的检测字符串。当加载针对早于4.0版本Windows的16位模块时,内核会尝试每个检测字符串以查看是否触发匹配。

这些字符串并非简单的校验和。字符串被解码为字节,第一个字节是匹配算法,指示后续内容。“实践中,你会看到很多文件大小匹配,”Chen说。

“相反,你不太可能看到很多文件内容匹配,因为这些会产生额外的I/O操作,因此成本更高。”

Chen指出,虽然最终有了构建检测字符串的工具,但早期版本必须手动编写。

“如果找到匹配,”Chen解释道,“子键指示要修补的段,这些子键的值是提供要应用补丁的二进制数据。”

补丁命名传统与历史意义

“值的名称并不重要,但传统上‘添加’补丁命名为Add,‘更改’补丁命名为Change。如果有多个添加或替换补丁,传统上会给它们加上数字后缀以区分。”

微软对向后兼容性的关注常被引用为其在20世纪末和21世纪初成功的主要因素。

一个有趣的思考实验是:Windows 95时代的工程师会对因Windows 10支持结束而突然过时的数亿设备作何感想。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计