Tutoriales

WINE: así ejecutamos programas de Windows en Linux

WINE surgió como un proyecto para poder ejecutar software nativo de Windows en otros sistemas operativos tipo Unix, tanto Linux, como macOS, así como BSD, etc. No se trata de un emulador, sino de una capa de compatibilidad, y gracias a ella se han nutrido otros proyectos como ReactOS, Proton, CrossOver, etc. Aquí vamos a ver qué hay en las entrañas de este software y cómo funciona.

¿Qué es WINE?

winewine

WINE (Wine Is Not an Emulator) es una capa de compatibilidad que permite ejecutar aplicaciones nativas de Microsoft Windows en sistemas operativos basados en Unix, como Linux y macOS, entre otros. WINE actúa como un puente entre el sistema operativo anfitrión y las aplicaciones de Windows, traduciendo las llamadas del sistema Windows en llamadas compatibles con el sistema operativo host. Esto permite que las aplicaciones de Windows se ejecuten sin necesidad de una máquina virtual o emulador.

No lo confundas, WINE no es un emulador como pueda ser QEMU, por lo que solo ejecuta software nativo de Windows para la misma plataforma, en este caso x86. Por otro lado, no es un hipervisor o máquina virtual como pueda ser VMWare o VirtualBox, donde se ejecuta un sistema operativo completo Windows para ejecutar las aplicaciones.

Por tanto, WINE sirve para ejecutar aplicaciones de Windows (Win32/Win64) en los *nix. Dicho de otro modo, WINE permite que aplicaciones de Windows, como juegos, programas de oficina o herramientas de diseño, se ejecuten en sistemas operativos como Linux, macOS, Android, y FreeBSD. Esto es útil para usuarios que desean seguir utilizando aplicaciones específicas sin tener que instalar Windows en una partición separada, máquina virtual, etc., y que no se encuentran de forma nativa para estos sistemas operativos.

También te puede interesar conocer más sobre equipos compatibles con Linux

Relación con Proton y CrossOver

WINE es un proyecto de código abierto, bajo licencia GNU GPL, en su código contribuyen numerosos desarrolladores, así como compañías que aportan parches o mejoras constantes. Además, algunos proyectos se nutren de WINE o WINE de ellos, como por ejemplo:

  • Proton: es una herramienta desarrollada por Valve, basada en WINE y optimizada para la ejecución de juegos de Windows en Steam en sistemas operativos como Linux. Utiliza WINE para traducir las llamadas del sistema Windows en comandos que los sistemas Linux pueden entender. Proton también incorpora mejoras específicas para juegos, como optimización de gráficos y compatibilidad con controladores, lo que permite a los usuarios de Linux jugar títulos de Windows que normalmente no serían compatibles. En resumen, Proton es una versión especializada de WINE que se centra en la ejecución de juegos de Windows en Linux, especialmente a través de la plataforma Steam.
  • Crossover: es una versión comercial de WINE, desarrollada y soportada por CodeWeavers. Ofrece soporte adicional, mejoras de rendimiento y compatibilidad para aplicaciones de Windows en sistemas basados en Linux y macOS. A diferencia de WINE, que es gratuito, Crossover es de pago y está diseñado para usuarios que buscan soporte profesional y una solución más pulida para ejecutar aplicaciones de Windows. Crossover utiliza el código de WINE, pero ofrece un paquete con soporte, actualizaciones y algunas mejoras específicas para garantizar una mejor experiencia al usuario.

Otros proyectos también se han nutrido de WINE o WINE de ellos, cabe mencionar ReactOS, que es un sistema operativo similar a Windows y conpatible con su software, pero de código abierto… También tenemos proyectos que se basan en WINE como Bottles, Play On Linux, Lutris, etc.

Existen otros softwares similares para ejecutar software no nativo en Linux, como también DOSBox, para software de MS-DOS, o Darling, que permitía ejecutar software de Mac, etc. Por si te interesa indagar…

Componentes importantes de WINE

WINE es un proyecto muy complejo, compuesto por diferentes elementos esenciales que hay que entender, como:

wrc

Comenzamos con wrc (Wine Resource Compiler) es una herramienta que permite compilar recursos de Windows (como iconos, imágenes, menús y diálogos) para ser utilizados en aplicaciones que funcionan dentro del entorno de WINE. Es similar a la herramienta de recursos de Microsoft en Windows, pero adaptada para funcionar en un entorno no nativo de Windows.

