---
title: "FreeBSD 13.0-RELEASE Release Notes"
sidenav: download
---

= FreeBSD {releaseCurrent} Release Notes
:doctype: article
:toc: macro
:toclevels: 1
:icons: font
:releaseCurrent: 13.0-RELEASE
:releaseBranch: 13-STABLE
:releasePrev: 12.2-RELEASE
:releaseNext: 13.1-RELEASE
:releaseType: release

include::shared/en/urls.adoc[]

== Abstract

[.abstract-title]
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.
====

[IMPORTANT]
====
Updating UEFI ESP partitions (the partition the firmware boots from) has changed.
See <<boot>> for important details.
====

[[security-errata]]
== Security and Errata

This section lists the various Security Advisories and Errata Notices since {releasePrev}.

[[security]]
=== Security Advisories

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Advisory
| Date
| Topic

|No advisories.
|
|

|===

[[errata]]
=== Errata Notices

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Errata
| Date
| Topic

|No notices.
|
|


|===

// Sample release notes entry.
//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]

[[userland]]
== Userland

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

[[userland-config]]
=== Userland Configuration Changes

man:rc.subr[8] now honors `${name}_env` in all man: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`.  gitref:d15e810db9a5[repository=src]

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

The default config for man: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 man:syslog.conf[5] functionality, and also prevents ".sample"
or ".pkgnew" files being included.
gitref:9165316ff6bf[repository=src]

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 man:elfctl[1] via
the `wxneeded` feature.
gitref:2e1c94aa1fd5[repository=src] {{< sponsored "The FreeBSD Foundation" >}}

[[userland-programs]]
=== Userland Application Changes

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:calendar[1] utility uses the correct paths for included files if invoked with the -a option. gitref:19b5c307548[repository=src]

The man:calendar[1] utility no longer installs data files other than calendar.freebsd.
The data files are now provided by the deskutils/calendar-data port. gitref:d20d6550187[repository=src]

The man: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 man:newsyslog[8]. gitref:4cd407ec933[repository=src]

The man:daemon[8] utility no longer blocks SIGTERM during the restart delay. gitref:09a3675d961[repository=src]

The man:devd[8] utility now reports a `kernel` system event when the system
resumes from sleep rather than a `kern` system event. gitref:f87655ec7694[repository=src]

The man:diskinfo[8] utility now reports the physical device name GEOM attribute when available. gitref:b5961be1ab7[repository=src]

The man:elf2aout[1] utility has been removed. gitref:dd99ab06f360[repository=src]

The man:freebsd-update[8] utility now displays progress for the "Fetching files..." stage. gitref:d6e1e31a0e6[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 obsolete version of the GNU debugger installed to [.filename]#/usr/libexec# for use by man:crashinfo[8] has been removed.
Detailed kernel crash information can be obtained by installing modern GDB
from ports or packages.
gitref:1c0ea326aa6d[repository=src]

The manual page for the man:gstat[8] utility now documents the use of interactive keyboard commands. gitref:cfaa2958dc4[repository=src]

The manual page for the man:inetd[8] utility now includes an example of how to use netcat as an HTTP proxy. gitref:a58fc861516[repository=src]

The manual page for the man:inetd[8] utility now includes comments for all examples. gitref:26a4a61a285[repository=src]

[[userland-contrib]]
=== Contributed Software

The man:bc[1] and man:dc[1] utilities have been replaced by 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`. gitref:c41fef90a7d[repository=src]

[[userland-deprecated-programs]]
=== Deprecated Applications


[[userland-libraries]]
=== Runtime Libraries and API

The new man:getlocalbase[3] function in libutil retrieves the LOCALBASE path in a standard way. gitref:30d21d27953[repository=src]

The man:cap_random[3] function has been removed as it has been
superseeded by man:getrandom[2]. gitref:a76f78dc3f43[repository=src]

A new Linux-compatible man: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. gitref:bbbbeca3e9a3[repository=src]

