I've been using Ubuntu as my main desktop operating system for a few weeks now, and although it isn't the perfect operating system by any stretch (which I will talk about later), it's been way more stable than when I used it in the past, and I love using it as my operating system now. Overall, if you don't do content creation or play games with incompatible anti-cheats, Linux might be for you too and you should check it out.

What about software support?

As for software support, it's getting a lot better!

Things like your web browser are supported on Linux and really always have been, but they seem to perform much better than they did before from my experience. Brave has been a ton more stable for me on Linux than it ever was on Windows.

Gaming is getting almost perfect with Wine advancing significantly in the past few months. However much I have had problems with Valve in the past for their questionable handling of security vulnerabilities, they have made huge advancements which have lead to Proton (their fork of Wine) being able to run the Halo Master Chief Collection. The primary issue with gaming is now companies making anti-cheats which are incompatible with Wine and not putting effort into caring about supporting it. Easy Anti Cheat is a good example of this, although some attempts of debugging it are under way by people in the Wine community. With that said, this isn't really an issue with Wine and is more so an issue with developers using incompatible anti-cheats. If you want to play a game and this is an issue for you, you should make your voice heard!

Whilst nowhere near perfect yet, the list of tools available for content creation is growing. Alongside developments in Wine meaning that a lot more Windows software is running on Linux, DaVinci Resolve 16 (a very capable video editor) is now available on Linux and is free! For things like photo editing, GIMP exists and older Photoshop versions run with Wine, although this space is nowhere near perfect yet unfortunately. I certainly expect newer CC versions to run using Wine soon though to be honest.

What about device support?

Except from needing to update my kernel to be able to use my network adapter, driver support has been perfect for me! Since that incident, everything has been plug and play. There's not much more to add here, great work Linux development team!

How is developing software with Linux?

Developing server side software is fantastic on Linux.

Linux is fully POSIX compliant which helps a lot when it comes to development. For example, in Python, the uvloop library will not install on Windows due to this. This means that you'd need to run your application inside WSL on Windows. Whilst WSL is very good, it isn't perfect and can lead to annoyances when debugging. This extends to file system code. For example, you might type the wrong slash type, causing the code to run fine in your development environment, but not work properly in Linux. Using Linux as your primary operating system solves this because if it's going to fail, it'd fail during development too.

Firstly, if you're not developing containerized software (or like me prefer to run your software outside of its container during development for debugging), you will likely be running the application on Linux in production. This means that using a Linux environment to develop in means you have to worry about making your dependencies support another OS for development and you have to worry less about OS specific edge cases since you can target one platform. Also if you use Redis, you don't need to worry about WSL for using Redis, you can instead simply run it on your system. It's so much more relaxing.

If you are developing containerized software, Linux helps to save a significant amount of resources in your development environment. This is because Docker requires that it is ran on a Linux base environment. This means that on Windows and macOS, Docker runs in a virtual machine which does reduce the performance of it somewhat. On Linux, this is a non issue since you are using the kernel. This has lead to me using significantly less RAM personally.

With client side software, it's basically the same except you will have issues targeting iOS devices due to Apple not releasing SDK's for Windows and Linux. However, you could still freely write your code and use a macOS CI to handle the iOS building. This does, however, mean that if this is something you regularly do, sticking to macOS might be a better idea for you.

How is it usability wise?

Stability wise, Linux seems great now. There have been periods of time in the past where I tried to live with Linux as my primary operating system and could not do it because of various instability issues, however this seems fixed now. Windows would frequently have random crashes with me, and Linux has been completely stable as I'd expect from it.

Having a decent set of command line applications at your disposal is very useful. With Windows, you have Powershell. Whilst it's better than nothing, the syntax was very painful and annoying to use. Bash is very simple and allows you to very simply write scripts to do actions. No need to worry about security policies, it just works.

If you are not comfortable with CLI's, a lot of preferences that previously could only be done with a CLI now have GUI's which you can use. This makes Linux a lot more appealing to users which are intimidated by the CLI. For example, using the Ubuntu distro, the Ubuntu software store allows users to easily install software without any difficulties.

Whilst I realize this is going to be distro dependent, boot times are also significantly better with Linux. With Windows, I'd spend a lot of time waiting around for startup programs. With Linux, it takes ~5 seconds to hit the login screen, then ~4 seconds to load all my desktop to a usable state. This is significantly more usable.

It's not a perfect out of box experience though...

With all of that said, it still was not perfect right out of the box for me. Whilst Ubuntu (and Linux in general) has got significantly more desktop friendly, I still had some initial install issues. It's worth noting that these were likely caused by my hardware being fairly new and not being supported properly in the current Ubuntu LTS release.

When I first tried to launch the setup USB, it crashed before it could get to the desktop. It turns out I had to boot it in safe mode from the USB since my graphics adapter was not supported, then I needed to wait for the proprietary graphics driver to be installed so that I could use my displays properly.

I also realized when I got into Linux that I had no network adapter support. This was because support for my network adapter was introduced in Linux 5.8, and the Ubuntu release I used had the Linux 5.0 kernel. This technically means I am using a unsupported Ubuntu configuration since I have the LTS release with the latest kernel which it was not shipped with, although this does not seem to have caused any issues thus far.

With all this said, installing a new kernel version was not difficult, and I would say it's significantly easier than installing a driver on a older Windows version. All I needed to do was simply install Mainline and then select the latest kernel release. It was that simple!