Windows 1.0 emulator
copy.sh
copy.sh
This has been done with abandoned games to fix bugs and compatibility issues, ex. Forgotten Empires (the mod)[1]
ASM code can also be ported between platforms (ex. from 16-bit DOS to 64-bit Linux), as long as you replace OS-specific calls, interrupts, IO access, etc., although the effort will be greater.
People should stop pretending that a compiled binary is a black box, because it isn't.
Still, the point that Windows makes backwards-compatibility as straightforward as possible prevails, since the cases where you need to do complicated maneuvers like hacking ASM code to fix compatibility issues are scarce.
I still get amazed that I can play some obscure games designed for Windows 95 and compiled using the DirectX 3 SDK. I can't say the same about Linux since I hadn't been able to recompile without fixing code old open source games, because X kernel version broke Y version of Z framework.
Executable formats have changed some, and I don't know if recent Linux systems would support the a.out format of early Linux. And shared libraries change too. But if you had a fully-statically-linked binary (and enabled a.out support if necessary), I think Linux should also support very old binaries.
Yes, it does.
> But if you had a fully-statically-linked binary (and enabled a.out support if necessary), I think Linux should also support very old binaries.
And it does.
What Microsoft did is replace various included applications completely with every upgrade. There's no compatibility. Things like notepad.exe for Windows 1 is simply replaced with a version made for Windows 3.1 when you upgrade. Likewise when you upgrade from 3.1 to 95.
You absolutely cannot run Windows 1 applications in modern day Windows. Heck the CPUs these days literally do not support real mode anymore. You can upgrade but that's really just a series of complete OS replacements in this case.
They do, actually; a brand new Core i7 still runs 16-bit real-mode and 32-bit real-mode.
Now, if you're running in 64-bit mode, there's no vm86 mode you can use to run 16-bit applications on a 64-bit kernel. However, the CPU still supports 16-bit real mode, and under a 32-bit kernel you can run 16-bit applications.
Edit: An edit went on the wrong comment somehow. Ignore what it said.
Here's a screenshot of Windows 8 (32-bit) running four different Windows 1.01 apps:
Most people here seem to be talking about binary (.exe) compatibility.
I'm sorry if I was unclear in my wording, I mean the modern Windows version must be 32-bit to be able to run 16-bit Windows apps.
That's just not true. Windows 3.1 removed real-mode support in Windows itself -- in other words, the last version you can run on a 8086 CPU is Windows 3.0.
But pre-3.0 16-bit Windows apps certainly didn't stop working.
Also, present-day x86 CPUs definitely can run real-mode software using virtual 8086 mode: http://en.wikipedia.org/wiki/Virtual_8086_mode
This is the same mode that Windows 3.x used to run multiple real-mode DOS apps simultaneously on a 386 processor.
There were some exceptions to this; I remember as a kid upgrading my 486 from Windows 3.1 to 95 for the first time, and being disappointed that Setup replaced Paintbrush and Write with Paint and Wordpad, because I liked Paintbrush better. It actually replaced PBRUSH.EXE and WRITE.EXE with dummy EXE:s that would just launch MSPAINT.EXE and WORDPAD.EXE instead. These dummy files are still in recent Windows versions for compatibility with stuff like ancient apps that create shortcuts to launch Write with their docs.
It was trivial to retrieve PBRUSH.EXE from Windows 3.1 install media, however, and it works fine on Windows 95 as well as every subsequent 32-bit Windows.
Now, if you excuse me, I'll turn on some 80's music on Spotify while I'm playing with this.
Edit: Just pressing the Lock Mouse button works very well. esc will remove the lock.
If you want to run old Windows, I suggest a proper virtual machine.