I use Linux on all my laptops and desktops and also on servers that are used for computational purposes, i.e. on which I compile software projects or I run simulations or FPGA syntheses or CUDA programs on GPUs.
I use FreeBSD on servers that implement various networking or storage functions, e.g. firewalls, NAT, DHCP servers, routers, switches, file servers, backup on magnetic tapes, DNS servers and proxies, e-mail servers, Web servers and proxies and so on.
The main reason why I prefer FreeBSD in such servers is that for it I need to waste less time for maintenance and monitoring, because it provides a more stable and consistent environment where I need to make very few custom changes for the services that I need.
In Linux I always have to work much more for a sane configuration.
There are also various specific details, e.g. I like much more the firewall programs that are available for FreeBSD than those that are available for Linux, so for any computer facing the public Internet I use FreeBSD. FreeBSD has better support for SCSI/SAS devices, so where I use such devices, e.g. tape drives, FreeBSD is also the only choice for me.
In FreeBSD I also normally use unattended upgrades and I almost never use more than an hour per year for maintenance, except for reading my e-mails where I receive statistics from the logs of the servers.
Beyond that - for regular server use cases, at least - it's mostly a matter of taste, I think. There are situations where you need an enterprise distro, i.e. RHEL or SLES because some third-party software requires that or regulatory compliance requirements demand it. Most of the time, I think the difference is minor for most intents and purposes.
EDIT: If you strongly dislike systemd, FreeBSD is an attractive choice, but there are Linux distros that use a different init system, too.
There was an effort to create something akin to macOS's launchd for FreeBSD, but I don't know how that worked out.
Not trying to "RTFM" you but https://man.freebsd.org/cgi/man.cgi?query=rc contains a nice minimal example script for anyone who's curious.
https://www.bsdfrog.org/pub/events/openbsd-rcd-EuroBSDcon201...
With ZFS and boot environments, it's great for upgrades, if you're okay with some downtime. You can certainly do high-availability, but again, there's some hand-holding.
I much prefer FreeBSD for everything I can use it for. But I don't use Docker, or Kubernetes. I use it as a server OS where the only interface is ssh.
Personally I prefer FreeBSD as an operating system but the lack of Docker keeps me stuck to Linux (I don’t even like Docker but at this stage it’s now the de facto standard for packaging containers).
Though to be fair I haven’t tried Pot. Used ez_jails a lot in the past, as well as rolling my own build scripts. So maybe I’m missing a trick?
- a lot of project distribute a docker image or we have community "distributions" like linuxserver.io. But nothing come close to a good distribution package management so far,
- the security of containers is still very unclear, misunderstood & unequal,
- the ecosystem is now fragmented between docker, podman, etc.
- generally it feels like things have become more complicated !
We also now do see new generation (?) of distributions centered around containers like CoreOS, MicroOS or even Silverblue.
My questions would be: is the BSD world trying go move this way too with bsdpot & potluck or consider this is not the way to go or this just a distraction and Ports will always be the way to distribute software?
In a bhyve vm config file you add 'bhyve_options' and add some virtio-9p mount points. they are 'per slot' so each of these mounts will need a new number '-s 15' '-s 16' as in my below example.
on FreeBSD host, assuming you are using bhyve-vm (works with plain bhyve also):
/usr/local/vm/nixos/nixos.conf
bhyve_options="-s 15,virtio-9p,podman-archivebox=/HOSTZFS/Services/VM/NixOS/ArchiveBox -s 16,virtio-9p,podman-music=/HOSTZFS/Audio/Music/Flac"
in VM (nixos):
fileSystems."/mnt/podman-archivebox" = {
device = "podman-archivebox";
fsType = "9p";
options = [ "trans=virtio" "version=9p2000.L" "_netdev" "cache=loose" ];
};
fileSystems."/mnt/podman-music" = {
device = "podman-music";
fsType = "9p";
options = [ "trans=virtio" "version=9p2000.L" "_netdev" "cache=loose" "ro" ];
};
If you were not using NixOS, add your mount points in the VM (/mnt/podman-archivebox, /mnt/podman-music).
Then mount them with your docker/podman setup. virtualisation.oci-containers.containers."ArchiveBox" = {
image = "archivebox/archivebox";
...
...
volumes = [
"archivebox_data:/data"
"/mnt/podman-archivebox/archive:/data/archive"
"/mnt/podman-archivebox/sources:/data/sources"
"/mnt/podman-archivebox/ArchiveBox.conf:/data/ArchiveBox.conf"
];
virtualisation.oci-containers.containers."navidrome" = {
image = "deluan/navidrome:latest";
...
...
volumes = [
"navidrome_data:/data"
"/mnt/podman-music:/music:ro"
];
};
The 9p mount points won't get passed into the VM until you STOP the VM and then START the VM (restart won't work).
Once that is done and you can confirm the files are passed through and working, things 'just work'.
This does not work for things that require file locks like passing database files through 9p.
Hope this is helpful to someone.Or just a kernel that happens to have been inspired by UNIX and took its own path afterwards.
I say this as someone running ZFS on Linux too. So seen things from both sides of the fence.
It’s hard to explain why it’s a nicer experience though. Maybe someone else can?
I'm a bsd lover so don't take that wrong.