and finally, a snow storm broke out in hell today…

So for a large chunk of my life, I didn’t like using Microsoft products. Why? Well, a youth of Visual Basic 6 high school computing assignments for one. VB6 has made more money than God, but on the other hand it epitomised for my everything I disliked about Microsoft: it was slow, locked down to a single platform, and also was everywhere even though it was obvious to any educated mind that it was shit! The amount of VB6 interfaces I have ran and continue to run into this day aggravated me, and indeed most Microsoft things did in some way.

And then came three words that changed my worldview: Visual Studio Code. Visual Studio Code again started out as something I scorned: it seemed to me to be a poor Atom ripoff that crashed as soon as I loaded it up, and I laughed at it as an also ran. Then a few months later and I downloaded it and it was stable and had a nice C++ plugin that showed some promise. This won me over, and more and more I found myself favoring Code over other editors, until finally it’s now my default development environment. It works well with CMake, and has extensions and support for every programming language under the sun.

Microsoft are now the developers (in addition to the open source community) behind one of my favorite software products ever. Most of my hobbyist development is now in a Microsoft product on an open source operating system, something that the younger me would have called an impossibility. I was resigned to janky, arcane editors for the rest of my life, the price I would pay for my open source freedom… until that ended.

And the way I work isn’t weird: it’s by design from Micro$oft, as I used to call them, themselves. Most of the cloud runs on Linux, including Microsoft’s own Azure, and companies will go where the money is so Microsoft are going there and embracing Linux itself. Indeed, I’ve deployed Microsoft technologies to Linux in my day job, and it doesn’t feel weird at all. Microsoft is now a part of the Linux community, having bought its way in through good deeds and mostly acting as a good neighbor. The war has been won by and large by GNU/Linux, although in the cloud rather than on the desktop as many of us in Linux world expected the final victory to come, and Microsoft is now adapting and prospering to the new reality.

And yet.

I’m a hobbyist graphics developer and game developer, and what always irritated me was Microsoft’s dominance here, and how if I went to Linux for my daily computing needs it meant giving up on all my favorite games and working with games ported over by the few dedicated developers heroically toiling to bring us Linux gamers a taste of the AAA world, and also all of the indie game developers that could develop OpenGL backends for their games without listening to men in gray suits telling them that there was no money in it.

Because Linux’s gaming infrastructure always would, and I thought always will be, crap. Slow, buggy OpenGL drivers, a billion different shader compilers all with their own unique foibles, and a lack of unity compared with DirectX which had a) one vendor overseeing it and b) a uniform shader compiler. Then along came Vulkan, and swept away the shitty old world by bringing along a unified shader compiler and an improved effort by graphics card vendors in the Khronos Foundation who wanted to avoid the mistakes of the past. We had finally had a good shot at reinvigorating Linux gaming!

And Vulkan brought with it Microsoft titles when it turned out that a low latency, low level API was just dandy for reimplementing Microsoft’s APIs using a modified version of Wine, in the form of DXVK which was in turn adopted by the mighty Valve and incorporated into Proton, which in turn lead to me playing The Witcher 3 and Batman: Arkham Knight, two games which had been previously slated for Linux but heartbreakingly cancelled, actually on a Linux desktop. There is the occasional bug and crash, but these games play magnificently well (ok, in the case of Arkham it can still suck at times, but that port has mega issues that a fan had to fix rather than the developer themselves) and I now lived in a weird world where Microsoft Windows games stand a very good chance of running on my desktop. I liked this strange new world very much, but another Microsoft-based surprise came today:

MICROSOFT PORTED DIRECTX 12 TO LINUX.

Now that’s a sentence I thought I’d never, ever write. I read this just as I finished work, and I’ve been trying to figure out why this was done. I did manage to parse why this has been done, I think:

In addition to D3D12 and DxCore, we ported our machine learning API, DirectML to work on Linux when running in WSL. We brought DirectML’s performant machine learning inferencing capabilities to Linux and expanded its functionality in support of training workflows too! DirectML sits on top of our D3D12 API and provides a collection of compute operations and optimizations for machine learning workloads.

