Why You Should Try Ubuntu as Your Daily Driver OS

Drew Wiens
12 min readSep 15, 2019

A Software Developer’s Retrospective After Using Ubuntu 18.04 for 9 Months

TL;DR If you are a software developer and were turned off by Linux at some point, you should really try Ubuntu because you are missing out on a better development experience.

As a software developer in the Angular and Node.js world, daily work under Windows 10 was often a poor experience for me. It was riddled with productivity hurdles that many of us know all too well:

  1. EBUSY, EPIPE, and other “E-” errors breaking open source tools that expect Unix-like access to files,
  2. Long npm installs and Angular CLI compiles caused by Windows’ poor handling of large numbers of files clashing with dense node_modules folders,
  3. OS processes like Windows Defender that would randomly rev the CPU,
  4. Hostile Windows updates that take over the entire system, sometimes for the better part of an hour,
  5. No built-in package manager, and
  6. A downright terrible built-in terminal.
An example of the kind of errors I encountered regularly in Windows. The built in terminal is so bad that it’s common to use third party terminals like Git Bash.

After using Windows 10 at work for ~1.5 years, I finally dual-booted Ubuntu 18.04 to try it out as my primary OS, i.e. beyond just in a virtual machine. The experience was so good that Ubuntu 18.04 is now my daily driver on my laptop, desktop, and tablet.

I Didn’t Expect to Like Ubuntu as a Desktop OS

I had used Windows 7–10 pretty much continuously since ~2006, so I expected to move on from Linux as a daily driver fairly quickly. I had briefly used Ubuntu 12.04 in undergrad for two semesters, which had been just an okay experience. Default configurations were not always correct, and figuring out how to configure things could be fairly difficult. It seemed like there was not a lot of indexed beginner-friendly content that I could easily find with naive Google searches.

Weary of laptops that kept falling apart physically and losing their value after only a few years, I purchased a used 2015 MacBook Pro in grad school due to Apple products’ excellent build quality and resale value. I used Windows via Bootcamp almost exclusively on that machine as I was in school for electrical engineering and many software tools I used were either only available on Windows or I owned Windows-only licenses for them, e.g. EAGLE CAD. Later I started to use macOS more, and, due to my previous experience with Ubuntu, I came to think of macOS as the only polished Unix-like desktop OS. I don’t think that this is as true anymore because Ubuntu is just so… good.

Ubuntu’s Advantages Over Windows 10

After using Ubuntu 18.04 daily for 9 months, at work and home, I’ve found that Ubuntu provides an excellent and fast desktop OS experience and a measurable productivity-boost over Windows 10 for software development for three main reasons:

I. Package management greatly simplifies installing software

Installing new software is really tedious on Windows because the pattern is to have the user download an EXE from a website and then send the user down a series of GUI screens, even if there is really nothing that needs to be changed during install. In Ubuntu — and most Linux distros — installing software is almost always just one terminal command (in Ubuntu/Debian’s case, it’s “apt”), and that includes downloading all the dependencies. From then on, the package can be managed easily from the terminal, e.g. upgrading or uninstalling.

For typical end-users this doesn’t matter because software installs are rare for them, but software developers are constantly installing various tools needed to work on different projects. For these reasons I have found that installing and managing third-party software on Windows gets old really fast. The package management experience is slightly better in Ubuntu than in macOS IMHO where you usually use a third-party package manager (homebrew) that is not integrated into the OS.

The built-in terminal has tabs!

II. System updates occur seamlessly in the background

This eliminates the deadweight loss of waiting for Windows updates to complete. There is no downtime during updates in Ubuntu! You simply click an “install” button at a time that’s convenient for you, and it proceeds in the background without interrupting your work. Sometimes a restart is needed to complete the update, but you get to choose when to do it. This is totally different from Windows where updates take over your system and you have little room for choosing when to do the update and any required restarts.

Note: Ubuntu even gives me BIOS updates this way. I think this happens because my current laptop, Lenovo X1 Carbon, has first-party vendor support with Canonical, the company behind Ubuntu. Even if your laptop does not have certified Ubuntu support, you still get OS and third-party updates this way. I do feel that seeking out a laptop model that’s Ubuntu certified is worth it because there are engineers out there making sure that your particular hardware is not broken by a default install of Ubuntu, but it’s certainly not a requirement to have a good experience using Ubuntu.

System updates are just a dialog in Ubuntu, and you can keep working while it installs.

III. Filesystem operations are faster than on Windows

