Making my own tablet OS: Installing and modifying Debian GNU/Linux on Surface Go

Mar. 9, 2020

For some years now I use a tablet as main computer, I like its versatility. But, most tablets come with a locked down operating system, like iPadOS, Windows 10S or Android. As I like things my own (weird) way, I wondered if I could escape these "software jails" by installing a free operating system on a tablet. It's possible, read along to find out how I escaped!

Hardware: Surface Go

If you're considering installing another operating system on a tablet, you should definitely do some research on tablet hardware. Not all tablet computers can be reinstalled with a custom operating system, some have locked bootloaders, proprietary chips or other hurdles.

Microsoft Surface Go - an ultra portable 10" touch screen tablet computer (with type cover, pen and USB-C to ethernet and USB 3.0 adapter)

Meet Surface Go, it's a relatively small tablet (10" screen size). It has a "normal" 64-bit Intel processor, it has a bootloader that can be unlocked and its hardware is well known as it is similar to the older "Surface Pro 6". Older hardware is a good thing if you're thinking about free operating systems. The older hardware becomes, the greater the chance that people have found ways to make it work with free software, such as Debian GNU/Linux.

Update first!

Before you erase the proprietary operating system from the tablet, you should use it to update the firmware. Updating firmware from anything other than Windows is virtually impossible. The new firmware for the Surface fixed many bugs and improved the tablet's performance - you don't want to miss out on this!

Check for updates manually using Windows Update

Note the many firmware updates, you can only install them from Windows

It might take some time, be patient or take photos :-)

Choosing an operating system

Once you have selected the tablet hardware, you should choose an operating system. For various reasons, I recommend that you consider choosing a free operating system. With free software you are - quite literally - free to make it work as you like. I like Debian, a GNU/Linux distribution.

Debian GNU/Linux - The universal operating system

The Debian GNU/Linux distribution is among the oldest distributions available. It is special because its maintainers have ratified a social contract, a document providing guarantees that Debian is open and free. It can be installed on almost any hardware, hence their slogan "the universal operating system".

Creating a bootable USB stick

Installation of Debian is done using a bootable USB stick. I used another computer to download the installation files from https://debian.org. You must create an installation medium to get these installation files to the tablet computer.

You can use another computer to create a bootable USB stick, I used my ThinkPad X1

On another laptop I used some terminal commands to create the bootable USB drive. If you're on Windows or Mac you can use other tools to get this job done, like Disk Utilities, Rufus or unetbootin.

Starting the installer

Connect the bootable USB drive to the Surface tablet, I used a USB-C to ethernet and USB 3.0 adapter. The wired network connection comes in handy during installation because Debian often cannot load firmware/drivers for the proprietary WiFi chips.

Connecting the bootable USB drive to the Surface tablet using the USB-C to USB 3.0 and ethernet dongle

The easiest way to boot the Surface tablet from the USB drive is through "Advanced Startup Options" in Windows Settings, it will restart your computer offering you different boot and recovery options.

"Advanced Startup Options" from Windows Settings allows you to use a USB drive as boot medium

Choose "Linpus Lite" to boot the installer

Choose "Use a device" and then select "Linpus lite". With a bit of luck you'll be greeted with the Debian GNU/Linux installer menu.

Debian GNU/Linux Installer Menu on Surface Go - happy me

Proceed with the installation by answering questions like what language you wish to use and what keyboard layout you have. The installer will attempt to recognise your network hardware. Unfortunately many vendors keep their device drivers (firmware) closed, making it impossible for Debian to include them with their standard collection of software (which is required to be free software).

Missing firmware renders hardware unusable during installation

Although it is possible to load these non-free device drivers from (another) USB drive, it's my experience that it is difficult to exactly preload those device drivers that you'll need. My strategy is to connect the computer to a wired network connection during installation and worry about missing drivers afterwards. It's easier to add them later if your system is online.

Installation in progress - note the connected network cable

Graphical user interface

Many apps (web browsing, photo editing, drawing) only work well through a graphical user interface. You can choose from many different options if you use free software. The first choice you need to make is whether you want a full "desktop environment" or just a "window manager".

Desktop Environment

