FreeBSD 14 vs 13: What Changed and Why Upgrade
FreeBSD 14.0 shipped in November 2023. FreeBSD 14.2 is the current recommended release as of early 2026. FreeBSD 13.4 is still supported but approaching end-of-life. If you are running 13.x, this is the upgrade guide you need: what changed, whether those changes affect your workload, and how to make the jump safely.
Support Timeline
Understanding the support schedule drives upgrade urgency:
- FreeBSD 13.4-RELEASE: Last planned point release on the 13.x branch. End-of-life expected in early-to-mid 2026.
- FreeBSD 14.2-RELEASE: Current release on the 14.x branch. Supported until 3 months after 14.3-RELEASE ships.
- FreeBSD 14.3-RELEASE: Expected mid-2026.
- FreeBSD 15.0-RELEASE: Expected late 2026 or early 2027.
When 13.x reaches end-of-life, it will receive no more security patches. Running an unsupported release in production is a liability.
Kernel Changes
Compiler and Toolchain
FreeBSD 14 ships with Clang/LLVM 17 as the base system compiler (updated to 18 in 14.2). FreeBSD 13 shipped with Clang 14-16 depending on the point release.
This matters for:
- Building kernel modules
- Compiling software from ports
- C++20/23 feature support
- Improved code generation and optimization
sh# Check your compiler version cc --version
64-bit inode Numbers
FreeBSD 14 enables 64-bit inode numbers by default on new UFS filesystems. This increases the maximum number of files per filesystem and is required for some NFS compatibility scenarios.
Existing UFS filesystems from 13.x are not automatically converted. They continue to work with 32-bit inodes until you explicitly upgrade them or create new filesystems.
sh# Check if your filesystem uses 64-bit inodes tunefs -p /dev/ada0p2 | grep inode
Removed 32-bit Platform Support
FreeBSD 14 dropped support for several 32-bit platforms:
- i386 (32-bit x86) as a standalone platform is deprecated for kernel
- mips is removed
- powerpc (32-bit) is removed
amd64, aarch64, armv7, powerpc64, powerpc64le, and riscv64 remain supported. If you run 32-bit hardware, stay on 13.x or migrate to a 64-bit platform.
32-bit binary compatibility on amd64 (running 32-bit applications) is still supported.
KTLS (Kernel TLS)
Kernel TLS offload support was significantly improved in FreeBSD 14. KTLS allows the kernel to handle TLS encryption/decryption for socket I/O, reducing CPU overhead for TLS-heavy workloads.
sh# Check KTLS status sysctl kern.ipc.tls
This benefits:
- Web servers handling thousands of TLS connections
- Database servers with TLS-encrypted client connections
- Any application using
sendfile()over TLS
Performance improvement varies by workload but can be 10-30% reduction in CPU usage for TLS-heavy services.
Kernel Sanitizers
FreeBSD 14 added kernel address sanitizer (KASAN) and kernel memory sanitizer (KMSAN) support. These are debugging tools, not for production use, but they significantly improve kernel development and testing quality.
Networking Improvements
TCP Stack
The TCP stack received substantial work in FreeBSD 14:
- RACK (Recent Acknowledgment) TCP stack improvements for loss recovery
- BBR (Bottleneck Bandwidth and RTT) congestion control stabilization
- TCP pacing improvements for high-bandwidth links
- Better performance under packet loss conditions
sh# Switch to RACK TCP stack (optional, for testing) sysctl net.inet.tcp.functions_default=rack # Check available TCP stacks sysctl net.inet.tcp.functions_available
pf Firewall
The pf firewall received several improvements:
- Ethernet-level filtering (L2 filtering in pf)
- Improved SyncProxy performance
- Better interaction with ALTQ traffic shaping
- Performance improvements for large rule sets
sh# New in FreeBSD 14: Ethernet anchors in pf # /etc/pf.conf ether anchor "ethernet_rules" { block in on em0 ether proto 0x0806 # Block ARP on specific interface }
if_epair and VNET
Virtual network interface performance improved significantly. if_epair (used for jail networking with VNET) has reduced lock contention on multi-core systems. If you run many VNET jails, this alone is worth the upgrade.
sh# Create a VNET jail with epair (same syntax, better performance on 14) ifconfig epair0 create ifconfig epair0a 10.0.0.1/24 jail -c name=myjail vnet host.hostname=myjail \ vnet.interface=epair0b path=/jails/myjail jexec myjail ifconfig epair0b 10.0.0.2/24
WireGuard
WireGuard is included in the FreeBSD 14 kernel as a native module, replacing the earlier experimental kernel module and the userspace Go implementation. Performance is now comparable to Linux WireGuard.
sh# Load WireGuard module kldload if_wg # Create a WireGuard interface ifconfig wg0 create
Network Performance Numbers
On a standard benchmark (iperf3, single stream, 10GbE):
- FreeBSD 13.3: ~9.2 Gbps
- FreeBSD 14.2: ~9.6 Gbps
The improvement comes from reduced lock contention in the network stack and optimized memory allocation paths. For multi-stream workloads with many connections, the improvement is more pronounced.
ZFS Updates
OpenZFS Version
- FreeBSD 13.x shipped with OpenZFS 2.1.x-2.2.x depending on point release
- FreeBSD 14.x ships with OpenZFS 2.2.x (updated to 2.2.6 in 14.2)
Key ZFS Improvements
Block Cloning: Copy files within a ZFS dataset without duplicating the underlying blocks. This is like dedup but for explicit copy operations, without the memory overhead of full dedup.
sh# Block cloning happens automatically with cp on supported systems cp --reflink=auto largefile largefile.copy # Check if block cloning is enabled zpool get feature@block_cloning tank
RAIDZ Expansion: Add disks to an existing RAIDZ vdev without rebuilding. This was one of the most requested ZFS features for years.
sh# Add a disk to an existing raidz1 vdev zpool attach tank raidz1-0 /dev/ada4
Improved ARC: Better adaptive replacement cache management reduces memory pressure on systems running multiple workloads alongside ZFS.
Faster Scrub: Scrub performance improved 10-20% depending on pool configuration and disk speed.
sh# Run a scrub and observe performance zpool scrub tank zpool status -v tank # Shows scrub progress
ZFS Compatibility
ZFS pools created on FreeBSD 13 are fully compatible with FreeBSD 14. Pool upgrades are optional and enable new features:
sh# Check current pool version and available features zpool get all tank | grep feature # Upgrade the pool (one-way operation) zpool upgrade tank
Do not upgrade pools that need to be importable on FreeBSD 13 systems. Pool feature upgrades are irreversible.
Jail Improvements
VNET by Default
FreeBSD 14 makes it easier to create VNET jails with full network stack isolation. While VNET existed in 13, the tooling and documentation improved.
jail.conf Enhancements
New jail.conf parameters in FreeBSD 14:
sh# /etc/jail.conf myjail { host.hostname = "myjail.local"; path = "/jails/myjail"; # New: easier VNET configuration vnet; vnet.interface = "epair0b"; # Improved resource limits via rctl # (rctl existed in 13 but is more refined in 14) exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown"; }
Jail Management Tools
Bastille and pot (jail managers) both received updates for FreeBSD 14 compatibility. The improvements in the base jail infrastructure make these tools more reliable.
sh# Bastille on FreeBSD 14 pkg install bastille bastille bootstrap 14.2-RELEASE bastille create myjail 14.2-RELEASE 10.0.0.2
Driver Updates
GPU Drivers
FreeBSD 14 includes updated DRM/KMS support via the drm-kmod port:
- Intel GPU support improved (Alder Lake generation)
- AMD GPU support expanded (RDNA 2 series)
- Updated Mesa graphics stack
shpkg install drm-kmod sysrc kld_list+="i915kms" # or amdgpu
NVMe
NVMe driver improvements include:
- Better error handling and recovery
- Improved performance for high-queue-depth workloads
- Support for newer NVMe 2.0 features
WiFi
The LinuxKPI-based WiFi drivers (iwlwifi, rtw88) are available on FreeBSD 14 but not on 13. If you need Intel WiFi 6 support, FreeBSD 14 is required.
USB
USB 4/Thunderbolt support improved. xHCI (USB 3.x) driver received stability fixes.
Performance Comparison
Compilation Speed
Building the FreeBSD kernel from source:
- FreeBSD 13.3 (Clang 16): ~25 minutes on a 16-core system
- FreeBSD 14.2 (Clang 18): ~22 minutes on the same system
The improvement comes from the newer compiler and optimized build infrastructure.
File I/O
UFS and ZFS both show incremental I/O improvements. Random 4K read performance on NVMe:
- FreeBSD 13.3: ~450K IOPS
- FreeBSD 14.2: ~480K IOPS
Sequential read/write performance improvements are smaller (2-5%).
Application Performance
Most applications show marginal performance differences between 13 and 14. The gains come from:
- Better compiler optimization (newer Clang)
- Kernel scheduling improvements
- Reduced lock contention in I/O paths
For most workloads, the performance difference is under 5%. The upgrade is justified by security support and new features, not raw performance.
What Was Removed
Deprecated Features Removed in 14
- mergemaster: Replaced by
etcupdate. If you still usemergemaster, switch before upgrading. - IPX/SPX: Removed from the kernel.
- ATM (Asynchronous Transfer Mode): Removed.
- i386 kernel: Deprecated. 32-bit userland still works on amd64.
- armv6: Removed. Use armv7 or aarch64.
sh# Switch from mergemaster to etcupdate before upgrading etcupdate extract # First time setup etcupdate # Apply config updates after freebsd-update
Behavior Changes
- Default shell for root changed from csh to sh in new installations. Existing systems keep their configured shell.
growfsnow runs automatically on first boot for cloud images.- Default TCP congestion control behavior is tuned more aggressively for modern networks.
Migration Guide
Pre-Upgrade Checklist
sh# 1. Full backup zfs snapshot -r tank@pre-upgrade # 2. Check for custom kernel configurations # If you use a custom kernel, review UPDATING for changes less /usr/src/UPDATING # 3. Check for deprecated features you use # Search for removed syscalls, interfaces, or drivers # 4. Create a boot environment (ZFS users) bectl create freebsd13-backup bectl list # 5. Read the release notes # https://www.freebsd.org/releases/14.2R/relnotes/ # 6. Verify disk space df -h # Need space for the upgrade
Upgrade via freebsd-update
For binary upgrades (recommended for most users):
sh# Fetch the upgrade freebsd-update -r 14.2-RELEASE upgrade # Install kernel updates freebsd-update install # Reboot into new kernel reboot # Install userland updates freebsd-update install # Rebuild and reinstall all packages pkg-static upgrade -f # Final freebsd-update install to remove old files freebsd-update install
Upgrade via Source
For users who build from source:
sh# Update source tree git -C /usr/src pull git -C /usr/src checkout releng/14.2 # Build and install cd /usr/src make -j$(sysctl -n hw.ncpu) buildworld buildkernel make installkernel reboot # After reboot cd /usr/src make installworld etcupdate reboot
Post-Upgrade Verification
sh# Verify the new version freebsd-version -ku # Check for broken packages pkg check -d -a # Rebuild packages against new libraries pkg upgrade -f # Verify ZFS pools zpool status # Test critical services service -e # List enabled services # Restart and verify each critical service # Check for configuration changes etcupdate
Rollback Plan
If the upgrade fails, boot into your pre-upgrade boot environment:
sh# At the loader prompt, select the backup BE # Or from a working system: bectl activate freebsd13-backup reboot
This is why ZFS boot environments are so valuable. They make major version upgrades essentially risk-free.
FAQ
Is FreeBSD 14 stable enough for production?
Yes. FreeBSD 14.2 has been in production at organizations including Netflix for months. The 14.x branch is the recommended production branch.
Will my FreeBSD 13 packages work on FreeBSD 14?
No. Rebuild or reinstall all packages after upgrading. The ABI changed between major versions. Use pkg upgrade -f to force reinstallation of all packages against FreeBSD 14 libraries.
Do I need to upgrade my ZFS pools when moving to 14?
No. ZFS pools from FreeBSD 13 work on FreeBSD 14 without modification. You can optionally upgrade pools to enable new features (zpool upgrade tank), but this is irreversible and prevents importing the pool back on FreeBSD 13.
How long will FreeBSD 13 be supported?
FreeBSD 13.4 is the last planned release on the 13.x branch. End-of-life is expected in early-to-mid 2026. After that, no more security patches.
Can I skip from FreeBSD 13.x directly to 14.2?
Yes. freebsd-update supports upgrading directly from any 13.x release to 14.2. You do not need to go through intermediate versions.
What about custom kernel configurations?
Review /usr/src/UPDATING for kernel configuration changes. Some options were renamed or removed. Your custom KERNCONF may need updates. The GENERIC kernel works for most users and is recommended unless you have specific requirements.
Is the 32-bit compatibility layer still available on amd64?
Yes. Running 32-bit Linux and FreeBSD binaries on amd64 FreeBSD 14 continues to work. What was removed is i386 as a standalone kernel platform.
Should I wait for FreeBSD 15?
No. FreeBSD 13 is approaching end-of-life, and FreeBSD 15 is months away at minimum. Upgrade to 14.2 now. When 15 ships, you can evaluate upgrading from 14 to 15 at that time.