Back to Linux! Which distribution to choose as a developer?
After I've spent some time with Windows due to my work and my hardware not being enough for a dual boot scenario, the time has finally come to go back to the only operating system that I feel comfortable with, GNU/Linux. To be 100% honest with you I switched back about a month ago at this point and I've been trying to find a distribution to suit my needs both as a general-purpose operating system as well as a great workstation for a developer.
What I excluded from the start
1. Ubuntu
Even before I switched back to Linux, I knew that some of the distros out there wouldn't be able to fulfill my needs. Some of them, such as Ubuntu are actually pretty good Linux distributions and I can recommend it to beginners, but I wouldn't be so keen on recommending it for development purposes, especially if you're going to use newer packages. The heavy reliance on snap packages is a drawback since they're confined and the functionality is not 100% there yet for a few cases. If you need a package that's not made as a snap and you don't want the version that Ubuntu provides you, you'll have to search the internet for a PPA(Personal Package Archive), which is a software repository maintained by a third party. From a software engineer standpoint, the main problem with PPAs is that some of the libraries you're going to install from one PPA won't be compatible with other libraries you have on your system, also don't even get me started on the security problems of using obscure and unverified PPAs.
2. Arch Linux
Arch is another wonderful distribution that unfortunately, I wouldn't recommend to a developer because most packages will reach you as soon as the upstream projects push their updates, which means that when you update your system you'll probably get minimally tested software that can lead to breakages.
The truth is that software often doesn't play nice with other software and developers can't test all the combinations that might arise on each machine out there, therefore as more time passes more of those bugs are caught and resolved so, in the end, you can get a fairly stable package. Does that sound nice? Well, this doesn't happen in Arch.
3. Other Distributions
Most other distributions out there are based on Ubuntu, so they're already out of the window. Others are hard to set up like Gentoo so that's another no-no. What is left then?
What Linux to choose as a developer?
While this is a very opinionated article and might not suit your needs, the distributions that I am going to recommend will ensure a higher degree of compatibility with some of your teammates that use Windows, where software is actually on the bleeding edge. A lot of people think of Linux as an operating system that has newer packages than Windows, but that's not actually true, quite the opposite.
If you want to develop software on Windows you usually get your packages from the official sites, where you're most likely to download the latest version. And while you might create something amazing, you'll find that when trying to deploy your project on your Ubuntu Server, the packages used by this popular Linux distribution are older than what you used. Sometimes, much older.
That's why Docker was invented, but Docker might be overkill for a project that's relatively small like your personal blog, and you also don't have an incredibly powerful server. Even though Docker containers are much smaller than traditional virtual machines, they'll still have a big impact on an underpowered server.
Without further ado, here are a couple of Linux distributions you might want to keep an eye on as a developer:
1. Fedora Linux
Fedora is probably my favorite operating system, it is fast, it is stable, it has very new packages and the team behind this project is not afraid to always integrate new technologies, literally pushing the Linux desktop forward.
As a developer, you might or might not care about the latest improvements in the desktop department, but that's not why you'd want to install Fedora anyway. The reason why this distro is so good is that it's backed by a big corporation, Red Hat, which as of late is part of IBM. While the server distros released by Red Hat are actually closer to the Ubuntu model, familiarizing yourself with this ecosystem will definitely make you better at interacting with your servers at work or even your personal ones.
Most companies run RHEL(Red Hat Enterprise Linux) or some derivative like CentOS or Oracle Linux (yes! that Oracle) and they're all based on the work done in Fedora. Fedora becomes suddenly a very good way to gain some experience in the Red Hat ecosystem.
Another incredible feature of Fedora is that its packages are not frozen in time until the next release. They are still tested, unlike Arch, but the team behind Fedora tries to provide you with updates as soon as they come out and they've been vetted as "stable enough" so you can keep up with the way Windows users get their updates.
2. Manjaro Linux
"Whoa there! You said you don't use Arch for development! Isn't Manjaro the same thing?"
Sure, Manjaro is based on Arch Linux and a lot of packages overlap, but there's an important difference. Manjaro holds back updates that come from Arch, in order for them to get tested properly before making their way to your system.
Another benefit of using Manjaro is that you won't have to upgrade every 6 or 12 months to another release. As long as you do your updates, you'll always have the freshest version of Manjaro. If you come from Windows this method is definitely going to be more familiar since there are no release points in Windows, or well... there are, but they are not the same thing as they are in Linux, I mean... you get the point.
Is Manjaro suitable as a server?
The short answer is yes, I'd say that Manjaro is no more unstable than Fedora is, and look at them they're releasing Fedora Server, a special version meant to be run on servers.
In reality, everything depends on your use case, what is the server going to do? Will it be used for testing development builds? Will it be public facing? Depending on those answers you might want to go with a more static distribution that doesn't get updated all the time, not because you'd be unable to fix something if it breaks, but because you don't want to invest the time to do that.
The reason why corporations don't usually run Fedora Server or Manjaro on their servers is not that they don't have capable engineers, but because the time they spend fixing a breakage could be spent doing something else, and for companies, time is very valuable. They prefer to take some time once a couple of years and migrate their whole infrastructure to a newer Linux version, then keep it updated all the time.
Who knows which path is best? I think that they both have advantages and disadvantages and this is a very personal decision. I do run a Manjaro server at work, but we don't exactly put things on it that the client can interact with. Those run on Oracle Linux.
What did I go with, in the end?
Even though I like Fedora a lot and still is my favorite distro, I ended up going with Manjaro for now because I wanted to see how a rolling-release Linux distribution behaves over time. I heard both the dreadful stories about how unstable they become as well as the wonderful ones about how you can update them ad infinitum and nothing ever breaks. I plan to run it at least until the next Fedora release comes around which should be in Spring, so there's plenty of time to test out how sturdy everything is.
Since I got newer hardware as well, I was also able to fully enjoy all the great things the Gnome Desktop has to offer and no longer had to care about RAM or CPU consumption. Maybe Linux can run on much less powerful hardware than Windows can, but this doesn't mean that there are no benefits when running it on a new, shiny machine with great performance.
Another thing I love about Manjaro is that it's not so strict about which packages it includes in its repository. For example, Docker is not available by default in Fedora, because the license is not free (in the freedom sense) as it restricts users from using Docker to offer Containers as a service type of solutions.
However, the usage of Docker is still very much allowed for other use cases and I'm glad I can just grab it in Manjaro and get to work without having to Google how to get it installed on my machine.
Also, development is not the only thing I do on this machine. I do all kinds of stuff and Manjaro, being based on Arch has access to what is probably the largest software repository there is in the Linux desktop world, the AUR(Arch User Repository). Everything I need is there and I don't have to search the internet for installation steps.
Ending thoughts
In the end, I think that rolling-release distributions are grossly misrepresented as unstable and unusable for serious work. We don't run a Manjaro server just for fun at work, we run it because a recent open-source project we started using just won't build with the old packages that come with Oracle Linux (which by the way are still newer than what Ubuntu LTS or RHEL come with) so there's a great case for distributions such as Manjaro and Fedora to be used in corporate environments.
As a distro for personal use, Manjaro also checked all the boxes for me. Great hardware support so I can also play some games, great performance, and overall a fluid experience thanks in part to the Gnome Desktop.
What's your opinion on the best Linux distributions for developers? Would you go with Ubuntu of would you chose something more recent? Let me know!