The man:regex[3] function no longer accepts redundant escapes for most
ordinary characters.
This will cause applications such as man:sed[1] and man:grep[1] to reject
regular expressions using these escapes.
gitref:adeebf4cd47c[repository=src]

New man:aio_readv[2] and man:aio_writev[2] system calls provide vectored
analogues of man:aio_read[2] and man:aio_write[2]. gitref:022ca2fc7fe0

[[kernel]]
== Kernel

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

[[kernel-general]]
=== General Kernel Changes

Processes that attach to a man:jail[8] will now completely rebase their man: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.

The in-kernel cryptographic framework has been overhauled to better support
modern cryptographic algorithms as well as simplify the interface for both
device drivers and framework consumers.
gitref:c03414326909[repository=src] {{< sponsored "Chelsio Communications" >}}

Support for Kerberos GSS algorithms deprecated by RFCs 6649 and 8429 has been
removed.
gitref:dee3aa83d1b6[repository=src] {{< sponsored "Chelsio Communications" >}}

Support for previously-deprecated algorithms in man:geli[4] has
been removed.
gitref:e2b9919398c3[repository=src] {{< sponsored "Chelsio Communications" >}}

Support for IPsec algorithms deprecated by RFC 8221 as well as Triple DES
has been removed.
gitref:16aabb761c0a[repository=src] {{< sponsored "Chelsio Communications" >}}

Support for previously-deprecated cryptographic algorithms has been removed
from man:cryptodev[4] and the in-kernel cryptographic framework.
gitref:6c80c319ef88[repository=src] {{< sponsored "Chelsio Communications" >}}

The amd64 DMAR driver has been refactored to provide a generic I/O MMU
framework which can be used by other architectures.
As part of this, the amd64-specific `ACPI_DMAR` kernel option has been
renamed to `IOMMU`.
gitref:6186bfbd1880[repository=src] {{< sponsored "DARPA" >}} {{< sponsored "AFRL" >}}

A driver for Arm System Memory Management Unit version 3.2 has been added
to the aarch64 architecture.
The driver is enabled by the `IOMMU` kernel option.
gitref:4cc8701067e1[repository=src] {{< sponsored "DARPA" >}} {{< sponsored "AFRL" >}} {{< sponsored "Innovate UK" >}}

The GENERIC kernels for amd64 and i386 now include man:aesni[4] to support
accelerated software cryptography for man:geli[4] by default.
gitref:074a91f746bd[repository=src]

The GENERIC kernel for aarch64 now includes man:armv8crypto[4] to support
accelerated software cryptography for man:geli[4] by default.
gitref:074a91f746bd[repository=src]

[[drivers]]
== Devices and Drivers

This section covers changes and additions to devices and device drivers since {releasePrev}.

[[drivers-device]]
=== Device Drivers

Several network drivers for obsolete Ethernet adapters have been removed:

* man:bm[4] BMAC gitref:9e774e53407b[repository=src]
* man:cs[4] Crystal Semiconductor CS8900/CS8920 gitref:e1edf1240b33[repository=src]
* man:de[4] DEC DC21x4x gitref:08ac01a92c88[repository=src]
* man:ed[4] NE-2000 and WD-80x3 gitref:05aa6e583be3[repository=src]
* man:ep[4] 3Com Etherlink III (3c5x9) ISA gitref:e153ee663af1[repository=src]
* man:ex[4] Intel EtherExpress Pro/10 and Pro/10+ gitref:3ee01a13855b[repository=src]
* man:fe[4] Fujitsu MB86960A/MB86965A gitref:dd262716a1e0[repository=src]
* man:hme[4] Sun Microelectronics STP2002-STQ gitref:9ee99cec1f36[repository=src]
* man:pcn[4] AMD PCnet gitref:607790d10fdb[repository=src]
* man:sf[4] Starfire gitref:3b70dd81f56f[repository=src]
* man:sn[4] SMC 91Cxx gitref:90089841deba[repository=src]
* man:tl[4] Texas Instruments ThunderLAN gitref:7c897ca91fe1[repository=src]
* man:tx[4] SMC 83c17x gitref:b1b1c2fe385c[repository=src]
* man:txp[4] 3Com 3XP Typhoon/Sidewinder (3CR990) gitref:be345ff023d9[repository=src]
* man:vx[4] 3Com EtherLink III / Fast EtherLink III (3c59x) PCI gitref:e8504bf9e7a0[repository=src]
* man:wb[4] Winbond W89C840F gitref:02fae06a11b4[repository=src]
* man:xe[4] Xircom PCMCIA gitref:7a582e5374c8[repository=src]

