В Windows 11 до сих пор присутствует диспетчер памяти из Windows 95

6 часов назад 3

Время на прочтение3 мин

Охват и читатели3

Актуальная Windows 11 до сих пор использует фрагмент кода Windows 95, вышедшей более 30 лет назад. Исправление совместимости под названием EmulateHeap предоставляет старым приложениям доступ к менеджеру памяти Windows 95. Этот механизм можно найти и в Windows 11 26 H2.

История совместимости старых программы в Windows началась с оригинальной SimCity. Игра Maxis работала в Windows 95 только благодаря коду, который корпорация написала специально для SimCity. Приложения запрашивают у Windows память во время работы и освобождают её после завершения. Если приложение продолжает обращаться к памяти после её освобождения, это баг, известный как use‑after‑free. Именно такой баг был в оригинальной версии SimCity для Windows 3.x.

В 2 000 году эту историю рассказал сооснователь Stack Overflow и бывший инженер Microsoft Джоэл Спольски, ссылаясь на Джона Росса, создавшего ту версию SimCity. Последний случайно допустил ошибку, из‑за которой игра считывала память, которую сама же только что освободила. В Windows 3.x игра работала нормально, поскольку память после освобождения никуда не исчезала, объяснил Спольски.

Когда SimCity перестала работать в бета‑версиях Windows 95, Microsoft добавила специальный код, который искал запущенную SimCity. Если операционная система находила игру, менеджер памяти переходил в особый режим и не освобождал память сразу. Microsoft пошла на этот шаг, не дожидаясь исправленной версии градостроительного симулятора.

Обходное решение для SimCity было единичным случаем, но другие старые приложения также имели похожие зависимости. В 2 010 году инженер Microsoft Рэймонд Чен объяснил, что некоторые программы использовали особенности работы кучи в Windows. Например, приложения обращались к освобождённой памяти, рассчитывая, что прежние значения сохранятся. 

Однако в более поздних версиях Windows такие приложения стали аварийно завершаться, поскольку там память управляется иначе.

Решением стал EmulateHeap — механизм совместимости, который перенаправляет вызовы API для работы с кучей, в том числе HeapCreate, LocalLock и GlobalReAlloc, на альтернативные реализации, воспроизводящие поведение Windows 95. Microsoft просто взяла копию исходного кода Windows 95 Heap Manager, перекомпилировала его и добавила в инфраструктуру совместимости, рассказал Чен.

По словам Чена, старый код загружается с жёсткого диска только тогда, когда EmulateHeap включён для конкретного приложения. При этом ПК не запускает Windows 95 в фоновом режиме.

EmulateHeap можно найти в утилите Compatibility Administrator, которая перечисляет исправления совместимости, входящие в состав Windows. Microsoft описывает исправление совместимости как «небольшой фрагмент кода, который перехватывает вызовы API из приложений». Compatibility Administrator входит в Windows Assessment and Deployment Kit (ADK).

Чтобы обнаружить EmulateHeap на своём ПК, нужно выполнить следующие шаги:

  1. Загрузить Windows ADK с сайта Microsoft и запустить установщик.

  2. Выбрать из списка компонентов только Application Compatibility Tools и завершить установку.

  3. Найти в меню «Пуск» Compatibility Administrator и открыть 32-битную версию, поскольку большинство приложений эпохи Windows 95 имели такую архитектуру.

  4. В разделе Custom Databases нужно кликнуть правой кнопкой мыши по New Database, а затем выбрать Create New > Compatibility Mode.

  5. Прокрутить список доступных исправлений совместимости до EmulateHeap.

После выхода Windows 11 22 H2 пользователи сообщали, что в GTA: Vice City пропал звук, а Need for Speed: Most Wanted вылетала при включённом EmulateHeap.

Информационная служба Хабра

Идеи Тома Вуджека об инженерном творчестве

… или как спасти человека, работающего с мыслительным протезом.

Задолго до кембрийского взрыва ИИ канадский дизайнер Том Вуджек показал принципы инженерного творчества на трех простых упражнениях: на башне из спагетти с зефиркой на вершине, на рисунке тоста и на стене со стикерами. Его выступления на TED разошлись по тренингам и стали учебными пособиями для MVP, пилотных проектов, системных карт и стратегических сессий. Увы, сегодня эти практики воспринимаются как карго-культ, и их повторяют как ритуал: подвинул стикер, получил банан процент от KPI. А теория, идеи и история, которые за ними стояли, забываются.

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

Дальше на тренинге обычно смеются, обсуждают командную работу, а потом идут пить кофе. Упражнение сделано, галочка поставлена. Мысль, ради которой его придумали, чаще всего остается на столе вместе с обломками спагетти. 

Сам Вуджек формулирует ее одной фразой: «У каждого проекта своя зефирка». Это допущение, которое никто не проверил и которое обрушит всю конструкцию в последний момент.

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

Недавно Вуджек назвал искусственный интеллект зловещей проблемой. Но что стоит за этой фразой? Луддизм или глубокое понимание основ творческого процесса?

В этой статье я попробую ответить на этот вопрос. Для этого стряхну пыль с трех выступлений Вуджека и посмотрю, что они заложили в современный бизнес и ИТ. А заодно и покажу, что, вернувшись к их сути, мы получаем готовый способ работать с ИИ. Итак, расчехляем виниловые проигрыватели, ставим пластинку Jethro Tull, звоним друзьям и идем на кухню за пачкой макарон. 

Идеи Тома Вуджека об инженерном творчестве

Источник