A desktop environment gives you an overall user experience, including panels, system menu's and status applets. It comes with its own set of (system) applications and look+feel. While most desktop environments offer a complete standard configuration, many of them offer advanced options for customisation. Check out their websites, read about their design principles, and choose something you like. Common desktop environments for Debian are:

GNOME: https://www.gnome.org and https://wiki.debian.org/Gnome

Plasma by KDE: https://kde.org/plasma-desktop and https://wiki.debian.org/KDE

XFCE: https://xfce.org and https://wiki.debian.org/Xfce

LXDE: https://lxde.org and https://wiki.debian.org/LXDE

MATE: https://mate-desktop.org and https://wiki.debian.org/MATE

Window Manager

Unlike a full blown desktop environment, a window manager only provides a way to manage application windows. Window managers are chosen because they are extremely minimal, requiring all extras to be manually added by the user. If you like to make your own decisions, choosing a window manager might be a good starting point for your graphical user interface. Common ones are:

awesome: https://awesomewm.org

Openbox: http://openbox.org/

i3wm: https://i3wm.org

dwm: https://dwm.suckless.org

xmonad: https://xmonad.org

You should really take your time to make your own decision, as choosing the foundation for the graphical user interface greatly impacts the overal experience. It's a personal choice, driven by preferences and your willingness to manually adjust it. My choice, because I have years of experience with it, is to use the Openbox window manager in combination some extra tools that optimise my experience.

Optimising the experience

This is an essential step when you're installing a free operating system on a computer. After installation, the default settings are often not tailored to your specific hardware, preferences and use cases.

These where some of things I did on top of the Openbox window manager:

Upgrade the standard 'stable' release of Debian to its more cutting edge 'unstable' branch. This means you'll get new software versions faster, but things might sometimes break. I like new software (as I am a developer), you might reconsider this.

Install various non-free device drivers (firmware) to make all hardware components work, Debian has a detailed page on this: https://wiki.debian.org/Firmware. It might requires a little research, log file analyses, to figure out which firmware your computer requires.

Use gnome-network-manager and its applet to see the status of the WiFi and to allow me to quickly connect to different wireless networks

Install Sound on Debian to make the tablet's speaker work. Make sure to check the volume/mute options before you consider your audio system to be broken (by default, it is muted!)

Install Blueman to enable me to connect to various Bluetooth devices

Use tint2 as status bar, task bar and quick launch bar (offering shortcuts to frequently used apps)

Create a script that auto rotates the screen contents if I rotate the tablet

Install tlp to dramatically improve battery life

Install Compton to greatly reduce 'jarring' (improving smoothness) when scrolling with the tablet display in portrait mode

Install my favourite apps on Debian GNU/Linux: Firefox and Chromium web browsers, Evolution mail/calendar/contacts app, Thunar file browser, XFCE-terminal terminal emulator, GIMP image manipulation, Inkscape vector graphics editing, Filezilla SFTP client, Libre Office, Xournal pen/notes

Install onboard, a virtual keyboard to allow text input when the hardware keyboard is disconnected.

Manually applying a linux kernel fix to make the Surface Pen work with the newest Linux kernel, requiring my to compile my own patched kernel.

Disable Secure Boot to make my custom Linux kernel bootable

Compiling my customised Linux kernel

Compiling the Linux kernel on a Surface Go takes some hours

The 'onboard' virtual keyboard

Pen input works using my custom linux kernel and the Xournal app

Using the customised operating system on tablet to create content for this blog

Reading an article on my tablet in portrait mode

Using the customised Surface Go (right) for programming, similar to how I work using an iPad Pro (left)

Conclusion

After many hours of experimenting and finetuning I created a tablet operating system experience that works. I can use it to read, draw, program and design.

The sense of understanding you'll develop during the whole "build your own OS"-thing is incredible, both from a technical and user interaction perspective. It's a great opportunity to learn and hone your skills!

Update:

Read my follow up posts on:

How to migrate and manage your photo library using free software, I now use my "WillemOS" tablet to do this!

Setting up seamless file synchronisation between your tablet and smartphone using open protocols and free software.

Refining my tablet OS with Surface Go 2 i3wm and 4G/LTE