x86 DOS Microsoft Windows
Чудеса обратной совместимости.
Почему система команд 8086 такая кривая, зачем регистры делятся на две половинки (al, ah, Ы, bh, cl, ch), зачем геморрой с сегментными регистрами и т.д.? Потому что когда Intel разрабатывала 8086, 8-битный процессор 8080 с 64K памяти был популярен и под него было написано много софта (например, Staredit, dBASE). Базовый регистр для адресации памяти у него делился на две половинки. Поэтому система команд 8086 была написана таким образом, чтобы программы под него можно было получить простой перекомпиляцией программ под 8080 — любой команде этого процессора можно сопоставить одну или иногда последовательность из нескольких команд процессора 8086. Это присказка, сказка ниже.
DOS разрабатывался таким образом, чтобы иметь совместимость с программами для CP/M, например, похож формат каталоговой записи, PSP комовских файлов, файлы con, prn, nul, com1, к которым можно приписать любое расширение. Т.е. когда был написан DOS, программное обеспечение под него УЖЕ БЫЛО!
Windows разрабатывался как графическое многозадачное расширение DOS. Из виндов можно было запускать те же самые программы, что и под досом, но с плюшками в виде многозадачности. Опять обратная совместимость не ломалась.
WinAPI Windows NT в целом повторял WinAPI Windows 3.1, разница была только в разрядности некоторых типов (HANDLE, HWND и др.), но программы, работающие и там, и там, писать было можно. Кроме того, в Windows NT есть подсистема, позволяющая запускать досовские и Win16-приложения. Игры, конечно, не запустишь, но всякое корпоративное ПО шло нормально.
Windows 95 разрабатывалась для обеспечения
полной совместимости с DOS, Win16, также поддерживался запуск большинства Win32-приложений из Windows NT. Поэтому вышла такая кривая. Тоже, пользователи, ничего не теряя (запуск досовых и 16-разрядных программ), получали профит, запуская и разрабатывая Win32-приложения (с моделью памяти flat и другими плюшками). Один из примеров совместимости: можно было создать такой ярлык досовской программы (.pif-файл), который при запуске перезагружал бы компьютер, запуская DOS с файлами config.sys и autoexec.bat, указанными в свойствах ярлыка! При последующей перезагрузке снова загружалась Windows.
Даже сейчас в 32-разрядных версиях семёрки и восьмёрки можно ограниченно запускать досовские и Win16-программы.