The BSD family is a set of direct descendants of the original Berkeley Software Distribution of Unix.
They originally split off from main line classic BSD at various points in the 90s.
They are all released under variations of the [[BSD License]] with source available and various degrees of arcane development processes.
# Comparisons
Based on my own limited experience and research, FreeBSD appears to be the one I would prefer to use, even though you are required to install your own GUI environment.
But OpenBSD is supposed to be more stable and perhaps more secure.
# Third Party Comparisons
- NetBSD and Dragonfly use `gcc`, OpenBSD and FreeBSD use clang (although it [seems](https://wiki.freebsd.org/PortsAndClang) to be different for different architectures)
- Editors: FreeBSD and Dragonfly have `ee` and `vi` in base, OpenBSD has mg and vi, NetBSD only has vi
- NetBSD uses `ash` by default, OpenBSD uses `pdksh`, FreeBSD uses `tcsh` for root and something different (not sure) for other users
- `pkg install` vs `pkg_add` vs `pkgin in` (not to mention `cd something/something; make install clean`)
- `service sshd start` on NetBSD, `rcctl start sshd` on OpenBSD
- Default window manager: `ctwm` on NetBSD, `cwm` on OpenBSD, no X in base on FreeBSD
- non-portable system calls (something like OpenBSD's `pledge` but less known) and useful non-portable tricks
- FreeBSD, NetBSD, and DragonFlyBSD use `libarchive` to implement `tar(1)` and `cpio(1)` with `bsdtar` and `bsdcpio`, which implement a whole host of modern archive formats including the POSIX `pax` format (which has few practical limitations for archiving).
- OpenBSD's tar and `cpio` descend from Keith Muller's BSD implementation, from about when the USTAR archive format was introduced (supporting 8 gig files, 155 character path prefixes, and 100 character filenames).
- All the BSDs have `pax(1)` implementations descending from Keith Muller's 4.4BSD `pax` implementation, which pre-dates the POSIX pax format introduced a few years after. None of them implement POSIX `pax`.
- All BSDs have an sh(1) descending from the Almquist shell, with line editing and interactive history. The NetBSD implementation also implements tab completion for filenames, and in the next release will include tab completion for command names as well. **Note: While OpenBSD has an `sh` compatible mode for `ksh`, it does not have an `ash`-derived shell available!**
- NetBSD and OpenBSD's `csh(1)` descend from William Joy's original `csh`, and lack line editing and interactive history. FreeBSD and DragonFlyBSD implement `csh` through a symlink to `tcsh`, which does have editing and interactive history.
- FreeBSD, NetBSD, and OpenBSD all have a `ksh(1)` descending from `pdksh`, while [DragonFlyBSD does not implement any ksh](https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/etc/shells)
\- via [Reddit](https://www.reddit.com/r/BSD/comments/vnogks/comparative_bsd_cheatsheet/)
See also: https://github.com/jpdasma/unix-cheat-sheet