Том Уэллинг стал героем вирусного обсуждения после публикации фото из отеля История Ивана Капкова: эмиграция, внутренний кризис и трагический финал ITMS объявила о смене названия на BFT «ПСЖ» обыграл «Манчестер Сити» со счётом 4:2 в Лиге чемпионов «Ростелеком» изучает создание корпоративного LLM-фаервола В Кемерово продолжается расследование смерти Татула Петросяна Что такое «Mar-a-Lago face» и почему в нём увидели политический стиль Музыкальные сервисы начали менять названия и тексты песен из-за новых требований закона На фестивале «Маяк» показали фильмы Тимы Анисимова, Никиты Троценко и Павла Лунгина Эмулятор KytyPS5 запустили на Xbox в режиме разработчика Блогер Егорик сравнил работу с зумерами и миллениалами В Нигерии умерла актриса и победительница конкурса красоты Тения Абрахам Юра Борисов стал членом Американской киноакадемии накануне премьеры в Лондоне Конор Кеннеди и Джулия Бе сыграли свадьбу в Рио-де-Жанейро Игра Cancel Your Subscription превращает отмену подписки в испытание Семья Ивана Гудкова предупредила о мошенническом сборе денег на похороны «Девочка из 90-ых»: как семейный проект стал интернет-хитом Кабардино-Балкарский высокогорный заповедник: ледники, экотропы и Дыхтау В RuStore появился платный российский мессенджер «Молния» Николай Басков отметил 50-летие двумя концертами в Live Арене
Лента новостей
Технологии

Почему Windows 11 до сих пор использует имена файлов из эпохи MS-DOS

Формат 8.3 сохранился в Windows из-за обратной совместимости и особенностей загрузки DLL, хотя NTFS давно поддерживает длинные имена.

Почему Windows 11 до сих пор использует имена файлов из эпохи MS-DOS
Фото: Хабр

В Windows 11 по-прежнему используются системные файлы с именами вроде kernel32.dll, user32.dll и ntoskrnl.exe. Их названия соответствуют старому формату 8.3, который появился ещё до Windows и сегодня сохраняется главным образом ради совместимости с программами прошлых десятилетий.

Почему Windows 11 до сих пор использует имена файлов из эпохи MS-DOS
Фото: Хабр

Правило 8.3 ограничивает имя восемью символами до точки и тремя после неё. В таком имени может быть только одна точка, запрещены пробелы, а набор допустимых символов изначально ограничивался ASCII. В общей сложности имя вместе с точкой может занимать до 12 символов.

Формат использовался в MS-DOS, а его корни уходят ещё дальше — в операционную систему CP/M, созданную Гэри Килдаллом в 1974 году для ранних микрокомпьютеров. MS-DOS стремилась сохранить совместимость с CP/M, в том числе на уровне структуры имён файлов. Ветеран Microsoft Рэймонд Чен отмечал, что не знает, почему в CP/M выбрали именно ограничение в восемь символов: зарезервированные байты теоретически позволяли использовать схему 10.3, но число 8, вероятно, оказалось просто удобным.

В старых системах имена отображались заглавными буквами, поэтому запись KERNEL32.DLL может быть знакома пользователям компьютеров 1990-х. Современная Windows по умолчанию не различает регистр: kernel32.dll и KERNEL32.DLL обозначают один и тот же файл.

Главная причина — обратная совместимость

Файловая система NTFS давно поддерживает длинные имена, а Windows работает с ними с середины 1990-х. Однако системные DLL нельзя без последствий переименовать: множество приложений обращается к ним по конкретным названиям. Если изменить имя user32.dll или kernel32.dll, старые программы перестанут находить необходимые компоненты.

Исторические ограничения особенно заметны в Windows 95. Системный диск этой версии не обязан был поддерживать длинные имена, в частности из-за совместимости с серверами, которые использовались для перемещаемых профилей пользователей. Поэтому системные файлы Windows 95 должны были укладываться в формат 8.3. По оценке Чена, в Windows NT использование системного диска с FAT допускалось вплоть до Windows 2000, а обязательная поддержка длинных имён появилась только в Windows XP.

Даже после перехода на длинные имена Windows продолжила создавать для них короткие псевдонимы. Например, если в каталоге уже находится файл shellstuff.dll, то для нового shellstyle.dll может появиться имя вроде SHELLS~2.DLL. Некоторые программы напрямую полагаются на такие обозначения. Чен приводит в пример распространённую ссылку на каталог Program Files как C:\PROGRA~1.

Такая совместимость создаёт отдельный риск: один и тот же DLL-файл способен фигурировать в системе под длинным и коротким именами. Загрузчик Windows может воспринять их как два разных модуля, из-за чего в адресном пространстве процесса окажутся две копии библиотеки. У каждой могут быть собственные глобальные переменные, что приводит к трудноуловимым ошибкам.

По словам Чена, связанные с форматом 8.3 проблемы хорошо изучены и находятся под контролем. Полный отказ от коротких имён не сделал бы Windows быстрее или безопаснее, зато мог бы нарушить работу большого числа старых приложений.

Эта логика распространяется не только на имена DLL. Microsoft постепенно переводит старые диалоговые окна на WinUI 3, но даже обновлённые интерфейсы должны учитывать сторонние программы, которые добавляют в них собственные вкладки. Переименование системной библиотеки имело бы куда более серьёзные последствия, чем исчезновение отдельных элементов интерфейса.

Чен неоднократно отмечал, что совместимость — одна из причин, по которым Windows сохраняет устаревшие решения. Ещё в 2003 году он писал, что крупные компании неохотно принимают изменения интерфейса: переобучение тысяч сотрудников может стоить миллионы. В случае системных файлов цена отказа от привычных имён была бы ещё выше.

Источник