Чёрный прямоугольник с мигающим курсором и приглашением набрать команду большинство пользователей называет просто "досом". Вылезает окошко с строкой администратора в современной Windows, и немедленно кто-нибудь говорит: запусти через дос. Эта привычка настолько прочная, что под неё напечатаны горы форумных советов, а между тем фраза технически неверна уже добрых двадцать лет. MS-DOS, реальная операционная система с собственным ядром и собственными правами на железо, ушла из массовой жизни на рубеже двухтысячных. То окно с чёрным фоном, которое люди зовут досом, это cmd.exe, обычная программа под Windows, исполнитель команд, живущий по законам большой системы и не имеющий с древней DOS почти ничего общего, кроме внешности и синтаксиса. Разница между ними не терминологическая придирка, а граница между эпохами, и понять её стоит каждому, кто хочет разбираться в том, как устроен компьютер.
Что такое MS-DOS на самом деле и почему она была полноценной системой
MS-DOS увидела свет 12 августа 1981 года. Когда IBM готовила свой персональный компьютер, корпорация Microsoft выкупила у небольшой фирмы Seattle Computer Products систему 86-DOS, написанную инженером Тимом Патерсоном всего за полтора месяца. Прототип по сути был аккуратным клоном популярной CP/M, перенесённым на процессор 8086, с улучшенной буферизацией дисковых секторов и файловой системой FAT12. Из этих заготовок за считаные недели собрали продукт, который IBM выпустила под маркой PC DOS, а Microsoft продавала другим производителям как MS-DOS.
Назвать её операционной системой не преувеличение. После загрузки MS-DOS целиком управляла машиной: распоряжалась процессором в реальном режиме, вела файловую систему на дискетах и жёстких дисках, принимала команды пользователя, запускала программы. Запущенная программа получала практически неограниченный доступ к компьютеру: могла писать в любой участок памяти, дергать прерывания BIOS, обращаться к диску минуя систему через INT 13h, напрямую дергать видеоадаптер. Система была однозадачной и доверчивой до дна: раз запущено, значит хозяин.
Развитие шло восемнадцать лет: вышло восемь крупных релизов и около двух десятков промежуточных. Система выросла с дискет на жёсткие диски, обучилась работать с CD-ROM и сетями. Последней отдельной коробочной версией стала MS-DOS 6.22, но и после этого система долго служила втихую: под Windows 95 и 98 пряталась MS-DOS 7.0 и 7.1 в качестве загрузчика, а под Windows Me работала версия 8.0, пока в 2000 году эпоха окончательно не завершилась. Официальная поддержка линейки закрылась 31 декабря 2001 года.
Откуда взялся cmd.exe и почему это вообще не DOS
Параллельно с DOS-линейкой Microsoft в начале девяностых строила Windows NT, операционную систему новой архитектуры, от которой ведут род современные Windows. У NT был собственный защищённый режим, многозадачность, разграничение прав, и DOS там не было и в помине. Но командная строка людям нужна, пакетные сценарии накопились, привычки администраторов дорогого стоят. Выходом стал cmd.exe, командный процессор, увидевший свет вместе с первыми NT в 1993 году.
По своей инженерной природе cmd.exe это обычное 32-разрядное приложение Windows, позже 64-разрядное. Оно не управляет железом, не владеет памятью, не говорит с диском в обход системы. Оно живёт под капотом большой Windows NT и пользуется её услугами через Win32 API, как любой другой процесс. Внутри cmd исполняет повторно реализованный словарь команд: copy и dir, ren и del выглядят как старые команды DOS, но реализованы они заново, средствами большой системы.
Отсюда проистекает забавный парадокс. Окно с cmd похоже на DOS не потому, что внутри сидит DOS, а потому, что его написали чтобы оно выглядело как DOS. Это как электромобиль, которому в динамики подают запись звука бензинового мотора: звук тот, принцип другой.
Фундаментальные отличия в устройстве и поведении
Разница между настоящей MS-DOS и командным процессором cmd ложится на несколько уровней сразу, и проще всего разложить её пунктами:
- MS-DOS работает в реальном режиме процессора и сама распоряжается машиной, а cmd.exe это процесс в защищённом режиме, живущий под контролем ядра Windows;
- MS-DOS однозадачна и доверяет программе всё железо, а cmd многозадачен наследованием от NT и ничего не запускает в обход системы безопасности;
- В DOS программы общаются с оборудованием через прерывания BIOS и системные прерывания вроде INT 21h, а в Windows любой процесс просит ядро через API и прямых прикосновений к железу не получает;
- Файловые имена в DOS втиснуты в формат 8.3 без пробелов, а cmd опирается на длинные имена NTFS и плюётся на короткие исторические ограничения;
- Загрузка DOS происходит через CONFIG.SYS и AUTOEXEC.BAT с собственными драйверами устройств, а cmd стартует уже после того, как Windows сама подняла весь свой парк драйверов.
Важно уловить последствия этой разницы. Запустите старинную DOS-программу прямо в cmd, и ничего не произойдёт, если программа привыкла хозяйничать в памяти и железе. Вот почему на 32-разрядных Windows существовал специальный слой совместимости NTVDM, виртуальная машина DOS, внутри которой старые программы действительно получали иллюзию родного режима, доверенность на память и виртуальные прерывания. Сам cmd эту виртуальную машину не использует: ему она без надобности, он и так живой процесс Windows.
Почему синтаксис похож и что cmd унаследовал от command.com
Похожесть двух миров держалась на языке команд и на пакетных файлах. В DOS команды исполнял интерпретатор command.com, в Windows их исполняет cmd.exe, и оба понимают одни и те же базовые глаголы: dir показать файлы, copy скопировать, del удалить, cd сменить каталог. Пакетные файлы с расширением bat сохранили свою грамматику переходов и меток, и простые сценарии из середины восьмидесятых зачастую исполняются в современной Windows без правок.
При этом cmd сильно развил язык по сравнению с command.com. Добавились развесистые ветвления, расширенные формы for и if, отложенное разворачивание переменных, арифметика, смена кодаировок командой chcp и масса мелочей для удобства администрирования. Попытка гонять эти новые обороты на настоящей DOS закончилась бы руганью интерпретатора: язык внешне тот, словарь вырос в разы.
Есть и культурный штрих: в командной строке Windows работает наследие biографии, а не наследие кода. Привычки, мнемоники, даже формат сообщения об ошибке унаследованы от DOS. Из-за этого отличить одно от другого человеку, севшему за клавиатуру после двадцатилетнего перерыва, трудно. Инженер же увидит границу мгновенно, стоит посмотреть, кто загружает процессор, владеет памятью и отвечает за железо.
Где эта граница видна современному пользователю на практике
Историческая близость двух миров до сих пор порождает бытовую путаницу. На 64-разрядных Windows старые DOS-программы не запускаются вообще без эмулятора, потому что слой совместимости туда не попал, и человек, набравший в cmd имя любимой игрушки из девяностых, получает в ответ вежливый отказ системы. А на 32-разрядных машинах он бы, наоборот, получил запуск, но уже не в cmd, а внутри виртуальной машины NTVDM, которую cmd бы просто стартовал как отдельный процесс.
Иногда путаница оборачивается забавными ситуациями в инструкциях. Совет "запусти эту программу из-под чистого доса" в 2020-х означает либо загрузку с флэшки с FreeDOS, либо работу в эмуляторе вроде DOSBox, и совершенно точно не означает двойной щелчок по cmd на рабочем столе. Значит, при чтении старинных руководств стоит помнить: если в рецепте упомянуты загрузочная дискета, драйвер мыши в CONFIG.SYS, EMM386 или try_wait циклы для конфигурации джойстика, это текст из мира настоящей DOS, и повторять его на современной Windows бессмысленно.
Как MS-DOS выглядела в быту и почему про неё до сих пор помнят пароли и команды
Для миллионов людей восьмидесятых и начала девяностых DOS была не предметом споров инженеров, а обыденным закатом рабочего дня. Чёрный экран после старта машины, бегущая строка памяти, приглашение C:\>, и дальше человек сам командовал: cd к нужному каталогу, запуск любимой программы по имени её exe-шника, копирование с дискеты на дискету, форматирование с опасной командой format. Для кого-то это были страх и трепет перед кажущейся пустотой, для кого-то настоящая свобода: никаких лишних окон, только приказ и его исполнение.
На той ништяшке выросло поколение пользователей с особыми привычками. Они помнят, как выглядит дерево каталогов по команде tree, сколько памяти показывает mem, как спасает редактирование autoexec.bat после того, как какая-то программа испортила загрузку. Их руки до сих пор помнят F3 как повтор команды и F8 как безопасный вариант загрузки. Для такого человека современный cmd никакой не "псевдо-дос", а просто родная командная панель, и с этой пользовательской счёткой трудно спорить, потому что язык действительно пережил свою ОС.
Интересно наблюдать, как музейная жизнь системы позже расправилась со статусом: в 2014 году компания официально обнародовала исходные коды ранних версий MS-DOS для музея компьютерной истории, а в 2018-м повторила жест уже под свободной лицензией MIT. То есть сегодня любой желающий может легально посмотреть, как устроена первая массовая дисковая система персоналок, и даже собрать её из исходников. Подобной судьбе позавидует не каждый продукт.
Ещё одна грань различия, о которой вспоминают редко
Существует и совсем прозаический контраст, который заметен только тем, кто пробовал работать с обеими системами подряд: цена ошибки. В DOS команда выполнялась сразу и без анестезии: набрал del . не в том каталоге, получил урок жизни без корзины и без окон подтверждения. Формат дискеты запускался по одной букве диска и одной команде. Прямой доступ к железу означал, что глючная программа могла поцарапать таблицу разделов диска, и никакого защитника у вас не было.
cmd под Windows живёт в другой вселенной рисков: действия ограничены правами пользователя, спасительная корзина существует, системные папки защищены, а самые опасные вещи требуют повышения до администратора. Это не снисходительность интерфейса, а прямое следствие архитектуры: процесс-подчинённый в защищённом режиме не может наворотить того, на что имела право программа-хозяйка реального режима. Пожалуй, нет лучшего живого примера того, как эволюция операционных систем обменивала прямоту власти на предсказуемость и сохранность данных.
Урок раздвоения для понимания эволюции систем.
Из противопоставления MS-DOS и cmd вытекает простая, но полезная формула: имя и облик не равны сущности. Программа может целиком разделять внешность предшественника, повторять его команды и файлы, и при этом быть совершенно другим существом по устройству и полномочиям. Восьмидесятые дали нам однозадачную DOS с прямыми руками в железо, девяностые добавили к ней графическую оболочку, а тысячные оставили от неё только оболочку командной строки поверх мощной системы NT. Слои накидывались один на другой, и граница между "системой" и "программой внутри системы" пролегла ровно там, где раньше одно и другое были одним целым.
Для того же, кто обслуживает технику или пишет сценарии, вывод практический: cmd.exe это полноценный инструмент современной Windows со своим щедрым синтаксисом и безупречной легальностью, а MS-DOS это исторический артефакт, полезный музеям, энтузиастам и эмуляторам. Оба они чёрные прямоугольники с курсором, но один из них дышит полномочиями операционной системы, а второй дышит ностальгией по ней.
Присмотритесь к этой парочке в следующий раз, когда откроете окно командной строки: за привычным шрифтом и знакомым приглашением трудится вполне современный инструмент, у которого просто великая родословная. Умение отличать родословную от существования делает работу с техникой честнее: вы перестаёте благодарить команду за несуществующий DOS и начинаете видеть за ней настоящую Windows, которая эту команду исполняет.