# The Case Against Distro Switching: Debian

Another wrong answer is the change distros because the grass is greener. If you are not happy with your distro the solution is always the same: become more active in it. All of the aggressively-self-correcting mechanisms are powered by disappointment. Channel yours productively.

-- Kyle Keen, Maintainers Matter

## Introduction

Yeah, that quote really sums it up. Rather than switching distros, make your distro work the way that you want. This means that the only difference between the distros is the driving philosophy behind it.

Even the package manager and the package repos no longer become a difference. Once you grok your distro, then anything related to the construction and presence of packages no longer matters. Package doesn't exist in the repo? Package it yourself, the same way the packagers/maintainers do it! Want source-based package management in a binary-only distro? Repackage it and maybe script the repackaging! Want binary-based package management in a source-only distro? Create your own binary repo and package packages for it! Become a maintainer while you're at it.

Which means that, I think, that distro wars no longer matter, and that all distros, in their technical aspects, are equal. I have heard many people give a chuckle or be condescending when they hear I use Debian, and be impressed or satisfied when they hear others use Arch.

This comparison is the most common around me. The thing is, I like both, but I made the choice of Debian. I think that at this point I have enough Debian experience to bend a system to my will while conforming to The Debian Way. Therefore, I have made it my goal to use Debian in a way such that if someone says that Arch (or any other distro) is better because X, I can say "so can Debian". Maybe it doesn't do it as good as the other distro, like reproducible systems of NixOS/GuixSD, but it can be done.

So I know that what I intended is distro-agnostic, but I will show how I am managing to do it with Debian. After all, Debian is The Universal Operating System. The rest is my story.

## My Story

I spent a large chunk of last semester trying to choose a distro to switch to (not hop!). It started when I first found out about NixOS and was amazed at how you could just declare everything about the system and then that would act as a recipe for the system. I always had this fear of having to rebuild my main computer from a fresh install and wanted such simple reproducibility and so I was considering switching to NixOS.

There were other alternatives I was considering as well:

• NixOS
• GuixSD - for the same reason as NixOS, but unfortunately I need my non-free wireless card firmware
• Gentoo - maybe I could try a source-based distro
• Sourcemage - same
• Arch - I've had good experiences and I just kinda like it
• Void - like Arch but also not like Arch, plus it's both binary and source!
• Alpine - I like that minimalism
And with so many choices I now had to actually figure out what I really wanted in a distro, and choose the one with the best balance.

So I eventually came up with a list of things I wanted in a distro:

• Reproducilibity of the system (or at least packages, from a recipe)
• Satisfied by: NixOS, GuixSD
• Minimalist package manager (so if I get an embedded system for example, I can plop the package manager binary in there and have it work)
• Satisfied by: Alpine (?) Gentoo (?)
• Both binary and source based package managing
• Satisfied by: Void, Gentoo (kinda), NixOS (I think)
• Supports many architectures (uniformity across devices - although really we only need i386, arm64 and armhf)
• Satisfied by: Debian, Gentoo, Alpine
• Main three: GuixSD, Arch (unofficial), Void
I'm not going to delve into the pros and cons of each distro.

From these, the distro with the highest "score" is Gentoo. I decided that it would be good to know how to do a Gentoo install and basic usage so I tried (in a VM) and it was interesting and fun, but rebuilding that @world set? All the time? Not my cup of tea.

So my pondering bounced back and forth between these few distros, and by the time winter break rolled around (prime time for distro switching!), I had narrowed it down to Gentoo, Arch, and Void. I threw NixOS out the window because it was huge pain to install custom kernels on it and I couldn't find helpful documentation. GuixSD lacked non-free wireless card firmware. Alpine's musl was causing problems for some of my other things.

## Conclusion

In the end though, I decided against switching. One reason is that I got lazy, but the real reason is that I read the essay that I quoted earlier, and was inspired such that I looked back at Debian and noticed that it satisfied all my wants. They don't advertise it that way and people certainly don't talk about it, but if you dig just a bit deeper, you can find it there.

• Reproducilibity of the system -- at least packages
$dpkg --get-selections | grep -P "\tinstall" > package-list # apt-get install$(cat package-list) + etckeeper
• Minimalist package manager
• Turns out embedded systems have opkg already, or it's buildroot so it has no package manager
• Both binary and source based package managing
• Turns out I didn't actually need the source part, except for the occasional package that I wanted to compile myself, or I need to build it myself because it's not in the repos
$make$ sudo checkinstall
• Supports many architectures
• We already know this

To me, the most surprising was that apt is capable of doing both binary and source based package management. It's not super sophisticated like Gentoo or Sourcemage's package managers, but I'm not super keen on having to compile literally everything, so apt's way of doing it is good for me.

Another thing that I found surprising was that it is possible to build Debian non-bloated. I'm planning on writing more about this at a later date. I often hear people complain that Debian is bloated, but Arch equally uses pre-compiled binary packages like Debian. The difference is likely that Debian guesses what packages you want -- based on your system install-time choices. So if you just choose "minimal" (or whatever it's called) in the Debian installer, then you will get a non-bloated, minimal Debian system that doesn't guess what packages you want! This means that it is possible for Debian to attain an equal amount of customizability as Arch.

The most surprising thing I think is that it's possible to install Debian the Arch Way -- where you are the installer. I haven't actually tried it yet (I plan to -- and write about it). It's interesting to note that this method of installation is actually outlined in the Debian Manual, even. I'm currently trying to find a good host live CD image to use as the installer CD. Neither Debian Live nor Ubuntu live fit on a CD, and the Gentoo CD can't do anything until emerge-webrsync. Arch and Alpine might be good choices; we'll see.

A few other notes on Debian: avoid Frankendebian, it is apparently possible (but difficult) to use other init systems as well as libcs, and it's important to learn package pinning if you want rolling yet stable.

So, that was my story of how I figured out that Debian is indeed the Universal Operating System. I'll probably write more about Debian.

In any case, just remember to not switch distros just because you think that the grass is greener on the other side. Remember that your own distro is already very, very green. It just depends on how you notice and utilize that greeness.

Happy hacking!

2018-01-24 Paul Elder