FreeBSD The Power to Serve

FreeBSD 13.0-RELEASE Release Notes


The release notes for FreeBSD 13.0-RELEASE contain a summary of the changes made to the FreeBSD base system on the 13-STABLE development line. This document lists applicable security advisories that were issued since the last release, as well as significant changes to the FreeBSD kernel and userland. Some brief remarks on upgrading are also presented.


This document contains the release notes for FreeBSD 13.0-RELEASE. It describes recently added, changed, or deleted features of FreeBSD. It also provides some notes on upgrading from previous versions of FreeBSD.

The release distribution to which these release notes apply represents the latest point along the 13-STABLE development branch since 13-STABLE was created. Information regarding pre-built, binary release distributions along this branch can be found at

The release distribution to which these release notes apply represents a point along the 13-STABLE development branch between 12.2-RELEASE and the future 13.1-RELEASE. Information regarding pre-built, binary release distributions along this branch can be found at

This distribution of FreeBSD 13.0-RELEASE is a release distribution. It can be found at or any of its mirrors. More information on obtaining this (or other) release distributions of FreeBSD can be found in the Obtaining FreeBSD appendix to the FreeBSD Handbook.

All users are encouraged to consult the release errata before installing FreeBSD. The errata document is updated with "late-breaking" information discovered late in the release cycle or after the release. Typically, it contains information on known bugs, security advisories, and corrections to documentation. An up-to-date copy of the errata for FreeBSD 13.0-RELEASE can be found on the FreeBSD Web site.

This document describes the most user-visible new or changed features in FreeBSD since 12.2-RELEASE. In general, changes described here are unique to the 13-STABLE branch unless specifically marked as MERGED features.

Typical release note items document recent security advisories issued after 12.2-RELEASE, new drivers or hardware support, new commands or options, major bug fixes, or contributed software upgrades. They may also list changes to major ports/packages or release engineering practices. Clearly the release notes cannot list every single change made to FreeBSD between releases; this document focuses primarily on security advisories, user-visible changes, and major architectural improvements.

Upgrading from Previous Releases of FreeBSD

Binary upgrades between RELEASE versions (and snapshots of the various security branches) are supported using the freebsd-update(8) utility. The binary upgrade procedure will update unmodified userland utilities, as well as unmodified GENERIC kernels distributed as a part of an official FreeBSD release. The freebsd-update(8) utility requires that the host being upgraded have Internet connectivity.

Source-based upgrades (those based on recompiling the FreeBSD base system from source code) from previous versions are supported, according to the instructions in /usr/src/UPDATING.

Upgrading powerpc64 systems from earlier FreeBSD Releases is NOT supported. Users need to reinstall, due to using new ABI.

Upgrading FreeBSD should only be attempted after backing up all data and configuration files.

Updating UEFI ESP partitions (the partition the firmware boots from) has changed. See Boot Loader Changes for important details.

Security and Errata

This section lists the various Security Advisories and Errata Notices since 12.2-RELEASE.

Security Advisories

Advisory Date Topic

No advisories.

Errata Notices

Errata Date Topic

No notices.


This section covers changes and additions to userland applications, contributed software, and system utilities.

Userland Configuration Changes

rc.subr(8) now honors ${name}_env in all rc(8) scripts. Previously, environment variables set by a user via ${name}_env were ignored if the service defined a custom *_cmd variable to control the behavior of the run_rc_command function, for example, start_cmd, instead of relying on variables like command and command_args. d15e810db9a5

init(8), service(8), and cron(8) will now adopt user/class environment variables by default (excluding PATH). Notably, environment variables for all cron jobs and rc(8) services can now be set via login.conf(5). 21c1a93c048f, 736a5a6d1dbb, 7466dbd68487

The default config for newsyslog(8) will now only include files from the /etc/newsyslog.conf.d/ and /usr/local/etc/newsyslog.conf.d/ directories if the filename ends with ".conf" and does not begin with a "." character. This matches the syslog.conf(5) functionality, and also prevents ".sample" or ".pkgnew" files being included. 9165316ff6bf