wmc

wmc (Wine Message Compiler), una utilidad que se utiliza para compilar los mensajes de texto que se usan en las aplicaciones de Windows. Estos mensajes generalmente contienen texto de la interfaz de usuario o textos específicos para el manejo de errores. Ayuda a traducir los mensajes del sistema y hacerlos compatibles con el sistema operativo en el que se ejecuta WINE.

winemaker

winemaker genera un archivo de configuración Makefile a partir de los archivos de proyecto de una aplicación de Windows. Su propósito es simplificar el proceso de construcción y compilación de aplicaciones de Windows para que puedan ejecutarse dentro de WINE. Facilita la integración de aplicaciones que fueron diseñadas originalmente para Windows en sistemas Unix/Linux.

vinegcc

vinegcc es un script de WINE que funciona como un compilador de C y C++ dentro del entorno de WINE. Su propósito es permitir la compilación de código fuente de Windows en el entorno de WINE, traduciéndolo a código que puede ejecutarse en el sistema operativo anfitrión. Es útil cuando se desarrollan aplicaciones o cuando se intenta portar software desde Windows a Linux usando Wine.

winedump

Otra herramienta importante es winedump, para depuración y que permite inspeccionar y volcar información sobre el archivo ejecutable de Windows (PE, Portable Executable). Esta herramienta es útil para analizar el contenido de las aplicaciones de Windows y entender cómo interactúan con el sistema operativo, ayudando en el desarrollo y la depuración dentro de WINE.

winebuild

winebuild es una herramienta que permite compilar y generar archivos binarios a partir del código fuente de Windows, en el contexto de un entorno WINE. Es parte del proceso de construcción del propio WINE y también se utiliza cuando se desarrollan aplicaciones que deben ejecutarse dentro del entorno de compatibilidad de WINE.

vidl

La siguiente es vidl. Facilita la gestión y visualización de archivos de video dentro de WINE. Puede ser útil para realizar pruebas o ejecutar aplicaciones relacionadas con la visualización de medios que se ejecutan en el entorno de Windows en Linux u otros sistemas operativos basados en UNIX.

wineserver

wineserver es el componente central del sistema WINE, que se encarga de gestionar los recursos y servicios dentro del entorno. Actúa como un servidor entre las aplicaciones de Windows y el sistema operativo anfitrión, manejando el ciclo de vida de las aplicaciones, las llamadas del sistema y la interacción con los recursos del sistema.

winepath

Seguimos con winepath, una herramienta de línea de comandos utilizada para convertir rutas de archivos de Windows (por ejemplo, C:\Program Files) a rutas de archivo del sistema operativo anfitrión (como Linux o macOS). Esto es necesario porque los sistemas de archivos de Windows y Unix/Linux son diferentes, y esta herramienta permite gestionar las rutas de archivos en un entorno híbrido.

winemine

Por otro lado tenemos winemine, una versión de Minesweeper, el popular juego de Windows, ejecutada dentro de WINE. Este tipo de aplicaciones se utiliza principalmente para probar el funcionamiento de aplicaciones gráficas y de juegos dentro de WINE, ayudando a asegurar que la compatibilidad con la interfaz gráfica de usuario (GUI) sea correcta.

winefile

El explorador de archivos de WINE se llama winefile. Proporciona una interfaz gráfica similar al Explorador de Windows. Permite navegar por el sistema de archivos del entorno WINE y ejecutar aplicaciones de Windows desde allí. Es útil para usuarios que prefieren una interfaz gráfica para gestionar los archivos y programas en lugar de usar la línea de comandos.

winedbg

winedbg es el depurador de aplicaciones para el entorno WINE. Permite a los desarrolladores depurar aplicaciones de Windows dentro de WINE, proporcionando herramientas para identificar errores, hacer seguimiento de variables y analizar el flujo de ejecución de las aplicaciones. Es una herramienta esencial para quienes desarrollan o portan aplicaciones desde Windows a otros sistemas operativos.

wineconsole

