Remix.run Logo
evanjrowley 5 hours ago

One of my favorite FreeBSD features is first-class support for ZFS boot environments. These have been working in FreeBSD/Solaris since 2008[0]. Having each boot environment available as a ZFS snapshot capable of being managed the same way as any other dataset, capable of being sent and received, is such a powerful feature. I dilligently watch the immutable/atomic Linux space to see when something implements this in the same fashion.

Ubuntu could have been the one, but they reversed course after dropping support for Zsys in 2022[1].

If there are others, then please let me know, but as far as I can tell, the closest approximations in Linux are:

- Btrfs with Snapper in OpenSuse Tumbleweed/MicroOS

- Snapshot Manager/Boom in RHEL

- OStree in Fedora Atomic, CarbonOS, EndlessOS

- Bootable container implementations in Fedora CoreOS, RHEL10, CarbonOS, Bazzite, BlendOS, etc.

- Snaps in Ubuntu Core

- Generations in NixOS and Guix

- A/B update mechanism in ChromeOS, IncusOS

- OverlayFS in Nitrux Linux

- Ad-hoc implementations with Arch, Alpine, etc.

Excluding the ad-hoc implementations, only OpenSuse and Red Hat approaches allow you to treat your system image and system data the same way. They're great, but fundamentally incompatible, and neither has caught on with other distributions. Capabilities of both approaches are limited compared to ZFS.

The strangest part of the Linux situation IMHO is, every time ZFS on Linux is discussed, someone will invariably bring up XFS. For the past decade, XFS on Linux contains support for Copy-on-Write (CoW) and snapshots via relinking. If this is the preferred path on Linux (for users who don't want checksumming of ZFS/Btrfs/Bcachefs), then how come no major distros besides Red Hat have embraced it[2] to provide an update rollback functionality?

I concede that most of the other approaches do provide a higher level level of determinism for what your root system looks like after an upgrade. It's powerful when you can test that system as an OCI container (or as a VM with Nix/Guix). FWIW, FreeBSD can approximate this with the ability to use it's boot environments as a jail[3].

[0] https://daemonforums.org/showthread.php?t=7099

[1] https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1968...

[2] https://docs.redhat.com/en/documentation/red_hat_enterprise_...

[3] https://man.freebsd.org/cgi/man.cgi?query=bectl&sektion=8&ma...