Главная » Софт » [Перевод] Ошибка, которая сохранилась в Windows с 1974 года

[Перевод] Ошибка, которая сохранилась в Windows с 1974 года

Сейчас 2018 год, а это сообщение — ошибка, сохранившаяся с 1974 года. Ограничение, которое встречается даже в самой последней Windows 10, появилось ещё ДО «ЗВЁЗДНЫХ ВОЙН». Баг древний как Уотергейт.

пер.). В те времена только изобрели штрих-коды, в Америке работала лишь одна телефонная компания, Тед Банди ещё бегал на свободе, а рекорд Бейба Рута по хоум-ранам стоял последние дни.
Когда появился этот баг, по телевизору ещё не показывали «Колесо Фортуны» (российский аналог: «Поле чудес», 1990 год — прим. пер.). Никто не видел «Шоу ужасов Рокки Хоррора», а Стивен Спилберг снял несколько телефильмов и один полноэкранный фильм, провалившийся в кинопрокате (но картина «Дуэль» получила несколько кинопремий — прим. пер.). По NBC не показывали «Субботним вечером в прямом эфире», а «Эдмунд Фицджеральд» ещё перевозил железную руду (гигантский сухогруз с экипажем затонул 9 ноября 1975 года — прим.

КОГДА ИЗОБРЕЛИ ЭТУ ГЛУПУЮ «ФИЧУ», НА ЭКРАНЫ ТОЛЬКО ВЫШЛА ВТОРАЯ ЧАСТЬ «КРЁСТНОГО ОТЦА».

В то время уже пять лет как вышел Unix с хорошей идеей «всё является файлом», что открывало дверь для множества возможностей: запись в сокеты, конвейер, консоль и прочее с теми же командами и инструкциями. Так почему это произошло?

Она позволяет классные вещи, такие как копирование данных с последовательного порта в текстовый файл или печать текстового файла прямо из командной строки! Идею реализовал Гэри Килдалл в CP/M в 1974 году.

Вы можете получить бесконечный поток нулей из /dev/zero, случайные байты из /dev/random и т.д.! В Unix это делается через специальные файлы, существующие в специальных папках, как /dev/tty для консоли или /dev/lp0 для первого принтера.

В лучшем случае у вас есть 8-дюймовый дисковод для гибких дисков. Но вот проблема: CP/M предназначена для 8-битных компьютеров с небольшим объёмом памяти и без жёстких дисков. Они вам не понадобятся. Какие директории? Просто используете разные диски.

То есть они просто повсюду. Но без директорий вы не можете поместить свои файлы в каталог /dev/. TXT, что копирует foo.txt в «файл» LST, который является принтером. Так что если вам нужно распечатать файл foo.txt, вводим команду PIP LST:=FOO. Всё просто. И это работает везде, потому что нет никаких директорий!

Тут проблема: программы любят добавлять к файлам свои расширения. Но как насчёт расширений? Но программа может попытаться поставить . Поэтому если программа говорит «Введите имя файла, чтобы сохранить листинг», вы указать LST для распечатки или PTP для выбивания на перфоленте (потому что это 1974 год, помните?). LST. TXT в конце имени файла! TXT — это же не принтер, верно?

Хак всё равно работает. Неа. TXT или CON. Специальные устройства транслируются на все расширения, так что CON зарезервировано для клавиатуры даже в случае CON. BUG. WAT, или CON.

Это реальный хак, но он нужен только некоторым маленьким микрокомпьютерам с 4 КБ оперативной памяти, кого это волнует? Да уж.

Это была одна из основных ОС для бизнеса. Операционка CP/M получила широкое распространение в конце 70-х и начале 80-х. Она определила стандартный интерфейс, так что вы могли написать код CP/M на NorthStar Horizon — и запустить его на Seequa Chameleon.

Отсутствие универсального графического стандарта не позволяло писать для него много игр (хотя есть релизы Infocom), так что стандарт использовался в основном в деловой среде.

Но рынок был большой: естественно, IBM хотела его охватить для нового проекта под названием «PC», который они делали в начале 1980 года.

Но CP/M для x86 появилась только через 6 месяцев после запуска IBM PC… и стоила $240 против $40 для DOS. IBM намеревалась выпустить IBM PC с несколькими операционными системами и ожидала, что CP/M станет «основной».

MS купила проект Тима Патерсона и развила его в PC-DOS (который позже переименуют в MS-DOS, если вы не в курсе). Таким образом, подавляющее большинство пользователей в конечном итоге купили Microsoft PC-DOS — новую версию операционной системы, изначально разработанную компанией Seattle Computer Products.

Её написали по-быстрому, потому что CP/M ещё не вышла под x86, и QDOS пыталась преодолеть некоторые ограничения CP/M. Система Тима Патерсона называлась QDOS (Quick and Dirty Operating System, «быстрая и грязная операционная система»). Эта система определённо во многих отношениях копировала CP/M.

Таким образом, в QDOS и PC-DOS 1. Среди прочих была позаимствована концепция специальных файлов и отсутствие каталогов, потому что это была полезная функция CP/M. 0 тоже есть AUX, PRN, CON, LPT и т.д.!

0, выпущенной в 1983 году для нового IBM XT, компания Microsoft значительно обновила PC-DOS. Для PC-DOS 2. Нужно ведь навести порядок в куче файлов на огромном жёстком диске 10 МБ, очевидно! В IBM XT имелся жёсткий диск, поэтому в PC-DOS добавили поддержку каталогов.

0 двумя годами ранее. Но вот проблема: пользователи уже используют эти специальные файлы с момента выпуска PC DOS 1. В продакшн ушли пакетные файлы. Написано программное обеспечение с их поддержкой!

С появлением директорий Microsoft теперь могла сделать папку C:\DEV… но не сделала.

Специальные файлы теперь могут быть в ЛЮБОМ КАТАЛОГЕ и С ЛЮБЫМ РАСШИРЕНИЕМ. Не в последний раз Microsoft пожертвовала здравым смыслом ради обратной совместимости. Так что ваша команда DIR > LPT для печати листинга файлов продолжит работать в C:\DOS, как она работала в A:\.

0… Но Windows 95 построили поверх DOS. Конечно, мы не запускаем DOS 2. Windows 95 больше нет! Естественно, она унаследовала это поведение (как и Windows 1/2/3 ранее). Текущая ветвь Windows основана на Windows NT, а не Win95.

Так что эти специальные файлы всё ещё работают, СПУСТЯ СОРОК ЧЕТЫРЕ ГРЁБАНЫХ ГОДА. Однако Windows NT стремилась сохранить совместимость с программами DOS/Windows, поэтому XP объединила две ветви.

Откройте Проводник, создайте новый текстовый файл и назовите его con.txt, aux.txt или prn.txt. Можете сами попробовать!

Вам скажут ИЗВИНИ, ДРУГ…

Гэри Килдалл позаимствовал отличную идею из Unix и приспособил её для микрокомпьютеров с 4 КБ памяти без директорий — это случилось так давно, что у родившихся тогда детей уже могут быть свои дети, которые имеют право покупать алкоголь, но мы по-прежнему не имеем права назвать файл con.txt.

Microsoft приводит полный список запрещённых названий: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9.

Это было весело даже в 1995 году, потому что багу исполнился 21 год! Для ещё большего кайфа, попытка доступа к C:\con\con (или C:\aux\aux) на win95 мгновенно покажет синий экран. Представьте, что какая-то ошибка сохраняется настолько долго?

Бонус: вот фотография Тима Патерсона на VCF:W в августе этого года, он рассказывает об истории DOS.

Эти имена специальных устройств реализуются на уровне ОС, а не на уровне файловой системы. Если вам интересно, как у меня появился «запрещённый» файл, который нельзя скопировать, то скажу. Таким образом, это совершенно допустимые имена файлов NTFS, а я использовал диск NTFS под Linux.

H в комплекте OpenGL. Похоже, что OS/2 тоже не реализовала эти специальные имена, потому что на одном из дисков от IBM есть файлы AUX.

Так что сегодня я попытался сделать резервную копию этого диска NTFS на основной ПК и ОП-ПА, НЕВОЗМОЖНО СКОПИРОВАТЬ ВСЕ ФАЙЛЫ ИЗ-ЗА БАГА СТАРШЕ, ЧЕМ БОЛЬШИНСТВО ЧИТАТЕЛЕЙ ЭТОЙ СТАТЬИ.

Несколько примечаний:

CP/M на самом деле не использовала эти специальные имена так просто, как я описал. 1. На самом деле они должны сопровождаться двоеточием, как имена дисков, то есть PRN: — это принтер, PRN — нет. Похоже, что я или не знал, или забыл об этом факте.

CP/M не реализовала их на уровне ОС, как в DOS! 2. Поэтому там не работал трюк DOS сохранения в файл PRN. Они были просто включены в PIP, команду копирования файлов. Я не имел в виду, что CP/M так делала, а только DOS, но видимо не ясно выразился. TXT с автоматической печатью.

В PC DOS 1. 3. Забыл об этом. 0 на самом деле не было редиректов или конвейера, так что вы не сможете сделать такой редирект, как я предложил. 0 в 1983 году. Их добавили в PC DOS 2. 0 поддерживала копирование в/из специальных файлов, поэтому общий тезис правильный, даже если пример неудачный. Хотя PC DOS 1.

Не ожидал, что она так взорвётся, я просто накропал пару абзацев, когда пришёл домой сильно уставший и увидел сообщение об ошибке из-за бага 44-летней давности. В любом случае, спасибо за отклики на эту статью!

Обратная совместимость, в общем, хорошая вещь. И если что, я не собирался кричать «Windows SUCKS». На самом деле, я хотел бы больше обратной совместимости, а не меньше.

0 SSD на другой SSD в Windows 10. Но меня просто поразил этот баг из древности, который выскочил во время копирования с USB 3.

Это как будто живёшь на космической станции — а тут появляется лошадь.
tl; dr:

Your browser does not support HTML5 video.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Получаем музыку Вк через сторонний API

В этот раз дело начиналось после закрытия методов audio в методе execute. Я решил посмотреть, как получают музыку сайты, которые предоставляют возможность ее скачать. Меня заинтересовал сайт vrit.me. Я залез во вкладку network и увидел интересный запрос: То есть, можно ...

Все, что нужно знать о стрессе и сильных эмоциях

Под катом — цикл из 3-х видео и текстовых версий к ним. Причина внутри нас. Главное — стресс вызван не внешними событиями. Мы можем управлять этим процессом, потому что он основан на нашем опыте. Внутри каждого существует процесс, который отвечает ...