The release notes for FreeBSD {releaseCurrent} contain a summary of the changes made to the FreeBSD base system on the {releaseBranch} 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.
[[intro]]
== Introduction
This document contains the release notes for FreeBSD {releaseCurrent}. It describes recently added, changed, or deleted features of FreeBSD. It also provides some notes on upgrading from previous versions of FreeBSD.
The {releaseType} distribution to which these release notes apply represents the latest point along the {releaseBranch} development branch since {releaseBranch} was created. Information regarding pre-built, binary {releaseType} distributions along this branch can be found at https://www.FreeBSD.org/releases/[https://www.FreeBSD.org/releases/].
The {releaseType} distribution to which these release notes apply represents a point along the {releaseBranch} development branch between {releasePrev} and the future {releaseNext}. Information regarding pre-built, binary {releaseType} distributions along this branch can be found at https://www.FreeBSD.org/releases/[https://www.FreeBSD.org/releases/].
This distribution of FreeBSD {releaseCurrent} is a {releaseType} distribution. It can be found at https://www.FreeBSD.org/releases/[https://www.FreeBSD.org/releases/] or any of its mirrors. More information on obtaining this (or other) {releaseType} distributions of FreeBSD can be found in the link:{handbook}/mirrors[Obtaining FreeBSD appendix] to the link:{handbook}/[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 {releaseCurrent} can be found on the FreeBSD Web site.
This document describes the most user-visible new or changed features in FreeBSD since {releasePrev}. In general, changes described here are unique to the {releaseBranch} branch unless specifically marked as MERGED features.
Typical release note items document recent security advisories issued after {releasePrev}, 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.
[[upgrade]]
== Upgrading from Previous Releases of FreeBSD
Binary upgrades between RELEASE versions (and snapshots of the various security branches) are supported using the man: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 man: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 [.filename]#/usr/src/UPDATING#.
[IMPORTANT]
====
Upgrading FreeBSD should only be attempted after backing up _all_ data and configuration files.
//The man:fsck_msdosfs[8] utility includes a variety of enhancements, including reducing the memory footprint, a new flag, `-M`, which disables the use of man:mmap[2], and others. gitref:9708ba9f29[repository=src]
The man:calendar[1] utility again supports nested C pre-processor conditionals and now supports the C++ comment syntax in addition to the C syntax. gitref:19b5c307548[repository=src]
The man:calendar[1] utility consistently prints dates according to the locale of the invoking user, not the possibly varying locales of included files. gitref:f1560bd080a[repository=src]
The man:freebsd-update[8] utility now supports the `-p` flag, which ensures password db changes are included in [.filename]#/etc/passwd# via man:pwd_mkdb[8]. gitref:9b6591109e8[repository=src] {{< sponsored "The FreeBSD Foundation" >}}
The man:freebsd-update[8] utility now supports the `updatesready` and `showconfig` commands to check for updates and check the configuration respectively. gitref:8cfda118cbd[repository=src]
The manual page for the man:freebsd-update[8] utility documents using the `PAGER` environment variable for non-interactive use. gitref:32f4592764d[repository=src]
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`. gitref:c41fef90a7d[repository=src]
A new man:usbhid[4] driver uses drivers from the man:hid[4] framework for USB
HID devices instead of man:ukbd[4], man:ums[4], and man:uhid[4].
man:usbhid[4] is enabled by adding `hw.usb.usbhid.enable=1` to [.filename]#/boot/loader.conf# and adding `usbhid` to `kld_list=""` in [.filename]#/etc/rc.conf#. gitref:b62f6dfaed3d[repository=src]
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 link:https://wiki.qemu.org/images/4/4e/Q35.pdf[Q35 chipset] under QEMU.
For man:iscsi[4] and man:ctld[8], support for specifying network QoS in the form of DiffServ Codepoints (DSCP) and Ethernet Priority Code Point (PCP) was added. gitref:ddf1072aac49[repository=src] {{< sponsored "NetApp" >}}
The man:efibootmgr[8] utility now supports the `-b` flag to specify an index of a specific boot entry to create or modify. gitref:a2581e80212[repository=src] {{< sponsored "Netflix" >}}
The man:efibootmgr[8] utility now supports the `-E` flag to query which EFI System Partition was used to boot the system. gitref:1cdb8eb8fe1[repository=src] {{< sponsored "Netflix" >}}
The man: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. gitref:83c4237258d[repository=src] {{< sponsored "Ampere Computing, Inc." >}}
Instead, ESP partitions should be mounted as MS-DOS filesystems as [.filename]#/boot/efi#, and [.filename]#/boot/loader.efi# should be copied to [.filename]#/boot/efi/efi/boot/bootx64.efi# if the default setup is use.
man:tcp[4] now supports Proportional Rate Reduction (as described by RFC6937) to improve SACK loss recovery during burst loss and ACK thinning scenarios.
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.
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. gitref:0e1d7c25c5ab[repository=src] {{< sponsored "NetApp" >}}
The man:cc_cubic[4] man:tcp[4] congestion control algorithm aligns more closely with the standard in RFC8312. gitref:40f9078ff9d9[repository=src] {{< sponsored "NetApp" >}}
The man:ping[8] utility now supports setting network QoS, with IP DSCP gitref:6034024daddb[repository=src] and Ethernet PCP gitref:81a6f4c7ae69[repository=src]. {{< sponsored "NetApp" >}}
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. gitref:2ee49fac82fc[repository=src]
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. gitref:9ce875d9b59d[repository=src] {{< sponsored "The FreeBSD Foundation" >}}
A new aw_pwm driver supports Pulse Width Modulation (PWM) hardware on Allwinner boards. PWM channels can be configured with man:pwm[8]. gitref:277a038d0da[repository=src]
The deprecated bvmconsole and bvmdebug device models have been removed. This includes both the device models from man:bhyve[8] and the kernel device drivers for FreeBSD guests. gitref:c4df8cbfde5[repository=src]
The man:bhyve[8] utility now supports virtual machine snapshots. This feature is still in active development and is not yet enabled by default. gitref:483d953a86a[repository=src] {{< sponsored "University Politehnica of Bucharest, Matthew Grooms (student scholarships), iXsystems" >}}
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.
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(R) distributions have been doing for quite some time.