Skip to content

Comment on Cooperative Linux – running Linux as a Windows driver (2011)parent

Comments

If I understand correctly, this is a limitation of x86_64 backwards compatibility rather than a limitation of Windows. Enough of the 16 bit behavior was preserved in 32 bit protected mode for Win16 apps to run, but nearly all of it doesn't work in 64 bit long mode (things like virtual 8086 mode aren't available in 64 bit mode). There's also all the GDT, LDT, TSS stuff on 32 bit x86 that was either dropped or reduced for x86_64.

Your only option at this point is to use a virtual machine. Intel has supported real mode VMs since Sandy Bridge and I'm not sure when AMD got it, but all of the Zen parts definitely support it.

It was just a choice Microsoft made. Wine happily runs win16 apps on x86_64 Linux.

There was a wine derived thing that used to work on Win64 to run win16 apps, but something in later windows versions broke that.

There was a wine derived thing that used to work on Win64 to run win16 apps

Does that mean winevdm doesn't work anymore?

https://github.com/otya128/winevdm

Oh, I didn't realize they'd worked around MS removing LDT access. They did it by running in an 16bit x86 emulator, which is a pretty big hammer, but I guess win16 apps are old enough that the performance is still more than fine on modern CPUs.

A bigger reason for WoW not being available on 64-bit Windows is that HANDLEs would get truncated in that case, which isn't wanted behavior.

It a limitation of Windows; you can still have 16bit legacy mode code segments on amd64 processors on a 64bit OS. The issue is they exceed the maximum HANDLE table size on 64-bit windows versus what win16 expects.

It was a tradeoff to intentionally break compatibility in a pain point for them where it would be acceptable by their customer base.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.