Conecta con nosotros

A Fondo

¿Por qué los juegos de Windows llegan a funcionar tan bien en la Steam Deck?

Publicado

el

Steam Deck

La Steam Deck es un dispositivo que ha sorprendido a más de uno que no esté familiarizado con el espectro de Linux, ya que, a pesar de emplear una distribución basada en dicho sistema operativo, lo que hace principalmente es ejecutar videojuegos de Windows, sobre todo cuando se trata de títulos triple A.

Lo sorprendente es que, en muchas ocasiones, los videojuegos compilados para Windows llegan a funcionar realmente bien sobre SteamOS 3, el sistema operativo basado en Linux que viene preinstalado en la Steam Deck. ¿Qué tipo de magia ha empleado Valve? Esa es la pregunta que vamos a responder en esta entrada, donde expondremos de forma sencilla y básica las claves que permiten a la Steam Deck (y los sistemas Linux en general, más si se usa una gráfica Radeon) poner en funcionamiento videojuegos compilados para Windows.

SteamOS 3, algunos detalles importantes

SteamOS 3 es un sistema operativo GNU/Linux estándar, con todas sus virtudes y defectos, pero con una peculiaridad que ha sorprendido hasta en los propios círculos linuxeros. Como bien indica su nombre, SteamOS 3 es la tercera versión de la distribución impulsada por Valve, sin embargo, de facto puede considerarse como otra independiente debido a la introducción de algunos cambios radicales.

Las dos primeras versiones se basaron en Debian, pero en la tercera se decidió cambiar la base a Arch Linux. Este movimiento le ha permitido a Valve tener un acceso más directo a software reciente, principalmente el kernel, que contiene todos los drivers para los dispositivos al ser monolítico puro, y Mesa, el componente encargado de suministrar los controladores del espacio del usuario (OpenGL, Vulkan y OpenCL). Otro cambio importante fue la sustitución de GNOME como interfaz gráfica de escritorio por KDE Plasma, el cual ofrece una disposición más similar a Windows.

Emplear la última versión de los controladores gráficos en Windows suele ser importante para tener una buena compatibilidad con los juegos más recientes, cosa que en Linux se traduce en tener una versión reciente del kernel y Mesa. Esto no solo atañe a SteamOS 3 y Arch Linux, sino a cualquier distribución que pretenda ser una solución competente para gaming.

SteamOS 3

Pero el detalle que ha sorprendido a todo el mundo, incluso dentro de Linux, es el hecho de que SteamOS 3 es un sistema operativo inmutable, así que el sistema de ficheros es en un buen porcentaje de solo lectura. La inmutabilidad suena algo novedoso, pero en realidad es un concepto bastante antiguo y básicamente, en un sistema orientado a los entornos domésticos, sirve para poner coto al usuario a la hora de manipular el sistema operativo, cosa que se traduce en un mayor control de los errores por parte de los responsables del sistema y en una base más estable y clara para los desarrolladores de aplicaciones (videojuegos en este caso). Como resultado de todo eso, SteamOS 3 debería de ofrecer un marco más resiliente que el suministrado a través de las típicas distribuciones mutables como Ubuntu, Linux Mint, Manjaro, Arch Linux, Debian, etc.

El medio principal para instalar aplicaciones que no proceden de Steam es Flatpak, el conocido formato de paquetes universales. La apuesta por este sistema por parte de Valve convierte a SteamOS 3 en un sistema operativo bastante abierto que permite la instalación de clientes alternativos. Otra cosa es que Epic Games, GOG, Electronic Arts y Ubisoft no quieran soportar Linux, pero en caso de lanzar sus clientes en formato Flatpak, estos deberían de poderse instalar en SteamOS 3 sin problemas. Y ya que estamos con clientes alternativos, los usuarios de Epic Games Store y GOG pueden recurrir a Heroic Games Launcher.

Para resumir lo expuesto en este apartado, SteamOS 3 es un sistema operativo GNU/Linux estándar, con características de inmutabilidad, con una interfaz de escritorio similar a Windows gracias a KDE Plasma y que ofrece un marco abierto para la instalación de aplicaciones a través de Flatpak.

Proton, la capa de compatibilidad que permite ejecutar los videojuegos para Windows

Desde hace unos años, aunque posiblemente solo en los últimos meses en la escena mainstream de los videojuegos, se habla bastante de Proton, la capa de compatibilidad desarrollada por Valve que permite ejecutar videojuegos compilados para Windows en Linux.

Lejos de lo que se han imaginado algunos, la realidad es que Proton no es un desarrollo desde cero, sino que es un Wine precocinado para facilitar la ejecución de videojuegos de Windows. Wine es una de las obras de ingeniería más valiosas del software libre, pero su configuración puede llegar a ser complicada para los usuarios sin profundos conocimientos de computación. Básicamente, el trabajo de Valve consiste en facilitar su uso con la intención de ofrecer un funcionamiento out of the box o al menos reducir la configuración a unos parámetros de lanzamiento que por lo general pueden encontrarse en ProtonDB.

