For quite some time, I’ve been wanting to write about FreeBSD and OpenBSD. They’re two of the most popular BSD operating system.

I started out with trying out OpenBSD in the past and have tried to get into it again the past few weeks (and even FreeBSD), but I really couldn’t. Before you read any further, this is an opinion piece because I realize that many folks have different criteria for their personal operating system. I should also explicitly state that I’m only talking about using these two as my personal operating system, not servers or embedded device purposes.
For those not aware, OpenBSD doesn’t support Bluetooth for security reasons. Which maybe fine for some, but it kind of can be a deal breaker when you have a Bluetooth device that needs to connect to your computer. For example, I was working with kids to teach them VEX IQ robotic at a primary school. While I can connect the VEX IQ device (brain) to my laptop with the USB C interface, there are times when I needed the Bluetooth connection to the device instead because they are children. What do children do? They damage their USB cables by playing with them, even when told not to.
Because OpenBSD lacks such feature, FreeBSD became the next option to test out. Before I jump into FreeBSD, I just wanna point out that OpenBSD is not a bad operating system in anyway. It’s perfectly well suited for something like firewall because of its low attack surface + developers made sure to secure the system by shutting down everything “insecure” by default, but once you need your operating system to do a bit more than just running code, you jump into many issues. For example, if you are a developer in today’s age, containers like Podman and Docker are a must have. Actually, while I’m a Podman guy, I generally don’t mind if it’s Podman, Docker or any container as long as it uses OCI specification. But unfortunately, there are no such options.
So, how do developers on OpenBSD deal with it? OpenBSD lacks Linux features like cgroups and namespaces. So, unless you’re building your software just for yourself, if you need it ported to other people’s system as easily as possible, without containers, you are left with vmm/vmd, aka full VMs. To be fair, MacOS doesn’t have cgroups and namespaces either. On Mac, Podman and Docker are running containers inside a lightweight Linux VM. But, I’m not a Mac user for a reason.

Let’s talk about FreeBSD. Okay, FreeBSD have Jails, which isn’t exactly a container, it virtualizes the userland (user space). The good news is, it provides near-native performance (even better than Docker in terms of raw performance). Just like Podman and Docker, it uses host’s kernel. And what else? There’s tools like AppJail, runj and ocijail that can be used to run OCI-compliant containers. So, what’s the drawback then?
It’s not that FreeBSD is crappy. It’s perfect for NAS as it uses ZFS. For those not aware, ZFS allows storage to be expanded on the fly and more importantly, it checksums all your data and fixes corrupted blocks by restoring data from redundant copies, aka no silent corruption. Whereas, OpenBSD uses FFS2. Good luck with power loss and crashes because you’ll likely end up corrupting your data on your machine, aka it’s horrible for development machine. There’s also lack of faster WiFi standards like 802.11ac/ax + suspend on laptop could sometimes result in kernel panic on OpenBSD, aka FFS2 means, might have to say goodbye to your data.
So, what’s horrible about FreeBSD? The biggest deal breaker for me is, lack of proper hardware support. It feels like we’re back to how Linux was more than decades ago. The rest I can manage it myself, but after putting every bit of effort into making FreeBSD run on my laptop, I’m met with poor battery life. Made me question, why switch from what I used originally? I use Gentoo on my XPS 13 9350 (i5-6200U). Bought this used badboy for 600HKD (76.60USD) and I almost always get more than 12 hours of battery life (i3wm) with it. In fact, right now I’m on Gentoo using this machine to type this out.
But here’s the real reason. There’s a huge reason why I chose to stick with Gentoo.
Every user has work they need to do. The goal of Gentoo is to design tools and systems that allow a user to do that work as pleasantly and efficiently as possible, as they see fit. …… If the tool forces the user to do things a particular way, then the tool is working against, rather than for, the user. We have all experienced situations where tools seem to be imposing their respective wills on us. This is backwards, and contrary to the Gentoo philosophy.
The philosophy of Gentoo
The above quote is from the Gentoo’s website. I don’t know about you guys, but I don’t like it when I’m using a broad tool like an operating system and it forces me to do things the way the owner wants me to do. On Gentoo, I use OpenRC, but if I wanna use systemd, I could do that too. In order to best use FreeBSD or OpenBSD, you gotta change your philosophy entirely. Meaning, you gotta integrate yourself into FreeBSD or OpenBSD way of doing things entirely. Kinda like how folks integrate themselves into Windows or MacOS. It’s just not something I’m into. Hence, I’ll be sticking to Gentoo.
BSD operating system fans may see GNU/Linux as “things glued together” and “many tools doing the same things”, I actually see it as an advantage because what makes GNU/Linux so great is that, things are glued together. So, you can replace the part that you don’t like with your own tool.