Here I'm republishing an old blog post of mine originally from August 2016. The article has been slightly improved.

Background: This article is somewhat old now and does of course not consider the newer trends and events. As it tries to explain each project's goals it's still valid and helpful, however. The article was pretty well received and is one of the most commented on posts I wrote. It has one more major point to it though: I wrote it when I still was a newcomer to the BSD world. At the time I was very much neutral towards all of the projects. I've since settled on FreeBSD as my preferred OS and while I still like the other projects as well, I see them from a FreeBSD user's prespective. So I could not claim that valuable neutrality anymore.

How to choose your *BSD OS to begin with?

After publishing my previous post about how FreeBSD's documentation is way better than that of Linux, I was asked which BSD I'd recommend to somebody who knows Linux but is new to the world of *BSD. This is a good question - and definitely one that cannot be answered in just a comment reply. So here's a whole article about that topic (and in fact a rather lengthy one).

Documentation: Linux vs. FreeBSD - a real-world example

The question has been asked many times on the net and a lot of people have given different answers. Many of those recommendations are rather old now and the points that they made may no longer apply. Also it's often BSD veterans who - of course - tend to advocate their BSD of choice. I'm a newcomer myself and so far I have not settled on one particular BSD but still try to explore all of them, their strong points and their shortcomings. If you ask me about Linux, I'm tempted to recommend the distro that I've been using for years now. When it comes to the BSDs this is not the case, yet, and while I do not make the claim that I'm perfectly neutral, I think that I can write something that could be of some value to people thinking about giving some BSD a try.

Dear Linux user!

Long-time Linux users will probably remember the famous "Welcome letter to a Windows user" from 2006. It's a real classic which is outdated in some regards but the main points are still very much valid. The most important one (which applies in our case as well): If you're interested in another operating system, **it is imperative to be open-minded and to give this OS's way of doing things a chance**! It's not a good idea at all to judge from the perspective of your old OS. Quite some things will be different. And as a matter of fact, you won't be able to judge if certain decisions were sensible - they may seem totally weird to you but then actually make perfect sense if you know the background (which you don't until you gain much more knowledge about the design of the system).

All BSDs are direct descendents of the original AT&T UNIX. Compared to Linux they have a much longer history and there are lots and lots of things that can probably only be explained if you go back in time far enough. While all BSDs share a common heritage, they have of course been modernized over time. That is why they also have diverged quite a bit over the last two decades (and why it makes sense to write an article like this!).

One of the most important differences between the Linux world and the BSD one is that there are no "BSD distributions". Sure, you will find some people use that term on the net but it's most likely wrong. Most likely? Yes, because there arguably _are_ BSD distributions... But that's a very special case. You definitely know Debian and you probably know Gentoo. These are two Linux distros, right? Sure - but they could also be called "BSD distributions". Why? Because there's not only Debian GNU/Linux. The Debian project also offers Debian GNU/Hurd. And there's Debian GNU/kFreeBSD, too! The latter is a typical Debian distribution (GNU userland) running on top of the FreeBSD kernel. For Gentoo it's the same story. That's where there's something that you _may_ call a "BSD distribution". But that's a rather Linuxy point of view [especially since it's not even coming with the BSD userland]!

While Linux is just a kernel and it is the distributions that create a full operating system by combining it with a userland (usually GNU), all BSDs follow a "whole system" approach. There's no such thing as "the BSD kernel". Each BSD has its own. Fedora and Arch Linux may use different versions and configure their kernels differently, but it's the same Linux kernel from the same sources that they use. The FreeBSD kernel and the OpenBSD kernel for example are entirely different kernels (even though they share common ancestry). It's due to this "whole system" approach that calling e.g. NetBSD a "distribution" is plain wrong (and for the same reason BSD people will probably call the idea of a "BSD distribution" an absurdity in the first place).

What else should you know? Well, there's a lot of little things that will be different from what you are used to. Drives and network interfaces have different names (like _ada0p1_ instead of _sda1_, _em0_ instead of _eth0_ or _enp0s3_). Some commands have different options and/or switches. Filesystems are different (unless you're going to try FreeBSD and already used ZFSonLinux). The configuration works differently and you're going to meet a different init system. You'll probably come across a lot of things that turn out not to work like you intended. But that's nothing horrible. You're familiar with one unix-like system (Linux) and the BSDs are all unix-likes themselves after all!

