23 septiembre, 2015

Diferencia entre las carpetas 'Archivos de programa' y 'System32' en arquitecturas x86 y x64

Aunque a estas alturas tecnológicas es algo tarde para explicar esto, creo que nunca viene de más dar un repaso y quizás aclarar determinados conceptos.
En una entrada anterior comentara como "listar aplicaciones y actualizaciones instaladas en Windows de forma remota". Había comentado la diferencia de las claves de registro que había entre OS de 32 bits (x86) y 64 bits (x64).

Simplemente detallaré un poco más las diferencias más considerables entre ambas arquitecturas entre directorios y algunas carpetas y como afecta esto a la compatibilidad de todo en sistemas Windows.

Saber que hay dos diferencias en cuanto a los nombres: 'WOW64' y 'x86'.

WOW64: viene de "Windows on Windows 64 bits" (algo como Windows de 32 bits en Windows de 64 bits). Es un emulador que permite a las aplicaciones basadas en Windows de 32 bits correr indistintamente en Windows de 64 bits. Se utiliza una capa de compatibilidad entre un programa de 32 bits y el sistema operativo de 64 bits.

x86: inicialmente es un nombre que viene de la arquitectura de procesadores Intel que usaba instrucciones de 32 bits. El término x86 hace referencia referirse a los procesadores de Intel que usaban instrucciones de 32 bits. Eran procesadores llamados 8086, 80186, 80286, 80386, etc, este último fue usado para referirse a procesadores de 32 bits.

Existen dos variantes diferentes de la carpeta "Archivos de programa" y la carpeta de "Sistema de Windows".

Windows de 64 bits tiene dos versiones diferentes de la carpeta program files y la carpeta de sistema de Windows. Una versión está orientada para archivos de 32 bits y la otra versión para archivos de 64 bits. Los nombres de estas carpetas y los bits a que coresponden, son de la siguiente manera:

C:\Windows\System32: Carpeta de sistema de Windows para archivos 64 bits.
C:\Windows\SysWOW64: Carpeta de sistema de Windows para archivos 32 bits.
C:\Archivos de programa: Carpeta para archivos de programa 64 bits.
C:\Archivos de programa (x86): Carpeta para archivos de programa 32 bits.
La carpeta SysWOW64 está dedicada únicamente para archivos de 32 bits
La carpeta System32 está únicamente destinada para archivos de 64 bits
Aquí seguramente veremos algo que nos puede resultar confuso, resulta que la carpeta System32 está dedicada para archivos 64 bits y la carpeta SysWOW64 está dedicada para archivos 32 bits. Esto puede verse un poco ilógico atendiendo a los nombres de las carpetas, pero hay una explicación para ello.
Tiene que ver con la compatibilidad. Muchos desarrolladores han codificado el nombre de la ruta de la carpeta de sistema en el código fuente de sus aplicaciones con el fin de preservar la compatibilidad, si la aplicación se convierte a código de 64 bits, la carpeta de sistema de 64 bits, aún se llamará System32.

Pero ¿qué ocurre con las aplicaciones de 32 bits que tienen codificada la ruta de system y están corriendo en Windows de 64 bits?. Podrías pensar ¿cómo pueden encontrar la nueva carpeta SysWOW64 sin cambios en el código del programa?.
La respuesta es que el emulador redirecciona las llamadas a la carpeta System32 a la carpeta SysWOW64 de manera transparente, aún si la carpeta ha sido codificada a la carpeta System32 (C:\Windows\System32), el emulador se asegurará que la carpeta SysWOW64 se use en su lugar. De modo que el mismo código fuente, que utiliza la carpeta System32, puede compilarse tanto en códigos de programas de 32 bits como de 64 bits sin cambio alguno.

Es muy importante que archivos binarios compilados en 32 bits o 64 bits se instalen en la carpeta correcta de system. De otra forma el programa que necesite determinado archivo no podrá cargarlo y probablemente no funcionará correctamente.

Si tenemos instalado un sistema Windows de 64 bits, tendremos instaladas dos carpetas para archivos de programa (Program Files):
Archivos de programa (x86) instala siempre un programa de 32 bits.
Archivos de programa instala siempre un programa de 64 bits.
En muchos casos el programa iniciará y funcionará pese a que coloques el programa en carpetas equivocadas, pero si el programa pide a Windows la ruta de archivos de programa y desea accesar los archivos instalados en la carpeta, se utilizará la carpeta errónea y el programa fallará en su función. De modo que para asegurarse de que todo funcionará como se espera, deberás siempre instalar las aplicaciones que corran a 64 bits o en 32 bits en sus carpetas correspondientes.

Por último señalar las diferencias de esto el registro de Windows. En el caso de aplicaciones tanto de 32 bits como de 64 bits, se ven reflejadas en el siguiente path del registro:

Para arquitecturas x86 (32bits):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Para arquitecturas x64 (64bits):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Y esto viene siendo la explicación de las diferencias entre arquitecturas de x64 y x86 en sistemas Windows.

Saludos!

0 Comentarios :

Publicar un comentario

Entradas Relacionadas