Why FreeBSD?

Before going into why FreeBSD is now my preferred OS for learning UNIX let's review why I used Linux for a long time.

I started with Red Hat (before RHEL) in the early 2000s. Tried to install it on a variety of hardware from CDs found in the back pages of books from the library. There was not a single working install so I gave up. Then came the Ubuntu hype and around 2006 I built a computer specifically to install and learn it. Everything - except WiFi - worked out of the box. I managed to get WiFi working with ndiswrapper reading a lot of community documentation. I now had a working box and I began my Linux journey.

My progress from using Linux at home to developing stuff at work was rapid and made easy by the entire free and open source community. As Matthew Garrett puts it

I am who I am because people made the choice to release their
software under licenses that permitted examination, modification and
redistribution. I am who I am because I was able to participate in
communities that took advantages of those freedoms to produce new and
better software.

There were many rough edges in the Linux world and some of them exist even today. Choosing the right distribution (distro) for the task at hand is always the first and most difficult decision to make. While this is a strength of the Linux community it is also its weakness. This is exacerbated with the toxic infighting within the community in the last few years.

A herd of voices believes it is their right to bring down a distro community because it is not like their distro of choice. Forking upstream projects has somehow become taboo. Hurling abuse in mailing lists is acceptable. Helping new users is limited to lambasting their distro of choice. Creating conspiracy theories over software decisions is the way to go. Copyleft zealots roam social media declaring non-copyleft free software heretic abominations. It all boils down to an ecosystem soured by the presence of maniacs who have the loudest voices and they seem to be everywhere you turn.

Where is the engineering among all this noise? Btrfs - baking for a long time - is still nowhere near ZFS in stability or feature parity. systemd is an insatiable entity that feeds on every idea in sight and just devours indiscriminately. Wayland was promised years ago and its time has yet to arrive. Containers are represented by Docker that neither securely contains applications nor makes them easy to manage in production. Firewalling is dithering between firewalld, nftables, etc. SystemTap cannot match DTrace.

In the same time span what do various BSDs offer? pf, CARP, ZFS, Hammer, OpenSSH, jails, pkgsrc, (software) ports, DTrace, hardware portability; just to name a few. Few would deny that BSDs have delivered great engineering with free software licenses to the entire world. To me they appear to be better flag bearers of free software with engineering to back it.

That was my initial motivation to start with FreeBSD. I was enticed to the good side of the force first by Allan Jude and Kris Moore through their BSD Now podcast and then by Bryan Cantrill's interviews (Ubuntu Slaughters Kittens, The Cantrill Strikes Back) and talk (Fork Yeah! The Rise and Development of illumos). Why I stayed is the crux of this post.

Choosing between DragonFly BSD, FreeBSD, NetBSD, and OpenBSD involves a few subjective thoughts. The only hardware available to me was a Raspberry Pi 2 (RPi2). Any BSD I chose had to work on it. That eliminated DragonFly BSD and OpenBSD from the get go.

I have great respect for the NetBSD project as they claim and aim to be ultra portable. It works on RPi2 plus many other SOCs (System on a Chip). This is a great advantage because any user would need to learn one OS and run it on a multitude of available hardware.

pkgsrc is an ambitious and well executed project and I admire the engineering work behind it. That Minix and SmartOS both use pkgsrc instead of rolling their own packaging system testifies to its capabilities. It even has Erlang and Go available which are on my list of things to learn. Too bad it doesn't have Rust and Elixir available but I expect it will soon.

NetBSD, unfortunately, is missing a couple things I wanted to try, namely jails and bhyve. I realize bhyve doesn't work on RPi2. In addition I had found RaspBSD which installed beautifully on RPi2. My couple attempts at installing NetBSD in a VM with its capable but minimal installer were a far cry from the FreeBSD installer. It also doesn't have marketing making a case for it in the wider community that lays a few seeds of doubt in my mind about its long-term viability. Lastly, Digital Ocean doesn't support it out of the box and I wanted to keep short the number of OSes I have to learn simultaneously. For these reasons I kept NetBSD as an alternative choice if FreeBSD didn't work out.

I like to think of FreeBSD as the Debian of BSDs. It has a much bigger tent than others that results in more features available to its users. As I have found on the FreeBSD ARM mailing list its community is super helpful and friendly to new users. The community appears to be more open minded than say OpenBSD which makes a lot of difference.

My RPi2 kit worked out of the box on FreeBSD 11.0-CURRENT, including WiFi. ARM support is improving every day. It is still a Tier-2 supported architecture but I am optimistic for the future.

I can't emphasize enough on how much I love the separation between base and ports. Unlike any other Linux distro I have ever used, third party applications get updates independent of the base OS. So the same ports are installable on 9.x-RELEASE, 10.x-RELEASE, and 11.0-CURRENT. I am not bound to the same version of Erlang until the next OS major release the way I am on Debian or Fedora. This freedom is truly liberating.

A ton of packages are available in ports. Recently I wanted to install Erlang on ARM and a pre-built binary package was not available through pkgng. I built it from source doing nothing more than cd /usr/ports/lang/erlang && make install clean. Having used Poudriere to build my own set of packages I can't praise it enough. I wish something like that was available on Debian and CentOS. pkgng provides binary packages so I don't have to build from source anymore (most of the time). There's on-going work to provide updates to base using pkgng. This attests to the forward progress FreeBSD makes every day.

Jails have been available for more than a decade and things just work. Docker support is also in the works using Jails and ZFS.

ZFS is available as a first class citizen. Although I have never needed to use it to date the fact that when I do there's a history of people using it in production. I can leverage lessons learned and use a stable product with unmatched features.

bhyve is a project to keep up with the times. It can run major Linux distros, Windows Server, and BSDs. A native hypervisor was sorely missing and now it's not. Who says BSDs are dead?

If there ever was love at first sight for me in firewall technology it was pf. I picked it up in a couple hours and got enough done that it's running on my FreeBSD VPS. I have not used IPFW but it's available as an alternative and is no slouch either.

Using /etc/rc.conf to configure everything is a much more pleasant experience. No more hunting through a plethora of commands - service, systemctl, chkconfig - to get status or perform actions.

FreeBSD is not perfect. I don't think I'll recommend someone to use it on the desktop today. There's lots of progress made by PC-BSD to make that possible. It is still missing a lot of niceties provided by other OSes. Support for bleeding-edge hardware lags because of the small size of the developer community and cursory - if any - support from upstream vendors. With alternatives such as OS X - a capable UNIX on its own - at least I don't feel compelled to use FreeBSD on the desktop. Hopefully this will change soon.

Finally - and maybe repeating myself here - I have nothing but praise for the community. Be it BSD Now, mailing lists, Reddit, Twitter, LFNW, or SeaGL, people have encouraged me, answered my questions, and filed bugs for me. I have been welcomed and made a part of the community with open arms.

These reasons are (good) enough for me to use FreeBSD and contribute to it.