A potential problem is drivers. If you always use the absolutely newest hardware (or pretty exotic stuff), chances are that Linux may fit you better. All of the BSD projects are much smaller than Linux is and so it is impossible for them to support as much hardware. However they are doing a fantastic job for the manpower that they have. Just try it out and see!

FreeBSD

Why should you try FreeBSD? FreeBSD is the BSD operating system with the largest community. This can be an important point for deciding which BSD to give a try. Thanks to its relatively large community it offers by far the widest range of software available. FreeBSD is the base of a lot of commercial products and appliances and for that reason it receives quite a bit of funding from the industry. That money can then be spent to fund projects that nobody volunteers for.

FreeBSD has good support for technology like EFI. Nvidia officially supports FreeBSD and provides a closed-source driver that is meant to be on-par with the Windows driver (this can be interesting if you need good graphics performance). If you are into virtualization, FreeBSD is an excellent choice. Virtualbox 5 has been ported to FreeBSD in a community effort (Oracle does not support FreeBSD hosts). Qemu and Xen are available. And with Bhyve, FreeBSD even has its own modern hypervisor which is a really promising piece of tech! A lot of effort has been put into making the ARM platform a first class citizen with FreeBSD 11 (which is just around the corner now).

The project strives to create a _general purpose_ operating system that is free, open source and under a _permissive license_. FreeBSD has put a lot of effort in getting rid of GPL'ed software in the base system (you can of course always install it as a package, though!): GCC has been replaced with LLVM/Clang (on major platforms) and a lot of the GNU tools for which no alternative implementation existed have been substituted by newly created, BSD licensed replacements. This is still work in progress, but the plan is to be able to offer a full operating system that is all permissive licensed by the time FreeBSD 12 is released.

FreeBSD's support for technology like _ZFS_ and _DTrace_ has been mature for quite some time now. Other things like _jails_ have been around like forever and are a stable part of the operating systems literally far more than a decade before "containers" became the next hot thing on Linux. On FreeBSD you can choose between three Firewalls: A modified (e.g. multi-core optimized) variant of the mighty _PF_, _IPFW_ (FreeBSD's native firewall) and the old _IPF_. Also FreeBSD's _Linux emulation_ is a pretty sophisticated system. Don't expect it to support all Linux syscalls up to the latest 4.7 kernels - but even though it's limited to emulating older Linux kernels, it still enables you to run some closed source software that is only available for Linux if you need that.

In general FreeBSD is often characterized as "extremely stable" and there's definitely something to it. However this does not just mean that it's a rock solid system, mind you! Stability is more than that. E.g. the project follows a design principle called the "POLA": The _Policy Of Least Astonishment_. You won't reboot your machine after a major upgrade just to find that your init system has been replaced with something else! You also won't find that your firewall is inactive because the config format changed and the newer one cannot load your previous rules! It's not too hard to see the benefit of introducing changes gently over time and with loud heads-up messages instead of quietly. When it comes to supported architectures, FreeBSD concentrates on the more popular ones.

While it's mostly used with servers, FreeBSD makes a great desktop, too. If you want a desktop FreeBSD, you can of course install vanilla FreeBSD and then add a lot of packages for your favorite desktop environment. However there are two projects which provide a FreeBSD based desktop system (with a graphical installer, packages tuned for desktop usage, and so on): PC-BSD / TrueOS and GhostBSD. The former focuses on a modern OS with a lot of nifty tools - at the cost that it's available for 64-bit PCs only and forces you to use ZFS. It uses the Qt toolkit and (by default) its own desktop called _Lumina_. If you prefer the GTK+ side of things, GhostBSD offers the MATE or Xfce desktop environments (and also supports 32-bit systems as well as the older UFS filesystem if e.g. your machine has little RAM). Both are excellent choices if you prefer to start with a complete desktop OS and explore things from there.

GhostBSD website

[PC-BSD / TrueOS is no longer available, the project has ended. Today GhostBSD is also 64-bit only and focuses on ZFS.]

OpenBSD

If you choose OpenBSD, there's a lot of really cool and modern features... _that you will have to do without_! Oh, don't get me wrong: That can be a _great_ thing!