Wine no es en realidad un emulador, sino un conjunto de API de Windows reconstruidas a partir de ingeniería inversa para permitir la ejecución de aplicaciones y programas de Windows en sistemas operativos Unix y tipo Unix. Dicho de forma más tosca, es un pedazo de Windows reconstruido con ingeniería inversa, y lo que hace realmente es traducir las llamadas de sistema de Windows para que sean “entendidas” por el sistema sobre el que se ejecuta Wine (Linux, macOS, FreeBSD, etc). Al realizar una labor de “traducción”, las aplicaciones funcionan de forma nativa y no emulada.

Wine

Wine está publicado bajo la licencia LGPLv2.1, así que todo software derivado está obligado a publicar el código fuente. Afortunadamente, el código fuente de Proton está disponible y eso ha permitido crear una bifurcación comunitaria llamada Glorious Eggroll que resulta más competente a la hora de ejecutar muchos títulos triple A (con los juegos de la saga Resident Evil ofrece mejores resultados).

Proton se ha convertido con el paso de los años en el estándar dentro del Linux Gaming, llegando a desplazar a los juegos nativos para el sistema. Esto genera discusiones entre los usuarios de Linux, que se dividen entre los que opinan que Proton es una oportunidad y los que dicen que Valve ha matado a Linux como verdadera plataforma para jugar. ¿Solución o atajo? A día de hoy el debate sigue en pie.

Vulkan, DXVK y VKD3D-Proton

Vulkan, la API derivada de Mantle desarrollada e impulsada por Khronos Group, es uno de los grandes puntales del Linux Gaming, aunque posiblemente de una forma un tanto peculiar viendo la preponderancia de Proton.

Vulkan es una API que, frente a DirectX 11 y OpenGL, trabaja a más bajo nivel. Sus cualidades y capacidades son bien conocidas, pero arrastra el inconveniente de no estar correctamente soportada por una gran cantidad de gráficas con la salvedad de Radeon, donde cualquier modelo con arquitectura GCN o posterior tiene la capacidad de ejecutar Vulkan y DirectX 12 al ser ambas API derivadas de Mantle.

La forma en la que es empleada Vulkan a través de Proton es bastante peculiar. La capa de compatibilidad, aparte de traducir las llamadas del sistema, se encarga de suministrar otros dos traductores, DXVK y VKD3D-Proton, los cuales se ocupan de la API Direct3D de Microsoft.

Vulkan

DXVK y VKD3D-Proton se encargan de traducir al vuelo las instrucciones Direct3D a Vulkan o más bien de renderizar Direct3D sobre Vulkan. Siendo más concretos, DXVK se encarga de “traducir” las versiones 9, 10 y 11 de la API de Microsoft, mientras que VKD3D-Proton hace lo propio con la versión 12. Las versiones 8 y anteriores se apoyan en el renderizador propio de Wine, así que son “traducidas” a OpenGL, una API que presenta ciertas limitaciones frente a Vulkan y las versiones recientes de DirectX.

Tanto DXVK como VKD3D-Proton se accionan de manera automática y sin intervención por parte del usuario. En caso de tener el juego una buena compatibilidad con Proton, puede ofrecer un rendimiento muy similar a la ejecución directa sobre Windows, lo cual es realmente muy meritorio viendo las tareas de traducción llevadas a cabo. Es más, hasta es posible encontrarse casos puntuales en los que Proton ofrece un mejor rendimiento que Windows, sobre todo en títulos DirectX 9 bastante antiguos.

En resumidas cuentas, lo expuesto en este apartado quiere decir que todo videojuego compilado para Windows que utilice DirectX 9 o posterior es de facto un juego Vulkan sobre la Steam Deck y SteamOS 3 (u otra distribución Linux).

RADV, el driver de Vulkan que es uno de los motores de la Steam Deck

SteamOS 3 y Proton son dos cosas muy conocidas a estas alturas, pero hay un componente del que raras veces habla en los medios y que juega un papel muy importante a la hora de ejecutar videojuegos de Windows o nativos de Linux que usan Vulkan: RADV.

El soporte de los gráficos se encuentra partido en Linux. Por un lado está el driver del kernel, que se encarga de poner en funcionamiento la GPU y de controlar aspectos como la potencia y la temperatura. Por otro lado, los drivers del espacio de usuario, OpenGL y Vulkan, se ubican en otro componente llamado Mesa, cuyo desarrollo es totalmente independiente del kernel Linux (vamos, que es un proyecto que no tiene nada que ver con Linux).