The kernel now supports enforcing a W^X memory mapping policy for user processes. The policy is not enforced by default but can be enabled by setting the kern.elf32.allow_wx and kern.elf64.allow_wx sysctls to 0. Individual binaries can be exempted from the policy by elfctl(1) via the wxneeded feature. 2e1c94aa1fd5 (Sponsored by The FreeBSD Foundation)

Userland Application Changes

The calendar(1) utility again supports nested C pre-processor conditionals and now supports the C++ comment syntax in addition to the C syntax. 19b5c307548

The calendar(1) utility consistently prints dates according to the locale of the invoking user, not the possibly varying locales of included files. f1560bd080a

The calendar(1) utility uses the correct paths for included files if invoked with the -a option. 19b5c307548

The calendar(1) utility no longer installs data files other than calendar.freebsd. The data files are now provided by the deskutils/calendar-data port. d20d6550187

The daemon(8) utility now supports the -H flag to close and re-open the output file when SIGHUP is received. This permits rotation of the output file via newsyslog(8). 4cd407ec933

The daemon(8) utility no longer blocks SIGTERM during the restart delay. 09a3675d961

The devd(8) utility now reports a kernel system event when the system resumes from sleep rather than a kern system event. f87655ec7694

The diskinfo(8) utility now reports the physical device name GEOM attribute when available. b5961be1ab7

Removed the elf2aout(1) utility. dd99ab06f360

The freebsd-update(8) utility now displays progress for the "Fetching files…​" stage. d6e1e31a0e6

The freebsd-update(8) utility now supports the -p flag, which ensures password db changes are included in /etc/passwd via pwd_mkdb(8). 9b6591109e8 (Sponsored by The FreeBSD Foundation)

The freebsd-update(8) utility now supports the updatesready and showconfig commands to check for updates and check the configuration respectively. 8cfda118cbd

The manual page for the freebsd-update(8) utility documents using the PAGER environment variable for non-interactive use. 32f4592764d

Removed the obsolete version of the GNU debugger that was installed to /usr/libexec for use by crashinfo(8). Detailed kernel crash information can be obtained by installing modern GDB from ports or packages. 1c0ea326aa6d

The manual page for the gstat(8) utility now documents the use of interactive keyboard commands. cfaa2958dc4

The manual page for the inetd(8) utility now includes an example of how to use netcat as an HTTP proxy. a58fc861516

The manual page for the inetd(8) utility now includes comments for all examples. 26a4a61a285

Contributed Software

Replaced the bc(1) and dc(1) utilities with the version developed by Gavin D. Howard. The new versions do not depend on an external large number library, offer GNU bc extensions, are much faster than and fix POSIX compliance issues of the programs they replace. They support POSIX message catalogs and come with localized messages in Chinese, Dutch, English, French, German, Japanese, Polish, Portugueze, and Russian. The previous implementation is still available in FreeBSD-13 and can be selected instead of the new one by the build option WITHOUT_GH_BC. c41fef90a7d

The clang, lld, and lldb utilities and compiler-rt, llvm, libunwind, and libc++ libraries have been updated to version 11.0.1. 39b7445e15cd

Deprecated Applications

Runtime Libraries and API

The new getlocalbase(3) function in libutil retrieves the LOCALBASE path in a standard way. 30d21d27953

Removed the cap_random(3) function as it has been superseeded by getrandom(2). a76f78dc3f43

A new Linux-compatible copy_file_range(2) system call supports efficient file copies. In particular, this system call permits the kernel to request that an NFSv4.2 server perform a copy operation locally on the server. bbbbeca3e9a3

The regex(3) function no longer accepts redundant escapes for most ordinary characters. This will cause applications such as sed(1) and grep(1) to reject regular expressions using these escapes. adeebf4cd47c