The OpenBSD project focuses on security and correctness and for that reason takes high code quality extremely serious. They reject the phenomena that is sometimes called _featuritis_ and resist the temptation to implement dozens of "neat" or "nice to have" things at the cost of neglecting the essentials. The OpenBSD developers put quite some effort into maintaining a tidy system. Run across some ancient looking code? Time to ask on the mailing list if somebody does even use that at all. If nobody claims to do so, disable it and wait for someone screaming that it is needed after all. And if there's any doubt in it still being useful after some time: Bye bye, feature!

Just to give you some examples which prove that those guys really mean it: Not too long Linux emulation has been completely removed because it was old and considered to be in a bad state. Just recently _tmpfs_ was disabled due to a lack of maintenance and may very well be removed in the future as well. And of course it's security first. Believe it or not: OpenBSD is not afraid to throw away things that pretty much every user of a modern OS takes for granted. Loadable kernel modules can always be a security problem. OpenBSD had them but eventually ripped them out. Usermount turned out to have security issues and - due to its nature - not to be really fixable. It's gone now.

The project also takes a very tough stance on license matters / politics. There's GPL(v2) code in the base system but GPLv3 is deemed completely unacceptable. As you would expect from hardliners living up to their creed, OpenBSD still ships with GCC 4.2.1 (the last GPLv2 version) in the base system (you can of course install GPLv3 software as packages)! Even though they heavily patch their compiler, it's pretty old now and probably is a hassle to continue to maintain. Binary blobs are not accepted even if they'd make something work. Since that would not be debugable or auditable, using blobs would mean a half-assed solution. And OpenBSD follows the principle: "Do it right or don't do it at all". They also refuse non-disclosure contracts as a matter of principle. If some vendors choose to be pigheads, OpenBSD usually chooses not to support their hardware. Period.

While most people would probably agree that doing things _right_ is a commendable thing, this may sound a bit too harsh for you. But think again: It's exactly this seemingly "extremist" stance that brought great benefit to all of us, even if we don't use OpenBSD. How's that? The OpenBSD developers have discarded a whole lot of tools because they didn't live up to their high standards and then took the effort to replace them with a new tool done the OpenBSD way. Tools like _OpenSSH_, _OpenNTPD_, _OpenSMPD_, _relayd_, _spamd_, _tmux_ and many more originated in OpenBSD. They even created their own secure webserver (simply called _httpd_) since they felt that Nginx was getting too bloated over time. As the project has a much smaller community compared to FreeBSD, this really is quite an achievement.

They are also not afraid of taking quite radical steps even if that means a lot of software breaks for them. In 2014 they solved the "2038 issue" that all *nix systems have. Previously OpenBSD pioneered system wide stack protection, ASLR, W^X, etc. All these things are major changes that break a lot of applications. OpenBSD ports maintainers who noticed that some application broke due to changes like these always tried to at least notify the upstream projects or upstream patches if they already resolved the issue. This makes it much easier for other systems to also make these changes since the biggest fallout of doing so was already solved (thanks to OpenBSD).

OpenBSD supports a lot of architectures and purposely does so. Even the packages for the most exotic platforms are built on these machines instead of cross-compiling them on faster metal. The idea behind this is that doing so will in some cases expose subtle bugs that would have gone unnoticed otherwise.

While it maintains a rather small base system, OpenBSD still comes with a surprisingly complete set of tools for server duty. Some people say that OpenBSD makes the perfect router and thanks to the PF firewall this may very well be the case. Just don't be too quick dismissing it for desktop usage! OpenBSD developers are known to be devotedly dogfooding their system on their laptops, servers, desktops - on their everything. If you want to use it with a graphical system, there's a distribution set called _Xenocara_ on the installation CD. Xenocara is a hardened version of Xorg. Should you ever need help, have a look at the manpages. They are of breathtaking quality.

NetBSD

Alright, NetBSD. This BSD does not have such a big community and that community is unfortunately not particularly good at communicating the cool things that they are doing. I've used it much less that the two "big" BSDs mentioned before, so I might easily miss quite some information deemed relevant by a regular NetBSD user.

First and foremost NetBSD is known for its portability. Their slogan is "Of course it runs NetBSD!" and if you take a look at the quite impressive list of supported hardware, the project lives up to that. If you get into the greater *BSD community a bit, you'll sooner or later hit the reference that NetBSD runs on just about every computer and on toasters. Don't you think this is a joke! 😉

