微软如何应对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支持结束而突然过时的数亿设备作何感想。