A retro pixel-art space shooter runs in a classic window on a Windows 11 desktop.
Windows 11 has no way to run 16-bit Windows programs. Anything built for Windows 1.x through 3.1 hits a wall on a 64-bit PC. A free open-source project called winevdm, also known as OTVDM, is a workaround. GIGAZINE walked through it on November 5, 2026, running a 1991 shooter on Windows 11. It is a useful tool for the right job. It is also not a time machine.

A retro pixel-art space shooter runs in a classic window on a Windows 11 desktop. Why 16-bit apps die on 64-bit Windows​

Microsoft's NTVDM is the built-in component that once ran these programs. 64-bit operating systems have no NTVDM support. Microsoft's compatibility documentation explains that NTVDM dates to 1993 and covers only IA-32 editions of Windows NT. It was never part of the 64-bit versions.

Microsoft says NTVDM is a Feature on Demand supported only on x86 Windows. It is not supported on x64 or ARM, which cannot run 16-bit x86 code of any kind, DOS programs included.

Microsoft also treats NTVDM as maintenance-mode technology. It warns of possible security risks and recommends turning it off in all enterprise environments. That guidance covers NTVDM, not OTVDM. It still sets the tone for anyone running decades-old code.

One technical explanation from a third-party guide says the reason is CPU architecture. The x86-64 CPU cannot drop into the virtual-8086 mode those programs need while running in 64-bit long mode. A related explanation says the Local Descriptor Table can't be modified on 64-bit systems. Either way, no compatibility-mode checkbox will fix it.

What winevdm does​

Winevdm does not install Windows 3.1 inside your PC. It ports Wine's 16-bit Windows support to run Windows 1.x, 2.x, 3.0 and 3.1 applications on 64-bit Windows. One description says it pairs a Win16 API translation layer with an MS-DOS player and a MAME-derived 80386 CPU core. GIGAZINE says it converts old Windows API calls into 32-bit equivalents.

The project is licensed under GPL-2.0 and carries about 3.7k stars on GitHub. The project's description matches the scope above: Windows 1.x, 2.x, 3.0 and 3.1 on 64-bit Windows.

Adafruit's write-up notes two integration tricks:

  • It hooks the mechanism Windows uses to substitute an alternative installer when it detects a 16-bit one.
  • It redirects settings files that old programs try to write into the Windows folder, which modern Windows blocks.

Step-by-step: the GIGAZINE test​

GIGAZINE's demonstration used Windows 11. Treat it as one worked example, not a guarantee.

  1. Get the release. Download the ZIP from the project's official GitHub releases page. GIGAZINE reported v0.9.0 as the latest at the time, in a file named otvdm-v0.9.0.zip. The releases page also offers otvdm-for-old-windows-v0.9.0.zip, aimed at ReactOS and Windows versions before Vista and Server 2008. Check the page for the current version before downloading.
  2. Extract it. Use Windows' built-in ZIP handling. GIGAZINE put the folder at C:\otvdm, but the location is flexible.
  3. Add a test app. GIGAZINE used the 1991 game Hyperoid. It extracted the game and placed the whole folder under C:\otvdm, giving C:\otvdm\hyperoid\.
  4. Launch the loader. Run otvdmw.exe. A file picker appears. Choose HYPEROID.EXE and click Open. One community guide describes otvdmw.exe as the file-dialog launcher, while otvdm.exe takes the program's path directly. Dragging an executable onto the loader also works.
  5. Fix a missing runtime if needed. If Windows reports that VCRUNTIME140.dll is missing, install the 32-bit Visual C++ Redistributable. One community guide specifies the Visual Studio 2017 flavor, 32-bit. Get it from Microsoft, not from a random download site.
  6. Confirm success. In GIGAZINE's test, Hyperoid started and was playable.

Optional: double-click integration​

The package includes an install shortcut. You can also right-click install.inf and choose Install. After registration, you can double-click a 16-bit EXE without launching winevdm first.

