{
 "id": 36985,
 "slug": "2020-03-09_making-my-own-tablet-os",
 "url": "https://agents.willem.com/en/posts/2020-03-09_making-my-own-tablet-os/",
 "source_url": "https://willem.com/en/2020-03-09_making-my-own-tablet-os/",
 "language": "en",
 "date": "2020-03-09",
 "published": "2020-03-09T00:00:00+01:00",
 "created": "2025-06-26T22:10:03.099000+02:00",
 "updated": "2026-04-03T14:34:51.962000+02:00",
 "title": "Making my own tablet OS",
 "subtitle": "Installing and modifying Debian GNU/Linux on Surface Go",
 "summary": "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!",
 "topics": [
  "Freedom",
  "design",
  "experiment",
  "hacking",
  "linux",
  "minimal",
  "tablet"
 ],
 "author": {
  "name": "Willem L. Middelkoop",
  "url": "https://willem.com"
 },
 "translation": {
  "language": "nl",
  "url": "https://agents.willem.com/nl/posts/2020-03-09_mijn-eigen-tablet-os-maken/",
  "source_url": "https://willem.com/nl/2020-03-09_mijn-eigen-tablet-os-maken/"
 },
 "image": "https://willem.com/global/images/69c69c28c60b.webp",
 "image_width": 2560,
 "images": [
  {
   "url": "https://willem.com/global/images/ab9c8e745c92.webp",
   "description": "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)",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-1.jpg"
  },
  {
   "url": "https://willem.com/global/images/382661906f53.webp",
   "description": "Check for updates manually using Windows Update",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-2.jpg"
  },
  {
   "url": "https://willem.com/global/images/c9eda8928a1e.webp",
   "description": "Note the many firmware updates, you can only install them from Windows",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-3.jpg"
  },
  {
   "url": "https://willem.com/global/images/af71b0cde6d9.webp",
   "description": "It might take some time, be patient or take photos :-)",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-4.jpg"
  },
  {
   "url": "https://willem.com/global/images/61767ebbcabc.webp",
   "description": "Debian GNU/Linux - The universal operating system",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-5.png"
  },
  {
   "url": "https://willem.com/global/images/96a301b9ec66.webp",
   "description": "You can use another computer to create a bootable USB stick, I used my ThinkPad X1",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-6.jpg"
  },
  {
   "url": "https://willem.com/global/images/8646d08e6a22.webp",
   "description": "Connecting the bootable USB drive to the Surface tablet using the USB-C to USB 3.0 and ethernet dongle",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-7.jpg"
  },
  {
   "url": "https://willem.com/global/images/1aba81e0731b.webp",
   "description": "\"Advanced Startup Options\" from Windows Settings allows you to use a USB drive as boot medium ",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-8.jpg"
  },
  {
   "url": "https://willem.com/global/images/9021f73fd09d.webp",
   "description": "Choose \"Linpus Lite\" to boot the installer",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-9.jpg"
  },
  {
   "url": "https://willem.com/global/images/da801a0461f7.webp",
   "description": "Debian GNU/Linux Installer Menu on Surface Go - happy me",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-10.jpg"
  },
  {
   "url": "https://willem.com/global/images/ab59c48e114c.webp",
   "description": "Missing firmware renders hardware unusable during installation",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-11.jpg"
  },
  {
   "url": "https://willem.com/global/images/d917bfda53e6.webp",
   "description": "Installation in progress - note the connected network cable",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-12.jpg"
  },
  {
   "url": "https://willem.com/global/images/8631db9f2712.webp",
   "description": "Compiling my customised Linux kernel",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-13.jpg"
  },
  {
   "url": "https://willem.com/global/images/416d53ff1e62.webp",
   "description": "Compiling the Linux kernel on a Surface Go takes some hours",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-14.jpg"
  },
  {
   "url": "https://willem.com/global/images/5a77b988dded.webp",
   "description": "The 'onboard' virtual keyboard",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-15.jpg"
  },
  {
   "url": "https://willem.com/global/images/126e903aa197.webp",
   "description": "Pen input works using my custom linux kernel and the Xournal app",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-16.jpg"
  },
  {
   "url": "https://willem.com/global/images/adba635a29f9.webp",
   "description": "Using the customised operating system on tablet to create content for this blog",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-17.jpg"
  },
  {
   "url": "https://willem.com/global/images/947d3ad6683a.webp",
   "description": "Reading an article on my tablet in portrait mode",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-18.jpg"
  },
  {
   "url": "https://willem.com/global/images/df660a485a36.webp",
   "description": "Using the customised Surface Go (right) for programming, similar to how I work using an iPad Pro (left)",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36985_images-19.jpg"
  }
 ],
 "text": "Hardware: Surface Go\nIf 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.\nMeet 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.\nUpdate first!\nBefore 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!\nChoosing an operating system\nOnce 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 (https://willem.com/en/2018-07-20_helping-people-with-free-software/). With free software you are - quite literally - free to make it work as you  like. I like Debian (https://debian.org), a GNU/Linux distribution.\nThe 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\".\nCreating a bootable USB stick\nInstallation 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.\nOn 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 (https://rufus.ie) or unetbootin (http://unetbootin.github.io).\nStarting the installer\nConnect 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.\nThe 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.\nChoose \"Use a device\" and then select \"Linpus lite\". With a bit of luck you'll be greeted with the Debian GNU/Linux installer menu.\nProceed 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).\nAlthough 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.\nGraphical user interface\nMany 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\".\nDesktop Environment\nA 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:\n- GNOME: https://www.gnome.org and https://wiki.debian.org/Gnome\n- Plasma by KDE: https://kde.org/plasma-desktop and https://wiki.debian.org/KDE\n- XFCE: https://xfce.org and https://wiki.debian.org/Xfce\n- LXDE: https://lxde.org and https://wiki.debian.org/LXDE\n- MATE: https://mate-desktop.org and https://wiki.debian.org/MATE\nWindow Manager\nUnlike 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:\n- awesome: https://awesomewm.org\n- Openbox: http://openbox.org/\n- i3wm: https://i3wm.org\n- dwm: https://dwm.suckless.org\n- xmonad: https://xmonad.org\nYou 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.\nOptimising the experience\nThis 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.\nThese where some of things I did on top of the Openbox window manager:\n- Upgrade the standard 'stable' release of Debian to its more cutting edge 'unstable (https://wiki.debian.org/DebianUnstable)' 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.\n- 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.\n- Use gnome-network-manager (https://wiki.gnome.org/Projects/NetworkManager/) and its applet to see the status of the WiFi and to allow me to quickly connect to different wireless networks\n- Install Sound_on_Debian (https://wiki.debian.org/Sound) 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!)\n- Install Blueman (https://packages.debian.org/sid/blueman) to enable me to connect to various Bluetooth devices\n- Use tint2 (https://gitlab.com/o9000/tint2/) as status bar, task bar and quick launch bar (offering shortcuts to frequently used apps)\n- Create_a_script_that_auto_rotates_the_screen (https://linuxappfinder.com/blog/auto_screen_rotation_in_ubuntu) contents if I rotate the tablet\n- Install tlp (https://linrunner.de/en/tlp/tlp.html) to dramatically improve battery life\n- Install Compton (https://github.com/chjj/compton) to greatly reduce 'jarring' (improving smoothness) when scrolling with the tablet display in portrait mode\n- Install my favourite apps on Debian GNU/Linux: Firefox (https://www.mozilla.org/en/firefox) and Chromium (https://www.chromium.org/Home) web browsers, Evolution (https://wiki.gnome.org/Apps/Evolution/) mail/calendar/contacts app, Thunar (https://docs.xfce.org/xfce/thunar/start) file browser, XFCE-terminal (https://docs.xfce.org/apps/terminal/start) terminal emulator, GIMP (https://gimp.org) image manipulation, Inkscape (https://inkscape.org) vector graphics editing, Filezilla (https://filezilla-project.org) SFTP client, Libre_Office (https://www.libreoffice.org), Xournal (http://xournal.sourceforge.net) pen/notes\n- Install onboard (https://packages.debian.org/sid/gnome/onboard), a virtual keyboard to allow text input when the hardware keyboard is disconnected.\n- Manually applying_a_linux_kernel_fix (https://bugzilla.kernel.org/show_bug.cgi?id=206259) to make the Surface Pen work with the newest Linux kernel, requiring my to compile my own patched kernel.\n- Disable_Secure_Boot (https://surfacetip.com/configuring-surface-go-uefi-bios-settings/) to make my custom Linux kernel bootable\nConclusion\nAfter 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.\nThe 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!\nUpdate:\nRead my follow up posts on:\n- How_to_migrate_and_manage_your_photo_library_using_free_software (https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/), I now use my \"WillemOS\" tablet to do this!\n- Setting_up_seamless_file_synchronisation_between_your_tablet_and_smartphone_using_open_protocols_and_free_software (https://willem.com/en/2020-09-16_syncing-files-seamlessly-between-smartphone-and-tablet/).\n- Refining_my_tablet_OS_with_Surface_Go_2_i3wm_and_4G/LTE (https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/)",
 "word_count": 1289,
 "markdown_url": "https://agents.willem.com/en/posts/2020-03-09_making-my-own-tablet-os/post.md"
}