The man:ubsec[4] driver for obsolete Broadcom BCM58xx crypto accelerators
has been removed.
gitref:97e251327f95[repository=src] {{< sponsored "Chelsio Communications" >}}

A new man:safexcel[4] driver supports cryptographic requests via the EIP-97
packet processing module found on the ESPRESSObin.  gitref:b356ddf07671[repository=src] {{< sponsored "Rubicon Communications, LLC" >}}

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.

A new man:ossl[4] driver supports optimized software cryptography on
aarch64, amd64, and i386 using assembly routines from OpenSSL.
gitref:ba610be90a7c[repository=src] {{< sponsored "Netflix" >}},
gitref:22bd0c9731d7[repository=src]

The man:armv8crypto[4] driver which supports software cryptography on
ARMv8 CPUs now supports AES-XTS which is used by man:geli[4].
gitref:4979620ece98[repository=src]

The man:armv8crypto[4] driver now supports AES-GCM which is used by IPsec
and kernel TLS.
gitref:f76393a6305b6[repository=src] {{< sponsored "Ampere Computing" >}}

[[storage]]
== Storage

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

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:ctld[8] utility now supports the `-f` flag to test the validity of configuration files. gitref:7fcbecd004f[repository=src]

The man:nand[4] device framework and man:nandfs[5] filesystem and associated
utilities have been removed. gitref:f5a95d9a0794[repository=src]

man:gnop[8] can now apply configurable delays to read and write requests to
simulate a slow disk. gitref:4f80c85519d5[repository=src]

The kernel now provides a default implementation for the `SEEK_DATA` and
`SEEK_HOLE` man:ioctl[2]'s for filesystems which do not support
sparse files. gitref:2e1b32c0e3fc[repository=src]

The NFS client and server now support NFSv4.2 (RFC 7862) and Extended
Attributes (RFC 8276). gitref:c057a378180e[repository=src]

Attempts to read a directory fail with `EISDIR` by default.
The `-d skip` flags can be passed to man:grep[1] to suppress errors in stderr
when non-recursively grepping a list that includes directories.
gitref:dcef4f65ae39[repository=src]

The NFS server now permits credentials specified via `-maproot` or `-mapall`
in man:exports[5] to include more than 16 groups.
gitref:cc5efdde94bf[repository=src]

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.
gitref:6e4b6ff88fde[repository=src], gitref:2c76eebca71b[repository=src],
gitref:59f6f5e23c1a[repository=src]

A new `nfsv4_server_only` variable can be set to `YES` in [.filename]#/etc/rc.conf# to only enable support for NFSv4.
This avoids the need to run man:rpcbind[8] on an NFS server.
gitref:4389a5661034[repository=src]

The man:fusefs[5] protocol has been updated to 7.28 along with adding support
for `FUSE_COPY_FILE_RANGE` and `FUSE_LSEEK`.
gitref:92bbfe1f0d1f[repository=src]

[[storage-general]]
=== General Storage


[[boot]]
== Boot Loader Changes

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

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." >}}

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 man:gpart[8] utility.
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.
If the man:efibootmgr[8] utility is used to customize the boot environment, this file should be copied to the location set with the `-l` flag.

