Win32s

Win32s was intended as a partial implementation of the Win32 Windows API as it existed in early versions of Windows NT.

The "s" in Win32s signifies subset, as Win32s lacked a number of Windows NT functions, including multi-threading, asynchronous I/O, newer serial port functions and many GDI extensions. This generally limited it to "Win32s applications" which were specifically designed for the Win32s platform, although some standard Win32 programs would work correctly, including Microsoft's 3D Pinball Space Cadet, Windows 95's included applets, and Office 95. Early versions of Internet Explorer (up to Version 5) were also Win32s compatible, although these also existed in 16-bit format. Generally, for a 32-bit application to be compatible with Win32s, it had to not use more than 16MB of memory or any extended features such as DirectX.

Win32s inherits many of the limitations of the Win16 environment. True Win32 applications execute within a private virtual address space, whereas Windows 3.x used an address space shared among all running applications. An application running on Win32s has the shared address space and cooperative multitasking characteristics of Windows 3.1. Consequently, for a Win32 application to run on Win32s, it must contain relocation information.

A technique named thunking is fundamental to the implementation of Win32s as well as Chicago-kernel operating systems, which are Windows 95, Windows 98, and Windows ME. However, allowing user-level thunking greatly complicates attempts to provide stable memory management or memory protection on a system-wide basis, as well as core or kernel security—this allows poorly written applications to undermine system stability on Win32s, as well as the Chicago-kernel systems. The stability and security Windows NT can offer is partially based on thunking being illegal, except thunks from Win16 to Win32—the CPU must remain in protected mode at all times. Windows XP and later 32-bit versions of Windows transparently provide a virtual machine for running Win16 applications, although this feature was removed from 64-bit versions of Windows.