Para las gráficas Radeon, a nivel del kernel nos encontramos con AMDGPU, que es un driver oficial. A través de Mesa se suministra RadeonSI para el soporte de OpenGL, el cual también cuenta con la implicación de AMD, y RADV, que tiene un origen comunitario y no es un producto oficial.

Steam Deck la consola de Valve con SteamOS como sistema operativo Linux

Hace unos años, tras el prometedor anuncio que fue AMDGPU en su momento, la compañía se comprometió a liberar su driver de Vulkan con la posible intención de que fuera adaptado e incluido en Mesa. Sin embargo, AMD se demoró en exceso, por lo que la comunidad se puso manos a la obra para crear RADV, otro driver de Vulkan que terminaría por adelantarse para ocupar el lugar que en teoría estaba predestinado a AMDVLK, cuyo código fuente fue publicado a destiempo.

AMD ha tendido a publicar bastante documentación de sus gráficas, lo que ha facilitado la tarea por parte de la comunidad a la hora de desarrollar drivers. Por otro lado, RADV captó la atención de Valve, que desde hace años es la principal contribuidora. Sí, la compañía detrás de Steam no solo ha tomado un sistema operativo Linux y lo ha adaptado a sus intereses, sino que también juega un rol muy activo en el desarrollo de RADV, cosa que ha derivado en la recomendación de usar gráficas Radeon en lugar de NVIDIA en caso de ejecutar Half-Life: Alyx sobre Linux.

Radeon

Sin desmerecer a RadeonSI, posiblemente el mejor driver de OpenGL disponible para Radeon (incluyendo Windows), la combinación de AMDGPU y RADV ha abierto la puerta a hacer algo que hasta hace no mucho era inimaginable incluso en Linux: ejecutar videojuegos de última generación empleando controladores de código abierto, porque sí, AMDGPU, RadeonSI y RADV son todos Open Source, cosa que choca con la naturaleza privativa y antiestándar de NVIDIA, que hasta hace pocos años era la única solución viable para jugar en Linux.

Viendo los acontecimientos, uno llega a pensar que Valve ha estado picando piedra con RADV esperando el momento oportuno para lanzar al mercado la Steam Deck, cuando las APU de AMD contaran con una tecnología (RDNA) que garantizara la correcta ejecución de un porcentaje importante de los juegos recientes. Por otro lado, al formar parte de Mesa, toda la evolución de RADV rebota en todas las distribuciones Linux, así que en el fondo no es necesario comprarse la consola/mini-PC de Valve para hacer uso de sus posibilidades, sino que la compra de una gráfica Radeon y la instalación de una distribución muy actualizada (bleeding edge) es suficiente para tener algo similar.

Conclusión

Como vemos, el funcionamiento de los juegos de Windows en la Steam Deck (si no se le ha cambiado el sistema operativo) tiene su magia, pero no tanta. Básicamente, Vulkan se ha convertido en el motor que lo hace funcionar todo, salvo muchos juegos nativos para Linux que todavía emplean OpenGL (Unity3D todavía lo usa por defecto frente a Vulkan) y antiguos títulos para Windows que usan DirectX 8 o anterior, los cuales son renderizados sobre OpenGL empleando las soluciones propias de Wine.

Que Valve esté detrás de Proton, DXVK y VKD3D-Proton y sea la principal contribuidora de RADV deja entrever que la compañía seguirá picando piedra en la misma dirección, más viendo que muchos de los títulos más populares para Windows funcionan sin problemas y que en estos momentos hay más de 2.500 juegos compatibles. Además, algunos títulos como Cyberpunk 2077 funcionan desde el día uno en Linux. Los anticheat siguen siendo un obstáculo importante, aunque más por cómo están llegando a Proton que por la falta de soporte.

Verificaciones para la Steam Deck

En la web de la Steam Deck uno puede encontrarse un apartado en el que se indica qué títulos están verificados para funcionar en la consola. El estado de cada título puede consultarse por lo general en su propia ficha y Valve ha establecido cuatro categorías: verificada (funcionamiento perfecto teórico sobre la Steam Deck), jugable (que funciona correctamente en la Steam Deck con algunos inconvenientes), no soportado (que no funciona o no lo hace correctamente, haciendo que no sea disfrutable o jugable) y desconocido (que básicamente es una lotería).

El estado de verificación de la Steam Deck puede servir como orientación para los usuarios de Linux, pero es importante tener en cuenta que ahí se cuentan aspectos como el ajuste de las fuentes para la pantalla de la consola. Por otro lado está ProtonDB, una web donde los usuarios exponen su experiencia ejecutando juegos de Windows sobre Linux y la Steam Deck. Además de consultar la puntuación, es posible encontrarse trucos y consejos relacionados con la configuración (por ejemplo, qué versión de Proton ofrece mejor compatibilidad) y posibles parámetros de lanzamiento, los cuales pueden variar dependiendo de la gráfica utilizada.

Lo más leído