The project's install.inf shows what this does. It writes an OTVDM entry under SOFTWARE\Microsoft\Windows NT\CurrentVersion\NtVdm64 in the registry. That entry's command line calls OTVDM. A comment in the file says you can change the mapped executable from otvdm.exe to otvdmw.exe to hide the console window.

One guide says this does not replace all EXE handling in Windows. It only intercepts unsupported 16-bit executables.

For cleanup, GIGAZINE says the included uninstall.reg removes the registered settings. Given that this edits the system registry under HKLM, a few precautions make sense:

  • Read the INF before you apply it.
  • Back up or create a restore point first.
  • Don't do this on a managed work machine without IT approval.

Tuning with otvdm.ini​

The project's otvdm.ini is mostly commented out. Delete the leading semicolon on a line to enable it. Documented options include:

SettingWhat it doesDefault
WINVERWindows version reported to the app (example: 3.1)3.95
EnumFontLimitationLimits fonts shown to apps that choke on many fonts0
EnableVisualStyleTurns on visual styles; the file warns it significantly affects compatibility0
WINDIRPath of the redirected Windows directory.\WINDOWS
EnableRegistryRedirectionRedirects registry operations to HKCU\Software\otvdm0
ForceSingleProcessorHelps programs needing tight sync between processes0
PeekMessageSleepAdds sleep for programs that poll the message queue in a tight loop0

The file also documents a vm option. It selects the x86 engine. The default software emulator is described as the slowest but most compatible and stable. Hypervisor-based options need extra drivers or Windows Hypervisor Platform. The file calls the Windows Hypervisor Platform route the most stable of the hypervisor options. It also says that route may not work on every Windows version.

These are tuning knobs for a specific misbehaving program. They are not guaranteed fixes. Change one setting at a time so you know what helped.

How well does it actually work?​

Compatibility is app-by-app. The v0.9.0 release notes on GitHub list a long run of closed issues. They include games that crash at launch, installers that complain about the Windows version, dialogs drawn wrongly, and printing faults. Some entries are fixed, which shows active maintenance. The list also shows how varied the failures are.

User testimony is mixed in the encouraging direction. GIGAZINE cites a Hacker News commenter who has used Fluke 16-bit measurement software on 64-bit Windows for several years. Another commenter noted that backward compatibility has limits. That is anecdote, not a controlled test.

Microsoft's own tech community has published a proof-of-concept that ran Visual Basic 3.0 on Windows 10 64-bit using this emulator. The author said Microsoft recommends virtualization or 32-bit machines for 16-bit apps.

Practical advice​

  • Hobbyists and retro fans: This is a convenient route for classic games and utilities. Test one program first.
  • Business or lab use: Keep the original data and a backup. Validate outputs against known-good results before trusting anything. Equipment with serial ports or custom drivers is the riskiest case, because winevdm is a compatibility layer and not a hardware environment.
  • IT admins: This is unsupported by Microsoft. Microsoft's NTVDM caution about security does not transfer directly to OTVDM, but running unmaintained legacy executables and installers is still a risk. Treat old installers as untrusted. Involve security staff before enabling shell integration.
  • If it fails: A 32-bit Windows install with NTVDM, a virtual machine running the original OS, or an app modernization effort remains the fallback. Microsoft's guidance is to update apps so they no longer depend on NTVDM.
  • Antivirus noise: The project's issue history includes reports of Windows Defender and other antivirus flagging past downloads. Download only from the official repository and read any warnings carefully.

The bottom line​

Winevdm fills a real gap that Microsoft has deliberately left open on x64 and ARM. For many Windows 3.x programs, it takes you from "This app can't run on your PC" to a working window in a few minutes. It is a best-effort compatibility layer, not a supported platform. Test, back up, and keep expectations in check.

 

References

  1. 'winevdm on 64-bit Windows' allows you to run 16-bit Windows applications from the Windows 3.1 era on 64-bit versions of Windows. - GIGAZINE GIGAZINE 2026-11-05T14:00:00+00:00
  2. winevdm/install.inf at master · otya128/winevdm · GitHub github.com
  3. github.com github.com