https://www.embeddedarm.com/software/arm-netbsd-toaster.php

Perhaps even more impressive is that NetBSD is just so portable that you can actually compile NetBSD on a Linux system if you want to! And things don't stop there. Probably the best known project that originated from NetBSD is _Pkgsrc_ (pronounced "package source"). If you already have an idea what the _ports system_ on FreeBSD or OpenBSD is, think that plus - of course - a lot of effort added to make it highly portable. Pkgsrc can bootstrap itself on all the BSDs, Linux, Solaris, OSX, Minix, commercial UNICES (AIX, HP-UX, etc) and even Windows (using Cygwin)! What does it do? It provides three things: 1) Portable package tools 2) A portable package creation framework 3) Ports (think package "recipes").

If you use multiple operating systems you may be tired of having to use different versions of your applications (since all operating systems or - in case of Linux - even all distributions package applications at their own pace). Pkgsrc may be the solution for you since you can use it to build and install the same version of your applications on all of your platforms! Truth be told, not every port builds on all supported operating systems. But still even having 60 - 90% (depending on which software you need and which OSes you run) is quite nice!

But there's more to it than just portability. NetBSD has been experimenting with a few interesting things over the last few years. For example they've imported the small embedded programming language Lua into their kernel. In case you do not know it: Lua is used in many places since it's very light-weight and easy to use. A lot of games embed it as their scripting language for example. Having this in the kernel could allow for a whole lot of interesting things. However I have to admit that I haven't looked into this. Same thing for the new firewall, _npf_, that is part of NetBSD. It's meant to be very high-performance but I haven't used it and didn't hear too much about it.

The most interesting concept that I associate with NetBSD is that of the _rump kernel_, NetBSD's take on the _anykernel_ concept. If you're not familiar with that please do some reading yourself. This topic alone would easily deserve its own article - and I'd not be the one to write it since I'm not very knowledgeable in this field.

Rump kernel on Wikipedia

DragonFly BSD

Who should try out DragonFly BSD? Well, you _should_ have a heart for underdogs if you want to try out dfly first. It has by far the smallest community of the four main BSDs and so the chance that you'll ever run into it in the wild is pretty low. If you don't mind that (or this even sounds great for you) then there's nothing wrong with giving Dragonfly BSD a try. In fact from the technical side there are very good reasons to do so!

Dragonfly BSD is the youngest of the major BSDs. It was forked from FreeBSD because its lead developer did not agree with the direction that the FreeBSD project took. Since he was interested in clustering and ultra-high performance computing, these are some of the main aspects that drive the development of Dragonfly.

The Dragonfly BSD project seems to be more interested in creating the best performing OS possible then in things like license matters. While they are looking into making LLVM/Clang their system compiler now, they had no problem importing GCC 5 into their system. For quite some time dfly used NetBSD's Pkgsrc as their official packaging tools. After FreeBSD introduced _pkg-ng_ they switched to using that and a customized ports tree called _dports_.

Dfly has achieved high performance especially in networking and is the leading BSD when it comes to porting graphics drivers over from Linux. It has dropped 32-bit support and now supports 64-bit machines only. This decision was made due to the little manpower that the project has. A tool called DMA (Dragonfly Mail Agent) has originated from Dragonfly; it is a simple replacement for sendmail on servers that only need to send mail on the local machine.

However the most important reason to give DragonFly BSD a chance is because it offers _HAMMER_. HAMMER is a BSD-licensed next generation filesystem a bit like ZFS in some regards but different in others. While it lacks some of ZFS's advanced features it works well even with much less memory and it can even do things that ZFS can't (fine-grained file history)! HAMMER has been considered stable and production quality on DragonFly for a while now so this is something to take a look at if you are into filesystems.

Well, and then there's _HAMMER2_, version 2 of the HAMMER filesystem with even more features. It is not ready yet and the Dragonfly developers openly admit that it won't be too soon, but it is interesting enough to keep an eye on (especially since version 1 of HAMMER is proof enough that the team can implement a filesystem that rocks!).

Your choice!

So let me welcome you to the rich and fascinating world of *BSD. You now have a first and very basic impression on what the four main projects "work" like. Try out either one. Try out all of them. Virtualize or use real hardware. The source will always be with you. The choice is, too.

BACK TO 2016 OVERVIEW