据科技媒体 Windows Latest 于10月18日的报道,Win11 26H2作为微软今年推出的最新操作系统,其核心文件如kernel32.dll、user32.dll和ntoskrnl.exe等,仍带有MS-DOS时代的痕迹。这些文件遵循8.3旧命名规范,微软之所以保留这一做法,是为了确保兼容性。
报道指出,8.3是MS-DOS时代使用的文件命名规则:文件名在句点前最多8个字符,句点后最多3个字符。所有文件名只能使用ASCII字符,不能包含空格,也不允许多个句点。在System32文件夹中,一些最古老的文件仍遵循这些规则,而Windows安全中心等新组件则已摆脱这种限制。
此外,MS-DOS以大写形式显示文件名,因此Windows在处理文件时默认不区分大小写,kernel32.dll和KERNEL32.DLL实际上指向同一个对象。
至于为何限制为8个字符和3个字符,微软资深员工Raymond Chen解释称,这是从CP/M系统沿袭下来的规则。但他本人并不清楚CP/M为何选择这两个数字,因为CP/M的目录格式中有两个保留字节,理论上可以将文件名长度扩展到10.3。
Raymond Chen还推测,微软数十年未更改文件名的原因在于,如果程序通过文件名与某个DLL建立链接,一旦文件名改变,程序将无法找到它。
到了Windows 95时代,微软并未强制要求系统驱动器必须支持长文件名,部分原因在于,使用漫游配置文件的企业可能依赖无法处理长文件名的服务器。直到Windows XP,长文件名才成为必需条件。
即使进入21世纪后,长文件名仍带来历史包袱。Windows可以为每个长文件名生成短文件别名,如果安装程序要将shellstyle.dll复制到一个已存在shellstuff.dll的文件夹中,新文件很可能被命名为SHELLS~2.DLL。