Basics#

Most of the free, libre and open source (FLOSS) operating systems (OS) are based on the linux kernel, these are called linux distributions, often shortened to “distro”.
Other notable FLOSS OSes are the BSDs (openBSD,freeBSD,netBSD), haiku and OpenIndiana.
The community tends to call any FLOSS OS a “distro” even if it is not based on linux for convenience sake, which I will also do here.

Many distros are based on other distros, and new distributions base themselves on these derivates, this cycle of derivating derivates has repeated many times, creating a tree of distros that share many similarities. This means that the documentation for a distro might also work on another because it’s components overlap with the other one.

Here are a few link that might help you choose one amongst all of these them :

Most modern distros allow you to test the OS in a live environment without having to install it which is convenient if you want to test the compatibility with the software you need.

Distro choices#

Here are a few of my personal recommendations based on usecase :

Normal desktop usage#

Privacy and security#

Enterprise deployment#

Education#

Gaming#

Reviving old computers (2005-2015)#

Reviving very old computer (1995-2005)#

Build from scratch#

Universality (runs on any computer)#

Installation#

I will not write an installation guide as it depends on the exact distro you plan to use.
Your distro has surely it’s own installation guide and more are available on internet.

Every information beyond this point is aimed at users of linux based distros as my knowledge of other OSes is lacking. But some of the information might also apply to them.#

Basic concepts#

Root#

Root can refer to the top directory of your filesystem. Since a filesystem is like a tree where each directory (folder) is a branch, there has to be an origin (roots) to it. A file’s path looks like this : /path/to/the/file, each / indicates a directory and the text before it is the directory’s name, the first / that doesn’t have a name is the root directory.

It can also refer to the privliedged user on the system, which you might know as the “admin” in other operating systems. You normally dont operate your system as the root user but instead run command as an unpriviledged user and prefix your command with sudo (super user do) or doas (do as root) when you need root privileges.

The package manager#

A package refers to a bundle of software and the metadata associated to it, such as it’s version number, instruction for installation etc…
A package manager is a piece of software that makes use of said metadata to automate and improve the management of packages.
It is usually launched through a terminal command but some distros prefer to use a graphical interface instead.

The software repository#

Repo for short. It is a remote server where package are stored and made available to download. Most distros have their own repo filled with software that they manage.
When you download something using your distro’s package manager it is actually fetching it from your distro’s repo and not directly from the developers.

This allows the distro to have control over the software that it distributes, it can for instance hold back an update for some software that it judges too buggy or unstable in it’s most recent version.
This also means that the software in a distro’s repo can be behind the official release by many versions.

The desktop environment#

DE for short. It is a collection of software curated to allow you to use your system trough a graphical interface. It is your taskbar, your windows, your menus.
DEs are necessarily linked to your distro, you should be able to install any DE in any distro, though they might be less integrated and buggier than whichever one your distro has by default.
KDE plasma and GNOME are the more modern and well supported options.

Software distribution#

System packages#

These are the ones that come from your distro’s repo that you install with your package manager or graphical software installation tool.
They are generally better integrated, faster, more stable and smaller in size than everything else.

If the software that you are looking for is in the repo and the version that they ship is sufficient for you then this should be your prefered way of installing.

Flatpaks#

These are the new modern way of installing software. Flatpaks aim to be distro-agnostic and secure by default.
It is sandboxed by default.
The updates are typically managed directly by the developers, so newer versions of software should be available faster on flatpak than on your distro’s repo.

Appimages#

These are what you might find if you download software directly from the developer’s website. They are heavier than system packages and less secure than flatpaks.
Unless the developer’s went out of it’s way to provide an update utility there is no way to update appimages, you have to reinstall the appimage file after every update.

Some software only ships in appimage format so you might be forced to use them. If you want the latest version of the software and it is not available on your distro’s repo nor in flatpaks you might also have to use them.
But in any other case you should use something else, or at least sandbox the file when running it.

Hardening#

Hardening means configuring a system to reduce its attack surface and limit what an attacker or a compromised app can do.

Firewall#

A firewall is software that controls incoming and outgoing trafic on your network based on pre written configuration.
Uncomplicated Firewall (ufw)

Mandatory access control#

MAC for short. It checks every action from program that affects the system.
The two most popular tools for this are apparmor and SELinux.
The usage of both of these tools are outside of the scope of this guide but using any MAC system will greatly harden your system.

Passwords#

Use a password manager such as bitwarden or keepassxc.
These will generate strong passwords for you and allow you to store them online in the case of bitwarden and locally in the case of keepassxc. To access your passwords you will need to input a master password, make sure it is strong.

Sandboxing#

Sandboxing means running a program in a contained environment so that it cannot access the rest of the system.

FreeBSD has jails built in.
Flatpaks are sandboxed by default but the sandboxing might not be very strong by default depending on the app, flatseal allows you to change that.
Firejail is a tool that allows you to manually sandbox applications on linux.
Bubblewrap is the sandboxing too used by flatpak, it takes less ressources than firejail but makes less operating assumptions, meaning that it is more manual and difficult.

Encryption#

If available during the installation of your os, prefer full disk encryption.
You can encrypt individual files or folders as well using 7zip for instance.

Web browser#

The tor browser is without a doubt the most hardened modern browser but impractical for everyday use. Mullvad is like tor but uses a vpn instead of onion routing making it faster. Librewolf is a decent choice for everyday use.

Customizing#

KDE plasma is know for it’s great configuartion and customization possibilities.

For even furthing customization you need to liberate yourself from any desktop environment and start creating your own use interface, this process is known as “ricing”. This means that you will have to handpick and configure every component that you want to see, this includes the window manager, the bars, the panels, the widgets, the application launcher …
It might seem very difficult at first but you can start by making a very minimal layout, composed of only the window manager and the application launcher then go from there.

You might want to start from one of the “build from scratch” distro that I listed above

This list should give you a comprehensive list of options : https://github.com/fosslife/awesome-ricing

Additional ressources#

  • arch wiki technically for arch only but is comprehensive to the point of being considered as the best linux documentation.
  • ask ubuntu for debian based systems
  • freeBSD handbook for freeBSD systems, it is one of the best documentation on open source
  • Linux journey to learn about the terminal