New aio_readv(2) and aio_writev(2) system calls provide vectored analogues of aio_read(2) and aio_write(2). 022ca2fc7fe0

powerpc64 switched to ELFv2 ABI at the same time it switched to LLVM. This brings us to a parity with modern Linux distributions. This also makes the binaries from previous FreeBSD versions incompatible with 13.0-RELEASE. Kernel still supports ELFv1, so jails and chroots using older FreeBSD versions are still compatible. e4399d169acc


This section covers changes to kernel configurations, system tuning, and system control parameters that are not otherwise categorized.

General Kernel Changes

Processes that attach to a jail(8) will now completely rebase their cpuset(1) onto the jail’s cpuset. Notably, if a process had been assigned a numbered cpuset then it will be assigned a new numbered set that is the combination of CPUs allowed to the attaching process and the jail. Processes belonging to the superuser will implicitly widen their CPU mask as needed if they share no CPUs in common with the jail.

Overhauled the in-kernel cryptographic framework to better support modern cryptographic algorithms as well as simplify the interface for both device drivers and framework consumers. c03414326909 (Sponsored by Chelsio Communications)

geli(8) now reports the use of accelerated software cryptography (such as AES-NI on x86 CPUs) as "accelerated software" rather than "hardware". This is purely a change in naming, and does not imply reduced performance or support. a3d565a1188f (Sponsored by Chelsio Communications)

Removed support for Kerberos GSS algorithms deprecated by RFCs 6649 and 8429. dee3aa83d1b6 (Sponsored by Chelsio Communications)

Removed support for previously-deprecated algorithms in geli(8). e2b9919398c3 (Sponsored by Chelsio Communications)

Removed support for IPsec algorithms deprecated by RFC 8221 as well as Triple DES. 16aabb761c0a (Sponsored by Chelsio Communications)

Removed support for previously-deprecated cryptographic algorithms from cryptodev(4) and the in-kernel cryptographic framework. 6c80c319ef88 (Sponsored by Chelsio Communications)

Refactored the amd64 DMAR driver to provide a generic I/O MMU framework which can be used by other architectures. As part of this, renamed the amd64-specific ACPI_DMAR kernel option to IOMMU. 6186bfbd1880 (Sponsored by DARPA) (Sponsored by AFRL)

Added a driver for the Arm System Memory Management Unit version 3.2 to the aarch64 architecture. The driver is enabled by the IOMMU kernel option. 4cc8701067e1 (Sponsored by DARPA) (Sponsored by AFRL) (Sponsored by Innovate UK)

The GENERIC kernels for amd64 and i386 now include aesni(4) to support accelerated software cryptography for geli(8) by default. 074a91f746bd

The GENERIC kernel for aarch64 now includes armv8crypto(4) to support accelerated software cryptography for geli(8) by default. 074a91f746bd

Added Safe Memory Reclamation (SMR) to the kernel, a light weight variant of epoch reclamation closely coupled to uma(9). This has been applied in parts of the VM subsystem and VFS layer to improve scalability on high core count systems. d4665eaa6638

Devices and Drivers

This section covers changes and additions to devices and device drivers since 12.2-RELEASE.

Device Drivers

Removed several network drivers for obsolete Ethernet adapters:

The qat(4) driver has been added, supporting some of the cryptographic acceleration functions of the Intel QuickAssist (QAT) device. The qat(4) driver supports the QAT devices integrated with Atom C2000 and C3000 and Xeon C620 and D-1500 platforms, and the Intel QAT Adapter 8950. 72143e89bb43 (Sponsored by Rubicon Communications, LLC ("Netgate"))

Removed the ubsec(4) driver for obsolete Broadcom BCM58xx crypto accelerators. 97e251327f95 (Sponsored by Chelsio Communications)

A new safexcel(4) driver supports cryptographic requests via the EIP-97 packet processing module found on the ESPRESSObin. b356ddf07671 (Sponsored by Rubicon Communications, LLC)

