Why I Run OpenBSDA story of how OpenBSD came to be my favorite OS.
This post is about my journey down the OS rabbit hole and how it landed me in OpenBSD land as a happy and productive user.
It contains information that is highly opinionated, wildly inaccurate, mostly speculation. It is, after all, on the internet!
One thing I learned during my travels between OSs: consistency is everything.
Most operating systems seem to, at least, keep a consistent interface between themselves and binaries / applications. They do this by keeping consistent APIs (Application Programming Interfaces) and ABIs (Application Binary Interfaces). If you take a binary from a really old version of Linux and run or build it on a brand-spanking new install of Linux, it will likely Just Work™. This is great for applications and developers of applications. Vendors can build binaries for distribution and worry less about their product working when it gets out in the wild (sure this binary built in 2016 will run on RedHat AS2.1!!).
With all this catering to applications and developers, one would think that a similar level of attention would be applied to the users of the applications and systems: User Program Interfaces (UPI) as I like to call them!
A good example of a poor UPI is (was?)
ifconfig(8) on Linux. From a
ifconfig, a command to “configure network
interface parameters” should work on… well, network interfaces!
This includes wireless, hard-wired, cell based… etc.
On Linux, however, this is no longer the case (at least for some devices).
This inconsistency seems to have come to be when Linux started getting
wireless support. For some reason someone (vendors, maybe?) decided
ifconfig wasn’t a good place to let users interact with their
wireless device. Maybe they felt their device was special? Maybe there
were technical reasons? The bottom line is, someone decided to create
a new utility to manage a wireless device… and then another one came
along… pretty soon there was
some funky thing that let windows drivers interface with Linux.. and
ip(8) I am sure there are others I am forgetting, but I
prefer to forget. I have moved onto greener pastures and the knowledge
of these programs no longer serves me.
Simply configuring a wireless network on Linux became a huge hassle:
- User: Which tool do I use to configure my wireless?
ifconfigdoesn’t seem to be able to help me.
- Google: Well it depends on what driver you are using.
- User: Intel blablablbla.
- Google -> Intel Site:
iwconfig! The command is going to look very similar to
ifconfigbut don’t let that fool you! It’s very different and only works with one very specific type of wireless device!
 Note, the use of google here. This is very crucial, and the very first sign of poor UPI, if the user has to go somewhere outside the system to find information on the system, you have already lost. Your UPI sucks.
The Double Drill Set
All of this inconsistency with the wireless stuff left me with a dirty, uneasay feeling. Where else is this disregard for users manifesting? Is there no process that looks at tooling and says: “Wait, these tools do very similar things from a users perspective. Let’s not clutter the environment with more tools that do almost the same thing.”
It’s like having two drills, one that drives screws in, and another that take them out.
Maybe none of this is Linux (the kernel)’s fault, maybe it’s because userland is built over here by these people… and the kernel over there by those people. Perhaps it’s the job of a distributor like Debian or RedHat to keep things consistent for the end user. I don’t really know, but at this point, it didn’t seem like it’s a high priority for any of them.
Back and Forth
Throughout my OS travels, I have consistently gone back and forth between Linux and the BSDs. At least yearly, I would have FreeBSD, OpenBSD or NetBSD on my main system. Usually this would end after a few months because one tiny thing that worked in Linux was missing. Be it an application or a driver.
But then something changed. I decided that I had enough of this dirty feeling. I was going to abandon Linux and use one of the BSDs full time. If something didn’t work, I was going to fix it. If I didn’t have an application I needed, I was going to port it. But I didn’t know which BSD to choose. All of them had issues with at least one thing I needed, so all were candidates for adoption!
One month, one BSD. Starting with FreeBSD, then OpenBSD, then NetBSD.
Since none of the BSDs completely worked for me, I knew it would be a tough journey. There would be sacrifices, there would be work that needed to be done.
A few things were clear:
1) If I found myself googling for information that the system should have provided, that system was not the one for me. 2) If the system had glaring UPI violations, it wasn’t the system for me. 3) If system simplicity was created via overly complex mechanisms, the system was not for me.
Long Story Short
OpenBSD won the showdown. It was the most complete, simple, and coherent system. The documentation was thorough, the code was easy to follow and understand.
It had one command to configure all of the network interfaces!
I didn’t have wireless, but I was able to find a cheap USB adapter
that worked by simply running
man -k wireless and reading about the
It didn’t have some of the applications I use regularly, so I started
reading about ports (intuitively, via
Shortly after selecting OpenBSD, I switched my ISP from Comcast to Century Link. Early on I decided I would run my modem in “bridge” mode, and have OpenBSD doing all the PPPoE stuff. To test my metal (and OpenBSD’s) I was going to configure everything without consulting the internet!
Armed with ONLY OpenBSD and its excellent documentation, I was able to configure an OpenBSD router doing PPPoE, NAT, DNS and DHCP. All without installing a single thing outside of the base OS (which, I might add, was installed on a 2G CF card with room to spare!) and not a single search engine query (no internet, remember? :P)!
FastForward to Now
OpenBSD is my main OS and the only OS I truly enjoy running. With every release it gains new, awesome features that embody simplicity, security, and consistency.