Por supuesto, también hay una consola o línea de comandos, y se llama wineconsole. Emula la consola de comandos de Windows (cmd.exe). Permite a los usuarios ejecutar programas de consola de Windows en un entorno de terminal en Linux o macOS. Es útil para ejecutar herramientas de línea de comandos o scripts de Windows sin necesidad de una interfaz gráfica.

conecfg

conecfg es una utilidad de configuración para ajustar y personalizar los parámetros de red en WINE. Permite modificar la configuración de la red de WINE para adaptarla a diferentes necesidades de las aplicaciones de Windows, como las opciones de proxy o configuraciones de red específicas.

wineboot

En este caso, wineboot es una herramienta que simula el proceso de arranque de Windows dentro de WINE. Se utiliza para inicializar el entorno de Windows, estableciendo las configuraciones necesarias y asegurándose de que las aplicaciones de Windows puedan ejecutarse correctamente. Es útil para restaurar o reparar el entorno de WINE después de una instalación o configuración incorrecta.

regsvr32

regsvr32 permite registrar o desregistrar bibliotecas de enlace dinámico (DLL) en el sistema operativo WINE. Es útil cuando se necesita registrar ciertas DLLs para que una aplicación de Windows funcione correctamente dentro de WINE, ya que algunas aplicaciones dependen de bibliotecas que deben estar registradas en el sistema.

regedit

No podía faltar regedit, el Editor del Registro de Windows, que se utiliza dentro de WINE para modificar el registro de Windows simulado. El registro de Windows es esencial para que las aplicaciones se ejecuten correctamente, ya que almacenan configuraciones y preferencias del sistema. Regedit permite acceder y modificar esas configuraciones dentro del entorno de WINE.

msiexec

msiexec para la ejecución de archivos MSI (Microsoft Installer) en el entorno de WINE. Permite instalar, desinstalar o reparar aplicaciones que utilizan paquetes de instalación MSI, que son comunes en los programas de Windows. Es útil para gestionar aplicaciones que se distribuyen en este formato.

WineD3D

Importante también WineD3D, una implementación de Direct3D (la API gráfica de Windows) dentro del entorno de WINE. Traduce las llamadas a Direct3D en llamadas de OpenGL para que las aplicaciones que requieren Direct3D puedan ejecutarse en sistemas que no tienen nativamente esta API. Esto permite la ejecución de juegos y aplicaciones gráficas de Windows en plataformas Linux y macOS.

DXVK

DXVK es un proyecto que implementa Direct3D 11 sobre Vulkan, una API gráfica moderna y de alto rendimiento. A través de DXVK, las aplicaciones que requieren Direct3D 11 pueden ejecutarse con mejor rendimiento en Linux utilizando Vulkan en lugar de OpenGL. Es utilizado principalmente por Proton (en Steam) y WINE para mejorar el rendimiento de juegos y aplicaciones gráficas.

VKD3D

VKD3D es una implementación de Direct3D 12 sobre Vulkan, diseñada para permitir la ejecución de juegos y aplicaciones de Windows que utilizan Direct3D 12 en plataformas que no tienen soporte nativo para esta API. Al igual que DXVK, VKD3D utiliza Vulkan para traducir las llamadas gráficas, mejorando el rendimiento en sistemas Linux al ejecutar software de Windows que depende de Direct3D 12.

DLLs