A new usbhid(4) driver uses drivers from the hid(4) framework for USB HID devices instead of ukbd(4), ums(4), and uhid(4). usbhid(4) is enabled by adding hw.usb.usbhid.enable=1 to /boot/loader.conf and adding usbhid to kld_list="" in /etc/rc.conf. b62f6dfaed3d

The suite of VirtIO device drivers now support the VirtIO V1 spec. This improves FreeBSD’s compatibility as a guest operating system with various hypervisors and emulators including the ability to run on the Q35 chipset under QEMU.

A new ossl(4) driver supports optimized software cryptography on aarch64, amd64, and i386 using assembly routines from OpenSSL. ba610be90a7c (Sponsored by Netflix) , 22bd0c9731d7 (Sponsored by The FreeBSD Foundation)

The armv8crypto(4) driver which supports software cryptography on ARMv8 CPUs now supports AES-XTS which is used by geli(8). 4979620ece98

The armv8crypto(4) driver now supports AES-GCM which is used by IPsec and kernel TLS. f76393a6305b (Sponsored by Ampere Computing)

ixl(4) was ported to powerpc64. c5568ba08741

mrsas(4) was ported to powerpc64. e34a057ca6eb

aacraid(4) was ported to powerpc64. d8c51c6f74b6

virtio(4) was ported to powerpc64. f272c8de6e47

hwpmc(4) gained support for POWER8 and POWER9. 68dd71825601

cpld(4) driver was written for powerpc64 and powerpcspe. 2a05eb9f3c4b, ccb1ebe01caa


This section covers changes and additions to file systems and other storage subsystems, both local and networked.

General Storage

For iscsi(4) and ctld(8), support for specifying network QoS in the form of DiffServ Codepoints (DSCP) and Ethernet Priority Code Point (PCP) was added. ddf1072aac49 (Sponsored by NetApp)

The ctld(8) utility now supports the -f flag to test the validity of configuration files. 7fcbecd004f

Removed the nand(4) device framework and nandfs(5) filesystem and associated utilities. f5a95d9a0794

gnop(8) can now apply configurable delays to read and write requests to simulate a slow disk. 4f80c85519d5

The kernel now provides a default implementation for the SEEK_DATA and SEEK_HOLE ioctl(2)'s for filesystems which do not support sparse files. 2e1b32c0e3fc

The NFS client and server now support NFSv4.2 (RFC 7862) and Extended Attributes (RFC 8276). c057a378180e

Attempts to read a directory fail with EISDIR by default. The -d skip flags can be passed to grep(1) to suppress errors in stderr when non-recursively grepping a list that includes directories. dcef4f65ae39

The NFS server now permits credentials specified via -maproot or -mapall in exports(5) to include more than 16 groups. cc5efdde94bf

The NFS client and server now support NFS over TLS. The additional userland daemons are not built by default but can be enabled by building a new world that includes a KTLS-enabled OpenSSL via the WITH_OPENSSL_KTLS option. 6e4b6ff88fde, 2c76eebca71b, 59f6f5e23c1a

A new nfsv4_server_only variable can be set to YES in /etc/rc.conf to only enable support for NFSv4. This avoids the need to run rpcbind(8) on an NFS server. 4389a5661034

Updated the fusefs(5) protocol to 7.28 along with adding support for FUSE_COPY_FILE_RANGE and FUSE_LSEEK. 92bbfe1f0d1f

The ZFS implementation is now provided by OpenZFS. 9e5787d2284e (Sponsored by iXsystems)

Boot Loader Changes

This section covers the boot loader, boot menu, and other boot-related changes.

The efibootmgr(8) utility now supports the -b flag to specify an index of a specific boot entry to create or modify. a2581e80212 (Sponsored by Netflix)

