Win32s — это 32-разрядная среда выполнения приложений для операционных систем Microsoft Windows 3.1 и 3.11 . Это позволило некоторым 32-битным приложениям запускаться в 16-битной операционной системе с использованием преобразователей вызовов . Бета-версия Win32s была доступна в октябре 1992 года. [1] Версия 1.10 была выпущена в июле 1993 года [2] одновременно с Windows NT 3.1 .
Win32s задумывался как частичная реализация Windows API Win32 , существовавшего в ранних версиях Windows NT . [3]
Буква «s» в Win32s означает подмножество , поскольку в Win32 отсутствовал ряд функций Windows NT, включая многопоточность , асинхронный ввод-вывод , новые функции последовательного порта и многие расширения GDI . Обычно это ограничивало его «приложениями Win32s», которые были специально разработаны для платформы Win32s, [4] хотя некоторые стандартные программы Win32 работали корректно, включая Microsoft 3D Pinball Space Cadet и некоторые апплеты, включенные в Windows 95. [5] Ранние версии Internet Explorer (до версии 5) также были совместимы с Win32, хотя они также существовали в 16-битном формате. [5] Как правило, чтобы 32-разрядное приложение было совместимо с Win32, оно не должно было использовать более 16 МБ памяти или какие-либо расширенные функции, такие как DirectX .
Win32s наследует многие ограничения среды Win16. Настоящие приложения Win32 выполняются в частном виртуальном адресном пространстве, тогда как Windows 3.x использовала адресное пространство, совместно используемое всеми запущенными приложениями. Приложение, работающее на Win32s, имеет общее адресное пространство и характеристики совместной многозадачности Windows 3.1. Следовательно, чтобы приложение Win32 могло работать на Win32, оно должно содержать информацию о перемещении .
Техника, называемая преобразованием, является фундаментальной для реализации Win32, а также операционных систем с ядром Chicago, таких как Windows 95 , Windows 98 и Windows ME . Однако разрешение анализа на уровне пользователя значительно усложняет попытки обеспечить стабильное управление памятью или защиту памяти на общесистемной основе, а также безопасность ядра или ядра — это позволяет плохо написанным приложениям подрывать стабильность системы на Win32, а также на Chicago -системы ядра. 32-разрядные версии Windows NT прозрачно предоставляют виртуальную машину для запуска приложений Win16, хотя эта функция была удалена из 64-разрядных версий Windows.
Win32s-совместимые приложения можно создавать с использованием инструментов разработки Microsoft, а также, по крайней мере, Borland C++ 4.x и Symantec C++ (теперь Digital Mars C++). Однако некоторые параметры компиляции программы (например, информация о перемещении EXE) и библиотеки DLL, которые были неявно предусмотрены в Windows NT 3.1, должны быть включены в приложение в Win32s. Microsoft прекратила поддержку Win32 в Visual C++ версии 4.2, выпущенной в конце 1996 года.
Win32s включил реализацию карточной игры FreeCell в качестве примера приложения за пару лет до того, как игра стала знаменитой благодаря включению в Windows 95 .
Warcraft II: Tides of Darkness , игра для DOS, включала редактор уровней, для запуска которого требовалась Win32. Редактор использовал графический интерфейс Windows для отображения больших карт, поскольку графические режимы высокого разрешения уже поддерживались Windows. Для веб-браузера NCSA Mosaic версии 2 также требовалась Win32. [6]
Приложения C# могут быть скомпилированы компилятором CoreRT в код Win32, который принимается компоновщиком Visual C++ 1994 года. Эта комбинация создает исполняемые файлы Win32, которые могут работать в Windows 3.1 с Win32. [7]
Win32 по-прежнему можно найти с помощью поисковых систем; Обычно используется установочный файл PW1118.EXE.
$ sha512sum pw1118.exe 31b532f324a1eebd1073e043e0c81cb131ad40681b1a7e5e73f881369eafa38ba9d91a541d99fd8b96e937f0e93bfd17cf9c26cc77daf8c77 d7c9df803b3aef9
Разработчики должны убедиться, что они устанавливают OLE , если им требуется единообразная обработка буфера обмена. Многие приложения, которым необходимо обеспечить поддержку OLE (т. е. настроить OLE-сервер), необходимо переустановить. Win32s также был включен в некоторые ранние программы Win32.