|Initial release||July 27, 1993|
|Operating system||Microsoft Windows|
|License||Proprietary commercial software|
In computing, Windows on Windows (commonly referred to as WOW) was a compatibility layer of 32-bit versions of the Windows NT family of operating systems since 1993 with the release of Windows NT 3.1, which extends NTVDM to provide limited support for running legacy 16-bit programs written for Windows 3.x or earlier. There is a similar subsystem, known as WoW64, on 64-bit Windows versions that runs 32-bit programs.
This subsystem is not available in 64-bit editions since Windows 11 (including Windows Server 2008 R2 and later, which only have 64-bit editions) and therefore cannot run 16-bit software without third-party emulation software (e.g. DOSBox). Windows 10 is the final version of Windows to include this subsystem.
This subsystem has since been discontinued, as Windows 11 dropped support for 32-bit processors.
Many 16-bit Windows legacy programs can run without changes on newer 32-bit editions of Windows. The reason designers made this possible was to allow software developers time to remedy their software during the industry transition from Windows 3.1x to Windows 95 and later, without restricting the ability for the operating system to be upgraded to a current version before all programs used by a customer had been taken care of.
The Windows 9x series of operating systems, reflecting their roots in DOS, functioned as hybrid 16- and 32-bit systems in the sense that the underlying operating system was not truly 32-bit, and therefore could run 16-bit software natively without requiring any special emulation; Windows NT operating systems differ significantly from Windows 9x in their architecture, and therefore require a more complex solution. Two separate strategies are used in order to let 16-bit programs run on 32-bit versions of Windows (with some runtime limitations). They are called thunking and shimming.
Main article: Thunk § Interoperability
The WOW subsystem of the operating system clarification needed] in order to provide support for 16-bit pointers, memory models and address space.[
All 16-bit programs run by default in a single virtual DOS machine with shared memory space. However, they can be configured to run in their own separate memory space, in which case each 16-bit process has its own dedicated virtual machine. The separate memory space increases system stability by preventing buggy 16-bit programs from interfering with one another, at the expense of reduced 16-bit inter-process communication and increased memory utilization.
The WOWEXEC.EXE process on a Windows NT system facilitates Windows-on-Windows. In addition to Windows-on-Windows emulating the Windows 95 and Windows 98 kernels, the WIN.COM file emulates a Windows 3.x kernel for NTVDM, which runs the 16-bit DOS-based Windows applications on Windows NT.
Main article: Shim (computing)
Application compatibility issues, notably around long filenames, multiple users and the concept of least privilege, may prevent some applications from working. For example, they may incorrectly assume full write access to the whole file system whereas NTFS security is in place.
When the Windows 95 line of operating systems was designed, a key requirement was for the file system to keep backward compatibility with 8.3 filenames to allow legacy applications to continue to work on the platform. Windows 95 and later operating systems therefore support a compatibility mode whereby both a long filename and a short filename are stored in the directory entry.
Furthermore, legacy applications that attempt to access hardware directly cannot do so in user mode. Legacy applications may also fail if system configuration files from the DOS and Windows 9x era are not present in Windows NT based kernels, hence the reason for zero-length versions of files like AUTOEXEC.BAT and CONFIG.SYS having to be carried forward on operating systems that do not use them.
A considerable number of shims are present in the application compatibility layer of later versions of Windows to intercept and modify API calls made by legacy applications that were written with a different set of assumptions and operating system best practices in mind. These fixes are updated from time-to-time as issues are discovered in popular legacy applications that are still in use.