The efibootmgr(8) utility now supports the -E flag to query which EFI System Partition was used to boot the system. 1cdb8eb8fe1 (Sponsored by Netflix)

The efibootmgr(8) utility now supports the -f and -F flags to set or clear a request to boot to the UEFI user interface on the next boot. 83c4237258d (Sponsored by Ampere Computing, Inc.)

Prior releases had a complete ms-dos formatted filesystem packaged into boot1.efifat. Older versions of FreeBSD installed this filesystem image into a raw partition. However, uses of the ESP have proliferated, making this inflexible approach no longer desirable. Users have varied needs for the size of this partition, and multiple booting setups require more detailed access. To update old ESP partitions, users should stop using the gpart(8) utility. Instead, ESP partitions should be mounted as MS-DOS filesystems as /boot/efi, and /boot/loader.efi should be copied to /boot/efi/efi/boot/bootx64.efi if the default setup is use. If the efibootmgr(8) utility is used to customize the boot environment, this file should be copied to the location set with the -l flag.


This section describes changes that affect networking in FreeBSD.

General Network

A new type of mbuf(9) (network data buffer) can represent multiple, unmapped physical pages as a single buffer. This improves the performance of sendfile(2) by reducing the length of mbuf linked lists in socket buffers. 82334850ea45, cec06a3edc52 (Sponsored by Netflix)

The kernel now supports in-kernel framing and encryption of Transport Layer Security (TLS) data on TCP sockets for TLS versions 1.0 through 1.3. Transmit offload via in-kernel crypto drivers is supported for MtE cipher suites using AES-CBC as well as AEAD cipher suites using AES-GCM. Receive offload via in-kernel crypto drivers is supported for AES-GCM cipher suites for TLS 1.2. Using KTLS requires the use of a KTLS-aware userland SSL library. The OpenSSL library included in the base system does not enable KTLS support by default, but support can be enabled by building with the WITH_OPENSSL_KTLS option. b2e60773c6b0, 6554362c6640, f1f934754638, 3c0e56850511, c1c52cd57e88 (Sponsored by Netflix) (Sponsored by Chelsio Communications)

tcp(4) now supports Proportional Rate Reduction (as described by RFC6937) to improve SACK loss recovery during burst loss and ACK thinning scenarios. This feature is enabled by default. A new sysctl(8), net.inet.tcp.do_prr, can be set to 0 to restore the prior behavior.

PRR should generally help improve loss recovery performance and prevent numerous preventable retransmit timeout (RTO) stalls. This surpasses the prior behavior, but a strictly packet conserving variant can be enabled. A misconfigured token bucket traffic policer can cause persistent loss even during loss recovery. In that case, activating the conservative PRR variant may prevent some retransmission timeouts (RTO) and associated session stalls for a few milliseconds while behaving less optimal in the general case. A new sysctl(8), net.inet.tcp.do_prr_conservative, can be set to 1 to enable strictly packet conserving behavior (at most 1 segment for each ACK received), while the normal variant may send up to 2 segments per received ACK - helping in cases of ACK thinning or significant burst loss events. 0e1d7c25c5ab (Sponsored by NetApp)

The cc_cubic(4) tcp(4) congestion control algorithm aligns more closely with the standard in RFC8312. 40f9078ff9d9 (Sponsored by NetApp)

The amount of queued packets in for unresolved ARP/NDP entries has been increased to 16. 0da3f8c98d17 Stacked VLAN (802.1ad) support has been added. c7cffd65c5d8.

The ping(8) utility now supports setting network QoS, with IP DSCP 6034024daddb and Ethernet PCP 81a6f4c7ae69. (Sponsored by NetApp)

Merged the ping(8) and ping6(8) utilities. ping(8) supports both IPv4 and IPv6. A legacy ping6(8) is retained for backwards compatibility. 3cde9171d2d5

SCTP support is now available as a new sctp.ko kernel module and is no longer compiled into GENERIC by default. e64080e79c53 (Sponsored by The FreeBSD Foundation)