Por último, también incluye algunas bibliotecas DLL (.dll), es decir, archivos de Windows que son esenciales para ejecutar el software nativo, ya que los diferentes programas hacen uso de ellas para sus funciones. Por ejemplo:

  • kernel32.dll: una de las DLLs más críticas en Windows, ya que proporciona funciones básicas del sistema operativo como la gestión de memoria, manejo de procesos e hilos, manejo de archivos, y otras operaciones de bajo nivel. WINE implementa una versión de kernel32.dll que traduce las llamadas de las aplicaciones de Windows a llamadas equivalentes en el sistema operativo anfitrión.
  • user32.dll: se encarga de proporcionar la interfaz de usuario de las aplicaciones de Windows. Contiene funciones para la gestión de ventanas, controles, menús y otras interacciones de la interfaz gráfica. WINE también proporciona una implementación de user32.dll, permitiendo que las aplicaciones con interfaces gráficas complejas puedan ejecutarse en Linux y otros sistemas basados en Unix.
  • gdi32.dll: gestiona el interfaz gráfica de bajo nivel en Windows, lo que incluye la representación de gráficos, imágenes, texto, y otros elementos visuales. En WINE, esta DLL es crucial para que las aplicaciones de Windows puedan generar gráficos y renderizar texto correctamente en un sistema no-Windows.
  • advapi32.dll: proporciona funciones avanzadas de API de Windows, como la gestión de la seguridad, registros de eventos y control de acceso. Contiene funciones para manejar cuentas de usuario, configuraciones de seguridad y autenticación, entre otras. WINE emula esta funcionalidad para garantizar que las aplicaciones que dependen de la gestión de seguridad de Windows funcionen correctamente.
  • msvcrt.dll: es la biblioteca de C runtime de Microsoft, que proporciona funciones esenciales para el manejo de memoria, entrada/salida, y operaciones matemáticas. Es una de las bibliotecas más importantes para la ejecución de aplicaciones de Windows que están escritas en C o C++.
  • shell32.dll: es responsable de proporcionar funciones relacionadas con el sistema de archivos y la interacción con el shell de Windows, como abrir archivos y carpetas, manejo del menú de inicio, y otras interacciones con el escritorio. WINE incluye una versión de esta DLL que permite la ejecución de aplicaciones que interactúan con el sistema de archivos de Windows.
  • wininet.dll: gestiona las conexiones de red e Internet en Windows, incluyendo soporte para protocolos como HTTP, FTP y HTTPS. Esta DLL es fundamental para que las aplicaciones que dependen de Internet puedan funcionar correctamente. En WINE, se emula la funcionalidad de wininet.dll para permitir la navegación web y otras interacciones en línea en aplicaciones de Windows.
  • d3d9.dll, d3d10.dll, d3d11.dll: son las DLLs responsables de proporcionar soporte para las versiones de Direct3D de Windows (para gráficos 3D) en aplicaciones y juegos. WINE incluye implementaciones de estas DLLs, que a menudo son necesarias para ejecutar juegos o aplicaciones de alto rendimiento gráfico. En sistemas que usan WineD3D o DXVK, estas DLLs permiten la traducción de las llamadas Direct3D a OpenGL o Vulkan, respectivamente.
  • opengl32.dll: es la implementación de la API OpenGL para gráficos 3D. WINE incluye una versión que permite que las aplicaciones que requieren OpenGL para gráficos 3D funcionen correctamente. Esto es especialmente importante cuando se ejecutan aplicaciones que necesitan aceleración gráfica en sistemas que no son Windows.
  • netapi32.dll: proporciona funciones de red para la gestión de recursos compartidos, servicios de red y accesos a bases de datos. Es fundamental en aplicaciones que requieren acceso a redes de Windows o recursos compartidos a través de SMB (Server Message Block).
  • winuser.dll: es responsable de la interfaz de usuario en aplicaciones de consola de Windows, como las utilizadas para interactuar con el sistema de comandos o las aplicaciones de consola que se ejecutan en el entorno gráfico. Aunque muchas de sus funcionalidades están cubiertas por otras DLLs en WINE, sigue siendo esencial para algunas aplicaciones de consola más avanzadas.
  • crypt32.dll: maneja funciones criptográficas y de seguridad en Windows, como la encriptación, la autenticación y la gestión de certificados. Las aplicaciones que requieren servicios de seguridad como la protección de datos o la autenticación en línea pueden depender de esta DLL. WINE incluye una implementación de crypt32.dll para garantizar la compatibilidad con estas aplicaciones.
  • mapi32.dll: biblioteca de Messaging Application Programming Interface (MAPI) de Windows, que permite a las aplicaciones de Windows interactuar con servicios de correo electrónico. En WINE, esta DLL es útil para ejecutar aplicaciones de Windows que requieren el acceso a funcionalidades de correo electrónico.
  • msi.dll: para la gestión de la instalación de aplicaciones basadas en el formato MSI (Microsoft Installer). Esta DLL es utilizada por programas que necesitan instalarse a través de archivos MSI, y en WINE, permite la instalación y gestión de programas de Windows que utilizan este formato.
  • ws2_32.dll: proporciona soporte para la API de sockets de Windows, que se utiliza para el manejo de conexiones de red. Es una parte fundamental del funcionamiento de aplicaciones que requieren conectividad de red, como navegadores web, clientes de correo electrónico y juegos multijugador. WINE emula esta DLL para permitir la correcta ejecución de aplicaciones que dependen de redes.