Microsoft, DirectX ❤ Linux

Microsoft wants to leverage its DirectML technology for the cloud, and so that’s why DirectX has been ported to work on the Windows Subsystem for Linux – they want to get a part of the machine learning and cloud pie, and having DirectX running on Linux buys them a front row seat to the party as suddenly you can deploy DirectML applications to the cloud regardless of platform. You will develop a machine learning app using a Microsoft API, which will then slot neatly into a Linux container running in Microsoft’s cloud. Microsoft make money from this, and the Linux community benefits from the attention and investment. All is well.

But my mind then turned to gaming on Linux, and what this means for it. As I said, in the past it’s been troubled. We have Feral and Aspyr doing native ports of Windows games (through what appears to be very similar technology to Proton, but more specialized) and also an army of indie devs making indie games. Life has gotten better recently with the amount of attention Valve have given to the Linux community with the game changing Proton, but it’s still a somewhat prickly relationship.

There’s threads in Steam Community where some Linux gamers demand that CDProjektRED create a native port of Cyberpunk 2077 OR THEY WON’T SEE A CENT OF THEIR MONEY (I suppose they would care if millions of Windows and console gamers weren’t clamoring for it), or Reddit posts where people call Tim Sweeney a “fuck boy” for the fact that Epic Game Store won’t have a native version (it will run via Lutris) and rant about his comparison of going to Linux to being like moving to Canada after Trump won the US Presidential election.

There’s also anti-cheat software that won’t work with Linux, and some developers such as Garry Newman of Rust openly stating that they regret ever supporting Linux due to the fact that it’s low profit but high support. Some in the Linux gaming community say “fuck you” to the games companies, and the games companies just laugh at the impotent fury and give them the finger right back. Until very, very recently we lived in a world where Linux was by and large unprofitable and required a lot of effort to support for less reward.

A few things are happening that could change this.

I’m thinking that having DX12 as part of the Linux ecosystem could help. And it is most definitely part of the ecosystem now: Microsoft themselves state:

This is the real and full D3D12 API, no imitations, pretender or reimplementation here… this is the real deal. libd3d12.so is compiled from the same source code as d3d12.dll on Windows but for a Linux target

Microsoft, DirectX ❤ Linux

It is currently headless, offering no way to present the swapchain to the display and so can’t draw anything… yet. But the existence of libd3d12.so is a big deal as it proliferates Microsoft technology through Linux, and an implementation of the market leading graphics API is now running on Linux. WSL2 is a real Linux kernel, and it runs D3D12. That’s something I never thought I’d see.

Streets of Rage 4 had a rather interesting thing happen: while no specific Linux version was created, the developers did work with Codeweavers (the WINE backers) and Valve to build support into Proton 5.0.7 to get it running smoothly on Linux. That is, to my knowledge, the first fully intentional use of Proton to provide a quick conversion of a game targeted at Windows to Linux (and SoR 4 is fantastic by the way), and it shows that if developers want to, there’s now a road forward for their games to target Linux smoothly by ensuring that their game runs properly in current or future Proton version.

Also, away from the ranting of Reddit, Lutris got Epic Game Store running on Linux, and Tim Sweeney himself reached out to them:

This is all quite encouraging, but I’m actually really excited about the appearance of DirectX 12 in WSL, and what that could mean. It could turn out to be nothing, and could remain headless, but… I don’t think that will be the case. I think Microsoft will probably double down on it, as we have other interesting developments such as Microsoft being supportive of getting DirectX Shader Compiler running on Linux and outputting SPIR-V. These are things I never thought I’d see (and there’s a lot I used to think I’d never see from Microsoft), so it’s all very positive signs for the future.

Eventually, I foresee most of the bugbears of interoperability between Windows and Linux games going away as more and more Microsoft technology is opened up to allow Microsoft to operate more effectively in the cloud. Vulkan and D3D12 sharing similar concepts and a heritage is no bad thing either, and will help smooth things over immensely. The days of crappy OpenGL Linux gaming seem to be receding further, and further into the past…

I’m excited to see where we go in the future.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s