[ === Routing FreeBSD 13 features a rewritten routing stack. It is based on the introduction of nexthops - objects holding all necessary state to pass a packet to the desired destination. a666325282ea Multipath routing support has been rewritten in more scalable fashion, featuring 64-wide multipath routes with O(1) lookup time. fedeb08b6a58. The RADIX_MPATH kernel option got replaced with ROUTE_MPATH, which is turned on by default. Additionally, the net.route.multipath sysctl has been added to control the feature in runtime. d1d941c5b910, d5fe384b4d41 Support for custom route lookup algorithms has been added. The framework decouples control-plane and data-plane, resulting in both faster lookups and better convergence times for large tables under load. f5baf8bb12f3 DPDK librte-based IPv4/IPv6 route lookup algorithms has been added, optimising control-plane and data-plane for large routing tables. 537d13437314

Interface fib is now used for proxyarp checks. 66bc03d41566 Loopback route installation has been fixed for the interfaces in different fibs using the same prefix. 9fdbf7eef5c0 Number of fibs can now be changed at runtime by controlling net.fibs sysctl. f5247a232a33 net.add_addr_allfibs sysctl default has been changed to 0. 2d3982419593

Temporal routes (routes with -expire time set) expiration have been for both IPv4 and IPv6. 34a5582c47c7 Duplicate routes installation issue for /32 or /128 interface aliases has been fixed. 81728a538d24 IPv6 interface routes are now marked with RTF_PINNED like their IPv4 counterparts. 81728a538d24 The route(8) network auto-guessing has been eliminated by removing remnants of classful behavior. d28210b2c2aa Sysctl net.inet6.ip6.deembed_scopeid , making it possible to disable IPv6 scope de-embedding, has been removed. bec053ffe01d

Hardware Support

This section covers general hardware support for physical machines, hypervisors, and virtualization environments, as well as hardware changes and updates that do not otherwise fit in other sections of this document.


The amd64 architecture now supports Hygon Dhyana Family 18h processors. 2ee49fac82fc

The amd64 architecture now supports 57-bit virtual addresses (LA57) on supported CPUs. This permits user processes to use up to 56 bits of virtual address space. This also includes support for five layer nested page tables used by bhyve. 9ce875d9b59d (Sponsored by The FreeBSD Foundation)


The 64-bit ARM architecture known as arm64 or AArch64 is promoted to Tier-1 status for FreeBSD 13. Announcement


Removed support for version 5 of the 32-bit ARM architecture. Building for TARGET=arm now defaults to a TARGET_ARCH of armv7. eb4977bd0fb2


The aw_gpio driver now suppots GPIO interrupts. 0fe5379c6a9

A new aw_pwm driver supports Pulse Width Modulation (PWM) hardware on Allwinner boards. PWM channels can be configured with pwm(8). 277a038d0da

The AXP803/AXP813 drivers now report battery sensor information. 66bddb4c701

Audio now works on H3/H5 SoCs. bfcf888a87a

Infrared receiver now works on the H3 SoC. 012fba460ac

USB DRD now works on multiple Allwinner SoCs. This means that some USB ports can be used as peripherals. aea49d9fed9


A new rk_pwm driver supports PWM hardware on the RK3399. PWM channels can be configured with pwm(8). bcd380e88b2

External PCI-express adapters are now supports for the RK3399 SoC. dfd1d0fcabe

USB3 found in RK3328 and RK3399 is now supported. 7d888a5b2be

if_dwc now supports flow control. 2b4a66ed171

if_dwc now supports checksum offloading. 98ea5a7b9a1


All powerpc architectures switched to LLVM and are currently mostly similar to amd64 toolchain-wise. 678da4a27447

powerpc (32-bit) switched to Secure-PLT. e861dab45186

powerpc64le (64-bit little endian port) was introduced, targeting POWER8 and newer processors. b75abea4d087

Radix MMU support for powerpc64 and powerpc64le (experimental, disabled by default). 65bbba25d214

Superpages support for powerpc64 and powerpc64le (experimental, disabled by default). e2d6c417e303

LinuxKPI support. 937a05ba81c3

Support QEMU/KVM pseries without hugepages. b934fc74683b

Support for handling kernel minidumps. d3c34fc0f473

Optimized memcpy, memmove, bcopy, strncpy and strcpy. e16c18650cdc, 181e35008cfb, 075fb85f0904

XIVE interrupt controller driver for POWER9, which improves performance by about 10%. d49fc192c141

Converting pmap drivers to ifunc improved performance by about 20%. 45b69dd63

Plenty of stability fixes, which fix many kernel panics.

Plenty of other performance improvements - performance during bulk -a package building is at least 60% higher.


Removed support for the sparc64 architecture (SPARC 9). 58aa35d42975

Virtualization Support

The bhyve(8) utility supports additional COM3 and COM4 serial ports. eed1cc6cdfa

Removed the deprecated bvmconsole and bvmdebug device models from bhyve(8) and the associated kernel device drivers for FreeBSD guests. c4df8cbfde5

The bhyve(8) utility works reliably with more VNC clients including the macOS "Screen Sharing" application. 2bb4be0f865

The bhyve(8) utility now supports VirtIO-9p (aka VirtFS) filesystem sharing. 100353cfbf8 (Sponsored by Conclusive Engineering (development), (funding))

The bhyve(8) utility now supports virtual machine snapshots. This feature is still in active development and is not yet enabled by default. 483d953a86a (Sponsored by University Politehnica of Bucharest, Matthew Grooms (student scholarships), iXsystems)

The bhyve(8) utility now supports a VM Generation Counter ACPI device. 9cb339cc7b8

The bhyve(8) utility now supports PCI HDAudio devices. 7e3c7420615

Ports Collection and Package Infrastructure

This section covers changes to the FreeBSD Ports Collection, package infrastructure, and package maintenance and installation tools.

Packaging Changes

General Notes Regarding Future FreeBSD Releases

Default CPUTYPE Change

The default CPUTYPE for the i386 architecture is now 686 (instead of 486).

This means that binaries require a 686-class CPU by default including, but not limited to, binaries provided by the FreeBSD Release Engineering team. The FreeBSD 13.0 code base continues to support older CPUs. Users who need to run on 486- or 586-class CPUs need to build their own releases.

As the embedded market is the primary user of cores based on i486 and i586, end-user impact is expected to be minimal. Most embedded systems have custom builds already. Although some minor adjustments will be necessary, it will be on par with the effort required to move between major versions. Server and desktop machines based on these CPU types are generally over 20 years old. Most have been retired or are too resource poor to make FreeBSD 13.0 an attractive upgrade.

There were several factors taken into account for this change. Most applications need 64-bit atomics for proper operation. While those operations can be emulated in the kernel on i486, they cannot be emulated in userland. Updating the default allows compiler generated code to select the right atomics in those cases, allow better optimizations and produce better error messages when necessary. The older library and/or include file approaches are much less optimal in resulting code and diagnostics. Current compiler technology produces better, faster, and/or smaller binaries for i686 than for i486. Several bugs in compiler support for i486 code generation attest to its lesser use in the wider ecosystem. In the wider ecosystem, i686 has been the default for many years so has received more testing and more optimization. Finally, the 32-bit amd64 libraries have been i686 since their inception. These factors strongly suggest that a i686 default will provide such an improved enough user experience to offset the minor pain for those few users of the older technology.

As the majority of 32-bit testing is done by developers using the lib32 libraries on 64-bit hardware with the COMPAT_FREEBSD32 option in the kernel, this change ensures better coverage and user experience. This also aligns with what the majority of Linux® distributions have been doing for quite some time.

This is expected to be the final bump of the default CPUTYPE in i386.