Otras se pueden agregar si son necesarias para el software que se desea ejecutar, y evitar que WINE de error en la ejecución al no tener la DLL. En estos casos, es importante conocer la arquitectura de archivos que tiene WINE, ya que habrá que insertar la .dll donde corresponda. Por eso, te animo a conocer cuáles son estas carpetas que describo en el siguiente apartado…

Arquitectura de WINE

Para que WINE pueda ejecutar software nativo de Windows en sistemas operativos basados en Unix, se crea una estructura de directorios para simular el sistema de archivos de Windows. Estos directorios permiten que las aplicaciones de Windows funcionen como si estuvieran ejecutándose en un sistema Windows real. Esta estructura se encuentra dentro del directorio o carpeta .wine, y en su interior encontramos un directorio conocido como drive_c.

La carpeta drive_c dentro de .wine actúa como el equivalente a la unidad C: en un sistema Windows. Es donde se montan y almacenan los programas y archivos que instalas dentro del entorno WINE. Es como si fuera el «disco duro» de Windows dentro del entorno de WINE, donde se crean los archivos de programa y de sistema. Dentro de drive_c, puedes encontrar las carpetas típicas de un sistema Windows:

  • ProgramData: es similar a la carpeta ProgramData en Windows, que se utiliza para almacenar datos y configuraciones comunes de aplicaciones instaladas en el sistema. Estas configuraciones y datos no están asociadas a un usuario específico, sino que son accesibles globalmente para todas las aplicaciones. En WINE, la carpeta ProgramData guarda configuraciones globales que las aplicaciones pueden necesitar, y se utiliza para almacenar información como archivos de configuración, bases de datos y otros archivos compartidos entre las aplicaciones.
  • Program Files: es donde WINE instala los programas de 64 bits. Esta carpeta es análoga a la carpeta C:\Program Files en una instalación nativa de Windows. En ella, las aplicaciones que instales y que sean de 64 bits se colocarán en subdirectorios dentro de Program Files.
  • Program Files (x86): donde se instalan las aplicaciones de 32 bits en un sistema de 64 bits en Windows. En WINE, esta carpeta es donde se colocan los programas de 32 bits que se instalan en el entorno simulado.
  • users: simula el sistema de perfiles de usuario de Windows. En un sistema Windows real, cada usuario tiene su propio perfil en C:\Users\NombreUsuario. En WINE, la carpeta users tiene una estructura similar, con subcarpetas para cada usuario (por ejemplo, user para el usuario principal), que contienen los archivos y configuraciones del usuario, como los documentos, archivos de configuración de las aplicaciones, y otros datos de usuario. Dentro de users, se encuentran subcarpetas como My Documents, AppData (que contiene configuraciones específicas de las aplicaciones), y otros datos relacionados con el perfil del usuario.
  • windows: emula la carpeta C:\Windows en un sistema Windows real. En este directorio se almacenan los archivos del sistema que emula WINE para permitir que las aplicaciones de Windows funcionen correctamente. Esto incluye archivos del sistema operativo, como las bibliotecas DLL, drivers, y otros componentes esenciales que las aplicaciones de Windows necesitan para ejecutarse. Dentro de windows, puedes encontrar subcarpetas como System32 y SysWOW64, que son cruciales para la compatibilidad y emulación del sistema Windows en el entorno de WINE.

Deja los comentarios que veas oportunos, serán bienvenidos…

Recent Posts

  • Tarjetas gráficas

AMD RX 9070, el modelo de referencia es probado y alcanza los 67°C

Se ha probado la tarjeta gráfica AMD Radeon RX 9070 en su diseño de referencia,…

3 horas atrás
  • Noticias

Sharkoon Rebel P10, fuente de alimentación de hasta 850W, ATX 3.1 y muy barata

Sharkoon ha presentado su nueva fuente de alimentación Rebel P10, una que llega con un…

4 horas atrás
  • Tutoriales

AMD Radeon RX 9070 vs Radeon RX 7900 XTX: ¿Merece la pena el cambio entre generaciones Navi?

Después de analizar la AMD Radeon RX 9070, hemos querido realizar varias comparativas con otras…

5 horas atrás