20 March 2017

State of the BSDs

So, every once in a while I find myself doing a mental comparison of the various flavors of the main *BSD implementations, where they stand, what they support, etc.

Even more rarely, the comparison necessarily becomes manifest, in the form of trying to install each of them, and cursing like a sailor with a bad case of boils about what works and doesn't work on each one.

Just for posterity's sake, below you'll find a table of the standing of each, in my observation, as of today (Monday 20 March 2017).

This table only compares features that are significantly different and reasonably uncontested.  There's not much point in comparing things that they all have in common.  They all support DRM2 / KMS on x86[-64] in their most recent releases, for example.  Other concepts, like "security of the base system" are relevant and have some numbers available but are hotly debated, whereas nobody is arguing that Dfly supports PowerPC, or that OpenBSD has netmap.

Points awarded:
  1. Does not exist or work at all
  2. Exists or works, but is not documented or well-supported, or requires third-party patches
  3. Exists or works well, is documented, and is supported
Please note that if you have a factual correction about some information and care enough to post about it, I will gladly review an amend as appropriate - I do not care, however, if you agree with me on the more subjective measurements, that I didn't include your favorite BSD flavor, that Linux blah blah blah, etc. ad nauseam...


Differentiating FeatureFreeBSDOpenBSDNetBSDDragonflyBSD
Niche Architecture Support1220
Modern Security Hardening1221
SMT-aware Scheduler2002
Network Ring Buffer2012
Modern C[++] Compiler in Base1112
Next-Gen File System Available2122
Native Hypervisor2200
TOTAL11889

Here's the break-down:

N.B. I'll add links to supporting documentation later as a follow-up, when I have a few minutes
  • Niche Architecture Support: NetBSD and OpenBSD are both strong here, with the base system and a good selection of pre-compiled binary packages available for a wide variety of architectures.  FreeBSD supports a few of the less-common architecures, but only has pre-built packages for x86[-64] and ARM.  Dragonfly, of course, only supports x86-64, period.
  • Modern Security Hardening: Again, NetBSD and OpenBSD are both strong here, with a good selection of PaX features (or workalikes) in the base system and well-documented.  DragonflyBSD has started on a few of them but doesn't have the whole buffet yet.  FreeBSD only has them as a separate distro-nee-patch-set (HardenedBSD).
  • SMT-aware Scheduler: FreeBSD has ULE, DragonflyBSD has... well... whatever it's called, but poor OpenBSD and NetBSD are stuck with descendants of the old 43BSD scheduler, which isn't particularly aware of CPU topology as far as I can tell.
  • Network Ring Buffer: FreeBSD and Dragonfly both have netmap.  NetBSD seems to have an implementation, possibly related to the kernel-in-userland option, but I can't find much about actually using it.  OpenBSD has nada in this department.
  • Modern C[++] Compiler: DragonflyBSD has a modern GCC in the base system.  All of the rest have Clang in base, either as an option or as default, but Clang on anything other than x86[-64] and ARM[64] is catch-as-catch-can at the moment, and the default releases for different architectures reflect that.
  • Next-Gen File System Available: Think copy-on-write, filesystem-level snapshots, multiple virtual filesystems on a single partition, abundant bit rot protection etc.  All of the BSDs have ZFS in some form, though OpenBSD's ZFS does seems quite experimental even though it does exist (thanks to Ted Unangst).  Dragonfly also has HAMMER[2], which is pretty alright.
  • Native Hypervisor: Pretty straightforward - is there a hypervisor in the base system, or not?  FreeBSD has Bhyve.  OpenBSD has vmm.  The others have naught.  I'm not counting the ability to act as a Xen Dom0 here, because even though Xen is a good hypervisor, its administrative experience is normally a far cry from "native."

Now, none of this should be construed to mean that I just absolutely adore one above all others - they each have their strong points: Dragonfly simply won't run on anything other than x86-64, and FreeBSD's support for anything but x86[-64] and ARM is shoddy at best (no pre-built binary packages AND a ten-year-old compiler in base?  C'mon?!); NetBSD supports the most platforms out of all of them, but OpenBSD is the only one with solid sun4v support, etc.

The point is that I've got each of them running happily on at least one (1) system that I own, for a good reason or two.  Diversity in measure is still a good thing.