Como um jogo inesperado mudou o Steam Deck para sempre
O Steam Deck se tornou um grande sucesso certificado.
Com vários milhões de unidades vendidas, o dispositivo mudou a forma como pensamos sobre os jogos para PC, gerou vários clones e garantiu um futuro para os dispositivos portáteis de jogos. Com o apoio de uma empresa multibilionária, isso pode não ser uma grande surpresa.
Mas há uma história não contada por trás do que fez o Steam Deck funcionar – um núcleo de paixão pela engenharia que desvendou o quebra-cabeça de fazer os jogos Linux funcionarem nessa escala. Grande parte disso começou com um desenvolvedor independente – um homem e seu amor por um jogo chamado Nier: Automata – e uma comunidade pronta para levar os jogos Linux para o próximo nível.
Origens humildes
Durante a promoção Steam Autumn do ano passado, decidi comprar Nier: Automata. O jogo de ação e aventura inovador de 2017 está na lista dos melhores jogos de todos os tempos da Digital Trends e, embora eu o tenha jogado um pouco no PlayStation 4, nunca o comprei no PC. Como normalmente faço quando compro um jogo no Steam, procurei algumas informações sobre como ele funcionava no Steam Deck e me deparei com este tópico do Reddit .
O jogo funcionou muito bem, algo que aprendi enquanto rastejava lentamente para uma sessão de 30 minutos algumas vezes por semana, mas foi o primeiro comentário neste tópico que iniciou uma obsessão: “ Nier: Automata is 80 % da razão pela qual os jogos no Linux são tão bons como são agora, talvez 90%. Veja a história do DXVK. Para encurtar a história, o amor de um homem pelo 2B é a razão pela qual temos hoje qualquer uma dessas incríveis camadas de tradução DirectX.”
Há muito o que desvendar para os não iniciados, mas quando me deparei com esse comentário, fiquei fisgado. Porque o comentarista estava certo – os jogos Linux passaram por uma transformação radical nos últimos anos. No passado, o DirectX era o principal obstáculo a ser superado. A grande maioria dos jogos para PC usa a Interface de Programação de Aplicativo (API) DirectX da Microsoft, que, como você pode suspeitar, só funciona no Windows. Os jogos enviam instruções para a API, que prepara o trabalho para o seu hardware. Dado que a maioria dos jogos foram projetados para funcionar com DirectX, isso significava que você não poderia jogá-los no Linux – pelo menos não nativamente.
Por muitos anos, a principal solução alternativa foi uma camada de compatibilidade conhecida como Wine, mas os jogos suportados ainda eram muito imprevisíveis. Isso se deve à forma como o Wine funcionava na época para jogos. Seriam necessárias instruções do DirectX e traduzi-las para a API OpenGL. Funcionou para jogos mais antigos ou menos exigentes, mas houve um enorme impacto no desempenho para títulos modernos que aproveitavam instruções de API mais complexas.
Na verdade, só quando uma API multiplataforma chamada Vulkan foi lançada em 2016 é que as coisas realmente começaram a mudar para os jogos Linux. Criado pelo mesmo consórcio que construiu o OpenGL, o Vulkan foi projetado para dar aos programadores muito mais controle sobre a GPU – semelhante a algo como DirectX 12. Com os jogos ficando cada vez mais complexos, uma API de baixo nível como o Vulkan foi a chave para desbloquear a paridade de desempenho quando traduzindo instruções DirectX.
A Valve apoiou os esforços do Linux durante anos, mas o Vulkan marcou um ponto de viragem. Na época do lançamento do Vulkan, a Valve começou a trabalhar em seu próprio esforço para reforçar os jogos Linux chamados Proton, uma camada de compatibilidade integrada diretamente ao Steam. E assim mesmo – você pode traçar a linha direta de Vulkan e Proton até o Steam Deck. “Vulkan é definitivamente uma peça importante do quebra-cabeça”, explicou-me um desenvolvedor da Valve, Pierre-Loup Griffais, por e-mail.
Mas a Valve não fez isso sozinha. Na verdade, com base no compromisso da própria empresa com a filosofia de código aberto, o Proton reúne algumas camadas de tradução de código aberto em um único pacote. A coisa toda é baseada no Wine, mas para jogos ele usa VKD3D para DirectX 12 e Zink para OpenGL. No entanto, há uma peça-chave de tecnologia que veio para assumir a maior parte dos jogos.
Começou com DirectX 11, mas agora inclui até DirectX 10 e DirectX 9. O nome do projeto é DXVK , que se autodescreve como uma "camada de tradução baseada em Vulkan para Direct3D 9/10/11, que permite executar aplicativos 3D no Linux usando Wine.”
Recebeu inúmeros colaboradores desde a sua criação, mas começou muito pequeno. Um desenvolvedor alemão chamado Philip Rebohle foi o idealizador e, segundo ele, tudo começou como um projeto apaixonante.
Como Nier mudou tudo
“Comecei o projeto de verdade quando saí da universidade e comecei a procurar emprego, mas no início não era para ser muito mais do que um projeto de hobby”, disse-me Rebohle. “Ainda assim, o desenvolvimento inicial foi rápido e compartilhei meu progresso com uma pequena comunidade Discord, que por sua vez encaminhou alguns dos marcos mais significativos para Phoronix.”
Phoronix, se você não conhece, é um site dedicado a notícias e análises de hardware Linux. Lembre-se desse nome.
De acordo com uma entrevista ao GamingOnLinux em 2018, Rebohle “sempre teve interesse em programação gráfica”, mas principalmente mexeu em projetos de hobby que, nas próprias palavras de Rebohle, “nunca realmente evoluíram para algo útil”. O DXVK começou devido a algumas frustrações com a realidade dos jogos no Linux, mas também porque Rebohle “realmente queria que um jogo específico funcionasse”. Esse jogo foi Nier: Automata.
Rebohle se descreveu como “um pouco fanboy quando se trata de Nier” nos fóruns GamingOnLinux no início de 2018, dias após o lançamento inicial do DXVK. Mas não era só que Rebohle se importava com este jogo. Ao falar com o desenvolvedor, ficou claro que Nier: Automata apresentava um desafio único.
“Nier é o jogo que me fez aprender – e depurar – a API D3D11 em primeiro lugar, inicialmente porque ela nem funcionava no Windows no meu RX 480 devido a um bug no driver AMD”, disse-me Rebohle.
Nier: Automata é um jogo DirectX 11 bastante simples, permitindo que Rebohle execute o título no Linux sem muitos problemas. A porta do PC também teve grandes problemas no Windows, entre os quais o bug do driver AMD que Rebohle mencionou. Acima de tudo, porém, “é um jogo muito bom”, como disse Rebohle.
“Quando ele finalmente começou a rodar no Linux usando a tradução D3D baseada em OpenGL do Wine, ele estava meio lento e não renderizava corretamente, então fiz algumas depurações mais sérias lá e aprendi bastante no processo. Tendo brincado com Vulkan antes, a ideia do DXVK nasceu em algum momento desse processo”, disse Rebohle.
O desenvolvimento começou no final de 2017, mas em janeiro de 2018, Rebohle e um grupo de colaboradores já haviam instalado o Nier: Automata no Linux. Phoronix compartilhou a notícia e, pouco depois, Rebohle assinou um contrato com a Valve para trabalhar em tempo integral em seus projetos de código aberto, traduzindo APIs do Windows para Vulkan. “Não demorou muito depois que o artigo foi publicado para que alguém da Valve me perguntasse se eu queria trabalhar nisso em tempo integral como empreiteiro”, Rebohle me disse.
O desenvolvedor ainda está trabalhando com a Valve hoje, contribuindo principalmente para a camada de tradução do DirectX 12 conhecida como VKD3D-Proton.
Rebohle iniciou o DXVK e continua sendo o desenvolvedor líder, mas é importante destacar os outros desenvolvedores que contribuíram para o projeto. O projeto GitHub lista atualmente 137 colaboradores, e é justo dizer que o projeto não estaria onde está hoje sem o esforço da comunidade investido nele. Ainda assim, talvez nunca tivesse começado se não fosse por Nier: Automata.
“Honestamente, é difícil dizer”, como Rebohle me disse.
O que torna o Steam Deck especial
“Puta merda. Por favor, desculpe a linguagem, mas honestamente, estou tremendo fisicamente agora. Não sei bem como processar isso.”
Essa foi a resposta de Liam Dawe, editor-chefe do GamingOnLinux, escrevendo em uma postagem de notícias sobre o lançamento original do Proton em 2018. Lendo os mais de 500 comentários na postagem, você pode sentir a excitação e o nervosismo crescendo conforme a constatação está se estabelecendo: esse nicho de comunidade estava prestes a se tornar popular.
Apenas quatro anos depois, o Steam Deck seria lançado, colocando os jogos Linux no mapa para sempre.
Embora a Valve pudesse ter construído um Steam Deck sem o Proton, é difícil imaginar que teria tido sucesso. Como eu sei? Bem, uma prova é o fracasso das Steam Machines. A Valve lançou Steam Machines em 2015, que foram construídas para serem PCs de jogos acessíveis, semelhantes a consoles, que rodavam no SteamOS baseado em Linux da própria Valve. Meio ano após o lançamento, a Valve vendeu menos de meio milhão de Steam Machines, com alguns chamando o dispositivo de “morto na água”.
Existem muitas explicações possíveis para o fracasso, mas de acordo com a Valve, um de seus problemas foi a tentativa de adotar os jogos Linux antes que ele estivesse realmente pronto. Em uma entrevista ao IGN , o designer da Valve, Scott Dalton, disse: “Sempre houve esse clássico problema do ovo e da galinha com a Steam Machine. Isso nos levou ao caminho do Proton, onde agora existem todos esses jogos que realmente rodam.”
Ao desenvolver o Steam Deck, a Valve não podia ficar parada esperando que mais portas nativas do Linux começassem a aparecer, e não poderia exigir que os desenvolvedores criassem jogos especificamente para sua plataforma. A Valve viu como isso poderia falhar por meio de sua experiência com Steam Machines. Era necessário um acúmulo de jogos para suportar o Steam Deck, e a única maneira razoável de atingir esse acúmulo era com uma camada de compatibilidade robusta para Linux.
Está claro que o Proton também precisava trabalhar para que o Steam Deck tivesse sucesso. A Valve lançou originalmente o Proton em agosto de 2018, três anos e meio antes do lançamento do Steam Deck. Você pode jogar milhares de jogos através do Proton agora, mas na época, a Valve listou apenas um pequeno número de títulos suportados, incluindo Doom, Final Fantasy VI, Star Wars: Battlefront 2 e, claro, Nier: Automata.
Desde então, milhares de desenvolvedores contribuíram para o Proton ou para uma das várias bases sobre as quais ele foi construído, mas não há como negar que o DXVK é uma parte crítica do Proton que temos hoje. É usado para jogos DirectX 11, DirectX 10 e DirectX 9 e, mesmo sendo o DirectX 12 a versão mais recente, essas três APIs ainda constituem a maior parte dos jogos que você encontrará no Steam.
O Steam Deck também não é o único hardware que o DXVK impactou. A Intel está aproveitando o DXVK para jogos DirectX 9 em suas GPUs Arc, traduzindo as instruções desatualizadas do DirectX 9 para a API Vulkan mais moderna.
A contribuição inesperada de Rebohle no DXVK tornou-se um elemento permanente no mundo do desenvolvimento de jogos – uma bela imagem da força do desenvolvimento de código aberto.
Os jogos Linux têm um futuro seguro
Por mais fascinante que seja a história das origens do DXVK, isso não quer dizer que o Steam Deck nunca poderia ter se concretizado por conta própria. Griffais da Valve me disse que havia outros projetos em andamento para fazer o DirectX 11 funcionar, e se o DXVK não aparecesse, “um desses outros projetos DirectX 11 sobre Vulkan teria sido priorizado”.
A Valve claramente já tinha o Proton em desenvolvimento antes do DXVK, e provavelmente seus planos para o Steam Deck. Mas teria funcionado? O apoio seria tão bom quanto é hoje? Quanto tempo mais demoraria? Que impacto isso teria no Steam Deck como um todo? Existe uma realidade alternativa onde o DXVK nunca faz parte do Proton, claro, mas não foi isso que aconteceu. DXVK evoluiu para um componente fundamental do Proton e, portanto, o Steam Deck e Nier: Automata desempenharam um papel fundamental nisso.
“DXVK é muito importante para Proton”, como diz Griffais, e a Valve “não tem planos de se afastar do DXVK para Proton”.
O resultado é que os jogos Linux estão hoje em uma posição muito diferente do que estavam no início de 2018. O futuro nunca pareceu tão brilhante. Tudo começou com o amor de um desenvolvedor por Nier: Automata, mas o esforço cresceu e se tornou algo muito maior desde então. No final das contas, é isso que torna o desenvolvimento de código aberto tão especial. Nunca se sabe quais impressões digitais acabarão no produto final e ajudarão a moldar o futuro da tecnologia.