The Linux filesystem solves a huge pain-point in using Windows with node_modules dependencies: Windows is just extremely slow to handle large numbers of files. I actually measured this on my machine in Windows and Ubuntu 18.04 on the same large Node project. Keeping everything the same, I found that many npm and Angular CLI commands were >2x faster in Ubuntu 18.04 than in Windows 10:

Open source tools can be much faster in Ubuntu 18.04 than in Windows 10 due to the file system.

IV. More open source contributors run Unix-like OSes than Windows

It’s no secret that software tends to work better on the platforms their developers use. Open source is no different, and the bulk of open source contributors simply don’t use Windows. So these tools tend to work better on e.g. Linux and macOS than on Windows, and this has definitely held true in my experience.

The Release Notes for Microsoft’s VSCode always seem to show the app running on a Mac, not Windows 🤔

V. You will become comfortable with Linux

Most web backends run in Linux containers, so it’s generally a good investment as a software developer to become more comfortable with Linux and bash. By using Ubuntu regularly you gain Linux experience “for free”.

The Pros Outweigh the Cons

Any Linux distro requires more sacrifice than Windows 10 to achieve the same goals, or so I thought. I have not found much truth in this with Ubuntu 18.04 because:

I. Ubuntu 18.04 is configured (almost) correctly out-of-the-box

Ubuntu has pretty much solved the kind of productivity drain that you can get when trying to switch to Linux as a daily driver. I had experienced this previously with Ubuntu 12.04. That had mostly included many hours trying to figure out how to change simple things in the OS or get various drivers to work that would have otherwise been simple in Windows. Ubuntu 18.04 seems to pretty much just work. Most OS settings are now GUI screens in the Ubuntu Settings app or the GNOME Tweaks app, and lots of software is available in the Ubuntu Software app, i.e. the “app store”.

Settings that do not appear in the Ubuntu Settings app can often be found in GNOME Tweaks.

There were a few exceptions where the default configuration was not correct for me, mostly around memory management and vendor-specific firmware. For various reasons, Ubuntu and most other Linux distros default to settings that “grind the system to a halt” when it runs out of RAM. You can mitigate this by changing the “swappiness” and increasing the swap space. The reason for the default appears to be historical: swapping to disk used to be extremely slow because magnetic spinning disks are slow, but swapping is now pretty fast since most people now have SSDs. So the default memory management settings are wrong and you should change them.

Also, on my 6th generation X1 Carbon, the default thermal throttling settings in Ubuntu were too aggressive. A fresh install of Ubuntu 18.04 would slow way down after a minute or two of CPU intensive work on the X1C6 since CPU throttling kicked in at a temperature that was just way too low. I was able to fix this issue pretty easily by following steps here and here.

One other issue I ran into was a show-stopper, but not really Ubuntu or Linux’s fault: the newest firmware for my Asus motherboard was faulty and caused the computer to crash. It behaved like a hardware failure since the problem started happening in Ubuntu and Windows, but it was actually caused by Ubuntu automatically applying the latest firmware update. A post by Asus recommended rolling back the firmware version, which fixed the problem. So good vendor support is generally a good idea. Some manufacturers like Lenovo and Dell do their own testing under Ubuntu on certain models. These are “certified” under an Ubuntu program that you can find on the Ubuntu website. You can look up these particular models here.

II. There were good replacements for (almost) all my software

There just seems to be a lot more support for desktop Linux software than there was ~7–8 years ago. Most Windows apps I used had Linux versions. These included Chrome, Brave browser, VSCode, VirtualBox, OBS Studio, FileZilla, Postman, VLC, GNU Octave, and Calibre. When there was not a Linux version — as was the case with SourceTree, Microsoft Office, and KeePass — good alternatives were available: Git Cola/gitg/gitk/qgit, LibreOffice, and KeePassXC.

Many desktop apps are available in Linux versions. Some are easily installed by the apt package manager or as “snaps” in the Ubuntu Software app like OBS Studio, shown above.

The only Windows app I encountered without a Linux solution or replacement was Skype for Business, a.k.a. the Skype “web app”. This has no Linux equivalent: it does not work in Wine, and there are no first- or third-party Linux apps for it. I have resorted to using a Windows 10 VirtualBox VM to run Skype for Business, and if I have to screen share then I boot my tablet in Windows and Chrome Remote Desktop into my laptop. It’s really not great — this is my main (really only) pain point with Ubuntu.

You can install Windows 10 in a VirtualBox virtual machine to run any Windows-only apps, like Skype for Business. Of course, if you connect it to the internet it will still update itself once in a while!

III. Solutions to problems are now really easy to find

