Почему программное обеспечение Windows 9x может работать в 64-разрядной версии Windows 7?

710
Ed999

В течение многих лет (долгое время после появления Windows XP) я управлял коллекцией старых настольных ПК с Windows 9x. По сути, эти машины были слишком слабыми в своем оборудовании для обновления до XP (и стоили немалых денег), поэтому я продолжал использовать их с их оригинальным программным обеспечением: различные установки Windows 98SE и Windows ME (все работающие как 32-битные версии).

В случае, я никогда не использовал XP. Машины Win9x были настолько надежны, что работали еще долго после появления XP и Vista. Но мне пришлось со временем перейти на 64-битную Windows 7.

Я не собираюсь делать что-то действительно глупое, например, спрашивать, почему такая-то программа не работает на Win7 64bit! :-)

Все без исключения программное обеспечение, которое я запускал на 32-битной Windows 98SE, работало «из коробки» (так сказать) на 64-битной архитектуре Win7 NT. Сегодня я все еще использую различные программы, особенно программы для обработки текста и редакторы HTML, которые я использую регулярно.

Есть ли техническая причина, по которой я никогда не испытывал трудностей, которые я ожидал при запуске программ Windows 9x на 64-битной NT? Мне говорили о настройках «совместимости» в Win7, но мне никогда не приходилось запускать программу в «режиме совместимости».

Я знаю, что Windows 7 хранит 32-разрядные и 64-разрядные программы в разных местах и ​​обрабатывает их по-разному: но я ожидал, что это связано с 32-разрядными и 64-разрядными программами, написанными для Windows 7.

Я удивлен, что 32-битные программы Windows 98, похоже, полностью совместимы с 32-битными программами Windows XP / Vista / 7, и хотел бы понять, почему это так. Неужели нет никакой разницы между ними?

Кроме того, многие из старых программ для Windows 9x были / являются переносимыми. У меня была привычка ставить их на USB-накопители или на рабочий стол Windows 7 и просто запускать их. Я не испытывал никаких проблем. Даже если они не запускаются из папки Program Files. Опять же, я хотел бы понять, почему O / S не возражает против этого с технической точки зрения?

Я делаю что-нибудь небезопасное? Операционная система Windows 7 выглядит очень стабильной, но я хотел бы знать, прошу ли я ее делать то, чего не следует делать.

-1

2 ответа на вопрос

3
Community

Вы должны быть первым пользователем, который жалуется, потому что он / она не имеет никаких проблем вообще. ;)

В то время как основные средства массовой информации пошли на многое, чтобы дать Windows незаслуженную репутацию в области совместимости приложений, факт заключается в том, что Microsoft вложила значительные средства в обратную совместимость, и подавляющее большинство приложений, написанных для Windows 98, все еще можно использовать в Windows 7. Плюс Windows 7 - самая стабильная операционная система, когда-либо разработанная Microsoft. Не делайте ошибок, разница между Windows 7 и Windows 98 огромна, но:

  • Windows 98 использовала богатый Windows API, который Microsoft не переставала переписывать только потому, что! Например, интерфейс для рисования прямоугольника на экране, создания окна или отображения строки меню остается прежним.
  • В Windows 7 реализованы меры, направленные на решение проблем совместимости устаревшего программного обеспечения. Одним из них является виртуализация UAC. Приложения для Windows 98 записывают данные своих приложений в папку установки. Windows 7 не позволяет этого больше; однако для устаревших приложений виртуализация UAC перенаправляет операцию записи данных из папки установки приложения в %LOCALAPPDATA%\VirtualStore.

Приложения эпохи Windows 98, которые больше не работают в Windows 7, включают в себя 16-разрядные приложения (которые не работают в 64-разрядной версии Windows, но иногда работают в 32-разрядной версии Windows) и приложения, которые полагаются либо на хаки, либо на устаревшие службы ОС.

tldr: они поддерживали совместимость API и ABI;) Journeyman Geek 7 лет назад 1
... и реализовал меры совместимости, такие как виртуализация UAC 7 лет назад 0
@FleetCommand: я открыл% LOCALAPPDATA% \ VirtualStore и, что любопытно, папка пуста. В его родительском каталоге,% LOCALAPPDATA%, есть тонна записей, но в \ VirtualStore она равна нулю. Кстати, я был совершенно точен, когда говорил об использовании 32-битного программного обеспечения Win9x, я давно отбросил все оставшиеся унаследованные 16-битные программы. Ed999 7 лет назад 0
Отсутствие 16-битной поддержки связано с решением Intel о том, как долго работает режим, и о том, как он отключает поддержку инструкций, необходимых для работы 16-битных приложений, когда включен длинный режим. Я понимаю, что это случайный фактоид Ramhound 7 лет назад 1
@ Ed999: Опять же, это может быть только хорошо! У вас есть цивилизованные приложения в его нынешнем виде. Конечно, вы упомянули, что «многие старые программы для Windows 9x были / являются переносимыми» и «они не запускаются из папки Program Files». Таким образом, нет виртуализации UAC для файловой системы. (У нас также есть виртуализация UAC для Реестра.) 7 лет назад 1
2
CBHacking

