Adventures in getting dependencies working correctly
Published on: 4/1/2025
First off, not an April’s fool blog post.
Since my last blog post, I’ve been working a lot on getting game installation functional though Open Game Launcher. I have now implemented:
- SteamGridDB interface to change game posters
- Game uninstall functionality
- Concurrent game file downloads, which is incredibly fast
- DLC installation with some caveats !
- Dependency installs with some caveats !
First off, I slightly improved the library page by removing the titles. I think it makes it less cluttered.

The library page being less cluttered, with the titles removed
SteamGridDB interface to change game posters
Recently, I’ve added an interface to browse SteamGridDB results to be able to change posters for games. The feature works well in my totally unbiased opinion. I added some filtering options because I noticed a lot of low quality posters coming from the same few accounts. It took a few hours, but I think I blacklisted most of the “garbage” posters.

The home page, featuring the new SteamGridDB button

SteamGridDB interface to change game posters
Concurrent game file downloads
While working on the GOG Downloads API v2 implementation, I initially wrote my download code to download files sequentially. Which means, it was downloading each file, and each chunk, one after the other. If one file, or chunk, was particularly slow to download, the entire game download would end up bottle-necked by it.
After getting a solid sequential implementation, I looked at reworking the code to be able to download concurrently. Which would download multiple file, and chunks, in parallel. To my absolute delight, converting a sequential function into a concurrent one in Golang is absurdly easy.
Within a few minutes, I had managed to get a working concurrent implementation. This new implementation sped up downloads by a huge margin. More importantly, it made download speeds more or less consistent. With the previous implementation, I was getting 2 to 5 megabytes per second.
With the new implementation, I’m almost always above 70 MB/s, sometimes even maxing out my network bandwidth at ~100 MB/s!

Showing the download speed

The storage page with uninstall game buttons
DLC Installation
By default, the GOG downloads API includes DLCs! Which means that if we want all DLCs they are already included, no extra work required!
However, picking and choosing which DLCs you want requires a little more work, that I have not prioritized yet.
Dependency installation with some caveats !
Dependency management is something I’ve been dreading for some time. Even before starting work on Open Game Launcher, I had a feeling that managing game dependencies would be a pain.
Luckily, it’s been less painful than what I thought. GOG provides a repository with all the dependencies, so we can easily download them. Installing them, on a normal Linux distro, or on Windows, is pretty easy; just run the installer (via Wine for non-Windows systems).
Annoyingly enough, some games require Visual C++
, but GOG seemingly doesn’t always list that as a dependency, so as a workaround, I also always install some version of Visual C++. If a specific version is specified, I install that one, but if none are specified, I always install the 2022 version. This fixed a bunch of games that were throwing “missing component” errors on launch.
Voilà, we have working games right? Well not yet.
For Windows systems, the struggle ends here, because the games were designed to be played on Windows.
For Linux/macOS systems, you still need a few more components. On Linux you need DXVK
and, sometimes, VKD3D
, because Microsoft doesn’t support DirectX on Linux. DXVK
is for DirectX 8 to 11, and VKD3D
is for DirectX 12.
📄 Valve's Proton already bundles VKD3D and DXVK, in most cases using proton simplifies gaming on Linux.
On my two installations of openSUSE Tumbleweed, dependencies install correctly. Nothing hangs, installers run in the background, eventually all setting up correctly. On my Steam Deck, though, that’s another story.
Steam Deck specific pains
Weirdly enough, when I attempt to install dependencies on the Steam Deck, it just freezes. I suspect it’s somehow because of wine-mono. When using Proton runners, whether official or Proton GE, it just freezes trying to install anything. Using vanilla wine, it prompts to download and install Wine-mono, but gets stuck at “installing” perpetually. I strongly suspect that wine-mono is also missing in the Proton runners, but is trying to install in the background.
If you have ANY information that could help me fix this, contact me (via email or any other method listed in the sidebar)!
I’m also getting this weird issue where Steam will still send game pad inputs to my application when the steam overlay is active. It doesn’t do it for games, which is weird. I suspect it’s a bug with Gamescope though.
See you when I find time to write another blog post!
-Tacocake