R – Ensuring a Program Written for 32-bit Windows is Compatible with 64-bit Windows

64-bitbackwards-compatibilitywindows

While it's my understanding that there's no fundamental reason a program written for 32-bit hardware / OSs not to run on 64-bit hardware / OSs, in practice, I've found many programs intended for 32-bit versions of Windows that will not work on 64-bit versions of Windows. Examples include a number of popular security utilities (most products from Norton and Check Point's Zone Alarm) and several games (I've been trying to get Grand Theft Auto 4 to run for a few weeks now, but to no avail – of course, that might be related to any number of other problems related to GTA4, but that's neither here nor there).

I've heard that a program's incompatibility might result from something as simple as not wanting to run from the "Program Files (x86)" folder, but what are some of the other reasons? Why would a virus scanner or firewall written for a 32-bit system not run on a 64-bit system? Why would a game not run when everything is theoretically backwards-compatible?

Best Answer

The best explanation I've found is offered here which basically says 32-bit programs are run on an layer of emulation which doesn't allow the system access you'd get from native programs run in a 64-bit environment:

http://blogs.msdn.com/oldnewthing/archive/2008/12/22/9244582.aspx

I would assume this means that problems with programs like GTA4 come from the layer of emulation not producing the expected results found on a 32-bit native system. This is why you keep seeing Microsoft release compatibility updates all the time.

Here's what the MSDN has to say about the matter:

http://msdn.microsoft.com/en-us/library/bb427430(VS.85).aspx