Вы задаете много вопросов здесь, некоторые довольно сложные, но основной ответ - «Microsoft прилагает массу усилий для поддержания обратной совместимости». Честно говоря, лучшим вопросом может быть «почему это не сработает?», Поскольку и Win9x, и NT (включая Win7) используют Win32 API и набор инструкций x86 (64-битные расширения AMD для набора инструкций Intel x86 обратно совместимы; процессор «x64», работающий в 64-битном режиме, также может запускать 32-битные программы).

Наиболее вероятная причина, по которой вещи не будут работать, это просто контроль доступа. Win9x вообще не поддерживает какие-либо средства управления доступом; любая программа может делать все, что захочет. Злонамеренное использование сделало написание вредоносного ПО действительно простым. Используется не злонамеренно, но лениво, это означает, что многие разработчики написали свои программы так, что программы записывали данные в свои установочные папки. Это плохая идея по ряду разных причин, не в последнюю очередь это безопасность; в «настоящей» ОС расположение по умолчанию, в которое устанавливаются файлы, не позволяет лицам, не являющимся администраторами, выполнять запись в файлы, и вы должны работать от имени администратора, за исключением случаев установки или обновления программного обеспечения.

Конечно, вся эта «запись в каталог, из которого вы работаете» - это легко (я говорил, что разработчики были ленивы ...) и да, это также делает программное обеспечение «переносимым» в том смысле, что вы можете его поместить на флэш-накопителе (который обычно также полностью лишен контроля доступа, поскольку они используют варианты файловой системы FAT, а FAT не поддерживает разрешения на доступ к файлам). Запуск программного обеспечения таким образом, является менее безопасным, чем установить его в зону доступа с ограничением и запустить его оттуда (как пользователь без прав администратора), но это, вероятно, хорошо до тех пор, пока вы не поделитесь компьютером с другими людьми.

Что касается того, почему ОС не возражает ... почему вы ожидаете этого? Program Filesэто не особая папка, это просто место, где, по соглашению, вы устанавливаете программы. (На самом деле это действительно глупо условность, потому что некоторые программные перерывы, если вы установите его в папку с пробелами в пути, но, возможно, MS хотел, чтобы разработчики не были достаточно, что ленивыми ...) Единственным особым делом о Program Filesявляется что в 64-битных системах, когда 32-битные процессы запрашивают папку «Program Files», они на самом деле перенаправляются вProgram Files (x86) папку. Помимо этого ... ОС позволяет запускать программы из любого места, к которому у вас, пользователя, есть доступ. Некоторые программы намеренно устанавливаются в вашем профиле пользователя или в собственной папке в корне диска (C:\Python27обычная папка для просмотра на компьютере разработчика). Эти программы работают просто отлично.

Я немного не согласен с вашим мнением о «лени разработчика» - концепции безопасности были неизвестны или не требовались в те времена, и разработчику, как правило, не разрешают тратить много часов на что-то, что считается неуместным. То, что вы делаете, это то же самое, что обвинять людей 17-го века в том, что они не делают улицы достаточно широкими для автомобилей. В противном случае хороший ответ. Aganju 7 лет назад 0
@Aganju: «Неизвестно», только если вы ничего не знали о компьютерном мире, и в этом случае вы, вероятно, не были разработчиком. Основные принципы безопасности в многопользовательской операционной системе восходят к Multics, выпущенному в 1969 году. Unix, более простая (но все же безопасная) ветвь языка, была впервые выпущена в 1973 году и получила широкое распространение в конце 70-х годов. Microsoft сама продала Unix (Xenix), начиная с 1980 года. Семейство Windows NT, во многом обязанное Unix (в том числе в области безопасности), было впервые выпущено в 1993 году (к тому времени существовали Linux, BSD и многие другие * nix ОС). К 1998 году не было оправдания невежеству. CBHacking 7 лет назад 1
Я развивался с 70-х годов, но люди, которые оплачивают счета, не хотели бы слышать о том, чтобы потратить ни копейки на безопасность. Я вижу это изменение только с 2005 года Aganju 7 лет назад 0
@Aganju: Что касается «не требуется», это полностью ложно. Тогда это было так же необходимо, как и сейчас, и это очень необходимо. Win98 (или даже 95, с некоторыми обновлениями после релиза) якобы была многопользовательской системой, несмотря на то, что в ней не было механизма для обеспечения безопасности между пользователями. Не было никакой защиты от вредоносного программного обеспечения (и было * тонны * вредоносного программного обеспечения). Однако предприятия (и некоторые дома) использовали NT, которая имела эти функции. Что касается "много часов", ммм, нет. Писать в `% APPDATA% \ ProgramName \ Filename` не просто, а просто в` Filename`! Чистая лень. CBHacking 7 лет назад 1