This is really significant because the solutions to the kinds of problems I’m talking about in #1 are usually really simple if you know what file to edit and what command to run. Finding this information used to be hit-or-miss, but today most of the time the first few results of a naive Google search will land you on the right StackOverflow or Ubuntu forum page. There is a concerted effort to make Ubuntu accessible to people with all levels of experience.

Tips Before Installing Ubuntu

To make sure your experience trying Ubuntu as a daily-driver is as good as it can be, here are a few tips from my own experience:

I. Install an LTS (Long-Term Support) version rather than the latest

The LTS versions of Ubuntu are much more stable on a wider variety of hardware than other versions. When 19.04 landed (not an LTS version, even though it ends in .04) I upgraded my X1 Carbon with a fresh install. This broke something with the display driver — it may have been external monitors no longer working, I can’t remember now — but I re-installed 18.04 after a few hours. The LTS versions generally “just work”, and Canonical uses interim versions to iron out issues with new features. Unless you really like messing with Linux or living dangerously, stick with LTS versions, especially if you are trying to use Ubuntu as your daily driver at work.

II. The quality of drivers and firmware updates varies by computer

If you can, I’d recommend trying to acquire a PC that’s “Ubuntu certified.” I know it sounds silly — why would some “certification” matter for running an OS that should work on any machine — but the fact that there is at least one FTE at the vendor who’s job is to make sure Ubuntu runs correctly on the hardware is insurance against show-stoppers like buggy drivers that never get fixed or firmware issues like the one that hosed my Asus laptop. Again, these issues are not really Ubuntu/Canonical’s fault, rather the result of hardware vendors focusing almost exclusively on making their machines work on Windows and no other OS. The site where you can find Ubuntu certified models is here.

III. Dual-boot Ubuntu and Windows rather than single-booting

Since you never know when you will need to run some software that only has a Windows version, it’s a good idea to still keep Windows around. You can get away with single-booting Ubuntu and keeping a Windows virtual machine on hand, but then you are RAM-, CPU-, and GPU-limited. Native booting is always better than VMs, and the sacrifice in disk space on your main disk is small: a fresh install of Windows 10 is between 16–32 GB, depending on what version of Windows 10 you installed (there are many, actually), how much RAM your machine has (swapfile) and whether hibernation is turned on (you should turn it off to save disk space).

Personally I tend to keep Windows 10 installed in a ~64–160 GB partition, depending on how much I think I will use Windows. It’s not too difficult to resize the partitions later, so don’t worry too much about starving the Windows install of disk space as you can expand it later if needed.

Install Windows 10 first and then Ubuntu, and then you will have the option on startup of which OS to start.

When dual booting my tablet (Dell XPS 12 9250) I ran into an issue where the Wifi adapter was broken in Windows when booted from Grub2, the default bootloader. Simply installing rEFInd with the Ubuntu apt package fixed the problem for me. Look into rEFInd if you have problems with Grub. It’s a single-command install in Ubuntu/Debian, and it requires no configuration because it finds any EFI OSes on your system at runtime.

IV. You Can Boot the Other OS Inside a VirtualBox VM

Scenario: You want to be able to run Windows apps while booted into Ubuntu, and they don’t work in Wine. If you don’t want to incur a double penalty on disk space by keeping both a Windows partition (for native booting) and also a separate Windows VM (for booting Windows in Ubuntu), you can now truly boot physical partitions in VirtualBox since version 6. So far I have done this the other way around, i.e. booting the Ubuntu 18.04 partition from Windows 10. That worked well, although it was a little bit slower than a normal VirtualBox image since I had to turn off Nested Paging to get it to boot on my machine. I plan to set up a VirtualBox VM in Ubuntu that boots my physical Windows 10 partition as well.

This is beyond the scope of this article for sure, but it’s an option that you might find useful. If you do go this route, it’s a good idea to backup your drive to an image, e.g. to an external USB hard drive with Clonezilla, since it’s possible something could go wrong in the VM and break your Windows or Ubuntu install, since it’s booting from the actual disk. You want to be able to easily restore your machine if you wreck it.

Conclusion

Ubuntu used to be much more difficult to deal with as a daily driver, but today it is quite polished. Ubuntu provides a faster and more streamlined experience than Windows 10 for software developers, particularly those in the Node.js ecosystem where node_modules folders are packed with files, or any ecosystem where slinging tens of thousands of files is a regular occurrence even in what are otherwise relatively simple projects. System updates happen while you work, when you want it to, and almost all the software on the system is managed by the built-in package manager, apt. Finally, pain points encountered are usually straightforward to Google for a solution, and the solution is usually editing a config file and/or entering a command in the terminal.

--

--