What’s up with the two Program Files folders, and why one of them is (x86)?

why-two-program-files-folders

The Program Files folder within the c drive is the default location where all of our application binaries (.exe) and the corresponding support libraries (.dll) reside. Every time I search for an application inside the program files folder, I get this obvious question why some applications find their place within program files and the rest within program files (x86) folder. The reason is to do with the backwards compatibility to the now-obsolete 32-bit applications.

The 32-bit processor based CPU’s are obsolete and are no more manufactured by the major CPU vendors such as Intel and AMD. In fact, it’s over a decade since the transition to more efficient 64-bit CPUs had started. You’re doubtless running the 64-bit Windows. The majority of applications for Windows though, have not yet been compiled for the 64-bit architecture. Most of the applications on your PC right now are quite likely to be 32-bit ones.

The 32-bit (x86) applications have a problem. If it searches for a .dll (shared library) and happens to get one that came with a 64-bit (x64) application, it will crash and it doesn’t know why it crashed. On the other hand, a 64-bit application has no problem running by importing the 32-bit libraries. Windows x64 needs to support x32 applications for backwards compatibility. Keeping the binaries and libraries of 32-bit (x68) and 64-bit (x64) applications in separate folders is the simplest solution to this problem. And hence there are two program files folders.

Hence Windows installs all the 32-bit applications within the Program Files (x86) folder, and the newer, current generation 64-bit applications within the Program Files folder.

Why are 32-bit applications identified as x86, instead as x32 ?

Early PCs used the 16-bit Intel 8086 processors. Even when the chips went 32-bit in the late 1980s, they still used 8086 code, and x86 model numbers. (Remember the 386 and 486 processors?) So the number 86 now refers to pre-x64 code, whether it’s 16- or 32-bit, although the 16-bit x86 code won’t run in 64-bit versions of Windows.

Source: PC World