My Linux journey, 20 years later

Typing the title hurts my feelings. I'm not gonna lie, 20 years… My journey into Linux has been full of ups and downs over the years. From the days when I had no single idea of what I was doing (I was 11 at the time), to when I migrated my Windows Server 2003 to CentOS, to today, when I installed NixOS on my gaming computer. It’s stupid but it makes me nostalgic to think about this today. Computers have always been extremely important to me. They helped me feel intelligent, feel like I had something to show, and forget the intimidation. As a young troublemaker, all I was interested in was: Logic games, Movies, Music, and Cartoons. And guess what allowed me to consume all these things? Yes, computers. So learning to understand them has always been fascinating to me. Now, having a bachelor's degree in computer science and working full-time as a software developer shows me that none of this time was lost.

What the hell with the penguin?

I went to my cousin’s house, I think I was 10 at the time and went to play with the computer and when I started it, there was a low-resolution splash screen with a menu and a penguin. As someone who always used Windows (without even knowing that was a thing and there was another thing) this sparked interrogations in my head. He explained to me that it’s another system other than Windows that you can install on your computer.

Wait wait wait. Something that I can install on my computer on a lower level than Windows? I gotta learn more. A couple of weeks later, I grabbed my BMX and pedaled to the local library to see if they had computer books that talked about this Linux thing. Honestly, that still surprises me today, I’m not much of a book reader, to be honest, but I still managed to find a couple of books and magazines. Not only were there magazines about Linux, in my mother language (French), but some of them even included Live CDs. The first one I grabbed was named Linux Magazine (clever) and had a live CD of « Mandriva Linux ».  I brought it home and started reading. It was pretty detailed, it had information on partitioning, swap partition, and some info about the package manager.

My first attempt went poorly, I managed to break Windows and, at the same time, scrap my brother’s Far Cry save game. But that was a start, I learned the word « Distribution ». On my second (probably actually my 12th) attempt, I managed to have running and I could use it. My first ever Linux OS.

More Distribution, more Linux, and how I broke my high school’s computer

My first year in high school has been pretty hectic, I won’t get into details, I could write a book about it, but let’s say that having something to focus my head on was greatly appreciated. I was experimenting with various distros, without a proper goal, just trying to have a setup where I can do almost all I do on Windows. The few ones I was playing with were Mandrake (and Mandriva), PCLinuxOS (what an ugly name), SLAX, and one that I cannot remember. All I remember is that the live CD’s background was red (no, it was not Red Hat). I was having a hard time doing exactly what I was doing on Windows only because of application compatibility, I was learning about Photoshop at the time, and installing it on Linux was impossible (at least to my knowledge at the time).