[[boot-loader]]
=== Boot Loader Changes


[[network]]
== Networking

This section describes changes that affect networking in FreeBSD.

A new type of man:mbuf[9] (network data buffer) can represent multiple,
unmapped physical pages as a single buffer.
This improves the performance of man:sendfile[2] by reducing the length of
mbuf linked lists in socket buffers.  gitref:82334850ea45[repository=src], gitref:cec06a3edc52[repository=src] {{< sponsored "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.
gitref:b2e60773c6b0[repository=src], gitref:6554362c6640[repository=src], gitref:f1f934754638[repository=src], gitref:3c0e56850511[repository=src], gitref:c1c52cd57e88[repository=src] {{< sponsored "Netflix" >}} {{< sponsored "Chelsio Communications" >}}

man: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 man: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 man: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.  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" >}}

The man:ping[8] and man:ping6[8] utilities have been merged.
man:ping[8] supports both IPv4 and IPv6.
A legacy man:ping6[8] is retained for backwards compatibility. gitref:3cde9171d2d5[repository=src]

SCTP support is now available as a new [.filename]#sctp.ko# kernel module
and is no longer compiled into GENERIC by default.
gitref:e64080e79c53[repository=src] {{< sponsored "The FreeBSD Foundation" >}}

[[network-general]]
=== General Network

[[hardware]]
== 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.

=== AMD64

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" >}}

[[ARM-ARM64]]
=== ARMv5

Support for version 5 of the 32-bit ARM architecture has been removed.
Building for `TARGET=arm` now defaults to a `TARGET_ARCH` of `armv7`.
gitref:eb4977bd0fb2[repository=src]

=== Allwinner

The aw_gpio driver now suppots GPIO interrupts. gitref:0fe5379c6a9[repository=src]

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 AXP803/AXP813 drivers now report battery sensor information. gitref:66bddb4c701[repository=src]

Audio now works on H3/H5 SoCs. gitref:bfcf888a87a[repository=src]

Infrared receiver now works on the H3 SoC. gitref:012fba460ac[repository=src]

USB DRD now works on multiple Allwinner SoCs. This means that some USB ports can be used as peripherals. gitref:aea49d9fed9[repository=src]

=== RockChip

A new rk_pwm driver supports PWM hardware on the RK3399. PWM channels can be configured with man:pwm[8]. gitref:bcd380e88b2[repository=src]

External PCI-express adapters are now supports for the RK3399 SoC. gitref:dfd1d0fcabe[repository=src]

USB3 found in RK3328 and RK3399 is now supported. gitref:7d888a5b2be[repository=src]

if_dwc now supports flow control. gitref:2b4a66ed171[repository=src]

if_dwc now supports checksum offloading. gitref:98ea5a7b9a1[repository=src]

=== Sparc

Support for the `sparc64` architecture (SPARC 9) has been removed.
gitref:58aa35d42975[repository=src]

[[hardware-virtualization]]
=== Virtualization Support

The man:bhyve[8] utility supports additional COM3 and COM4 serial ports. gitref:eed1cc6cdfa[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 works reliably with more VNC clients including the macOS "Screen Sharing" application. gitref:2bb4be0f865[repository=src]

The man:bhyve[8] utility now supports VirtIO-9p (aka VirtFS) filesystem sharing. gitref:100353cfbf8[repository=src] {{< sponsored "Conclusive Engineering (development), vStack.com (funding)" >}}

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" >}}

The man:bhyve[8] utility now supports a VM Generation Counter ACPI device. gitref:9cb339cc7b8[repository=src]

The man:bhyve[8] utility now supports PCI HDAudio devices. gitref:7e3c7420615[repository=src]

[[ports]]
== Ports Collection and Package Infrastructure

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

[[ports-packages]]
=== Packaging Changes


[[future-releases]]
== General Notes Regarding Future FreeBSD Releases

[[future-releases-cputype]]
=== 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(R) distributions have been doing for quite some time.

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