GNU/Linux: The Good, The Bad & The Ugly!
A deep dive into why Linux is preferred over others for a lot of use cases.
Most of us have used mainstream Operating Systems like Windows & macOS all our lives. But, at the beginning of our career in the world of IT, a lot of us are suggested to learn to use Linux because it's supposedly a better option for all our technical & development needs. In this article, I intend to talk about all the use cases where a computer user would benefit from using GNU/Linux as a desktop Operating System.
What is GNU/Linux?
GNU/Linux is an operating system, a large piece of software that manages a computer. It is similar to Microsoft Windows, but it is entirely free. Usually, when people mention Linux, they're referring to one of the many Linux Distributions that exist out there. Ubuntu, Fedora, Linux Mint, Manjaro, you name it. They all use Linux as the kernel, or you can say, they're Linux-based distributions.
Here are the different components that make up a standard Linux distribution.
GNU/Linux kernel: The kernel which all these various Linux distributions use.
GNU Tools: A standard set of utilities that come pre-installed with every Linux distribution. Tools
Shell: This is the command line interface that you use to input commands into the system, at a broad level. There are a lot of options here too (in typical Linux fashion), but bash is the most used shell.
Display Server: This can be thought of as a server that manages the GUI on Linux. It provides you with the login screen & authentication system, starts up the configured desktop environment/window manager, and so on.
Desktop Environment / Window Manager: This consists of the actual desktop that you boot into after you log into your Linux system. This manages the open windows, your desktop, and the Application Menu, and provides all the functionality that goes into the GUI part of a Linux system. Every major Linux Distribution (except the DIY ones like Arch/Gentoo) comes preinstalled with one out of the box.
This should give you an idea about the modularity of a typical GNU/Linux system. Not only that but once you know your way around the system, you can easily switch to a different component (i.e. a different shell, display server, desktop environment, etc.) as and when you desire, without having to completely reinstall Linux from scratch. This modularity of Linux is one of the many reasons developers prefer to use it.
The Good
Now that we have a basic understanding of what Linux is all about, let's talk about the various reasons why Linux is better for many use cases.
The Linux Command Line
This is by far the most compelling reason to use Linux, especially for development. With the command line, you can get the work done much faster than on the GUI (Graphical User Interface). Also, since most of the servers you'll be working on in the workplace will not have a GUI, you must get your hands dirty on the terminal early on!
Package Manager
There was one time when Windows didn't even have a package manager, while the typical way to manage software on Linux was by using one. Fast forward to today, and while we do have software like Chocolatey & Winget, Linux still offers the best package management system by a long mile. It still is the default way you're expected to interact with software on Linux.
It's the difference between downloading the setup for a piece of software, then running the setup & finally installing it (not to mention that there's no automatic update system built into Windows), versus running a single `apt install` command on the Linux terminal. Pretty cool, isn't it?
The Systemd init system
Another amazing feature of Linux is the init system, or as I like to call it, the service management system. Just like packages, systemd (i.e. systemctl) provides you with a centralised way of managing all the services running on your Linux system. You can also set them to auto-startup on boot with a single command. While this is mostly used on the server side of things, it can also be pretty useful on a Linux desktop, for example, it's the perfect tool for when you want to run a web server to test that beautiful new webpage you created using React.js, on all your devices!
Security
The entire Linux kernel and almost all of the other components that make up a Linux system are open source. This means that the source code for all this software is completely public. While some bad actors may introduce malware into the software, for every bad person, there are a lot more good people who also have their eyes on the same code, checking it for security issues and bugs and fixing them on the fly. Anyone (even you!) can contribute to the code as it's freely available on GitHub. The result of all this is a highly reliable & stable kernel that 'just works'.
There's also another dimension to this. The fact that there are so few Linux users on the desktop and that Linux desktop users are typically more tech-savvy than the majority of PC users, inherently means that Linux is less of a target for hackers and bad actors than the other Operating Systems.
Modularity
Linux at its heart is meant to be a modular system. This means that you can pick and choose exactly what you want to run. While beginner-friendly distributions come with a desktop environment and a standard set of tools & utilities out of the box, you can also swap out components as you like. Everything from the desktop environment to the bootloader can be customised exactly as per your needs. It's so customisable that it becomes way harder to use a mainstream OS once you've gotten the hang of it!
Bonus tip: While it's a good idea to get started with beginner-friendly Linux distribution, as you continue getting your hands dirty and learning more and more about Linux, there will come a point in time when you'll start appreciating the existence of advanced, or as I like to call them, DIY Linux Distributions like Arch Linux or Gentoo. In these, you start with a simple terminal running on the default TTY, and you can build your system from the ground up (also, did I mention that I use Arch, btw? :p). This is when you'll truly begin to appreciate this particular aspect of Linux.
Customisability
This is another side-effect of the modularity aspect of Linux. Not only can you switch each component to a different one, but you can also customise a lot of GUI & command-line elements within them. Desktop Environments like KDE are known to be some of the most customisable ones out there, while shells like Fish & ZSH (the Z-Shell) have a lot more form & function compared to the default Bash shell. You can choose to stay with the default configuration or you can go ahead and spend literal days trying to customise the Linux experience exactly as per your taste (it's also called ricing in the Linux world).
Stability & Reliability
The Linux kernel is built from the ground up to be a reliable system that 'just works'. If it is not for the occasional updates that require it to be restarted, Linux can easily run for years without a hiccup. The only time when you'll face issues with reliability is if you're using unstable software or a flaky driver on your system. Even then, it's really hard to make the entire system fail. In most cases, you can just restart the component that failed (after fixing the issue from the tty) and get back up and running in minutes.
This aspect of Linux is not only valid for the kernel itself but also for the software built around it. But of course, in typical Linux fashion, you also have a choice here. You can choose something like Debian, which maintains old (and consequently, very stable) packages, or you can go with something like Arch, which maintains the absolute bleeding edge versions of the same packages.
Consistency
Consistency is another thing people may look for in an Operating System, but I do feel like it's more of a personal preference than an absolute necessity. By consistency I mean both the consistency of the GUI & the terminal. There are desktop environments like Gnome & KDE, which do get UI refinements once in a while, while there are others like XFCE, LXQt & Cinnamon which barely change with time and are still some of the most reliable and time-tested environments out there.
However, just because some desktop environments change doesn't mean that they're unreliable. Every major stable release goes through a testing phase where all the bugs are ironed out and fixed, so you can choose any stable component you want as per your preference, and use it as your daily driver.
Ease of Backup & Restore
Every software that you install in Linux has a specific location where it stores the configuration files. Global configuration files are usually stored in /etc
, while the user-specific configuration is stored in `~/.config` (where ~ represents your home directory). To back up the configuration, all you have to do is take a backup of these files, and then you can restore them anytime you want to. There's no need to go to the Backup & Restore section of an app or anything like that.
This also means that you can experiment with different types of configurations without fear of losing everything and having to re-install Linux all over. Not only that, backing up your important files is regarded as a good practice in general, and this should get you into a habit of doing it regularly.
The Freedom of Choice
If you're a Windows/macOS power user, you must have noticed that your experience heavily depends on how Microsoft & Apple wants their system to be. I'm not saying that there's anything wrong with it since most computer users aren't tech-savvy and have no problems with someone else making the decisions for them, but it's also kind of limiting if you want to choose how you want in your system.
But, in the case of Linux, you're free to pick & choose pretty much anything within the system. This is what makes the Linux desktop experience different and unique compared to all the other mainstream OS offerings out there.
The Bad
Even though there are a lot of perks to using Linux instead of a mainstream OS on your system, there are also a few problems & limitations. Here are a few of them.
Hardware Support
You may have heard from various places that Linux runs on everything that you can install an OS on. It's even recommended for use in an old system that isn't capable of running the latest version of a mainstream OS or is out of manufacturer support. While this statement is true to an extent, not everything is supported out of the box. The reason for this is the extremely low market share of Linux in the desktop world (it's about 2.7% at the time of writing this article), so it's not difficult to see why many hardware vendors don't bother with supporting Linux at all.
By far the biggest issue with Linux is with using Nvidia GPUs. A lot of people face problems with using them on Linux because Nvidia closed-sourced their drivers and open-source drivers can no longer be derived from them. So you've got a proprietary driver from Nvidia themselves (which doesn't properly support Linux), and an open-source alternative. There are GPUs (particularly the old ones) that you will find drivers for in most Linux distributions, and on the other hand, there are also GPUs where you won't find them, or that driver support will be flaky at best. Also, in many cases, you may not be able to use all the features your GPU offers because of the lack of proper driver support. So, if you're building a new system, I suggest getting a GPU from a different vendor (for example AMD) or an Nvidia GPU which already has good driver support on your favourite Linux distribution.
Lastly, not all hardware works out of the box. There are some devices like fingerprint scanners and WiFi adapters, that may or may not work at all. While networking hardware from big mainstream vendors does work out of the box (because the base kernel ships with a standard set of drivers), support for other not-so-mainstream hardware is more of a hit-or-miss. This is why you should always check if all your hardware is working fine or not, right within a live Linux environment that you boot off a USB drive. Check this article from Ubuntu Tutorials for more info.
Software Support
Owing to the paltry market share, a lot of software that many people use, be it Microsoft Office or Adobe Software, just does not work on Linux. In most cases, you have to make do with alternatives (for example LibreOffice instead of Microsoft Office), and they may or may not work for your use case.
However, this situation has become a lot better in recent times. For running apps, you have Wine (from WineHQ) or Proton (from Valve) both of which intend to allow you to run Windows apps & games with ease on your Linux system. While a lot of software that refused to work in the past now works fine, it's still a good idea to check the current compatibility status beforehand:
As far as game support is concerned, you can expect more and more offline games to work fine with time, but supporting multiplayer games, especially those which use their own anti-cheat systems, can be a hit or miss if the official developer doesn't provide support for Linux. Do remember to check the lists from time to time.
Note that since the lists are completely dependent on reports made by the community, they are not exhaustive. The best way is still to try the apps & games you need yourself.
The Learning Curve
Linux is fundamentally different from any mainstream OS you're used to. Even though some operating systems have a UNIX-like shell, and the terminal experience is similar, it still requires you to re-learn a lot of the things to daily drive Linux. While there are people who argue that Beginner-friendly Distributions like Ubuntu & Linux Mint come with a 'software centre' out of the box, or that you never need to touch the terminal, I've seen more people break their Linux systems just by trying to avoid the terminal.
From my personal experience, I can tell you that your experience using Linux will be a lot better if you learn to use the terminal as soon as possible. It's not only the most reliable to do things (especially managing packages), but it's also the easiest. Not only that, interacting with the system using only the keyboard is universally regarded as the fastest way to get your work done. So, while learning a command line of a different Operating System does require a learning curve, I still highly recommend any beginner start using the Linux command line as early as they can.
I'll also stress the fact that using Linux does require you to understand the basics of how a computer works. At the very least, you should know about disk partitioning, BIOS (Basic Input-Output System) and your computer's bootloader. It requires you to invest time and effort to learn the basics to use it properly and seamlessly, otherwise, you may face issues (even on a beginner-friendly distribution) and end up wasting a lot of trying to re-installing them and moving data back and forth.
As a side note, the reason I put this in 'ugly' is because, at the end of the day, Linux is a terminal & server-focused system. Making it work as a desktop operating system requires true commitment. Even if you only want to do casual tasks on it, I'll still say that it requires you to invest significant time & effort into making it work, especially on a laptop. Additionally, this part of things has the least probability of changing, unless it magically gains a significant market share.
The Ugly
Toxicity in the Community
While Linux is usually friendly for beginners and offers you a plethora of beginner-friendly Linux Distributions like Ubuntu, Linux Mint, or Fedora, we can't neglect the fact that people who've already made the switch and think of themselves to be somehow superior to the 'Average Joe' because they use a DIY (and considerably difficult to setup & use) Distro like Gentoo or Arch. While it's fine to tell people that you use a DIY distro in a joking manner (I've been a culprit of doing that in various places including this very article :p), it's not cool when the same people look down upon people using a 'Beginner-friendly' distro.
As a beginner, you will almost certainly face these toxic people throughout the Internet. It's going to be especially true if you don't do your research first, so be sure to do that if you haven't. Even after that, if you face toxicity in any forum, always remember that these people are few & far between compared to other Linux power users who are ready to help you out in every way they can. Don't let these occasional toxic encounters discourage you from trying out the wonderful world of Linux!
RTFM, or Read The Friendly Manual
Here, I'd like to talk a bit more about why some Linux veterans are rude to beginners. Reading the documentation properly is something every beginner should start doing. It's all about trying to fix your problems yourself before asking anyone else.
Let's say that you have an issue where the Bluetooth driver is not working on your system. In this case, your first step should always be to check the logs (in this case, it's systemctl status bluetooth
) and then do a quick internet search for the topic using your favourite engine. In most cases, you will either find the solution in some tech forum or on the online manual/docs for your distribution. Also, there is highly easy-to-read & detailed documentation like the ArchWiki or the Ubuntu Desktop Guide available for free, which you can take a look at. And of course, if you still can't fix them, we're always there to help you out! :)
You should get into the habit of fixing these issues yourself whenever you face one. This is not only important for a beginner trying to learn Linux but is also a very important skill that will help you a lot in your future career in the world of technology and beyond.
Software Support & Standardisation
While it is true that Linux is inherently more secure than a proprietary alternative, it is also not feasible to develop secure solutions for it in the corporate sector, due to the insane number of distributions (or flavours) available. For one, the IT sector depends a lot on 3rd party solutions that presumably choose to support only the mainstream OS'es. Also, it's difficult to build an entire ecosystem of applications when you have so many distributions, desktop environments, etc. to choose from. The same 'freedom of choice' turns out to be a disadvantage for Linux in the realm of standardisation.
We could theoretically build a standard Linux distribution that supports all the features and protocols an organisation needs, but at this point, you will lose a lot of features that make Linux unique. A lot of companies do have their custom builds (for example Oracle Linux), but those are specific use cases and not meant for general desktop use. The vast majority of the corporate sector still uses mainstream operating systems for everything.
FOSS: The Free & Open Source Movement
Lastly, I'd like to touch upon a movement that I feel is very important in this day and age. Broadly speaking, there are 2 variants of software available to us: Proprietary and FOSS.
Proprietary Software: Most mainstream software we use falls under this category. Here, the code is closed-source, i.e. it cannot be seen by the public. It's usually made by a business entity to provide you with a service & make money from you. Let's see the problems that can arise from using software like this:
You need to agree to certain terms & conditions to start using the software. Since most of us can't exactly understand what the limitations of the data collected by the software provider are, it can raise data privacy concerns. If you're concerned about privacy, you're much better off using FOSS alternatives.
Regardless of whether you use the software for free or pay for a premium offering, you're not legally allowed to redistribute the software or modify it by any means. In most cases, you don't even own the software, you're just granted a digital license to use it for a specific amount of time. This means you have to deal with both the advantages and the limitations the software provides to you.
Since the code is closed-source, you're completely dependent on the software provider when it comes to providing features & security updates. If they stop supporting the software, you have no option but to stop using the current version immediately and switch to a newer version.
Lastly, the User Interface may keep changing from time to time, and many people may not like having to re-learn it again and again. This is especially true for old people who already have a hard time adapting themselves to the current advancements in technology.
FOSS: The full form of FOSS is Free & Open Source Software. It's used to define software whose source code is public, and it can typically be freely modified and re-distributed without any problems.
The main theme that runs within the FOSS movement is the fact that the FOSS apps are very privacy respecting. Most open source apps you will come across either don't collect any user data at all, or on the other side of the spectrum, optionally only collect minimal anonymised data solely to fix errors or improve the software. And of course, in typical FOSS fashion, you can completely turn off all data collection if you want to.
Another important point is the same that I mentioned early on in the article, it's the fact the source code is public. Not only are bugs fixed at a rapid rate, but you also have wonderful forks created by amazing people, which add functionality and features to the original project.
Development on FOSS is usually a collaborative effort. There's a single person or a group of people kick-starting the project. They use a platform like GitHub or GitLab to host it, and other people can then look at the code and contribute to it.
People do it out of love and are very knowledgeable and passionate about the stuff they're helping build. They don't even get paid to develop them, and mostly rely on donations and collaborative help from other people.
The fact that pretty much anything on Linux is so much better than the proprietary counterparts goes to show that you don't need 10,000 employees and a $1 million budget to create a usable piece of software. Many FOSS apps are a great blend of form & function and have stood the test of time. Try out Linux once, I'm sure you won't be disappointed! :)
BONUS: Get started with Open Source!
If you want to start contributing to open-source projects & join the FOSS movement, here are some great resources to help you get started!
Learn more about open source and how the entire ecosystem works.
YouTube: Eddie Jaoude|Kunal KushwahaStart by learning in public. Join communities, and help others out. Recommendations:
Directly contribute to projects on Github! First, learn your way around GitHub. Here's a video I recommend for beginners: YouTube
Once you're familiar with the platform, start contributing! Here's a site that allows you to directly search for beginner-friendly projects: Good First Issue Finder by EddieHub.
I'll write a dedicated blog about how I got started with open source, so stay tuned for that. All in all, I hope this post gives you an an idea about what Linux & FOSS is all about. Happy Learning! :)