My high school’s computers (that is in 2006 if my memory is good), had Mandriva installed. So during labs and free time, we were exposed to Linux, which was great (only two of us in the class knew what the heck it was). I don’t know why, but I always had a Linux CD in my backpack. I recall getting into a fight because another kid stole my CD and started making fun of me because I was a nerd. So one day, I was in the computer lab and I wanted to listen to some music. I went online, downloaded Limewire (Frostwire, actually) and, you guessed it, I wasn’t root. No way I could install or compile (I didn't know how to do that at the time). So I pulled out the CD of this red Linux I talked about, booted into it, downloaded Forstwire, and managed to listen to my music.

By the end of the period I had a genius idea (well, arguably genius). I thought, why don’t I just install it? I’ll have my computer with my stuff! I started the installation but it took too long and I needed to pull the CD out during the installation and I left. No one knew it was me but this computer has been out of service for at least 5 months. We could argue it's my fault. It was. But at the same time, it's your IT department's job to make sure BIOSes are locked with a password, and overriding boot is not possible.

RPMs, DEBs, and source code

I've always been appealed by Red Hat Linux, that cool-looking Red Hat logo had something intimidating. I always loved the aesthetic, that's why in my early days the only distros I was into were CentOS and Fedora. I understood the basic difference between RPM and DEB packages, one is for Debian-based, and the other one is for RHEL-base distros. But it always has been a little tricky to install software. Some had only debs and some were directly into source code. I was able to install RPMs without too many hiccups. The feeling of opening software after unpacking the RPM felt hackerman. It was incredibly satisfying being 12 years old and being the only kid I know who runs something else than Windows. I had this "I'm a special snowflake feeling".

But for the rest, the ones without the RPM package, I was only able to install 1 software out of 15. I had no idea of what I was doing so I let you guess how capable I was of understanding the error messages. Always the same procedure though:

./configure
make && make install

Always. The Same. Procedure. Different outcomes. I couldn't get that at the time but my problem was missing dependencies. That was it, I just needed other packages and software to make this one software work.

One Christmas I got this powerful sky-blue computer tower that could run heavy games. We're talking Doom 3, The Elder Scrolls Oblivion, and my favorite game of all time: Half-Life 2. There's no way I'm playing around with my OS, I just wanna play.

My first server

A couple of years passed until I touched Linux again, around 5 years. I got given an old Dell Poweredge 2U server with dual Xeon CPU in it, a quite powerful machine at the time. If you ever met one, your ears still remember, to this day, the noise of those Delta fans. My parents let me run this in the basement for months, which is crazy. At the same time, I was discovering Plex Media Server and figured I'd start a media server out of this 2U server. I wanted to be stable so I went with something I was comfortable with: Windows. I used it for a couple of months and I always had issues. Random blue screen, random crashes random unresponsiveness. So I thought, let's try CentOS again and see how it goes. Obviously, I installed the graphic version that came with Gnome 2. It's easy today to look back at Gnome 2 and say it was ugly. But it was a really lovely interface, it always has been my favorite back then. I managed to make everything run without any hiccups. The server was reliable. With the time I learned about this wonderful "secure shell" thing, as I started doing more and more SSH maintenance I figured I might as well get rid of the graphic completely if I ever needed to reinstall, which I ended up doing.

Over the following years, I accumulated way too many old noisy servers. I had a server rack (built by my lovely father on which he painted the Red Hat's hat) with 3 rack mount servers, 2 Dell Poweredge, and 1 HP ProLiant. My wardrobe had an average temperature of 36c and it was impossible to talk to each other near this wardrobe. All running CentOS and Ubuntu. Yes. The first time I tried Ubuntu was on a server. Over the years I upgraded, and moved things around and this all came down to one unit that holds around 45TB of storage in 4U rack mount format with a Ryzen 7 and a GTX 1080 for transcoding. Running more stable than ever.

Hackerman attempts

When I got my first job as a computer technician, at around 17 years old, one of my co-workers introduced me to this tool called Backtrack Linux and a tool called aircrack-ng. If you know what I'm talking about, you're sus.

Basically aircrack-ng was a tool installed by default on Backtrack Linux (now called Kali Linux) to crack Wi-Fi networks. Yup, exactly. It used to be extremely simple to crack Wi-Fi networks with WEP passwords. I don't recall all the specifics but all you needed was a network interface that would support packet injection (I like to pretend I knew what that meant) and you just had to run a few commands to have the password printed out in your terminal. Nowadays, WEP Wi-Fis are pretty rare but back then every Bell-provided routers were using super simple WEP passwords so it was a lot of fun.

I'd like to specify that we didn't do any harm to any network or data. We were cracking Wi-Fi, being like "Ahah, gotcha" then move on to another router to crack. It was just pure fun.

My many many attempts at Linux Desktop

I knew I loved Linux, that was a fact, the more I was playing around with my servers the more pissed I was at my Windows computers. I couldn't understand why I needed to always reinstall Windows for various reasons but never had to reinstall my servers other than for fun. So I tried Linux desktop and it went... Bad. Yeah... I never got around to having desktop Linux that works as I expected it to. I hated KDE at the time, the bouncy icons the "plasticky looking UI", the widgets (gosh I hate widgets). KDE wasn't for me. Ubunutu's Unity was a little better but not by very much. I also hated it, I hated it so much that I always tried to customize and change it, and, guess what, this often broke the OS. I tried Gnome 3, same story. I preferred the aesthetic of Gnome 3 but not the usability. At some point, I had a decent Ubuntu setup, which was okay but I had to fight the urge to customize it for fear of breaking it. I came to a really strange conclusion:

I liked Linux, but I hated all of their desktop environments to the point where I needed to customize it, therefore break it, therefore Linux is not suitable for a desktop. As I was starting to learn how to program, I quickly realized that developing on Linux is way much easier and feels more natural than on Windows. I needed to work out something. I worked for a couple of years on Mac OSX (before it was macOS). It was an interesting in-between for a clean-to-use UI but had the command line power I was looking for. 

Mac OSX has always been a really good development platform, all the companies I worked for provided Mac computers to develop. Simply because it's the most stable platform out there that sits on its hardware perfectly. We cannot deny that. Hate Apple as much as you want, their computers are reliable. Expensive, but reliable and pretty powerful. There's one thing though; Apple isn't maintaining their older laptops at all. So running newer versions on older hardware always becomes an incredible message. You can hardly disable the new greedy stuff (and we know they add a lot) or make it lighter. Comes to a point where your only solution is to ditch the Mac. A computer you paid big bucks for is almost unusable after 5-6 years. For a long time, I assumed it was meant to be like that, because frankly, Windows is not that much better on that front, especially in the few past years. Looks like they're trying their best to make Windows the worst OS out there.

I had a lot of low-to-mid-performance computers at home that were sitting in a corner, unused. Older Mac I got given (because remember, they're obsolete quickly), and older PCs that were not that old but for which I didn't have Windows licenses or the will to crack it. And one day I came across something called "Linux Rice" and r/unixporn. And there goes the rabbit hole.

The Rabbit Hole and how I Brought 3 computers Back from the Dead

There was this term "Linux Rice" often with r/unixporn subreddit where people post screenshots of extremely good-looking Linux setups. I was really jealous of the computers they looked so nice and I was just appealed to use them. Most of them shared one thing in common: being based on Arch Linux

What the hell is Arch Linux? Probably a super niche unstable distro only big nerd use... Probably something that needs C programming knowledge because I'll need to compile a ton of things. Neither of those things. It's a lightweight (well, as heavy as you wanna make it) distribution (well not really either) that lets you do it all by hand but is extremely, but like EXTREMELY well documented. One thing that I thought all major OS (and I include some of the most popular Linux as well) always annoyed me is how they come with a bunch of things. So many things that you might, or might not need. Arch is the complete opposite, it doesn't even include Wi-Fi or Bluetooth, that how naked it is. 

I was seeing these perfectly and evenly split screens with good-looking terminals and colors with neofetch opened and was wondering how hard it was to get to this result. I went on to look at the Arch's wiki and everything seemed so simple and well-explained I was fascinated by it. I decided to give it a try on my old 2011 Mac Mini which can no longer be used because the latest supported version of macOS is extremely laggy. The installation went pretty smoothly, to be honest, it took me about an hour and I was inside the installed system, on the Arch's bash shell. That's cool, but that's a desktop computer, I want a graphic interface. So I went on, looked at a couple of rice, and decided to try i3. Again, the installation went smoothly, configuration was a little harder. It's not trivial because it includes fewer things than you expect. How do I start an app only with i3? You can use a terminal... But a terminal IS an application... So I need an application to start the application... Okay, that'll involve more work than initially expected.

After a few googling, dotfile repository looking, and packages installs, I had i3, polybar, rofi, dmenu, Alacritty, and Firefox installed. My first thought was, that's gonna be hectic to install everything I use daily on the computer but it turns out that was it. Pretty much all I needed was there. A browser, a terminal (I was learning Neovim at the same time so this includes my text editor), and a UI that doesn't force me to manage window size.

Let's pause for a second. How come tiling window managers aren't more present in common OSes? My favorite discovery of all time is this, tiling window manager. Overlapping windows is sure "cool" but not useful. Once you open an app, fullscreen it. Open another one? Split them in two and show them side by side. In Windows/macOS I always end up doing it by hand because if I have two windows open, I wanna see them both. There's no point in allowing me to have one on top of the other. Everyone should try a tiling wm at least once.

Inconsciously I started doing more of my personal work on the Mac mini, it was so blazing fast I couldn't believe it. I'm not joking, of course, there are a lot of factors involved, but my 2011 Mac mini running Arch and i3 felt faster than my 2020 i7 MacBook Pro that my job sent me. So much so that at some point I just started working from the Mac mini as I was feeling more productive. So I migrated an old iMac 2010 I got given to Arch Linux as well and started using it for development as well. I did the same for my girlfriend's 10-year-old laptop.

The Steam Deck and the "You can game on Linux!?" mindblowing

About two or three years ago, Valve announced a device for handheld gaming. A Switch-like device but for PC gaming. I was a PC gamer, other than Nintendo, I never owned any gaming console. That was appealing, really appealing. So appealing that I reserved one as soon as it was announced and instantly bought it when it was released. I knew it was running SteamOS but I was thinking, I guess I'll be able to play a couple of titles that have Linux version. Once I received it, I was pretty surprised to see that most, if not all, of my games were installable... But most of those are Windows games, I don't get it. And after some googling I discover Proton. Oh... My... Fudgesicle... I had tried Wine a couple of times in the past without success but this Proton thing was a magic spell. All of the games I tried were working, and working frankly well, for a handheld 500$ device. It became my favorite device, I mostly never touched my gaming PC except to play a couple of Warzone games. 

That was a shocker to me that I was able to play Windows titles on my Linux machine. A real shocker. I simply could do whatever I wanted. I want to install Discord. I can, but on the Switch, I cannot. I want to install emulators. I can, on the switch, I cannot. I want to install Plexamp to play music while discussing on Discord while playing Helldivers 2 with friends. I JUST CAN! The switch cannot do that, neither does an Xbox or a PlayStation. I can do that on a PC but good luck to hold the tower, the screen, the mouse, the keyboard, and the speakers in both your hands.

I still think today that the Steam Deck is the greatest gaming innovation since the Nintendo Wii. Simple as that. Valve did amazingly well, they just all did well. The controller mapping is incredible, the game support is crazy, thanks to their Proton tool, the UI feels like a gaming console the device has a really decent weight for what's packed in. Valve, after loving you for so long for giving us Half-Life 2 and Portal, I love you even more for giving us the Steam Deck. All of that, running on Linux.

But you know, there's one place where the Steam Deck falls short, it's graphic. I mean, it's pretty normal. But playing Starfield is indeed nicer on my RTX 3080, so I keep the gaming pc around for when I need a good gaming session. But I hated using it, you know why? Making it to the game is so painful that I give up in the process. I might be unlucky but Windows is always flaky to me and there's barely any way to debug it. Booting Windows is long, once logged in it lags a lot, and starting Steam is long. Sometimes I even need to reboot a second time because it's barely usable. No joke it feels like my computer needs to warm up to work properly...

A funny story of Windows breaking on me, this is a side story, you can easily skip this paragraph. I have a 2010 Mac Pro in my home studio for recording and producing music, the computer has 2 Xeon for a total of 32 threads, it's pretty powerful and does its job well for music production. It runs on Windows 10 because of what I mentioned earlier about macOS being laggy after a while (I tried OpenCore Legacy Patcher but it broke on me at some point and I gave up). One day, my nephews wanted to play Fortnite together, so I figured I'd install it on the Mac Pro, it has a decent GPU so they will be able to play. I installed the game and when I first launched it, it froze. The computer just jammed... So I rebooted the computer and it never booted again. Simply never. So I tried the rescue options but the rescue options kept asking for my account password and never accepted the password, even though it was right. It was because the session used a PIN. Since I never logged in with my actual Microsoft Account's password and always used the PIN, it never registered it so I never managed to do any recovery. I tried one thing from a bootable device and it never worked either. So installing Fortnite broke my studio computer. Nice.

I was getting pissed at Windows. Every time I tried to use it, it just didn't want to work properly, even with new installs. I don't know if my reliability standards are too high, I'm cursed, or Windows sense that I hate so it doesn't properly function, but it's problems over problems. So much so that my gaming computer was left there unused because the handheld device was nicer and simpler to use despite the difference in graphics quality. But seeing the Steam Deck doing so well made me consider that at some point I might just migrate over my gaming computer to Linux (but keeping Windows for dammit games with kernel anti-cheat).

Today and my obsession with functional programming

Years ago I discovered a programming paradigm called "Functional programming". It went through my head like a revolution, nothing would be the same ever again. I discovered a language called Elixir (gosh I love this one), then went on to learn Haskell, Erlang, Elm, and Lips-like languages just for the sake of understanding it a little better. One thing they all had in common was a "declarative" flavor. I loved that. And through this learning, I heard about Nix, the package manager. The idea was pretty neat, though it seemed like a steep learning curve. I tried anyway and enjoyed the "configuration as file" principle. My main work Mac has Nix installed to manage packages instead of Brew. I always found Brew to be slow and Nix allowed me to commit all my packages list so I can easily migrate to another computer if I need to.

But recently I decided to check this NixOS thing. Arch was already lovely to use but that declarative kind of configuration was really appealing. I installed NixOS in a VM with KDE Plasma 6 (recall I said I hated all linux desktop environment, well, I gotta admit that Plasma 6 is really decent, I installed it on the Mac mini so my girlfriend can use the computer more easily) to try it out and really liked how simple it was to configure. No matter what you want to install it's just a matter of switching flags and settings properties. 

So much that I did guys. I migrated my gaming PC to NixOS this weekend. I went on and decided to try Wayland for good with Hyprland. It went extremely smoothly, just a couple of hiccups because of Nvidia and Wayland but otherwise, it was easy peasy lemon squeezy. One thing that amazed me a lot was that I only needed to mount my Windows's NTFS drives and attach them to Steam and I managed to reuse all the games that were installed on my Windows OS as is. Really as simple as that.

Conclusion

Learning Linux is not a super simple process. There's a learning curve. It's not for everyone. You need to love to understand and learn. If you like things that work magically, I don't think Linux is meant for you. But if you have just a little bit of interest in it. Go for it, try it out, and have fun in the process. Finding your own Linux is a process, a trial and error process but you gotta be committed to the fact that you might not like the first one you'll try. It took me several years to find a desktop Linux setup I enjoy using and uses a distro that's not beginner-friendly. I used to vouch for Arch as my favorite, but now I'm in love with NixOS. What will it be next? I don't know yet, but there's gonna be something at some point. I had to use the beginner-friendly one to understand it wasn't for me.

But I will always recommend Linux to anyone who is:

  • Have curiosity
  • Wanna have the control of their OS
  • Fed up with Windows
  • has older computers lying around they want to bring back to life.

In the end, after a few tweaks, Linux will give you a personalized and tailored to your needs experience. I have zero doubt about this.

My NixOS config repo