Title: Operating systems battle: OpenBSD vs NixOS | |
Author: Solène | |
Date: 18 April 2022 | |
Tags: openbsd nixos life opensource | |
Description: My feelings about OpenBSD and NixOS, trying to figure out | |
where each is the best | |
# Introduction | |
While I'm an OpenBSD contributor, I also enjoy using Linux especially | |
the NixOS distribution which I consider a system apart from the other | |
Linux distributions because of how different it is. Because I use | |
both, I have two SSDs in my laptop with each system installed and I can | |
jump from one to another depending on the task I'm doing or which I | |
want to use. | |
My main system, the one with all my data, is OpenBSD, unfortunately the | |
lack of an interoperable and good file system between NixOS and OpenBSD | |
make it difficult to share data between them without using a network | |
storage offering a protocol they have in common. | |
# OpenBSD and NixOS | |
Let me quickly introduce the two operating systems if you don't know | |
them. | |
OpenBSD is a 25+ years old fork of NetBSD, it's full of history and a | |
solid system, it's also the place where OpenSSH or tmux are developed. | |
It's a BSD system with its own kernel and own drivers, it's not related | |
to Linux but will share most of well known open source programs you can | |
have on Linux, they are provided as packages (programs such as GIMP, | |
Libreoffice, Firefox, Chromium etc...). The whole OpenBSD system | |
(kernel, drivers, userland and packages) is managed by a team of | |
approximately 150 persons (without counting people sending updates and | |
who don't have a commit access). | |
The OpenBSD project website | |
NixOS will be soon a 20 years old Linux distribution based on the nix | |
package manager. It's offering a new approach to system management, | |
based on reproducible builds and declarative configurations, basically | |
you define how your computer should be configured (packages, services, | |
name, users etc..) in a configuration file and "build" the system to | |
configure itself, if you share this configuration file on another | |
computer, you should be able to reproduce the exact same system. | |
Packages are not installed in a standard file hierarchy but each | |
package files are stored into a dedicated directory and the users | |
profiles are made of symbolic links and many environment variables to | |
permit programs to find libraries or dependencies, for example the path | |
to Firefox may look like something like | |
/nix/store/b6gvzjyb2pg0kjfwrjmg1vfhh54ad73z-firefox-33.1/bin/firefox. | |
The NixOS project website | |
NixOS wiki: How Nix works | |
## Performance | |
OpenBSD is lacking hardware acceleration for encoding/decoding video, | |
this make it a lot slower when working with videos. | |
Interactive desktop usage and I/O also feel slower on OpenBSD, on the | |
other hand the Linux kernel used in NixOS benefits from many people | |
working full time at improving its performance, we have to admit the | |
efforts pay off. | |
Although OpenBSD is slower than Linux, it's actually usable for most | |
tasks one may need to achieve. | |
## Hardware support | |
OpenBSD doesn't support as many devices as NixOS and its Linux kernel. | |
On NixOS I can use an external NVIDIA card using a thunderbolt case, | |
OpenBSD doesn't have support for this case nor has it a driver for | |
NVIDIA cards (which is mostly NVIDIA's fault for not providing | |
documentation). | |
However, OpenBSD barely requires any configuration to work, if the | |
hardware is supported, it will work. | |
Finally, OpenBSD can be used on old computers from various | |
architectures, like i386, old Apple powerpc, risc, arm, while NixOS is | |
only focusing on modern hardware such as Amd64 and Arm64. | |
## Software choice | |
Both systems provide a huge packages set, but the one from Nix has more | |
choice. It's not that bad on the OpenBSD side though, most common | |
packages are available and often with a recent version, I also found | |
many times a package available in OpenBSD but not in Nix. | |
Most notably, I feel the quality of OpenBSD packages is slightly higher | |
than on Nix, they have less issues (Nix packages sometimes have issues | |
that may be related to nix unusual file hierarchy) and are sometimes | |
patched to have better defaults (for instance I'm thinking of disabling | |
network accesses opened by default in some GUI applications). | |
Both of them make a new release every six months, but while OpenBSD | |
only backport packages security fixes for its latest release, NixOS | |
provides a lot more updates to its packages for the release users. | |
Updating packages is painless on OpenBSD and NixOS, but it's easier to | |
find which version you are currently using on OpenBSD. This may be | |
because I don't know enough the nix shell but I find it very hard to | |
know if I'm actually using a program that has been updated (after a CVE | |
I often check that) or if it's not. | |
OpenBSD packages list | |
NixOS packages list | |
## Network | |
Network is certainly the area where OpenBSD is the most well-known, its | |
firewall Packet Filter is easy to use/configure and efficient. OpenBSD | |
provides mechanisms such as routing tables/domains to assign a network | |
interface to an entire separated network, allowing to expose a | |
program/user to a specific interface reliably, I didn't find how to | |
achieve this on Linux yet. OpenBSD comes with all the required daemons | |
to manage a network (dhcp, slaacd, rpki, email, http, NAT, ftp, tftp | |
etc...) within its base system. | |
The performance when dealing with network throughput may be sub-par on | |
OpenBSD compared to Linux but for the average user or server it's fine, | |
it will mostly depend on the network card used and its driver support. | |
I don't really enjoy playing with network on Linux as I find it very | |
complicated, I never found how to aggregate wifi and Ethernet | |
interfaces to transparently switch from one to the other when I | |
(un)plug the rj45 cable on my laptop, doing this is easy to achieve on | |
OpenBSD (I don't enjoy losing all my TCP connections when moving the | |
laptop around). | |
## Maintenance | |
The maintenance topic will be very personal, for a personal | |
workstation/server case and not a farm of hundreds of servers. | |
OpenBSD doesn't change much, it has a new release every six months but | |
the upgrades are always easy to handle, most corner cases are | |
documented in the upgrade guide and I'm ALWAYS confident when I have to | |
update an OpenBSD system. | |
NixOS is also easy to update and keep clean, I never had any issue when | |
upgrading yet and it would still be possible to rollback to the | |
previous version in case something is going wrong. | |
I can say they have both a different approach but they both work well. | |
## Documentation | |
I have to say the NixOS documentation is rather huge but yet not always | |
useful. There is a nice man page named "configuration.nix" giving all | |
the options to parameter a system, but it's generated from the Nix code | |
and is often lacking explanations in addition to describe an API. | |
There are also a few guides and manual available on NixOS website but | |
they are either redundant or not really describing how to solve real | |
world problems. | |
NixOS documentation | |
On the OpenBSD side, the website provides a simple "Frequently Asked | |
Questions" section for some use case, and then all the system and its | |
internal are detailed in very well written man pages, it may feel | |
unfriendly or complicated at first but once you taste the OpenBSD man | |
pages you easily get sad when looking at another documentation. If you | |
had to setup an OpenBSD system for some task relying on components from | |
the base system (= not packages), I'm confident to say you could do it | |
offline with only the man pages. OpenBSD is not a system that you find | |
its documentation on various forums or github gists, while I often feel | |
this with NixOS :( | |
OpenBSD FAQ | |
OpenBSD man pages | |
## Contributing | |
I would say NixOS have a modern contribution system, it relies on | |
github and a bot automatically do many checks to the contributions, | |
helping contributors to check their work quickly without "wasting" the | |
time of someone who would have to read every submitted code. | |
OpenBSD is doing exactly that, changes to the code are done on a | |
mailing list, only between humans. It doesn't scale very well but the | |
human contact will give better explanations than a bot, but this is | |
when your work is interesting someone who want to spend time on it, | |
sometimes you will never get any feedback and it's a bit sad we are | |
losing updates and contributors because of this. | |
# Conclusion | |
I can't say one is better to the other nor that one is doing absolutely | |
better at one task. | |
My love for OpenBSD may come from its small community, made of humans | |
that like working on something different. I know how OpenBSD works, | |
when something is wrong it's easy to debug because the system has been | |
kept relatively simple. It's painless, when your hardware is | |
supported, it just works fine. The default configuration is good and I | |
don't have to worry about it. | |
But I also love NixOS, it's adventurous, it offers a new experience | |
(transactional updates, reproducibility) that I feel are the future of | |
computing, but it also make the whole very complicated to understand | |
and debug. It's a huge piece of software that could be bend to many | |
forms given you are a good Nix arcanist. | |
I'd be happy to hear about your experiences with regards to OpenBSD and | |
NixOS, feel free to write me (mastodon or email) about this! |