>>11422
I have a lot of experience with a dozen OSes due to being a long term NEET and an obsession with portability, and I can safely say the BSD pecking order goes:
- OpenBSD
- NetBSD
- FreeBSD
OpenBSD is the only one that is actually a cohesive, well integrated system. The others may claim to be so, but it's a lie. FreeBSD, for instance, has you go read the wiki to go figure out the multiple config files and you have to edit and commands you have to run to do every simple task.
For instance, want to use your phone's USB tethering on OpenBSD? Simple. When you plug such a device in, OpenBSD automatically configures the new network device, but does not actually put it to use. To put it to use, you can follow the "Dynamic Host Configuration Protocol" section of the FAQ:
https://www.openbsd.org/faq/faq6.html
There is only one step:
>run a command that tells the DHCPv4 daemon to autoconfigure the new device.
As explained in the "Network Configuration" section at the top of the same page, you can simply put the same command (minus the ifconfig bit) into a file named /etc/hostname.$if where $if is the name of the interface, and it'll autoconfigure on boot.
How do you do it on FreeBSD?
The wiki explains: https://docs.freebsd.org/en/books/handbook/advanced-networking/#network-usb-tethering
The steps go:
<load some kernel modules related to USB tethering
<tell the bootloader to tell the kernel to load those modules on boot
Now the tethering works as a regular network card, and you can proceed to configure it like any other, so we move to another part of the handbook:
https://docs.freebsd.org/en/books/handbook/network/#config-dynamic-ip-v4
OK, it shows us what command to run for one-time configuration, and the command to run to make it autoconfigure on boot. It also tells us about an optimization we can do ("background dhclient") and how it can cause issues.
So here's the difference between the OpenBSD and FreeBSD way:
>OpenBSD is a monolithic kernel, so there are no kernel modules.
<FreeBSD is a hybrid kernel, and most tasks, this one inclusive, involve loading the relevant kernel modules, and optionally setting them up to load on boot. Also notice how one-time module loading and automatic module loading use different syntaxes.
>On OpenBSD, the ifconfig command is the central place for all network configuration. You run one command and it tells the DHCPv4 daemon to autoconfigure a specific network card's IPv4, and you can paste the same command into a config file and it'll do it every boot.
<On FreeBSD, many different programs handle networking, just as OpenBSD, however, there is no central place for configuration, so you must use many programs, each with their own syntaxes, many very different as not all of them come from FreeBSD and follow its style. You use one program with one syntax for one-time configuration, and you give a different syntax to a different program for autoconfiguring on boot. If you were to configure a wi-fi cart, you'd use yet another program with yet another syntax. Do you see how the amount of learning you have to do scales linearly?
<FreeBSD additionally gives you another way of doing the same thing just because
Try to do almost anything, this is how it goes almost every time: OpenBSD has the simple (both easy to use and easy to implement) design that is easily learned from man pages, and FreeBSD does things the complicated, haphazard way that needs an entire book to explain it. But do note that FreeBSD is to Linux what OpenBSD is to FreeBSD, and NetBSD typically sits between OpenBSD and FreeBSD in the convenience department.
Also, NetBSD has one of the biggest package repositories out there. This is because pkgsrc is portable and runs on many other OSes, so it also gets developers who use UnixWare, HP-UX, Solaris, etc. OpenBSD has the smallest repositories of all the BSDs. But hey, you can use NetBSD's package manager on OpenBSD if you want.
On the other hand, OpenBSD lacks a fancy modern FS. FreeBSD and NetBSD have ZFS, that means you get compression, good RAID support, checksumming, and more features that you might need if you have lots of drives and perhaps run a service or something of the sort. Meanwhile, OpenBSD has the slowest FS of all because it both lacks journaling and soft updates, and it doesn't have any of the fancy modern features.
Also, FreeBSD is the best performing BSD, OpenBSD the worst.
NetBSD also has no FDE support to this day.
When picking a BSD, the reasoning is simple. If OpenBSD covers your use case, use OpenBSD, there is no reason to use the others. If OpenBSD doesn't fit your use case but NetBSD does, that's the next best thing, so use that, there is no reason to use FreeBSD then. Otherwise, go FreeBSD.