In November 2022, we started a side project in my company, a video game called Cuprum 2929. Because I love Linux (being a full user since 2009) and I'm the owner of the company, I made the bold decision to fully develop it on Linux. While this is largely true, I have to put a disclaimer now that we are not building everything on the Linux OS, but about 95%, which is still impressive in my opinion.
In the article below, I'll discuss in detail our choices, our setup, how we helped some parts of the ecosystem support Linux better, and why some work couldn't be done on Linux. I'm also going to share some tips and tricks that I discovered myself to make the experience better and unlock some features that may not be available on the UE Linux build, and how we get the most out of it.
Setting up Unreal Engine
As is the case for a lot of things on a Linux OS, there are multiple ways to do this. If you are committed to developing your video game on Linux, I'm going to suggest the best thing that worked for us so far. If you want to experiment yourself, you can follow the unreal engine guide, which would be redundant to repeat here.
After we tried a few ways, the best flow for us (which is going to make more and more sense the more you progress in this article) is to build our own Unreal Engine fork. To get access to the Unreal Engine source code, as described in the previously linked guide, you can also fork it.
Because the Unreal Engine project is huge in size, we only have a copy of the latest commit (git clone --depth=1 ) . But why go to all that effort?
Later on, you'll see that we make changes to the code, build plugins that are not available for Linux in the Unreal Engine store, and we have a synchronised way of all of us using the same engine with the same plugins available.
The process to build UE from source is not different when you have your own fork and it's already provided by Epic Games here .
Using Third Party Plugins
Live Link
We found ourselves early on experimenting with cutscenes/cinematics in our project. A key part was making character dialogs realistic, so we tried using LiveLink. This was in May 2023, and we found out that a lot of the plugins were not available in the Linux build. After a short dig through the code, we found out that you could try to enable those plugins through some configuration and rebuild the engine.
It worked without issues, and all the code was compiling! We also created a proof of concept with a cutscene using Metahumans and Quixel Bridge. Later on, these plugins became available by default on Linux, so now you don't have to change anything.
We then committed the code to our fork and rolled it out to all three of our developers.
Quixel Bridge
Quixel Bridge is available when you build UE from source. However, it wasn't available when we used any of the provided pre-made binaries. Now, it seems to be available, but it may not always be for the latest release.
Smartsuit
In the winter of 2023, we acquired the Rokoko Smartsuit and gloves. It's a suit with sensors that allows you to create animations quickly by wearing the suit and gloves. We acquired it knowing that Linux was not supported, but we wanted to make it so, just for the fun of it (and because I may have anger management issues when they tell me something doesn't work on Linux, but just maybe!).
The first issue was that Rokoko Studio, the software that you interface with to use the suit and create animations, despite working with Wine, wouldn't recognize the hardware for the initial pairing (connected via USB). I spent 3-4 days tinkering with the Wine source code, but it seemed it needed a lot of work.
Luckily, we had acquired a Mac because of the needs of another project, where a certain video game educational studio would not work consistently on Linux. We then did the initial pairing through the Macbook (the rest of the connection works wirelessly). So how it worked is:
- Get the suit and gloves connected through the USB (one by one).
- Set the IP of the Studio to be on the Linux machine (running under Wine).
- Have a static LAN IP for the Linux machine so you won't have to repeat this pairing all the time.
All of the other features of Rokoko Studio work flawlessly on Linux.
We then found ourselves with another problem. The Rokoko Smartsuit plugin was not available for Linux. We provided a PR that was kindly merged, with all the changes needed to make it buildable and usable on Linux (along with some bug fixes). Since then, our integration works flawlessly.
Cross Platform Collaboration
Since building a video game is a task that involves multiple disciplines and managing often short-term needs (like doing some technical animation or some special programming), we need the services of short-term contractors. We thus cannot expect every contractor to use the same setup as we do.
To collaborate, we need to ensure that we are using the same release version of Unreal Engine (to the patch level). It then doesn't matter if ours has some extra changes that do not affect the core of it.
When you open a project that was done on a different platform, you'll get a message to convert or skip conversion. Convert in place works (please have a version control system in place before you do that).
Version control system (VCS)
We use Git for VCS, with LFS. Basically, all the files apart from any C++ source files and configs go to Git LFS. That includes textures, sounds, maps, blueprints, and literally everything that's not a text file. We identified very early on that using Git LFS would be a problem. We used GitLab, which provides an LFS backend with a 10GB limit, and we had to do a lot of careful work to not exceed that limit.
As the work progressed, we needed to find another solution. One of our engineers took the initiative to create a setup that would be cheap and easy to use, while still using GitLab. His work is summarized in this article, and we open-sourced a Terraform module that helps with the setup.
This, of course, is not a Linux-specific problem, but I'd like to emphasize how committed we are to helping both ourselves and the community. The setup with S3 costs us about 0.20 EUR per month, effectively nothing.
Building Projects from Source
It's come to our attention that writing C++ is somewhat problematic. Now, I'm not 100% sure if this is due to our setup or not. Basically, it seems that the generated Makefile is missing a few targets to be operational. I'm going to describe how we are fixing that, using a starter project called Lyra, which is available through the Epic Games store. Note that the most efficient way we found to download content from the store on Linux is the Epic Asset Manager.
When you download and open the project, you are going to get a version warning; you can select convert in place. Then, in our case, there is an error that the source code cannot be compiled.
If you open your terminal and run make, you'll get an error that some targets are missing. This is an issue we have when we are working on other video games as well. The way we fix it for now is with trial and error, using the Makefile from Unreal Engine as a guide. We are planning, though, to find the root cause and, if necessary, send a PR to get it fixed.
Our progress
Finally, I want to share our progress to give you an idea of the ecosystem state for developing a video game on Linux as well. So far, we have:
- Navigation menus, sound effects, and visual effects (using Niagara)
- Imported customized Metahumans, with all the features working
- Short cutscenes, animated from the Smartsuit and edited inside Unreal Engine
- A rich collection of 3D assets, created in Blender3D and imported successfully into our project
- AI behavior for some of our levels
You can follow our progress on our Steam Page. As I am writing this, we are also creating a Discord server; unfortunately, it is not ready yet to make public. Look for us in Steam October Fest, where we'll be releasing a demo and broadcasting our gameplay!
Quoteand because I may have anger management issues when they tell me something doesn't work on Linux, but just maybe!Haha, maybe!
QuoteSystem RequirementsReally?!?
Minimum:
OS: SteamOS 3.5.17
![](https://www.gamingonlinux.com/templates/default/images/emoticons/dizzy.png)
Quoting: stormtuxFrom the Steam store:
QuoteSystem RequirementsReally?!?
Minimum:
OS: SteamOS 3.5.17
I was thinking for a Linux exclusive first, we are testing it on:
1. Fedora (it's my machine)
2. Ubuntu
3. Steam deck
It should work for all Linux distros, we just put that as a minimum.
Quoting: VasilisI was thinking for a Linux exclusive first, we are testing it on:
1. Fedora (it's my machine)
2. Ubuntu
3. Steam deck
It should work for all Linux distros, we just put that as a minimum.
Definitely test on those - really, test wherever you can - but ideally building against the Steam Linux Runtime means that the user's distro doesn't matter because the game's using libraries from Steam's container.
Quoting: VasilisQuoting: stormtuxFrom the Steam store:
QuoteSystem RequirementsReally?!?
Minimum:
OS: SteamOS 3.5.17
I was thinking for a Linux exclusive first, we are testing it on:
1. Fedora (it's my machine)
2. Ubuntu
3. Steam deck
It should work for all Linux distros, we just put that as a minimum.
No arch !!!! tut, tut, tut.
![](https://www.gamingonlinux.com/templates/default/images/emoticons/grin.png)
Quoting: VasilisI was thinking for a Linux exclusive firstBold planning
![](https://www.gamingonlinux.com/templates/default/images/emoticons/shocked.png)
Better to keep the Win version tested constantly in parallel with your main build target. We have seen too many developers discover at release time their "for sure" multi-platform source code not to build for Linux and conclude the cost to bring up on par the Linux build with the Win build to be too costly and drop the Linux build. This is annoying for the player but doing the opposite for the developer company would probably be... lethal.
Good work!
![](https://www.gamingonlinux.com/templates/default/images/emoticons/heart.png)
I'm sorry but unity and godot are better engine.
But i would recommend to learn a programming language because it's the wae
See more from me