Weekly Report #41 – Linux Servers – World War 3 – Official Website
Weekly Report

Weekly Report #41 – Linux Servers

09/12/2019

Hello, soldiers!

This week we bring you some information on how we’re planning to switch to Linux based servers for World War 3 game hosting. This is something we wanted to do for a long time, but with limited resources and time, we had to prioritize other work. We’ve been tinkering with this issue for a long time and finally we have something solid enough, to let you all know this is coming. There are no firm dates yet, but we’ve played on a Linux server successfully.

Some of you might not be immediately struck with this as a good thing – which is understandable, that’s why we want to explain why this is a positive change for both you, the players, and us as a studio.

There are a few benefits that come from switching from Windows to Linux based servers, but the two biggest are: better performance and stability and lower cost.

While Windows Servers are very stable and are generally not a bad choice, especially for people that are not well versed with Linux, the system resource overhead is something we can live without. It’s not a massive difference, but it will definitely increase the quality of our matches. The cost is self-explanatory, hosting servers is expensive and if we can lower the cost and actually improve the quality of service, there’s no reason not to do this.

Additionally, in the case of player-hosted servers (which are planned for post-release), the cost of renting a Linux-based machine is also lower than a Windows-based one, so it will be more user-friendly in this way in the future. Bear in mind, that “planned” doesn’t mean 100% sure, but we know how important this is for the longevity of the game and creating communities, as well as increasing the quality of moderation on each server.

That’s enough for the introduction, let’s settle down for a story of making World War 3 work on a Linux server. This is going to be a bit more technical than usual, but there’s no way to simplify this topic in a way that makes sense for people that don’t know anything about server hosting – we will try, though. If you are someone that wants more information on this topic, you can head out to our forums and ask – we’ll try to answer as best as we can.

Configuration

To start this task we had to test a lot of software and tools that would make it possible and work. We finally landed on a combination that worked for us and started the work.

Cross compilation

Our first plan was to use cross-compilation. It basically means that you can build a program for a platform (like Linux), not actually building it on the target platform (so using Windows). We wanted this to work, because all our development pipeline is based on Windows, and using Windows for building the Linux version would be an ideal solution. This step took a long time, due to various problems and the basic issue of each try taking a long time.

During the compile step* we had multiple issues with engine libraries and plugins coming up with errors. Those were sometimes really cryptic and required clever solutions to work around and fix.

* Compilation – in a very, very simplified way, it’s just a step that takes the code written by people and turns it into something that the computer can understand.

After fixing all of the library and missing file errors, we had to get into the game code itself, which was using some features existing only in the Windows SDK or were unavailable for clang, which we were using at the time for this task.

After reworking some of the code to work on both Windows and Linux, we successfully compiled the game and started the cooking process. Cooking is taking all of the data that is in our game project, packaging it and putting it all into a state that is optimized for performance and not editing and vastly smaller than the massive project size we work on on a daily basis. This step went fine and we prepared to launch it on the Linux machine.

Unfortunately, the program started and exited immediately with and “Unknown Error”. Debugging this problem proved to be a very fruitless effort, as debugging from inside the Linux OS still had Windows path files embedded in it and was leading us to files that are not present on the machine, since the program was built using a different system.

We then went to remote debugging, which is, simply put, connecting to the Linux process using Windows debugger and checking what is happening – but that also failed and after a few more tries and ideas, we decided to try a different approach – which might give faster results.

Native compilation

We configured a Linux machine for this, downloaded a clean UE4 engine and built the editor using this setup. It was a success, so we went to open the World War 3 project in the clean editor and it of course failed – since our game relies on changes we made to the engine, it wasn’t a surprise, but gave us valuable information on what needs to be changed. After finding the issues and fixing them it was smooth sailing with building the server executable for Linux.

Current State

Currently we can build and cook the game under Linux, we can launch the project editor and play the game from Windows, connecting to a Linux server.

We’ve also switched our Master Servers to Linux, but that was a simple task, since it was always designed to do so and was tested on Linux since it was remade about a year ago.

Current Challenges

Because the porting effort took some time, we still have some things to do, mainly updating the Linux version to the current one and keeping it that way. Our Linux version is currently around half a year behind the Live one (this doesn’t mean we have to redo the work, it just means we have to test it after updating and fix any small issues that show up).

Additionally, we have to properly test the performance difference and stability. For this, we will be switching our PTE servers to Linux first in the coming weeks and then, if everything works fine, we’ll make the change on Live servers as well. To properly test this, we’ll need some time with our players, getting their feedback and feelings on how the game works and if it’s the right direction.

Conclusion

It was a long road and there’s still some ground to cover, but from our internal testing it looks like a step up. We hope you understand why we’ve been quiet on this matter for some time. We hope to see you on our brand new Linux servers in a few weeks and in the next Weekly Report on Monday!