.. Copyright (C) Internet Systems Consortium, Inc. ("ISC")
..
.. SPDX-License-Identifier: MPL-2.0
..
.. This Source Code Form is subject to the terms of the Mozilla Public
.. License, v. 2.0.  If a copy of the MPL was not distributed with this
.. file, you can obtain one at https://mozilla.org/MPL/2.0/.
..
.. See the COPYRIGHT file distributed with this work for additional
.. information regarding copyright ownership.

Notes for BIND 9.16.0
---------------------

.. note::

   This section only lists changes from BIND 9.14 (the previous
   stable branch of BIND).

New Features
~~~~~~~~~~~~

-  A new asynchronous network communications system based on ``libuv``
   is now used by ``named`` for listening for incoming requests and
   responding to them. This change will make it easier to improve
   performance and implement new protocol layers (for example, DNS over
   TLS) in the future. :gl:`#29`

-  The new ``dnssec-policy`` option allows the configuration of a key
   and signing policy (KASP) for zones. This option enables ``named`` to
   generate new keys as needed and automatically roll both ZSK and KSK
   keys. (Note that the syntax for this statement differs from the
   DNSSEC policy used by ``dnssec-keymgr``.) :gl:`#1134`

-  In order to clarify the configuration of DNSSEC keys, the
   ``trusted-keys`` and ``managed-keys`` statements have been
   deprecated, and the new ``trust-anchors`` statement should now be
   used for both types of key.

   When used with the keyword ``initial-key``, ``trust-anchors`` has the
   same behavior as ``managed-keys``, i.e., it configures a trust anchor
   that is to be maintained via :rfc:`5011`.

   When used with the new keyword ``static-key``, ``trust-anchors`` has
   the same behavior as ``trusted-keys``, i.e., it configures a
   permanent trust anchor that will not automatically be updated. (This
   usage is not recommended for the root key.) :gl:`#6`

-  Two new keywords have been added to the ``trust-anchors`` statement:
   ``initial-ds`` and ``static-ds``. These allow the use of trust
   anchors in DS format instead of DNSKEY format. DS format allows trust
   anchors to be configured for keys that have not yet been published;
   this is the format used by IANA when announcing future root keys.

   As with the ``initial-key`` and ``static-key`` keywords,
   ``initial-ds`` configures a dynamic trust anchor to be maintained via
   :rfc:`5011`, and ``static-ds`` configures a permanent trust anchor.
   :gl:`#6` :gl:`#622`

-  ``dig``, ``mdig`` and ``delv`` can all now take a ``+yaml`` option to
   print output in a detailed YAML format. :gl:`#1145`

-  ``dig`` now has a new command line option: ``+[no]unexpected``. By
   default, ``dig`` won't accept a reply from a source other than the
   one to which it sent the query. Add the ``+unexpected`` argument to
   enable it to process replies from unexpected sources. [RT #44978]

-  ``dig`` now accepts a new command line option, ``+[no]expandaaaa``,
   which causes the IPv6 addresses in AAAA records to be printed in full
   128-bit notation rather than the default :rfc:`5952` format.
   :gl:`#765`

-  Statistics channel groups can now be toggled. :gl:`#1030`

Feature Changes
~~~~~~~~~~~~~~~

-  When static and managed DNSSEC keys were both configured for the same
   name, or when a static key was used to configure a trust anchor for
   the root zone and ``dnssec-validation`` was set to the default value
   of ``auto``, automatic :rfc:`5011` key rollovers would be disabled.
   This combination of settings was never intended to work, but there
   was no check for it in the parser. This has been corrected, and it is
   now a fatal configuration error. :gl:`#868`

-  DS and CDS records are now generated with SHA-256 digests only,
   instead of both SHA-1 and SHA-256. This affects the default output of
   ``dnssec-dsfromkey``, the ``dsset`` files generated by
   ``dnssec-signzone``, the DS records added to a zone by
   ``dnssec-signzone`` based on ``keyset`` files, the CDS records added
   to a zone by ``named`` and ``dnssec-signzone`` based on "sync" timing
   parameters in key files, and the checks performed by
   ``dnssec-checkds``. :gl:`#1015`

-  ``named`` will now log a warning if a static key is configured for
   the root zone. :gl:`#6`

-  A SipHash 2-4 based DNS Cookie (:rfc:`7873`) algorithm has been added
   and made default. Old non-default HMAC-SHA based DNS Cookie
   algorithms have been removed, and only the default AES algorithm is
   being kept for legacy reasons. This change has no operational impact
   in most common scenarios. :gl:`#605`

   If you are running multiple DNS servers (different versions of BIND 9
   or DNS servers from multiple vendors) responding from the same IP
   address (anycast or load-balancing scenarios), make sure that all the
   servers are configured with the same DNS Cookie algorithm and same
   Server Secret for the best performance.

-  The information from the ``dnssec-signzone`` and ``dnssec-verify``
   commands is now printed to standard output. The standard error output
   is only used to print warnings and errors, and in case the user
   requests the signed zone to be printed to standard output with the
   ``-f -`` option. A new configuration option ``-q`` has been added to
   silence all output on standard output except for the name of the
   signed zone. :gl:`#1151`

-  The DNSSEC validation code has been refactored for clarity and to
   reduce code duplication. :gl:`#622`

-  Compile-time settings enabled by the ``--with-tuning=large`` option
   for ``configure`` are now in effect by default. Previously used
   default compile-time settings can be enabled by passing
   ``--with-tuning=small`` to ``configure``. :gl:`!2989`

-  JSON-C is now the only supported library for enabling JSON support
   for BIND statistics. The ``configure`` option has been renamed from
   ``--with-libjson`` to ``--with-json-c``. Set the ``PKG_CONFIG_PATH``
   environment variable accordingly to specify a custom path to the
   ``json-c`` library, as the new ``configure`` option does not take the
   library installation path as an optional argument. :gl:`#855`

-  ``./configure`` no longer sets ``--sysconfdir`` to ``/etc`` or
   ``--localstatedir`` to ``/var`` when ``--prefix`` is not specified
   and the aforementioned options are not specified explicitly. Instead,
   Autoconf's defaults of ``$prefix/etc`` and ``$prefix/var`` are
   respected. :gl:`#658`

Removed Features
~~~~~~~~~~~~~~~~

-  The ``dnssec-enable`` option has been obsoleted and no longer has any
   effect. DNSSEC responses are always enabled if signatures and other
   DNSSEC data are present. :gl:`#866`

-  DNSSEC Lookaside Validation (DLV) is now obsolete. The
   ``dnssec-lookaside`` option has been marked as deprecated; when used
   in ``named.conf``, it will generate a warning but will otherwise be
   ignored. All code enabling the use of lookaside validation has been
   removed from the validator, ``delv``, and the DNSSEC tools. :gl:`#7`

-  The ``cleaning-interval`` option has been removed. :gl:`!1731`
