FreeBSD.software
Home/Guides/FreeBSD 14 vs 13: What Changed and Why Upgrade
guide·2026-04-09·10 min read

FreeBSD 14 vs 13: What Changed and Why Upgrade

Detailed comparison of FreeBSD 14 and FreeBSD 13. Kernel changes, networking improvements, ZFS updates, jail enhancements, driver additions, performance gains, and migration guide.

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
sh
pkg 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 use mergemaster, 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.
  • growfs now 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.

Get more FreeBSD guides

Weekly tutorials, security advisories, and package updates. No spam.