FreeBSD 15.1 shipped on June 16, the second release off the stable/15 branch. Most of the coverage I have seen fixates on what FreeBSD still does not do on the desktop, which is a fine conversation to have somewhere else. If you run FreeBSD on servers, 15.1 is a maintenance-plus release with one genuinely disruptive change buried in it and a pile of quiet improvements that matter more than the headline items.
pkgbase Grew Up, and It Will Break Your Muscle Memory
The big one: cloud images built with packaged base now include pkg(8) and support automatic base-system package updates on first boot. That is the future of FreeBSD lifecycle management and it is finally usable without heroics. The catch is that on a package-based system the installworld target is blocked. If your upgrade runbook is buildworld, buildkernel, installkernel, installworld, that runbook simply does not apply to a pkgbase host. It does not warn you and let you proceed. It stops.
Two packaging changes will bite anyone scripting installs: OpenPAM and Zstandard are now split into separate packages, FreeBSD-pam and FreeBSD-zstd. If your automation assumes base is monolithic, audit it before you cut over. The default shell for root and the freebsd user in release images also moved from csh to sh, which is harmless in isolation and exciting if you have login scripts that assume .cshrc. And pwd(1) now defaults to logical mode per POSIX, which changes output in any script that walks symlinked paths. None of these are hard problems. All of them are the kind of thing that surfaces at 2am if you skip the read-through. If you run jails, the mechanics of moving hosts and jails onto packaged base are worth walking through deliberately -- see our jail upgrade walkthrough for 15.0 to 15.1 with pkgbase.
The Quiet Wins
OpenZFS 2.4.2 is the improvement most people will actually feel. Scrub and resilver minimum intervals dropped from multi-second to sub-second, so resilvers make real progress on a busy pool instead of getting starved by production I/O. The new zfs_arc_evict_batches_limit tunable cuts ARC lock contention, which matters on high-core-count file servers where ARC eviction was quietly eating CPU. We covered the details separately in what OpenZFS 2.4.2 changes in FreeBSD 15.1, and the baseline advice in ZFS tuning for production FreeBSD servers still holds.
Elsewhere: kern.sched.name lets you select SCHED_ULE or SCHED_4BSD at boot instead of building a custom kernel. amd64 gains LASS for kernel and user address space isolation. bhyve picks up an allow.vmm_ppt jail knob that gates PCI passthrough per jail, plus UNIX-domain-socket framebuffer support so jailed VMs get graphics without networking exposure. ena(4) 2.8.3 delivers a better-than-tenfold jumbogram throughput improvement on AWS. Divert sockets finally handle IPv6, ipfw supports masked and non-contiguous prefix lookups, and RFC 7217 stable IPv6 addressing arrives via the stableaddr flag, off by default. Userland moves to OpenSSL 3.5.6, zstd 1.5.7, SQLite3 3.50.4, ncurses 6.6, libfido2 1.16.0, and Unicode 17.0.0. Wireless drivers iwlwifi(4), rtw88(4), and rtw89(4) rebase on Linux v7.0, with initial LinuxKPI wireless landing on RISC-V.
Who Should Move Now, Who Should Wait
If you are on 15.0, upgrade. It is a point release on the same branch, the ZFS and ena(4) work alone justifies the maintenance window, and staying on 15.0 buys you nothing. If you run bhyve under jails or an AWS fleet with jumbo frames, move sooner rather than later.
If you are on 14.x with heavy source-upgrade tooling, do not do both things at once. Plan the version jump and the pkgbase migration as separate projects with separate rollbacks. Batching them is how a two-hour window becomes a Saturday. Also check the deprecation list now: bsdlabel(8), fdisk(8), agp(4), fdc(4), hifn(4), and safe(4) are all scheduled for removal in FreeBSD 16, the lpr printing suite is deprecated in favor of CUPS, and ipfs(8) is disabled by default. 15.1 is where you inventory those dependencies, not where you get surprised by them. Anyone on ARM64 hardware should also revisit our notes on FreeBSD 15-STABLE ARM64 builds, since the 15.x line is where that platform finally became boring in the good way.
What to actually do: read the 15.1 release announcement end to end, then grep your provisioning and upgrade automation for installworld, csh assumptions, and anything on the FreeBSD 16 removal list. Upgrade one non-critical host first, confirm your monitoring and boot environments survive it, and only then schedule the fleet. If you are timing the move against the ports tree, our take on the ports freeze and the upgrade window covers when to pull the trigger.
Planning a 15.1 rollout? Learn about our FreeBSD systems engineering services or schedule a consultation.