Components Overview

Make sure to read the overview section before continuing, to get a grasp on core concept behind GOW.
gow diagram

GOW is a composition of Docker containers that enable users to stream graphical applications to Moonlight clients.

We wrapped each individual piece of software with the necessary dependencies into its own Docker image and use docker-compose in order to manage the composition of all the necessary pieces.

Streaming host

The streaming host is the heart of this system; it’s in charge of:

  • Encoding the graphical environment (Xorg) and audio (PulseAudio) into a video that will be streamed to Moonlight clients

    This process can be hardware accelerated using VAAPI or CUDA depending on your GPU hardware

  • Translating remote input devices into local input devices (eg: keyboards, mice, gamepads)

    This is achieved by using the uinput kernel module.

Games on Whales currently has support for two streaming hosts: Sunshine (more mature, and the default), and Wolf (still in alpha, but very usable).

Xorg & PulseAudio

These two components are in charge of Display and Audio, respectively.

  • If your OS comes with a desktop environment already, you will most likely want to use that instead of trying to run it in a container.

  • If you’re running a headless system you’ll need to run them in order to run graphical applications. You can use our Docker images for that.

While PulseAudio runs just fine without a real sound device, for best results Xorg should be hardware accelerated using a GPU. That’s the main reason why we choose the full Xorg server over Xvfb. While it’s more complicated to run the full Xorg server, the benefits of having hardware acceleration are too great to be dismissed.

GUIs

Graphical applications can run easily on top of Xorg and PulseAudio — that’s how most desktop environments work!

gui overview

Sharing sockets between containers is the mechanism that enables us to have proper isolation. Instead of having a big single Docker image which installs and runs all the individual pieces of software together, we can decouple them and share only a communication channel.

This means that it’s very simple to make a Docker container of any given GUI application and that same container will work both on GOW or on a normal Desktop Environment, enabling users to have a high degree of freedom on how to use them.

GPU

A GPU is not required to run any of this, but it’s highly recommended for best results.

Sharing a GPU across Docker containers is generally done by sharing the DRM devices (/dev/dri/cardX). This should work as long as your GPU supports VA-API. Notably, NVIDIA cards don’t; instead we provide specific instructions for them.