Введение

Win32s — 32-битная среда выполнения приложений для операционных систем Microsoft Windows 3.1 и 3.11. Она позволяла некоторым 32-битным приложениям работать в 16-битной операционной системе, используя обходные пути вызовов (call thunks). Бета-версия Win32s была доступна в октябре 1992 года. Версия 1.10 была выпущена в июле 1993 года одновременно с Windows NT 3.1.

Понятие и характеристики

Win32s задумывался как частичная реализация Win32 Windows API, существовавшей в ранних версиях Windows NT. Буква "s" в Win32s обозначает "подмножество", поскольку Win32s не поддерживал ряд функций Windows NT, включая многопоточность, асинхронный ввод-вывод, новые функции последовательных портов и многие расширения GDI. Это, как правило, ограничивало его использованием "приложениями Win32s", разработанными специально для платформы Win32s, хотя некоторые стандартные программы Win32 работали корректно, например, 3D Pinball Space Cadet от Microsoft и некоторые апплеты, поставляемые с Windows 95. Как правило, для совместимости 32-битного приложения с Win32s требовалось, чтобы оно не использовало более 16 МБ памяти и не применяло расширенные функции, такие как DirectX. Win32s унаследовал многие ограничения среды Win16. Истинные Win32 приложения выполняются в собственном виртуальном адресном пространстве, в то время как Windows 3.x использовала общее адресное пространство для всех запущенных приложений. Приложение, работающее на Win32s, имеет общее адресное пространство и характеристики совместной многозадачности Windows 3.1. Следовательно, для запуска приложения Win32 на Win32s оно должно содержать информацию о релокации. Техника, известная как thunking, является основополагающей для реализации Win32s, а также операционных систем семейства Chicago, таких как Windows 95, Windows 98 и Windows ME. Однако разрешение thunking на уровне пользователя значительно усложняет обеспечение стабильного управления памятью или защиты памяти в масштабе всей системы, а также безопасности ядра – это позволяет плохо написанным приложениям нарушать стабильность системы как в Win32s, так и в системах семейства Chicago. 32-битные версии Windows NT прозрачно предоставляют виртуальную машину для запуска Win16 приложений, хотя эта функция была удалена из 64-битных версий Windows.

Совместимость

Совместимые с Win32 приложения можно было создавать с помощью инструментов разработки Microsoft, а также, как минимум, Borland C++ 4.x и Symantec C++ (теперь Digital Mars C++). Однако некоторые параметры компиляции программ (например, информация о релокации EXE) и DLL, которые подразумевались в Windows NT 3.1, необходимо было включать в приложение для Win32s. Microsoft прекратила поддержку Win32s в версии Visual C++ 4.2, выпущенной в конце 1996 года. Win32s включал в себя реализацию карточной игры FreeCell в качестве демонстрационного приложения, за несколько лет до того, как игра стала популярной благодаря включению в Windows 95. Warcraft II: Tides of Darkness, игра для DOS, включала редактор уровней, для работы которого требовался Win32s. Редактор использовал графический интерфейс Windows для отображения больших карт, поскольку графические режимы высокого разрешения уже поддерживались Windows. Веб-браузер NCSA Mosaic версии 2 также требовал Win32s. Приложения на C# можно скомпилировать компилятором CoreRT в Win32-код, который принимает компоновщик Visual C++ 1994 года. Эта комбинация создает Win32-исполняемые файлы, которые могут работать в Windows 3.1 с Win32s.