aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--early-plugins.mk17
-rw-r--r--release-notes/OTP-25.3.2.21.README.txt117
-rw-r--r--release-notes/OTP-26.2.5.12.README.txt150
-rw-r--r--release-notes/OTP-26.2.5.13.README.txt143
-rw-r--r--release-notes/OTP-26.2.5.14.README.txt183
-rw-r--r--release-notes/OTP-27.3.4.1.README.txt219
-rw-r--r--release-notes/OTP-27.3.4.2.README.txt240
-rw-r--r--release-notes/OTP-27.3.4.README.txt112
-rw-r--r--release-notes/OTP-28.0-rc4.README.txt3652
-rw-r--r--release-notes/OTP-28.0.1.README.txt231
-rw-r--r--release-notes/OTP-28.0.2.README.txt295
-rw-r--r--release-notes/OTP-28.0.README.txt3730
12 files changed, 9081 insertions, 8 deletions
diff --git a/early-plugins.mk b/early-plugins.mk
index 75dd652..a3c45fb 100644
--- a/early-plugins.mk
+++ b/early-plugins.mk
@@ -19,10 +19,10 @@ OTP-21 := OTP-21.0.9 OTP-21.1.4 OTP-21.2.7 OTP-21.3.8.24
OTP-22 := OTP-22.0.7 OTP-22.1.8 OTP-22.2.8 OTP-22.3.4.27
OTP-23 := OTP-23.0.4 OTP-23.1.5 OTP-23.2.7.3 OTP-23.3.4.20
OTP-24 := OTP-24.0.6 OTP-24.1.7 OTP-24.2.2 OTP-24.3.4.17
-OTP-25 := OTP-25.0.4 OTP-25.1.2.1 OTP-25.2.3 OTP-25.3.2.20
-OTP-26 := OTP-26.0.2 OTP-26.1.2 OTP-26.2.5.11
-OTP-27 := OTP-27.0.1 OTP-27.1.3 OTP-27.2.4 OTP-27.3.3
-OTP-28 := OTP-28.0-rc3
+OTP-25 := OTP-25.0.4 OTP-25.1.2.1 OTP-25.2.3 OTP-25.3.2.21
+OTP-26 := OTP-26.0.2 OTP-26.1.2 OTP-26.2.5.14
+OTP-27 := OTP-27.0.1 OTP-27.1.3 OTP-27.2.4 OTP-27.3.4.2
+OTP-28 := OTP-28.0.2
OTP-18+ := $(OTP-18) $(OTP-19) $(OTP-20) $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27) $(OTP-28)
OTP-19+ := $(OTP-19) $(OTP-20) $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27) $(OTP-28)
@@ -123,12 +123,13 @@ OTP-24-DROPPED := OTP-24.0-rc2 OTP-24.0-rc3 OTP-24.0 OTP-24.0.1 OTP-24.0.5 \
OTP-25-DROPPED := OTP-25.0-rc1 OTP-25.0-rc2 OTP-25.0-rc3 OTP-25.0 \
OTP-25.0.1 OTP-25.0.2 OTP-25.0.3 OTP-25.1 OTP-25.1.1 OTP-25.1.2 OTP-25.2 \
OTP-25.2.1 OTP-25.2.2 OTP-25.3 OTP-25.3.1 OTP-25.3.2 OTP-25.3.2.1 OTP-25.3.2.2 \
- OTP-25.3.2.3 OTP-25.3.2.4 OTP-25.3.2.5 OTP-25.3.2.6 OTP-25.3.2.7 OTP-25.3.2.8 OTP-25.3.2.9 OTP-25.3.2.10 OTP-25.3.2.11 OTP-25.3.2.12 OTP-25.3.2.13 OTP-25.3.2.14 OTP-25.3.2.15 OTP-25.3.2.16 OTP-25.3.2.17 OTP-25.3.2.18 OTP-25.3.2.19
+ OTP-25.3.2.3 OTP-25.3.2.4 OTP-25.3.2.5 OTP-25.3.2.6 OTP-25.3.2.7 OTP-25.3.2.8 OTP-25.3.2.9 OTP-25.3.2.10 OTP-25.3.2.11 OTP-25.3.2.12 OTP-25.3.2.13 OTP-25.3.2.14 OTP-25.3.2.15 OTP-25.3.2.16 OTP-25.3.2.17 OTP-25.3.2.18 OTP-25.3.2.19 OTP-25.3.2.20
OTP-26-DROPPED := OTP-26.0-rc3 \
- OTP-26.0 OTP-26.0.1 OTP-26.1 OTP-26.1.1 OTP-26.2 OTP-26.2.1 OTP-26.2.2 OTP-26.2.3 OTP-26.2.4 OTP-26.2.5 OTP-26.2.5.1 OTP-26.2.5.2 OTP-26.2.5.3 OTP-26.2.5.4 OTP-26.2.5.5 OTP-26.2.5.6 OTP-26.2.5.7 OTP-26.2.5.8 OTP-26.2.5.9 OTP-26.2.5.10
+ OTP-26.0 OTP-26.0.1 OTP-26.1 OTP-26.1.1 OTP-26.2 OTP-26.2.1 OTP-26.2.2 OTP-26.2.3 OTP-26.2.4 OTP-26.2.5 OTP-26.2.5.1 OTP-26.2.5.2 OTP-26.2.5.3 OTP-26.2.5.4 OTP-26.2.5.5 OTP-26.2.5.6 OTP-26.2.5.7 OTP-26.2.5.8 OTP-26.2.5.9 OTP-26.2.5.10 OTP-26.2.5.11 OTP-26.2.5.12 OTP-26.2.5.13
OTP-27-DROPPED := OTP-27.0-rc1 OTP-27.0-rc2 \
- OTP-27.1.2 OTP-27.2 OTP-27.2.1 OTP-27.2.2 OTP-27.2.3 OTP-27.3 OTP-27.3.1 OTP-27.3.2
-OTP-28-DROPPED := OTP-28.0-rc1 OTP-28.0-rc2
+ OTP-27.1.2 OTP-27.2 OTP-27.2.1 OTP-27.2.2 OTP-27.2.3 OTP-27.3 OTP-27.3.1 OTP-27.3.2 OTP-27.3.3 OTP-27.3.4 OTP-27.3.4.1
+OTP-28-DROPPED := OTP-28.0-rc1 OTP-28.0-rc2 OTP-28.0-rc3 OTP-28.0-rc4 \
+ OTP-28.0 OTP-28.0.1
OTP-DROPPED := $(OTP-18-DROPPED) $(OTP-19-DROPPED) $(OTP-20-DROPPED) \
$(OTP-21-DROPPED) $(OTP-22-DROPPED) $(OTP-23-DROPPED) $(OTP-24-DROPPED) \
diff --git a/release-notes/OTP-25.3.2.21.README.txt b/release-notes/OTP-25.3.2.21.README.txt
new file mode 100644
index 0000000..bedbc2d
--- /dev/null
+++ b/release-notes/OTP-25.3.2.21.README.txt
@@ -0,0 +1,117 @@
+Patch Package: OTP 25.3.2.21
+Git Tag: OTP-25.3.2.21
+Date: 2025-05-08
+Trouble Report Id: OTP-19577, OTP-19599, OTP-19605, OTP-19608,
+ OTP-19625
+Seq num: CVE-2025-46712, ERIERL-1220, GH-9707,
+ GH-9720, PR-9696, PR-9724, PR-9765, PR-9767
+System: OTP
+Release: 25
+Application: erts-13.2.2.16, kernel-8.5.4.6, ssh-4.15.3.13
+Predecessor: OTP 25.3.2.20
+
+ Check out the git tag OTP-25.3.2.21, and build a full OTP system
+ including documentation. Apply one or more applications from this
+ build as patches to your installation using the 'otp_patch_apply'
+ tool. For information on install requirements, see descriptions for
+ each application version below.
+
+ ---------------------------------------------------------------------
+ --- erts-13.2.2.16 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ Note! The erts-13.2.2.16 application *cannot* be applied
+ independently of other applications on an arbitrary OTP 25
+ installation.
+
+ On a full OTP 25 installation, also the following runtime
+ dependencies have to be satisfied:
+ -- kernel-8.5 (first satisfied in OTP 25.1)
+ -- stdlib-4.1 (first satisfied in OTP 25.1)
+
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19577 Application(s): erts
+ Related Id(s): ERIERL-1220, PR-9696
+
+ Fixed an emulator crash when setting an error_handler
+ module that was not yet loaded.
+
+
+ OTP-19599 Application(s): erts
+ Related Id(s): PR-9724
+
+ Fixed a rare bug that could cause an emulator crash
+ after unloading a module or erasing a persistent_term.
+
+
+ Full runtime dependencies of erts-13.2.2.16: kernel-8.5, sasl-3.3,
+ stdlib-4.1
+
+
+ ---------------------------------------------------------------------
+ --- kernel-8.5.4.6 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ Note! The kernel-8.5.4.6 application *cannot* be applied
+ independently of other applications on an arbitrary OTP 25
+ installation.
+
+ On a full OTP 25 installation, also the following runtime
+ dependencies have to be satisfied:
+ -- erts-13.1.3 (first satisfied in OTP 25.2)
+ -- stdlib-4.1.1 (first satisfied in OTP 25.1.1)
+
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19605 Application(s): kernel
+ Related Id(s): GH-9720, PR-9765
+
+ With this change, disk_log will not crash when using
+ chunk_step/3 after log size was decreased.
+
+
+ OTP-19608 Application(s): kernel
+ Related Id(s): GH-9707, PR-9767
+
+ With this change, disk_log will not run into infinite
+ loop when using chunk/2,3 after log size was decreased.
+
+
+ Full runtime dependencies of kernel-8.5.4.6: crypto-5.0, erts-13.1.3,
+ sasl-3.0, stdlib-4.1.1
+
+
+ ---------------------------------------------------------------------
+ --- ssh-4.15.3.13 ---------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The ssh-4.15.3.13 application can be applied independently of other
+ applications on a full OTP 25 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19625 Application(s): ssh
+ Related Id(s): CVE-2025-46712
+
+ Fix KEX strict implementation according to
+ draft-miller-sshm-strict-kex-01 document.
+
+
+ Full runtime dependencies of ssh-4.15.3.13: crypto-5.0, erts-11.0,
+ kernel-6.0, public_key-1.6.1, runtime_tools-1.15.1, stdlib-3.15
+
+
+ ---------------------------------------------------------------------
+ --- Thanks to -------------------------------------------------------
+ ---------------------------------------------------------------------
+
+ João Henrique Ferreira de Freitas, Lý Nhật Tâm
+
+
+ ---------------------------------------------------------------------
+ ---------------------------------------------------------------------
+ ---------------------------------------------------------------------
+
diff --git a/release-notes/OTP-26.2.5.12.README.txt b/release-notes/OTP-26.2.5.12.README.txt
new file mode 100644
index 0000000..6435358
--- /dev/null
+++ b/release-notes/OTP-26.2.5.12.README.txt
@@ -0,0 +1,150 @@
+Patch Package: OTP 26.2.5.12
+Git Tag: OTP-26.2.5.12
+Date: 2025-05-08
+Trouble Report Id: OTP-19577, OTP-19599, OTP-19600, OTP-19602,
+ OTP-19605, OTP-19608, OTP-19625
+Seq num: CVE-2025-46712, ERIERL-1220, GH-9707,
+ GH-9715, GH-9720, PR-9696, PR-9724, PR-9737,
+ PR-9753, PR-9765, PR-9767
+System: OTP
+Release: 26
+Application: compiler-8.4.3.3, erts-14.2.5.10,
+ kernel-9.2.4.8, ssh-5.1.4.9, xmerl-1.3.34.3
+Predecessor: OTP 26.2.5.11
+
+ Check out the git tag OTP-26.2.5.12, and build a full OTP system
+ including documentation. Apply one or more applications from this
+ build as patches to your installation using the 'otp_patch_apply'
+ tool. For information on install requirements, see descriptions for
+ each application version below.
+
+ ---------------------------------------------------------------------
+ --- compiler-8.4.3.3 ------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The compiler-8.4.3.3 application can be applied independently of
+ other applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19600 Application(s): compiler
+ Related Id(s): GH-9715, PR-9737
+
+ Fix a bug where unloaded nifs can crash the compiler.
+
+
+ Full runtime dependencies of compiler-8.4.3.3: crypto-5.1, erts-13.0,
+ kernel-8.4, stdlib-5.0
+
+
+ ---------------------------------------------------------------------
+ --- erts-14.2.5.10 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The erts-14.2.5.10 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19577 Application(s): erts
+ Related Id(s): ERIERL-1220, PR-9696
+
+ Fixed an emulator crash when setting an error_handler
+ module that was not yet loaded.
+
+
+ OTP-19599 Application(s): erts
+ Related Id(s): PR-9724
+
+ Fixed a rare bug that could cause an emulator crash
+ after unloading a module or erasing a persistent_term.
+
+
+ Full runtime dependencies of erts-14.2.5.10: kernel-9.0, sasl-3.3,
+ stdlib-4.1
+
+
+ ---------------------------------------------------------------------
+ --- kernel-9.2.4.8 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The kernel-9.2.4.8 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19605 Application(s): kernel
+ Related Id(s): GH-9720, PR-9765
+
+ With this change, disk_log will not crash when using
+ chunk_step/3 after log size was decreased.
+
+
+ OTP-19608 Application(s): kernel
+ Related Id(s): GH-9707, PR-9767
+
+ With this change, disk_log will not run into infinite
+ loop when using chunk/2,3 after log size was decreased.
+
+
+ Full runtime dependencies of kernel-9.2.4.8: crypto-5.0, erts-14.0,
+ sasl-3.0, stdlib-5.0
+
+
+ ---------------------------------------------------------------------
+ --- ssh-5.1.4.9 -----------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The ssh-5.1.4.9 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19625 Application(s): ssh
+ Related Id(s): CVE-2025-46712
+
+ Fix KEX strict implementation according to
+ draft-miller-sshm-strict-kex-01 document.
+
+
+ Full runtime dependencies of ssh-5.1.4.9: crypto-5.0, erts-14.0,
+ kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1, stdlib-5.0,
+ stdlib-5.0
+
+
+ ---------------------------------------------------------------------
+ --- xmerl-1.3.34.3 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The xmerl-1.3.34.3 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Improvements and New Features ---
+
+ OTP-19602 Application(s): xmerl
+ Related Id(s): PR-9753
+
+ A new option to discard whitespace before the xml tag
+ when reading from a stream has been added to the Xmerl
+ SAX parser.
+
+ -- {discard_ws_before_xml_document, Boolean} -- Discard
+ whitespace before xml tag instead of returning a fatal
+ error if set to true (false is default)
+
+
+ Full runtime dependencies of xmerl-1.3.34.3: erts-6.0, kernel-8.4,
+ stdlib-2.5
+
+
+ ---------------------------------------------------------------------
+ --- Thanks to -------------------------------------------------------
+ ---------------------------------------------------------------------
+
+ João Henrique Ferreira de Freitas, Lý Nhật Tâm
+
+
+ ---------------------------------------------------------------------
+ ---------------------------------------------------------------------
+ ---------------------------------------------------------------------
+
diff --git a/release-notes/OTP-26.2.5.13.README.txt b/release-notes/OTP-26.2.5.13.README.txt
new file mode 100644
index 0000000..a3ed17b
--- /dev/null
+++ b/release-notes/OTP-26.2.5.13.README.txt
@@ -0,0 +1,143 @@
+Patch Package: OTP 26.2.5.13
+Git Tag: OTP-26.2.5.13
+Date: 2025-06-16
+Trouble Report Id: OTP-19634, OTP-19637, OTP-19638, OTP-19649,
+ OTP-19653, OTP-19667
+Seq num: CVE-2025-4748, GH-6463, GH-9102, GH-9771,
+ GH-9841, PR-9103, PR-9838, PR-9846, PR-9898,
+ PR-9912, PR-9941
+System: OTP
+Release: 26
+Application: asn1-5.2.2.1, kernel-9.2.4.9, ssh-5.1.4.10,
+ stdlib-5.2.3.4
+Predecessor: OTP 26.2.5.12
+
+ Check out the git tag OTP-26.2.5.13, and build a full OTP system
+ including documentation. Apply one or more applications from this
+ build as patches to your installation using the 'otp_patch_apply'
+ tool. For information on install requirements, see descriptions for
+ each application version below.
+
+ ---------------------------------------------------------------------
+ --- asn1-5.2.2.1 ----------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The asn1-5.2.2.1 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19638 Application(s): asn1
+ Related Id(s): GH-9841, PR-9846
+
+ The ASN.1 compiler could generate code that would cause
+ Dialyzer with the unmatched_returns option to emit
+ warnings.
+
+
+ Full runtime dependencies of asn1-5.2.2.1: erts-11.0, kernel-7.0,
+ stdlib-3.13
+
+
+ ---------------------------------------------------------------------
+ --- kernel-9.2.4.9 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The kernel-9.2.4.9 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19667 Application(s): kernel, stdlib
+ Related Id(s): PR-9912
+
+ A remote shell can now exit by closing the input
+ stream, without terminating the remote node.
+
+
+ Full runtime dependencies of kernel-9.2.4.9: crypto-5.0, erts-14.0,
+ sasl-3.0, stdlib-5.0
+
+
+ ---------------------------------------------------------------------
+ --- ssh-5.1.4.10 ----------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The ssh-5.1.4.10 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19634 Application(s): ssh
+ Related Id(s): GH-9102, PR-9103
+
+ Various channel closing robustness improvements. Avoid
+ crashes when channel handling process closes channel
+ and immediately exits. Avoid breaking the protocol by
+ sending duplicated channel-close messages. Cleanup
+ channels which timeout during closing procedure.
+
+
+ OTP-19637 Application(s): ssh
+ Related Id(s): GH-6463, PR-9838
+
+ Improved interoperability with clients acting as
+ Paramiko.
+
+
+ Full runtime dependencies of ssh-5.1.4.10: crypto-5.0, erts-14.0,
+ kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1, stdlib-5.0,
+ stdlib-5.0
+
+
+ ---------------------------------------------------------------------
+ --- stdlib-5.2.3.4 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The stdlib-5.2.3.4 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19649 Application(s): stdlib
+ Related Id(s): GH-9771, PR-9898
+
+ It's now possible to write lists:map(fun is_atom/1, [])
+ or lists:map(fun my_func/1, []), in the shell, instead
+ of lists:map(fun erlang:is_atom/1, []) or lists:map(fun
+ shell_default:my_func/1, []).
+
+
+ OTP-19653 Application(s): stdlib
+ Related Id(s): PR-9941, CVE-2025-4748
+
+ Properly strip the leading / and drive letter from
+ filepaths when zipping and unzipping archives.
+
+ Thanks to Wander Nauta for finding and responsibly
+ disclosing this vulnerability to the Erlang/OTP
+ project.
+
+
+ OTP-19667 Application(s): kernel, stdlib
+ Related Id(s): PR-9912
+
+ A remote shell can now exit by closing the input
+ stream, without terminating the remote node.
+
+
+ Full runtime dependencies of stdlib-5.2.3.4: compiler-5.0,
+ crypto-4.5, erts-13.1, kernel-9.0, sasl-3.0
+
+
+ ---------------------------------------------------------------------
+ --- Thanks to -------------------------------------------------------
+ ---------------------------------------------------------------------
+
+ Yaroslav Maslennikov
+
+
+ ---------------------------------------------------------------------
+ ---------------------------------------------------------------------
+ ---------------------------------------------------------------------
+
diff --git a/release-notes/OTP-26.2.5.14.README.txt b/release-notes/OTP-26.2.5.14.README.txt
new file mode 100644
index 0000000..1b9057d
--- /dev/null
+++ b/release-notes/OTP-26.2.5.14.README.txt
@@ -0,0 +1,183 @@
+Patch Package: OTP 26.2.5.14
+Git Tag: OTP-26.2.5.14
+Date: 2025-07-17
+Trouble Report Id: OTP-19673, OTP-19683, OTP-19691, OTP-19697,
+ OTP-19699, OTP-19702, OTP-19707, OTP-19710
+Seq num: ERIERL-1240, ERIERL-1241, GH-10007, GH-9632,
+ GH-9655, GH-9884, GH-9992, PR-10003,
+ PR-10016, PR-10023, PR-10029, PR-10035,
+ PR-10036, PR-10039, PR-9887
+System: OTP
+Release: 26
+Application: erts-14.2.5.11, kernel-9.2.4.10,
+ public_key-1.15.1.6, ssh-5.1.4.11,
+ ssl-11.1.4.9, stdlib-5.2.3.5
+Predecessor: OTP 26.2.5.13
+
+ Check out the git tag OTP-26.2.5.14, and build a full OTP system
+ including documentation. Apply one or more applications from this
+ build as patches to your installation using the 'otp_patch_apply'
+ tool. For information on install requirements, see descriptions for
+ each application version below.
+
+ ---------------------------------------------------------------------
+ --- erts-14.2.5.11 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The erts-14.2.5.11 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19683 Application(s): erts
+ Related Id(s): GH-9884, GH-9992, PR-9887
+
+ Fix windows uninstall command.
+
+
+ --- Improvements and New Features ---
+
+ OTP-19710 Application(s): erts
+ Related Id(s): PR-10039
+
+ The maximum amount of connections for epmd on Windows
+ platforms has been increased from 64 to 1024.
+
+
+ Full runtime dependencies of erts-14.2.5.11: kernel-9.0, sasl-3.3,
+ stdlib-4.1
+
+
+ ---------------------------------------------------------------------
+ --- kernel-9.2.4.10 -------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The kernel-9.2.4.10 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19702 Application(s): kernel
+ Related Id(s): ERIERL-1241, PR-10029
+
+ net_kernel could be blocked for a very long time when
+ selecting distribution module for a connection if the
+ DNS service was slow. This prevented any new
+ connections to be set up during that time.
+
+
+ Full runtime dependencies of kernel-9.2.4.10: crypto-5.0, erts-14.0,
+ sasl-3.0, stdlib-5.0
+
+
+ ---------------------------------------------------------------------
+ --- public_key-1.15.1.6 ---------------------------------------------
+ ---------------------------------------------------------------------
+
+ The public_key-1.15.1.6 application can be applied independently of
+ other applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19699 Application(s): public_key
+ Related Id(s): GH-9632, PR-10023
+
+ Handle certificates that are signed with RSASSA-PSS but
+ the PSS params are specified in the
+ 'SignatureAlgorithm' of the signed cert and not in the
+ signer's 'SubjectPublicKeyInfo'.
+
+
+ Full runtime dependencies of public_key-1.15.1.6: asn1-3.0,
+ crypto-4.6, erts-6.0, kernel-3.0, stdlib-3.5
+
+
+ ---------------------------------------------------------------------
+ --- ssh-5.1.4.11 ----------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The ssh-5.1.4.11 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19691 Application(s): ssh
+ Related Id(s): PR-10003
+
+ Fix file handle id generation.
+
+
+ OTP-19707 Application(s): ssh
+ Related Id(s): GH-9655, PR-10035, PR-10036
+
+ Fixes a badmatch error, when SFTP operation cannot be
+ processed due to channel closed in parallel.
+
+
+ Full runtime dependencies of ssh-5.1.4.11: crypto-5.0, erts-14.0,
+ kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1, stdlib-5.0,
+ stdlib-5.0
+
+
+ ---------------------------------------------------------------------
+ --- ssl-11.1.4.9 ----------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The ssl-11.1.4.9 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19697 Application(s): ssl
+ Related Id(s): GH-10007, PR-10016
+
+ Improve error message for bad arguments to underlying
+ connect.
+
+
+ Full runtime dependencies of ssl-11.1.4.9: crypto-5.0, erts-14.0,
+ inets-5.10.7, kernel-9.0, public_key-1.11.3, runtime_tools-1.15.1,
+ stdlib-4.1
+
+
+ ---------------------------------------------------------------------
+ --- stdlib-5.2.3.5 --------------------------------------------------
+ ---------------------------------------------------------------------
+
+ The stdlib-5.2.3.5 application can be applied independently of other
+ applications on a full OTP 26 installation.
+
+ --- Fixed Bugs and Malfunctions ---
+
+ OTP-19673 Application(s): stdlib
+ Related Id(s): ERIERL-1240
+
+ A set of small bugs in sort stability for
+ `lists:sort/1` and `lists:keysort/1` has been fixed.
+ The bug happened for only some, seemingly random,
+ element sequences. Most sorts were stable.
+
+ Sort stability for `lists:sort/1` is only possible to
+ observe when sorting lists with floating point and
+ integer numbers of the same value.
+
+ For `lists:keysort/1` the list had to start with two
+ tuples where the keys or the whole tuples compared
+ equal.
+
+
+ Full runtime dependencies of stdlib-5.2.3.5: compiler-5.0,
+ crypto-4.5, erts-13.1, kernel-9.0, sasl-3.0
+
+
+ ---------------------------------------------------------------------
+ --- Thanks to -------------------------------------------------------
+ ---------------------------------------------------------------------
+
+ Dmytro Lytovchenko
+
+
+ ---------------------------------------------------------------------
+ ---------------------------------------------------------------------
+ ---------------------------------------------------------------------
+
diff --git a/release-notes/OTP-27.3.4.1.README.txt b/release-notes/OTP-27.3.4.1.README.txt
new file mode 100644
index 0000000..c73c541
--- /dev/null
+++ b/release-notes/OTP-27.3.4.1.README.txt
@@ -0,0 +1,219 @@
+Patch Package: OTP 27.3.4.1
+Git Tag: OTP-27.3.4.1
+Date: 2025-06-16
+Trouble Report Id: OTP-19634, OTP-19635, OTP-19637, OTP-19638,
+ OTP-19640, OTP-19646, OTP-19647, OTP-19649,
+ OTP-19653, OTP-19658, OTP-19659, OTP-19662,
+ OTP-19667, OTP-19676
+Seq num: CVE-2025-4748, ERIERL-1225, ERIERL-1235,
+ GH-6463, GH-9102, GH-9722, GH-9771, GH-9816,
+ GH-9841, GH-9875, PR-9103, PR-9691, PR-9838,
+ PR-9846, PR-9849, PR-9859, PR-9876, PR-9896,
+ PR-9897, PR-9898, PR-9905, PR-9912, PR-9941
+System: OTP
+Release: 27
+Application: asn1-5.3.4.1, eldap-1.2.14.1,
+ kernel-10.2.7.1, ssh-5.2.11.1, ssl-11.2.12.1,
+ stdlib-6.2.2.1, xmerl-2.1.3.1
+Predecessor: OTP 27.3.4
+
+Check out the git tag OTP-27.3.4.1, and build a full OTP system including
+documentation. Apply one or more applications from this build as patches to your
+installation using the 'otp_patch_apply' tool. For information on install
+requirements, see descriptions for each application version below.
+
+# OTP-27.3.4.1
+
+## Fixed Bugs and Malfunctions
+
+- Disable warnings as error for `ex_doc` when any Erlang/OTP application has
+ been disabled by configure.
+
+ Own Id: OTP-19646
+ Related Id(s): GH-9875, PR-9876
+
+# asn1-5.3.4.1
+
+The asn1-5.3.4.1 application can be applied independently of other applications
+on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- The ASN.1 compiler could generate code that would cause Dialyzer with the
+ `unmatched_returns` option to emit warnings.
+
+ Own Id: OTP-19638
+ Related Id(s): GH-9841, PR-9846
+
+> #### Full runtime dependencies of asn1-5.3.4.1
+>
+> erts-14.0, kernel-9.0, stdlib-5.0
+
+# eldap-1.2.14.1
+
+The eldap-1.2.14.1 application can be applied independently of other
+applications on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- With this change eldap's 'not' function will have specs fixed.
+
+ Own Id: OTP-19658
+ Related Id(s): PR-9859
+
+> #### Full runtime dependencies of eldap-1.2.14.1
+>
+> asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-3.4
+
+# kernel-10.2.7.1
+
+Note! The kernel-10.2.7.1 application _cannot_ be applied independently of other
+applications on an arbitrary OTP 27 installation.
+
+ On a full OTP 27 installation, also the following runtime
+ dependency has to be satisfied:
+ -- erts-15.2.5 (first satisfied in OTP 27.3.2)
+
+## Fixed Bugs and Malfunctions
+
+- A remote shell can now exit by closing the input stream, without terminating
+ the remote node.
+
+ Own Id: OTP-19667
+ Related Id(s): PR-9912
+
+## Improvements and New Features
+
+- Document default buffer sizes
+
+ Own Id: OTP-19640
+ Related Id(s): GH-9722
+
+> #### Full runtime dependencies of kernel-10.2.7.1
+>
+> crypto-5.0, erts-15.2.5, sasl-3.0, stdlib-6.0
+
+# ssh-5.2.11.1
+
+The ssh-5.2.11.1 application can be applied independently of other applications
+on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Various channel closing robustness improvements. Avoid crashes when channel
+ handling process closes channel and immediately exits. Avoid breaking the
+ protocol by sending duplicated channel-close messages. Cleanup channels which
+ timeout during closing procedure.
+
+ Own Id: OTP-19634
+ Related Id(s): GH-9102, PR-9103
+
+- Improved interoperability with clients acting as Paramiko.
+
+ Own Id: OTP-19637
+ Related Id(s): GH-6463, PR-9838
+
+> #### Full runtime dependencies of ssh-5.2.11.1
+>
+> crypto-5.0, erts-14.0, kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1,
+> stdlib-5.0, stdlib-6.0
+
+# ssl-11.2.12.1
+
+Note! The ssl-11.2.12.1 application _cannot_ be applied independently of other
+applications on an arbitrary OTP 27 installation.
+
+ On a full OTP 27 installation, also the following runtime
+ dependency has to be satisfied:
+ -- public_key-1.16.4 (first satisfied in OTP 27.1.3)
+
+## Fixed Bugs and Malfunctions
+
+- hs_keylog callback properly handle alert in initial states, where encryption
+ is not yet used. Also add keylog callback invocation for corner-case where
+ server alert is encrypted with application secrets as client is already in
+ connection state.
+
+ Own Id: OTP-19635
+ Related Id(s): ERIERL-1235, PR-9849
+
+## Improvements and New Features
+
+- The documentation for SSL option `verify_fun` has been improved.
+
+ Own Id: OTP-19676
+ Related Id(s): PR-9691
+
+> #### Full runtime dependencies of ssl-11.2.12.1
+>
+> crypto-5.0, erts-15.0, inets-5.10.7, kernel-9.0, public_key-1.16.4,
+> runtime_tools-1.15.1, stdlib-6.0
+
+# stdlib-6.2.2.1
+
+The stdlib-6.2.2.1 application can be applied independently of other
+applications on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- The `save_module/1` command in the shell now saves both the locally defined
+ records and the imported records using the `rr/1` command.
+
+ Own Id: OTP-19647
+ Related Id(s): GH-9816, PR-9897
+
+- It's now possible to write `lists:map(fun is_atom/1, [])` or
+ `lists:map(fun my_func/1, [])`, in the shell, instead of
+ `lists:map(fun erlang:is_atom/1, [])` or
+ `lists:map(fun shell_default:my_func/1, [])`.
+
+ Own Id: OTP-19649
+ Related Id(s): GH-9771, PR-9898
+
+- Properly strip the leading `/` and drive letter from filepaths when zipping
+ and unzipping archives.
+
+ Thanks to Wander Nauta for finding and responsibly disclosing this
+ vulnerability to the Erlang/OTP project.
+
+ Own Id: OTP-19653
+ Related Id(s): PR-9941, CVE-2025-4748
+
+- Shell no longer crashes when requesting to autocomplete map keys containing
+ non-atoms.
+
+ Own Id: OTP-19659
+ Related Id(s): PR-9896
+
+- A remote shell can now exit by closing the input stream, without terminating
+ the remote node.
+
+ Own Id: OTP-19667
+ Related Id(s): PR-9912
+
+> #### Full runtime dependencies of stdlib-6.2.2.1
+>
+> compiler-5.0, crypto-4.5, erts-15.0, kernel-10.0, sasl-3.0
+
+# xmerl-2.1.3.1
+
+The xmerl-2.1.3.1 application can be applied independently of other applications
+on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- The type specs of xmerl_scan:file/2 and xmerl_scan:string/2 has been
+ updated to return `dynamic/0`. Due to hook functions they can return any user
+ defined term.
+
+ Own Id: OTP-19662
+ Related Id(s): ERIERL-1225, PR-9905
+
+> #### Full runtime dependencies of xmerl-2.1.3.1
+>
+> erts-6.0, kernel-8.4, stdlib-2.5
+
+# Thanks to
+
+Dan Janowski, Ilya Averyanov, Yaroslav Maslennikov
+
diff --git a/release-notes/OTP-27.3.4.2.README.txt b/release-notes/OTP-27.3.4.2.README.txt
new file mode 100644
index 0000000..0c1c07f
--- /dev/null
+++ b/release-notes/OTP-27.3.4.2.README.txt
@@ -0,0 +1,240 @@
+Patch Package: OTP 27.3.4.2
+Git Tag: OTP-27.3.4.2
+Date: 2025-07-17
+Trouble Report Id: OTP-19661, OTP-19670, OTP-19673, OTP-19681,
+ OTP-19683, OTP-19684, OTP-19688, OTP-19691,
+ OTP-19697, OTP-19699, OTP-19702, OTP-19707,
+ OTP-19710, OTP-19711
+Seq num: ERIERL-1240, ERIERL-1241, ERIERL-1242,
+ GH-10007, GH-10047, GH-9632, GH-9655,
+ GH-9884, GH-9992, PR-10003, PR-10016,
+ PR-10023, PR-10029, PR-10035, PR-10036,
+ PR-10039, PR-10048, PR-9843, PR-9887,
+ PR-9930, PR-9949
+System: OTP
+Release: 27
+Application: asn1-5.3.4.2, compiler-8.6.1.1,
+ erts-15.2.7.1, kernel-10.2.7.2,
+ public_key-1.17.1.1, ssh-5.2.11.2,
+ ssl-11.2.12.2, stdlib-6.2.2.2
+Predecessor: OTP 27.3.4.1
+
+Check out the git tag OTP-27.3.4.2, and build a full OTP system including
+documentation. Apply one or more applications from this build as patches to your
+installation using the 'otp_patch_apply' tool. For information on install
+requirements, see descriptions for each application version below.
+
+# asn1-5.3.4.2
+
+The asn1-5.3.4.2 application can be applied independently of other applications
+on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Decoding a constrained BIT STRING using JER was broken.
+
+ Own Id: OTP-19681
+ Related Id(s): PR-9949
+
+> #### Full runtime dependencies of asn1-5.3.4.2
+>
+> erts-14.0, kernel-9.0, stdlib-5.0
+
+# compiler-8.6.1.1
+
+The compiler-8.6.1.1 application can be applied independently of other
+applications on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fixed a bug that could cause empty bitstring matches to always succeed, even
+ when they should not.
+
+ Own Id: OTP-19711
+ Related Id(s): GH-10047, PR-10048
+
+> #### Full runtime dependencies of compiler-8.6.1.1
+>
+> crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0
+
+# erts-15.2.7.1
+
+The erts-15.2.7.1 application can be applied independently of other applications
+on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fix windows uninstall command.
+
+ Own Id: OTP-19683
+ Related Id(s): GH-9884, GH-9992, PR-9887
+
+## Improvements and New Features
+
+- The maximum amount of connections for `epmd` on Windows platforms has been
+ increased from 64 to 1024.
+
+ Own Id: OTP-19710
+ Related Id(s): PR-10039
+
+> #### Full runtime dependencies of erts-15.2.7.1
+>
+> kernel-9.0, sasl-3.3, stdlib-4.1
+
+# kernel-10.2.7.2
+
+Note! The kernel-10.2.7.2 application _cannot_ be applied independently of other
+applications on an arbitrary OTP 27 installation.
+
+ On a full OTP 27 installation, also the following runtime
+ dependency has to be satisfied:
+ -- erts-15.2.5 (first satisfied in OTP 27.3.2)
+
+## Fixed Bugs and Malfunctions
+
+- socket:sendv/3 with 'nowait' sometimes return 'completion' without
+ 'CompletionInfo' (Windows only).
+
+ Own Id: OTP-19661
+
+- socket:accept can return unexpected 'select_sent'.
+
+ Own Id: OTP-19684
+ Related Id(s): ERIERL-1242
+
+- `net_kernel` could be blocked for a very long time when selecting distribution
+ module for a connection if the DNS service was slow. This prevented any new
+ connections to be set up during that time.
+
+ Own Id: OTP-19702
+ Related Id(s): ERIERL-1241, PR-10029
+
+## Improvements and New Features
+
+- Improved documentation of CompletionStatus for asynchronous (nowait) socket
+ operations.
+
+ Own Id: OTP-19670
+ Related Id(s): PR-9930
+
+> #### Full runtime dependencies of kernel-10.2.7.2
+>
+> crypto-5.0, erts-15.2.5, sasl-3.0, stdlib-6.0
+
+# public_key-1.17.1.1
+
+The public_key-1.17.1.1 application can be applied independently of other
+applications on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Handle certificates that are signed with RSASSA-PSS but the PSS params are
+ specified in the 'SignatureAlgorithm' of the signed cert and not in the
+ signer's 'SubjectPublicKeyInfo'.
+
+ Own Id: OTP-19699
+ Related Id(s): GH-9632, PR-10023
+
+> #### Full runtime dependencies of public_key-1.17.1.1
+>
+> asn1-5.0, crypto-5.0, erts-13.0, kernel-8.0, stdlib-4.0
+
+# ssh-5.2.11.2
+
+The ssh-5.2.11.2 application can be applied independently of other applications
+on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fix file handle id generation.
+
+ Own Id: OTP-19691
+ Related Id(s): PR-10003
+
+- Fixes a badmatch error, when SFTP operation cannot be processed due to channel
+ closed in parallel.
+
+ Own Id: OTP-19707
+ Related Id(s): GH-9655, PR-10035, PR-10036
+
+> #### Full runtime dependencies of ssh-5.2.11.2
+>
+> crypto-5.0, erts-14.0, kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1,
+> stdlib-5.0, stdlib-6.0
+
+# ssl-11.2.12.2
+
+Note! The ssl-11.2.12.2 application _cannot_ be applied independently of other
+applications on an arbitrary OTP 27 installation.
+
+ On a full OTP 27 installation, also the following runtime
+ dependency has to be satisfied:
+ -- public_key-1.16.4 (first satisfied in OTP 27.1.3)
+
+## Fixed Bugs and Malfunctions
+
+- Improve error message for bad arguments to underlying connect.
+
+ Own Id: OTP-19697
+ Related Id(s): GH-10007, PR-10016
+
+## Improvements and New Features
+
+- Allow the PSK identity to be the empty string in TLS-1.2 for compatibility
+ reasons. It is allowed according to the spec although providing a proper value
+ makes more sense.
+
+ Own Id: OTP-19688
+ Related Id(s): PR-9843
+
+> #### Full runtime dependencies of ssl-11.2.12.2
+>
+> crypto-5.0, erts-15.0, inets-5.10.7, kernel-9.0, public_key-1.16.4,
+> runtime_tools-1.15.1, stdlib-6.0
+
+# stdlib-6.2.2.2
+
+The stdlib-6.2.2.2 application can be applied independently of other
+applications on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- A set of small bugs in sort stability for \`lists:sort/1\` and
+ \`lists:keysort/1\` has been fixed. The bug happened for only some, seemingly
+ random, element sequences. Most sorts were stable.
+
+ Sort stability for \`lists:sort/1\` is only possible to observe when sorting
+ lists with floating point and integer numbers of the same value.
+
+ For \`lists:keysort/1\` the list had to start with two tuples where the keys
+ or the whole tuples compared equal.
+
+ Own Id: OTP-19673
+ Related Id(s): ERIERL-1240
+
+> #### Full runtime dependencies of stdlib-6.2.2.2
+>
+> compiler-5.0, crypto-4.5, erts-15.0, kernel-10.0, sasl-3.0
+
+# Thanks to
+
+Dmytro Lytovchenko
+
+GH-10007: https://github.com/erlang/otp/issues/10007 GH-10047:
+https://github.com/erlang/otp/issues/10047 GH-9632:
+https://github.com/erlang/otp/issues/9632 GH-9655:
+https://github.com/erlang/otp/issues/9655 GH-9884:
+https://github.com/erlang/otp/issues/9884 GH-9992:
+https://github.com/erlang/otp/issues/9992 PR-10003:
+https://github.com/erlang/otp/pull/10003 PR-10016:
+https://github.com/erlang/otp/pull/10016 PR-10023:
+https://github.com/erlang/otp/pull/10023 PR-10029:
+https://github.com/erlang/otp/pull/10029 PR-10035:
+https://github.com/erlang/otp/pull/10035 PR-10036:
+https://github.com/erlang/otp/pull/10036 PR-10039:
+https://github.com/erlang/otp/pull/10039 PR-10048:
+https://github.com/erlang/otp/pull/10048 PR-9843:
+https://github.com/erlang/otp/pull/9843 PR-9887:
+https://github.com/erlang/otp/pull/9887 PR-9930:
+https://github.com/erlang/otp/pull/9930 PR-9949:
+https://github.com/erlang/otp/pull/9949
diff --git a/release-notes/OTP-27.3.4.README.txt b/release-notes/OTP-27.3.4.README.txt
new file mode 100644
index 0000000..a1f21b4
--- /dev/null
+++ b/release-notes/OTP-27.3.4.README.txt
@@ -0,0 +1,112 @@
+Patch Package: OTP 27.3.4
+Git Tag: OTP-27.3.4
+Date: 2025-05-08
+Trouble Report Id: OTP-19577, OTP-19599, OTP-19602, OTP-19605,
+ OTP-19608, OTP-19625
+Seq num: CVE-2025-46712, ERIERL-1220, GH-9707,
+ GH-9720, PR-9696, PR-9724, PR-9753, PR-9765,
+ PR-9767
+System: OTP
+Release: 27
+Application: erts-15.2.7, kernel-10.2.7, ssh-5.2.11,
+ xmerl-2.1.3
+Predecessor: OTP 27.3.3
+
+Check out the git tag OTP-27.3.4, and build a full OTP system including
+documentation. Apply one or more applications from this build as patches to your
+installation using the 'otp_patch_apply' tool. For information on install
+requirements, see descriptions for each application version below.
+
+# erts-15.2.7
+
+The erts-15.2.7 application can be applied independently of other applications
+on a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fixed an emulator crash when setting an error_handler module that was not yet
+ loaded.
+
+ Own Id: OTP-19577
+ Related Id(s): ERIERL-1220, PR-9696
+
+- Fixed a rare bug that could cause an emulator crash after unloading a module
+ or erasing a persistent_term.
+
+ Own Id: OTP-19599
+ Related Id(s): PR-9724
+
+> #### Full runtime dependencies of erts-15.2.7
+>
+> kernel-9.0, sasl-3.3, stdlib-4.1
+
+# kernel-10.2.7
+
+Note! The kernel-10.2.7 application _cannot_ be applied independently of other
+applications on an arbitrary OTP 27 installation.
+
+ On a full OTP 27 installation, also the following runtime
+ dependency has to be satisfied:
+ -- erts-15.2.5 (first satisfied in OTP 27.3.2)
+
+## Fixed Bugs and Malfunctions
+
+- With this change, disk_log will not crash when using chunk_step/3 after log
+ size was decreased.
+
+ Own Id: OTP-19605
+ Related Id(s): GH-9720, PR-9765
+
+- With this change, disk_log will not run into infinite loop when using
+ chunk/2,3 after log size was decreased.
+
+ Own Id: OTP-19608
+ Related Id(s): GH-9707, PR-9767
+
+> #### Full runtime dependencies of kernel-10.2.7
+>
+> crypto-5.0, erts-15.2.5, sasl-3.0, stdlib-6.0
+
+# ssh-5.2.11
+
+The ssh-5.2.11 application can be applied independently of other applications on
+a full OTP 27 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fix KEX strict implementation according to draft-miller-sshm-strict-kex-01
+ document.
+
+ Own Id: OTP-19625
+ Related Id(s): CVE-2025-46712
+
+> #### Full runtime dependencies of ssh-5.2.11
+>
+> crypto-5.0, erts-14.0, kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1,
+> stdlib-5.0, stdlib-6.0
+
+# xmerl-2.1.3
+
+The xmerl-2.1.3 application can be applied independently of other applications
+on a full OTP 27 installation.
+
+## Improvements and New Features
+
+- A new option to discard whitespace before the `xml` tag when reading from a
+ stream has been added to the Xmerl SAX parser.
+
+ - **`{discard_ws_before_xml_document, Boolean}`** - Discard whitespace before
+ `xml` tag instead of returning a fatal error if set to `true` (`false` is
+ default)
+
+ Own Id: OTP-19602
+ Related Id(s): PR-9753
+
+> #### Full runtime dependencies of xmerl-2.1.3
+>
+> erts-6.0, kernel-8.4, stdlib-2.5
+
+# Thanks to
+
+Lý Nhật Tâm
+
diff --git a/release-notes/OTP-28.0-rc4.README.txt b/release-notes/OTP-28.0-rc4.README.txt
new file mode 100644
index 0000000..2cdae55
--- /dev/null
+++ b/release-notes/OTP-28.0-rc4.README.txt
@@ -0,0 +1,3652 @@
+Inital Release: OTP 28.0
+Git Tag: OTP-28.0
+Date: 2025-05-05
+Trouble Report Id: OTP-16607, OTP-19096, OTP-19115, OTP-19125,
+ OTP-19127, OTP-19135, OTP-19141, OTP-19144,
+ OTP-19155, OTP-19156, OTP-19159, OTP-19161,
+ OTP-19180, OTP-19184, OTP-19194, OTP-19198,
+ OTP-19204, OTP-19207, OTP-19224, OTP-19226,
+ OTP-19228, OTP-19230, OTP-19231, OTP-19233,
+ OTP-19250, OTP-19259, OTP-19262, OTP-19263,
+ OTP-19271, OTP-19278, OTP-19279, OTP-19285,
+ OTP-19287, OTP-19290, OTP-19295, OTP-19296,
+ OTP-19297, OTP-19303, OTP-19306, OTP-19308,
+ OTP-19313, OTP-19314, OTP-19315, OTP-19317,
+ OTP-19323, OTP-19324, OTP-19334, OTP-19337,
+ OTP-19339, OTP-19343, OTP-19345, OTP-19354,
+ OTP-19355, OTP-19364, OTP-19367, OTP-19369,
+ OTP-19371, OTP-19376, OTP-19386, OTP-19393,
+ OTP-19394, OTP-19396, OTP-19398, OTP-19401,
+ OTP-19403, OTP-19404, OTP-19406, OTP-19413,
+ OTP-19414, OTP-19419, OTP-19420, OTP-19421,
+ OTP-19422, OTP-19425, OTP-19426, OTP-19427,
+ OTP-19430, OTP-19431, OTP-19432, OTP-19441,
+ OTP-19450, OTP-19451, OTP-19452, OTP-19453,
+ OTP-19454, OTP-19456, OTP-19460, OTP-19463,
+ OTP-19465, OTP-19472, OTP-19473, OTP-19474,
+ OTP-19476, OTP-19477, OTP-19478, OTP-19479,
+ OTP-19480, OTP-19481, OTP-19483, OTP-19484,
+ OTP-19485, OTP-19487, OTP-19488, OTP-19492,
+ OTP-19500, OTP-19502, OTP-19503, OTP-19505,
+ OTP-19507, OTP-19508, OTP-19509, OTP-19510,
+ OTP-19512, OTP-19513, OTP-19514, OTP-19515,
+ OTP-19516, OTP-19517, OTP-19518, OTP-19519,
+ OTP-19520, OTP-19521, OTP-19522, OTP-19523,
+ OTP-19524, OTP-19526, OTP-19528, OTP-19531,
+ OTP-19532, OTP-19534, OTP-19535, OTP-19536,
+ OTP-19537, OTP-19538, OTP-19539, OTP-19540,
+ OTP-19541, OTP-19544, OTP-19551, OTP-19553,
+ OTP-19554, OTP-19555, OTP-19556, OTP-19566,
+ OTP-19570, OTP-19572, OTP-19573, OTP-19574,
+ OTP-19575, OTP-19576, OTP-19578, OTP-19580,
+ OTP-19584, OTP-19586, OTP-19588, OTP-19589,
+ OTP-19590, OTP-19591, OTP-19593, OTP-19594,
+ OTP-19596, OTP-19597, OTP-19598, OTP-19601,
+ OTP-19603, OTP-19604, OTP-19607, OTP-19609,
+ OTP-19612, OTP-19613, OTP-19614, OTP-19615,
+ OTP-19616, OTP-19617, OTP-19618, OTP-19620,
+ OTP-19621
+Seq num: #9388, GH-7819, GH-8037, GH-8099, GH-8113,
+ GH-8223, GH-8483, GH-8558, GH-8822, GH-8842,
+ GH-8967, GH-8985, GH-9092, GH-9113, GH-9173,
+ GH-9255, GH-9279, GH-9366, GH-9413, GH-9436,
+ GH-9438, GH-9487, GH-9500, GH-9536, GH-9565,
+ GH-9668, GH-9754, OTP-16608, OTP-19482,
+ OTP-19545, PR-7830, PR-7970, PR-8078,
+ PR-8100, PR-8207, PR-8261, PR-8429, PR-8494,
+ PR-8540, PR-8547, PR-8556, PR-8573, PR-8589,
+ PR-8590, PR-8592, PR-8600, PR-8625, PR-8642,
+ PR-8651, PR-8660, PR-8670, PR-8695, PR-8697,
+ PR-8699, PR-8704, PR-8734, PR-8772, PR-8792,
+ PR-8793, PR-8798, PR-8805, PR-8812, PR-8820,
+ PR-8862, PR-8885, PR-8887, PR-8894, PR-8913,
+ PR-8926, PR-8932, PR-8937, PR-8938, PR-8943,
+ PR-8945, PR-8960, PR-8962, PR-8966, PR-8968,
+ PR-8973, PR-8975, PR-8976, PR-8988, PR-9005,
+ PR-9006, PR-9013, PR-9019, PR-9020, PR-9042,
+ PR-9045, PR-9079, PR-9082, PR-9083, PR-9094,
+ PR-9095, PR-9106, PR-9116, PR-9119, PR-9121,
+ PR-9122, PR-9124, PR-9129, PR-9141, PR-9149,
+ PR-9154, PR-9171, PR-9186, PR-9192, PR-9207,
+ PR-9214, PR-9219, PR-9229, PR-9231, PR-9232,
+ PR-9246, PR-9251, PR-9253, PR-9269, PR-9271,
+ PR-9272, PR-9275, PR-9276, PR-9277, PR-9280,
+ PR-9287, PR-9289, PR-9298, PR-9299, PR-9305,
+ PR-9316, PR-9321, PR-9327, PR-9330, PR-9333,
+ PR-9334, PR-9342, PR-9344, PR-9363, PR-9376,
+ PR-9396, PR-9398, PR-9399, PR-9402, PR-9406,
+ PR-9408, PR-9409, PR-9410, PR-9417, PR-9433,
+ PR-9441, PR-9445, PR-9446, PR-9448, PR-9468,
+ PR-9472, PR-9478, PR-9484, PR-9488, PR-9495,
+ PR-9504, PR-9508, PR-9511, PR-9514, PR-9515,
+ PR-9516, PR-9517, PR-9518, PR-9519, PR-9537,
+ PR-9538, PR-9543, PR-9563, PR-9571, PR-9574,
+ PR-9579, PR-9582, PR-9586, PR-9587, PR-9590,
+ PR-9594, PR-9595, PR-9604, PR-9608, PR-9610,
+ PR-9615, PR-9621, PR-9625, PR-9630, PR-9639,
+ PR-9648, PR-9659, PR-9660, PR-9670, PR-9671,
+ PR-9677, PR-9678, PR-9680, PR-9705, PR-9711,
+ PR-9714, PR-9717, PR-9718, PR-9733, PR-9735,
+ PR-9755, PR-9758, PR-9759, PR-9772, PR-9774,
+ PR-9775, PR-9786
+System: OTP
+Release: 28
+Application: asn1-5.4, common_test-1.28, compiler-9.0,
+ crypto-5.6, debugger-6.0, dialyzer-5.4,
+ diameter-2.5, edoc-1.4, eldap-1.2.15,
+ erl_interface-5.6, erts-16.0, et-1.7.2,
+ eunit-2.10, ftp-1.2.4, inets-9.3.3,
+ jinterface-1.15, kernel-10.3, megaco-4.8,
+ mnesia-4.24, observer-2.18, odbc-2.16,
+ os_mon-2.11, parsetools-2.7, public_key-1.18,
+ reltool-1.0.2, runtime_tools-2.2, sasl-4.3,
+ snmp-5.19, ssh-5.3, ssl-11.3, stdlib-7.0,
+ syntax_tools-4.0, tftp-1.2.3, tools-4.1.2,
+ wx-2.5, xmerl-2.1.3
+Predecessor: OTP
+
+Check out the git tag OTP-28.0, and build a full OTP system including
+documentation.
+
+# HIGHLIGHTS
+
+- For various error types, the compiler now tries to suggest potential fixes by
+ adding "did you mean ...?" at the end of error messages.
+
+ When a function is used with wrong arity, the compiler will try to suggest a
+ defined function with the same name but a different arity. For example, given
+ the following module:
+
+ -module(typos).
+ -export([t/0]).
+ bar(A) -> A.
+ bar(A,A,A) -> A.
+ bar(A,A,A,A) -> A.
+ t() -> bar(0, 0).
+
+ The compiler will emit the following message:
+
+ typo.erl:6:12: function bar/2 undefined, did you mean bar/1,3,4?
+ % 6| t() -> bar(0, 0).
+ % | ^
+
+ For compiler errors that can easily be caused by typos, the compiler will try
+ to suggest what the correct variable or function name, could be. For example,
+ given the following module:
+
+ -module(typos).
+ -export([bar/2]).
+
+ bar(A0, B0) ->
+ A + B.
+
+ the compiler will emit the following error messages:
+
+ typos.erl:5:5: variable 'A' is unbound, did you mean 'A0'?
+ % 5| A + B.
+ % | ^
+
+ typos.erl:5:9: variable 'B' is unbound, did you mean 'B0'?
+ % 5| A + B.
+ % | ^
+
+ Error types that now suggest correct arities: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `bad_nowarn_bif_clash`, `undefined_function`.
+
+ Error types that now suggest correct names: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `undefined_on_load`, `undefined_function`,
+ `undefined_record`, `undefined_field`, `unbound_var`.
+
+ Using a function with wrong arity has higher precedence than having a typo in
+ the function name. If the compiler can find a defined function with the same
+ name but a different arity, it will not suggest a defined function with a
+ close-enough name, regardless of arity.
+
+ Own Id: OTP-19180
+ Application(s): compiler, stdlib
+ Related Id(s): PR-8699, PR-9094
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Application(s): compiler, debugger, stdlib, syntax_tools
+ Related Id(s): PR-8926
+
+- Functionality making it possible for processes to enable reception of
+ priority messages has been introduced in accordance with EEP 76.
+
+ Own Id: OTP-19198
+ Application(s): erts
+ Related Id(s): PR-9269, PR-9519, PR-9590
+
+- The `erl -noshell` mode has been updated to have two sub modes called `raw`
+ and `cooked`, where `cooked` is the old default behaviour and `raw` can be
+ used to bypass the line-editing support of the native terminal. Using `raw`
+ mode it is possible to read keystrokes as they happen without the user having
+ to press Enter. Also, the `raw` mode does not echo the typed characters to
+ stdout. An example of how to create a tic-tac-toe game using this mechanism is
+ included in the documentation.
+
+ Own Id: OTP-19314
+ Application(s): erts, stdlib
+ Related Id(s): GH-8037, PR-8962
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Application(s): compiler, debugger, stdlib, syntax_tools
+ Related Id(s): PR-8625
+
+- The `join(Binaries, Separator)` function that joins a list of binaries has
+ been added to the `binary` module.
+
+ Own Id: OTP-19337
+ Application(s): stdlib
+ Related Id(s): GH-8099, PR-8100
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Application(s): dialyzer, diameter, edoc, erts, eunit, kernel, mnesia,
+ parsetools, runtime_tools, snmp
+ Related Id(s): PR-9079
+
+- Module `re` has been updated to use PCRE2, which is mostly backward
+ compatible with PCRE.
+
+ The most noticeable incompatibilities are
+
+ - The default character encoding is pure ASCII and not Latin1. Unicode support
+ is still available with options `unicode` and `ucp`.
+ - Options `bsr_anycrlf`, `bsr_unicode` and `{newline,_}` are only set when a
+ regex is compiled and cannot be changed at matching for precompiled regex.
+
+ Own Id: OTP-19431
+ Application(s): erts, stdlib
+ Related Id(s): PR-9299, PR-9610
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- It is now possible to use any base for floating point numbers as described in
+ EEP 75: Based Floating Point Literals.
+
+ Computers represent floating point numbers in binary, but such numbers are
+ typically printed using base ten, for example 0.314159265e1. To maintain exact
+ bit-level precision when converting numbers to and from text, it is better to
+ use a base that matches the internally used base, such as 16 for a compact but
+ still exact representation, or 2 for visualizing or writing down the exact
+ internal format. One particular case where such exact representations are
+ useful is in code generating tools.
+
+ Examples:
+
+ > 2#0.111.
+ 0.875
+ > 16#fefe.fefe#e16.
+ 1.2041849337671418e24
+
+ Own Id: OTP-19452
+ Application(s): otp, stdlib
+ Related Id(s): PR-9106
+
+- There is a new `zstd` module that does Zstandard compression.
+
+ Own Id: OTP-19477
+ Application(s): stdlib
+ Related Id(s): PR-9316
+
+- The compiler’s alias analysis pass is now both faster and less conservative,
+ allowing optimizations of records and binary construction to be applied in
+ more cases.
+
+ Own Id: OTP-19502
+ Application(s): compiler
+ Related Id(s): PR-8695
+
+- Line numbers used to be reported in the following way:
+
+ 1> lists:last([]).
+ ** exception error: no function clause matching lists:last([]) (lists.erl, line 389)
+
+ Starting from Erlang/OTP 28, line numbers are now reported in the following
+ way:
+
+ 1> lists:last([]).
+ ** exception error: no function clause matching lists:last([]) (lists.erl:389)
+
+ Own Id: OTP-19538
+ Application(s): stdlib
+ Related Id(s): PR-9468
+
+- SPDX 2.2 Source Software-Bill-Of-Materials for Erlang/OTP compliant with NTIA
+ minimum requirements.
+
+ The SBOM contains a root package. Inside the root package there are multiple
+ SPDX packages. Each SPDX package corresponds to an Erlang/OTP application and
+ the Erlang runtime system (erts). Inside each package, there may be multiple
+ packages, such as vendor dependency packages inside the erts SPDX package.
+
+ Own Id: OTP-19553
+ Application(s): otp
+ Related Id(s): PR-9586, PR-9630, PR-9660, PR-9714
+
+- Added functions that produce utf-8 binaries instead of iolists. New functions
+ are: io_lib:bformat/2, io_lib:bformat/3, io_lib:bfwrite/2,
+ io_lib:bfwrite/3, io_lib:bwrite/2 and io_lib:bwrite_string/3.
+
+ Own Id: OTP-19556
+ Application(s): stdlib
+ Related Id(s): PR-9772
+
+- An **experimental** API for a native debugger has been added. The main
+ components are the following:
+
+ - A new compiler option `beam_debug_info` for the Erlang compiler. When given,
+ most optimizations are disabled and debug information suitable for the
+ native debugger are added to generated BEAM files.
+ - A new `+D` emulator flag. When given, the VM becomes "debuggable", which
+ means that when modules that been compiled with the `beam_debug_info` option
+ are loaded, the code is instrumented so that one can enable and disable
+ breakpoints on executable lines.
+ - An experimental `erl_debugger` module with a new debugging API. Essentially,
+ it allows a single, local, process to be registered as the "debugger"
+ process for the node. This process is the one that will receive messages
+ notifying that a process hit a breakpoint. This way, the front-end
+ implementation of a debugger (such as edb from WhatApp) can be decoupled
+ from OTP.
+ - The `erl_debugger` module also exposes new BIFs to inspect `X` and `Y`
+ registers of a suspended process. Together with new code-information BIFs,
+ this let's a debugger show the values of variables in scope for a suspended
+ process.
+
+ Own Id: OTP-19609
+ Application(s): compiler, erts, kernel
+ Related Id(s): PR-8670, PR-9334, PR-9604
+
+- The ancient ASN.1 modules used in `public_key` has been replaced with more
+ modern versions, but we have strived to keep the documented Erlang API for the
+ `public_key` application compatible.
+
+ Own Id: OTP-19612
+ Application(s): asn1, public_key
+ Related Id(s): PR-9774
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+# POTENTIAL INCOMPATIBILITIES
+
+- `proc_lib:stop/1,3` (and in extension gen_server:stop/3, gen_statem:stop/3
+ and so on) have been updated to not throw an error if the process to be
+ stopped exits with the same reason as given to proc_lib:stop/3.
+
+ Own Id: OTP-19233
+ Application(s): stdlib
+ Related Id(s): PR-8772
+
+- The size of an atom in the Erlang source code was limited to 255 bytes in
+ previous releases, meaning that an atom containing only emojis could contain
+ only 63 emojis.
+
+ While atoms are still only allowed to contain 255 characters, the number of
+ bytes is no longer limited.
+
+ External tools that parse the `AtU8` chunk of a BEAM file directly need to be
+ updated. Tools that use
+ `beam_lib:chunks(Beam, [atoms)`](beam_lib:chunks/2) to read the atom table
+ will continue to work.
+
+ Own Id: OTP-19285
+ Application(s): compiler, erts, stdlib
+ Related Id(s): PR-8913
+
+- The `undec_rest` option would be ignored in generated functions for exclusive
+ decode. The option is now respected, meaning that the return value from such
+ functions are now three-tuples instead of a two-tuples.
+
+ Own Id: OTP-19290
+ Application(s): asn1
+ Related Id(s): PR-8798
+
+- The literals chunk in BEAM is no longer compressed, resulting in slightly
+ smaller BEAM files when a BEAM file is stripped using
+ beam_lib:strip_files/1.
+
+ This is a potential incompatibility for tools that read and interpret the
+ contents of the literal chunk. One way to update such tools to work with the
+ new format is to retrieve the chunk using
+ `beam_lib:chunks(Beam, [literals)`](beam_lib:chunks/2).
+
+ Own Id: OTP-19323
+ Application(s): compiler, erts, stdlib
+ Related Id(s): GH-8967, PR-8988
+
+- The `abort_if_missing_suites` option now defaults to `true`. If you prefer the
+ old behavior, set `abort_if_missing_suites` to `false` in your test runs.
+
+ Own Id: OTP-19355
+ Application(s): common_test
+ Related Id(s): PR-9045
+
+- CBC algorithms are not offered by default. See Configuring algorithms in SSH
+ if you wish to enable them.
+
+ Own Id: OTP-19420
+ Application(s): ssh
+ Related Id(s): PR-9277
+
+- Module `re` has been updated to use PCRE2, which is mostly backward
+ compatible with PCRE.
+
+ The most noticeable incompatibilities are
+
+ - The default character encoding is pure ASCII and not Latin1. Unicode support
+ is still available with options `unicode` and `ucp`.
+ - Options `bsr_anycrlf`, `bsr_unicode` and `{newline,_}` are only set when a
+ regex is compiled and cannot be changed at matching for precompiled regex.
+
+ Own Id: OTP-19431
+ Application(s): erts, stdlib
+ Related Id(s): PR-9299, PR-9610
+
+ *** HIGHLIGHT ***
+
+- If a process being suspended using `erlang:suspend_process()` currently is
+ waiting in a `receive ... after` expression, the timer for the timeout will
+ now also be suspended until the process is resumed.
+
+ Own Id: OTP-19536
+ Application(s): erts
+ Related Id(s): PR-8670
+
+- Change automatic hibernation of static supervisors so that they will hibernate
+ after being idle for 1 second instead of only after starting, dynamic
+ supervisors (simple_one_for_one) will not be hibernated at all. An option to
+ the supervisor is added to make it configurable for the application. This
+ option defaults to 1 second for static supervisors and to infinity for the
+ simple_one_for_one supervisors.
+
+ Own Id: OTP-19597
+ Application(s): stdlib
+ Related Id(s): PR-9680
+
+- The ancient ASN.1 modules used in `public_key` has been replaced with more
+ modern versions, but we have strived to keep the documented Erlang API for the
+ `public_key` application compatible.
+
+ Own Id: OTP-19612
+ Application(s): asn1, public_key
+ Related Id(s): PR-9774
+
+ *** HIGHLIGHT ***
+
+- The socket option names for built-in socket options in the module `socket` has
+ been cleaned up.
+
+ Now, for known socket options, it is only the canonical protocol names that
+ are allowed such as `ip` for the socket option `{ip,recvtos}`. Previously, due
+ to being a protocol alias; `{'IP',recvtos}` was also allowed, as was the
+ incorrect `{hopopt,recvtos}` because the protocol `hopopt` on Linux has the
+ same protocol number as `ip`.
+
+ So, to reduce confusion, all enumerated protocol names with the same number,
+ are not allowed for the known protocol options, only the canonical name.
+
+ Own Id: OTP-19615
+ Application(s): erts
+ Related Id(s): PR-9718
+
+# OTP-28.0
+
+## Improvements and New Features
+
+- It is now possible to use any base for floating point numbers as described in
+ EEP 75: Based Floating Point Literals.
+
+ Computers represent floating point numbers in binary, but such numbers are
+ typically printed using base ten, for example 0.314159265e1. To maintain exact
+ bit-level precision when converting numbers to and from text, it is better to
+ use a base that matches the internally used base, such as 16 for a compact but
+ still exact representation, or 2 for visualizing or writing down the exact
+ internal format. One particular case where such exact representations are
+ useful is in code generating tools.
+
+ Examples:
+
+ > 2#0.111.
+ 0.875
+ > 16#fefe.fefe#e16.
+ 1.2041849337671418e24
+
+ Own Id: OTP-19452
+ Related Id(s): PR-9106
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402
+
+- Fixes the sarif generation in the scan code script
+
+ Own Id: OTP-19492
+ Related Id(s): PR-9409
+
+- SPDX 2.2 Source Software-Bill-Of-Materials for Erlang/OTP compliant with NTIA
+ minimum requirements.
+
+ The SBOM contains a root package. Inside the root package there are multiple
+ SPDX packages. Each SPDX package corresponds to an Erlang/OTP application and
+ the Erlang runtime system (erts). Inside each package, there may be multiple
+ packages, such as vendor dependency packages inside the erts SPDX package.
+
+ Own Id: OTP-19553
+ Related Id(s): PR-9586, PR-9630, PR-9660, PR-9714
+
+ *** HIGHLIGHT ***
+
+- Fixes wrong relationship order for SPDX packages and mistaken inclusion of
+ erts documentation in the erts test SPDX package.
+
+ Own Id: OTP-19601
+ Related Id(s): PR-9717
+
+- sbom validates copyrights to be of a specific format, as defined in the
+ LICENSE-HEADERS.md, which will prevent mistakes in copyrights
+
+ Own Id: OTP-19607
+ Related Id(s): PR-9758
+
+# asn1-5.4
+
+## Fixed Bugs and Malfunctions
+
+- The `undec_rest` option would be ignored in generated functions for exclusive
+ decode. The option is now respected, meaning that the return value from such
+ functions are now three-tuples instead of a two-tuples.
+
+ Own Id: OTP-19290
+ Related Id(s): PR-8798
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- The ancient ASN.1 modules used in `public_key` has been replaced with more
+ modern versions, but we have strived to keep the documented Erlang API for the
+ `public_key` application compatible.
+
+ Own Id: OTP-19612
+ Related Id(s): PR-9774
+
+ *** HIGHLIGHT ***
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+> #### Full runtime dependencies of asn1-5.4
+>
+> erts-14.0, kernel-9.0, stdlib-5.0
+
+# common_test-1.28
+
+## Fixed Bugs and Malfunctions
+
+- Replaced calls to deprecated `crypto:start()` with
+ `application:start(crypto)`.
+
+ Own Id: OTP-19485
+ Related Id(s): PR-8592
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- The overage reports in HTML can be rendered in dark mode if requested by the
+ user's browser.
+
+ Own Id: OTP-19159
+ Related Id(s): PR-7830
+
+- The `abort_if_missing_suites` option now defaults to `true`. If you prefer the
+ old behavior, set `abort_if_missing_suites` to `false` in your test runs.
+
+ Own Id: OTP-19355
+ Related Id(s): PR-9045
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of common_test-1.28
+>
+> compiler-6.0, crypto-4.5, debugger-4.1, erts-7.0, ftp-1.0, inets-6.0,
+> kernel-8.4, observer-2.1, runtime_tools-1.8.16, sasl-2.5, snmp-5.1.2, ssh-4.0,
+> stdlib-4.0, syntax_tools-1.7, tools-3.2, xmerl-1.3.8
+
+# compiler-9.0
+
+## Fixed Bugs and Malfunctions
+
+- The compiler will now emit warnings when some map patterns cannot possibly
+ match because a previous clauses matches the same pattern. For example:
+
+ mm_1(#{}) -> a;
+ mm_1(#{b := B}) -> {b,B}.
+
+ mm_2(#{a := A}) -> {a,A};
+ mm_2(#{a := A, b := B}) -> {b,A,B}.
+
+ The second clause of these function can never match and the compiler will now
+ emit a warning for both of them.
+
+ Note that the compiler is not guaranteed to emit warnings for every possible
+ map pattern that cannot match.
+
+ Own Id: OTP-19141
+ Related Id(s): GH-8558, PR-8600
+
+- The size of an atom in the Erlang source code was limited to 255 bytes in
+ previous releases, meaning that an atom containing only emojis could contain
+ only 63 emojis.
+
+ While atoms are still only allowed to contain 255 characters, the number of
+ bytes is no longer limited.
+
+ External tools that parse the `AtU8` chunk of a BEAM file directly need to be
+ updated. Tools that use
+ `beam_lib:chunks(Beam, [atoms)`](beam_lib:chunks/2) to read the atom table
+ will continue to work.
+
+ Own Id: OTP-19285
+ Related Id(s): PR-8913
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- The literals chunk in BEAM is no longer compressed, resulting in slightly
+ smaller BEAM files when a BEAM file is stripped using
+ beam_lib:strip_files/1.
+
+ This is a potential incompatibility for tools that read and interpret the
+ contents of the literal chunk. One way to update such tools to work with the
+ new format is to retrieve the chunk using
+ `beam_lib:chunks(Beam, [literals)`](beam_lib:chunks/2).
+
+ Own Id: OTP-19323
+ Related Id(s): GH-8967, PR-8988
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- The final validation step in the compiler will now reject modules containing
+ functions with more than 255 arguments. No impact is expected as the emulator
+ has always refused to load these modules.
+
+ Own Id: OTP-19376
+ Related Id(s): GH-9113, PR-9121
+
+- Replaced calls to deprecated `crypto:start()` with
+ `application:start(crypto)`.
+
+ Own Id: OTP-19485
+ Related Id(s): PR-8592
+
+- Refactor code to not rely on `+nowarn_shadow_vars`.
+
+ Own Id: OTP-19574
+ Related Id(s): PR-9678
+
+## Improvements and New Features
+
+- The EEP-48 doc chunk embedded into `.beam` files by the compiler is now
+ `compressed` and `deterministic`.
+
+ Own Id: OTP-19096
+ Related Id(s): PR-8494
+
+- Provided that the map argument for a maps:put/3 call is known to the
+ compiler to be a map, the compiler will replace such calls with the
+ corresponding update using the map syntax.
+
+ Own Id: OTP-19115
+ Related Id(s): PR-8540
+
+- For various error types, the compiler now tries to suggest potential fixes by
+ adding "did you mean ...?" at the end of error messages.
+
+ When a function is used with wrong arity, the compiler will try to suggest a
+ defined function with the same name but a different arity. For example, given
+ the following module:
+
+ -module(typos).
+ -export([t/0]).
+ bar(A) -> A.
+ bar(A,A,A) -> A.
+ bar(A,A,A,A) -> A.
+ t() -> bar(0, 0).
+
+ The compiler will emit the following message:
+
+ typo.erl:6:12: function bar/2 undefined, did you mean bar/1,3,4?
+ % 6| t() -> bar(0, 0).
+ % | ^
+
+ For compiler errors that can easily be caused by typos, the compiler will try
+ to suggest what the correct variable or function name, could be. For example,
+ given the following module:
+
+ -module(typos).
+ -export([bar/2]).
+
+ bar(A0, B0) ->
+ A + B.
+
+ the compiler will emit the following error messages:
+
+ typos.erl:5:5: variable 'A' is unbound, did you mean 'A0'?
+ % 5| A + B.
+ % | ^
+
+ typos.erl:5:9: variable 'B' is unbound, did you mean 'B0'?
+ % 5| A + B.
+ % | ^
+
+ Error types that now suggest correct arities: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `bad_nowarn_bif_clash`, `undefined_function`.
+
+ Error types that now suggest correct names: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `undefined_on_load`, `undefined_function`,
+ `undefined_record`, `undefined_field`, `unbound_var`.
+
+ Using a function with wrong arity has higher precedence than having a typo in
+ the function name. If the compiler can find a defined function with the same
+ name but a different arity, it will not suggest a defined function with a
+ close-enough name, regardless of arity.
+
+ Own Id: OTP-19180
+ Related Id(s): PR-8699, PR-9094
+
+ *** HIGHLIGHT ***
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Related Id(s): PR-8926
+
+ *** HIGHLIGHT ***
+
+- Documentation chunks (EEP-48) has been updated to include the following
+ reserved metadata fields: `behaviours`, `group`, `source_path`, and
+ `source_annos`. The compiler has also been updated to emit this metadata. See
+ the EEP-48 documentation for more details.
+
+ Own Id: OTP-19306
+ Related Id(s): PR-8945, PR-8975
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Related Id(s): PR-8625
+
+ *** HIGHLIGHT ***
+
+- New options for suppressing behaviour warnings have been added:
+
+ - `nowarn_conflicting_behaviours`
+ - `nowarn_undefined_behaviour_func`
+ - `nowarn_undefined_behaviour`
+ - `nowarn_undefined_behaviour_callbacks`
+ - `nowarn_ill_defined_behaviour_callbacks`
+ - `nowarn_ill_defined_optional_callbacks`
+
+ Own Id: OTP-19334
+ Related Id(s): GH-8985, PR-9020
+
+- Some BIFs with side-effects are optimized in `try`/`catch` in the same way as
+ guard BIFs in order to gain performance.
+
+ The following BIFs that are optimized in this way: `binary_to_atom/1`,
+ `binary_to_atom/2`, `binary_to_existing_atom/1`, `list_to_atom/1`, and
+ `list_to_existing_atom/1`.
+
+ Own Id: OTP-19339
+ Related Id(s): PR-9042, PR-9122
+
+- The compiler now converts known documentation attribute metadata entries from
+ unicode:chardata/0 to unicode:unicode_binary/0.
+
+ Own Id: OTP-19394
+ Related Id(s): PR-9192
+
+- The `warn_deprecated_catch` option enables warnings for use of old-style catch
+ expressions on the form `catch Expr` instead of the modern
+ `try ... catch ... end`. To prevent new uses of uses of old catches to be
+ added, this compiler option can be enabled on the project level and
+ `-compile(nowarn_deprecated_catch).` added to individual files that still
+ contain old catches.
+
+ Own Id: OTP-19425
+ Related Id(s): PR-9154
+
+- Defining a fun in terms of an imported function is not allowed. Before this
+ release, the compiler would not catch this kind of error if the name of the
+ imported function happened to be a BIF. Consider this example:
+
+ -module(fun_example).
+ -export([foo/0, bar/0]).
+ -import(m, [max/2, not_a_bif/0]).
+
+ foo() ->
+ fun max/2.
+
+ bar() ->
+ fun not_a_bif/0.
+
+ The compiler in Erlang/OTP 27 would generate the following messages:
+
+ fun_example.erl:9:5: function not_a_bif/0 undefined
+ % 9| fun not_a_bif/0.
+ % | ^
+
+ fun_example.erl:3:2: Warning: import directive overrides auto-imported BIF max/2 --
+ use "-compile({no_auto_import,[max/2]})." to resolve name clash
+ % 3| -import(m, [max/2, not_a_bif/0]).
+ % | ^
+
+ That is, there would be a (cryptic) error for `fun not_a_bif/0`, but only a
+ warning for `fun max/2`.
+
+ When compiling with this release, both attempts to create a fun will result in
+ error messages (as well as a warning):
+
+ fun_example.erl:6:5: creating a fun from imported name max/2 is not allowed
+ % 6| fun max/2.
+ % | ^
+
+ fun_example.erl:9:5: creating a fun from imported name not_a_bif/0 is not allowed
+ % 9| fun not_a_bif/0.
+ % | ^
+
+ fun_example.erl:3:2: Warning: import directive overrides auto-imported BIF max/2 --
+ use "-compile({no_auto_import,[max/2]})." to resolve name clash
+ % 3| -import(m, [max/2, not_a_bif/0]).
+ % | ^
+
+ Also, attempting to call a local function having the same name as
+ auto-imported BIF would result in an error if the BIF was added to Erlang/OTP
+ before R14, and a warning for newer BIFs. This has been changed to always emit
+ a warning. For example:
+
+ -module(bif_example).
+ -export([bar/1]).
+
+ bar(B) ->
+ is_boolean(B).
+
+ is_boolean(B) ->
+ B =:= true orelse B =:= false.
+
+ will now result in the following warning instead of an error:
+
+ if_example.erl:5:5: Warning: ambiguous call of overridden auto-imported BIF is_boolean/1 --
+ use erlang:is_boolean/1 or "-compile({no_auto_import,[is_boolean/1]})." to resolve name clash
+ % 5| is_boolean(B).
+ % | ^
+
+ Own Id: OTP-19432
+ Related Id(s): PR-9246
+
+- The compiler’s alias analysis pass is now both faster and less conservative,
+ allowing optimizations of records and binary construction to be applied in
+ more cases.
+
+ Own Id: OTP-19502
+ Related Id(s): PR-8695
+
+ *** HIGHLIGHT ***
+
+- BEAM files no longer include a `Meta` chunk if there are no features used.
+ That slightly decreases the size of BEAM files, and it also ensures that
+ `m(Module)` and `beam_lib:md5(Beam)` will match for preloaded modules.
+
+ Own Id: OTP-19524
+ Related Id(s): PR-9517
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- An **experimental** API for a native debugger has been added. The main
+ components are the following:
+
+ - A new compiler option `beam_debug_info` for the Erlang compiler. When given,
+ most optimizations are disabled and debug information suitable for the
+ native debugger are added to generated BEAM files.
+ - A new `+D` emulator flag. When given, the VM becomes "debuggable", which
+ means that when modules that been compiled with the `beam_debug_info` option
+ are loaded, the code is instrumented so that one can enable and disable
+ breakpoints on executable lines.
+ - An experimental `erl_debugger` module with a new debugging API. Essentially,
+ it allows a single, local, process to be registered as the "debugger"
+ process for the node. This process is the one that will receive messages
+ notifying that a process hit a breakpoint. This way, the front-end
+ implementation of a debugger (such as edb from WhatApp) can be decoupled
+ from OTP.
+ - The `erl_debugger` module also exposes new BIFs to inspect `X` and `Y`
+ registers of a suspended process. Together with new code-information BIFs,
+ this let's a debugger show the values of variables in scope for a suspended
+ process.
+
+ Own Id: OTP-19609
+ Related Id(s): PR-8670, PR-9334, PR-9604
+
+ *** HIGHLIGHT ***
+
+> #### Full runtime dependencies of compiler-9.0
+>
+> crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0
+
+# crypto-5.6
+
+## Fixed Bugs and Malfunctions
+
+- Fixed minor potential leak of EVP_MAC when `crypto` module is unloaded.
+
+ Own Id: OTP-19500
+ Related Id(s): PR-9119
+
+- Added copyright and license to crypto_ec_curves.erl
+
+ Own Id: OTP-19554
+
+## Improvements and New Features
+
+- The crypto:start/0, crypto:stop/0, and crypto:enable_fips_mode/1
+ functions have been deprecated.
+
+ Own Id: OTP-19155
+ Related Id(s): PR-8592
+
+- Warnings are now logged if module `crypto` with FIPS-supported OpenSSL is
+ loaded without application `crypto` being loaded. In this case FIPS will be
+ disabled even if the user had set application parameter `fips_mode`.
+
+ Own Id: OTP-19156
+ Related Id(s): PR-8590
+
+- The functionality of crypto:crypto_one_time_aead/6 is now also available in
+ the new functions crypto:crypto_one_time_aead_init/4 and
+ crypto:crypto_one_time_aead/4, which makes it possible to reuse
+ initialization.
+
+ Own Id: OTP-19426
+ Related Id(s): PR-9289
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- New key `fips_provider_buildinfo` in map returned by crypto:info/0. If
+ present, it contains the version of the FIPS provider which may be different
+ than the version of the rest of OpenSSL.
+
+ Own Id: OTP-19487
+ Related Id(s): GH-9366, PR-9410
+
+- Exported `crypto` types `sha3()`, `hmac_hash_algorithm()` and
+ `cmac_cipher_algorithm()`.
+
+ Own Id: OTP-19510
+ Related Id(s): PR-9448
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of crypto-5.6
+>
+> erts-9.0, kernel-6.0, stdlib-3.9
+
+# debugger-6.0
+
+## Fixed Bugs and Malfunctions
+
+- Error handling has been improved when modules fail to load.
+
+ Own Id: OTP-19484
+ Related Id(s): GH-7819, PR-9399
+
+## Improvements and New Features
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Related Id(s): PR-8926
+
+ *** HIGHLIGHT ***
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Related Id(s): PR-8625
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of debugger-6.0
+>
+> compiler-8.0, erts-15.0, kernel-10.0, stdlib-7.0, wx-2.0
+
+# dialyzer-5.4
+
+## Fixed Bugs and Malfunctions
+
+- The `-Wno_unknown` option will now prevent a warning being printed to standard
+ output when the command line interface is used.
+
+ Own Id: OTP-19262
+ Related Id(s): GH-8822, PR-8885
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of dialyzer-5.4
+>
+> compiler-8.0, erts-12.0, kernel-8.0, stdlib-5.0, syntax_tools-2.0
+
+# diameter-2.5
+
+## Fixed Bugs and Malfunctions
+
+- With this change diameter will not crash when decoding a DiameterURI without
+ port number.
+
+ Own Id: OTP-19620
+ Related Id(s): PR-9321
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- With this change diameter will not use slave terminology
+
+ Own Id: OTP-19621
+ Related Id(s): PR-9786
+
+> #### Full runtime dependencies of diameter-2.5
+>
+> erts-10.0, kernel-3.2, ssl-9.0, stdlib-5.0
+
+# edoc-1.4
+
+## Fixed Bugs and Malfunctions
+
+- Refactor code to not rely on `+nowarn_shadow_vars`.
+
+ Own Id: OTP-19574
+ Related Id(s): PR-9678
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of edoc-1.4
+>
+> erts-11.0, inets-5.10, kernel-7.0, stdlib-4.0, syntax_tools-2.0, xmerl-1.3.7
+
+# eldap-1.2.15
+
+## Fixed Bugs and Malfunctions
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of eldap-1.2.15
+>
+> asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-3.4
+
+# erl_interface-5.6
+
+## Improvements and New Features
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Update of MD5 implementation from OpenSSL version 3.1.4 to 3.5.
+
+ Own Id: OTP-19614
+ Related Id(s): PR-9775
+
+## Known Bugs and Problems
+
+- The `ei` API for decoding/encoding terms is not fully 64-bit compatible since
+ terms that have a representation on the external term format larger than 2 GB
+ cannot be handled.
+
+ Own Id: OTP-16607
+ Related Id(s): OTP-16608
+
+# erts-16.0
+
+## Fixed Bugs and Malfunctions
+
+- ETS tables with more than 2 billion keys are now supported.
+
+ Own Id: OTP-19144
+ Related Id(s): PR-8589
+
+- The zlib library included in Erlang/OTP has been updated to version 1.3.1.
+
+ Own Id: OTP-19259
+ Related Id(s): PR-8862
+
+- `to_erl` no longer clears the screen when attaching to a `run_erl` session.
+
+ Own Id: OTP-19263
+ Related Id(s): PR-8943
+
+- The size of an atom in the Erlang source code was limited to 255 bytes in
+ previous releases, meaning that an atom containing only emojis could contain
+ only 63 emojis.
+
+ While atoms are still only allowed to contain 255 characters, the number of
+ bytes is no longer limited.
+
+ External tools that parse the `AtU8` chunk of a BEAM file directly need to be
+ updated. Tools that use
+ `beam_lib:chunks(Beam, [atoms)`](beam_lib:chunks/2) to read the atom table
+ will continue to work.
+
+ Own Id: OTP-19285
+ Related Id(s): PR-8913
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Fixed a bug where `erlc` would crash if its path contained spaces.
+
+ Own Id: OTP-19295
+ Related Id(s): PR-8937
+
+- The `-noshell` mode has been updated to read data lazily from standard
+ input. Before this fix any data would be read greedily which meant that Erlang
+ could consume data not meant for it. It also meant that in order for
+ shell:start_interactive/0 to work on Windows an API that did not support
+ reading of Unicode characters had to be used.
+
+ Own Id: OTP-19313
+ Related Id(s): GH-8113, PR-8962
+
+- The literals chunk in BEAM is no longer compressed, resulting in slightly
+ smaller BEAM files when a BEAM file is stripped using
+ beam_lib:strip_files/1.
+
+ This is a potential incompatibility for tools that read and interpret the
+ contents of the literal chunk. One way to update such tools to work with the
+ new format is to retrieve the chunk using
+ `beam_lib:chunks(Beam, [literals)`](beam_lib:chunks/2).
+
+ Own Id: OTP-19323
+ Related Id(s): GH-8967, PR-8988
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Fixed erlang:localtime_to_universaltime/2 with `IsDST` set to `true` and a
+ timezone without daylight saving (for example `UTC`) to assume that the
+ provided localtime does not have DST. This has always been the behaviour, but
+ glibc versions after 2.37 changed it so that the behavior in Erlang also
+ changed.
+
+ Own Id: OTP-19453
+ Related Id(s): PR-9207
+
+- Support for the `TZ` environment variable has been added on Windows. Before
+ this change only the time zone configured in the OS was ever used.
+
+ Own Id: OTP-19454
+ Related Id(s): PR-9207
+
+- Suppressed various warnings when building the emulator with recent versions of
+ GCC
+
+ Own Id: OTP-19488
+ Related Id(s): GH-9413, PR-9417
+
+- Fixed a bug in re:run and re:compile where the pattern parameter would be read
+ incorrectly if it was a sub-binary.
+
+ Own Id: OTP-19507
+ Related Id(s): GH-9438, PR-9478
+
+- Fixed a broken makefile rule that made it so that `O2` and `-O2` could not be
+ part of the directory path when building Erlang/OTP. Bug has been present
+ since R11B released 2006.
+
+ Own Id: OTP-19518
+ Related Id(s): GH-9487, PR-9488
+
+- Fixed the index types of modules `atomics` and `counters` from `integer()` to
+ `pos_integer()`, which is more correct.
+
+ Own Id: OTP-19532
+ Related Id(s): PR-9538
+
+- Fix `erl` flags `+Q`, `+P` and `+t` to not allow values greater
+ than 4294975487. Before this fix, the runtime would either truncate the value
+ or crash depending on which value was given.
+
+ Own Id: OTP-19594
+ Related Id(s): GH-9668, PR-9671
+
+- The socket option names for built-in socket options in the module `socket` has
+ been cleaned up.
+
+ Now, for known socket options, it is only the canonical protocol names that
+ are allowed such as `ip` for the socket option `{ip,recvtos}`. Previously, due
+ to being a protocol alias; `{'IP',recvtos}` was also allowed, as was the
+ incorrect `{hopopt,recvtos}` because the protocol `hopopt` on Linux has the
+ same protocol number as `ip`.
+
+ So, to reduce confusion, all enumerated protocol names with the same number,
+ are not allowed for the known protocol options, only the canonical name.
+
+ Own Id: OTP-19615
+ Related Id(s): PR-9718
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- On windows, socket:sendv could incorrectly return {ok, integer()} on Windows.
+
+ Own Id: OTP-19617
+ Related Id(s): OTP-19482
+
+## Improvements and New Features
+
+- Functionality making it possible for processes to enable reception of
+ priority messages has been introduced in accordance with EEP 76.
+
+ Own Id: OTP-19198
+ Related Id(s): PR-9269, PR-9519, PR-9590
+
+ *** HIGHLIGHT ***
+
+- The trace:system/3 function has been added. It has a similar interface as
+ erlang:system_monitor/2 but it also supports trace sessions.
+
+ Own Id: OTP-19271
+ Related Id(s): PR-8660
+
+- Added support for `SIGWINCH`, `SIGCONT`, and `SIGINFO` signals to
+ os:set_signal/2 where available.
+
+ Own Id: OTP-19278
+ Related Id(s): PR-8887, PR-8938
+
+- The `erl -noshell` mode has been updated to have two sub modes called `raw`
+ and `cooked`, where `cooked` is the old default behaviour and `raw` can be
+ used to bypass the line-editing support of the native terminal. Using `raw`
+ mode it is possible to read keystrokes as they happen without the user having
+ to press Enter. Also, the `raw` mode does not echo the typed characters to
+ stdout. An example of how to create a tic-tac-toe game using this mechanism is
+ included in the documentation.
+
+ Own Id: OTP-19314
+ Related Id(s): GH-8037, PR-8962
+
+ *** HIGHLIGHT ***
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Two BIFs have been added to the `erlang` module.
+
+ erlang:processes_iterator/0 returns a process iterator that can be used to
+ iterate through the process table.
+
+ erlang:process_next/1 takes in a process iterator and returns a 2-tuple,
+ consisting of a process identifier and a new process iterator. When the
+ process iterator runs out of processes in the process table, `none` will be
+ returned.
+
+ Using these BIFs to scan the processes scales better than using
+ erlang:processes/0, at the cost of giving less consistency guarantees.
+ Process identifiers returned from consecutive calls of erlang:process_next/1
+ may not be a consistent snapshot of all elements existing in the table during
+ any of the calls. A process identifier is only guaranteed to be returned from
+ a call to erlang:processes_next/1 if it was alive before the call to
+ erlang:processes_iterator/0 and was still alive when
+ erlang:processes_next/1 returned `none`.
+
+ Own Id: OTP-19369
+ Related Id(s): PR-9129
+
+- Improved open debug for gen_tcp_socket (connect and listen) and gen_udp_socket
+ (open).
+
+ Own Id: OTP-19386
+
+- Module `re` has been updated to use PCRE2, which is mostly backward
+ compatible with PCRE.
+
+ The most noticeable incompatibilities are
+
+ - The default character encoding is pure ASCII and not Latin1. Unicode support
+ is still available with options `unicode` and `ucp`.
+ - Options `bsr_anycrlf`, `bsr_unicode` and `{newline,_}` are only set when a
+ regex is compiled and cannot be changed at matching for precompiled regex.
+
+ Own Id: OTP-19431
+ Related Id(s): PR-9299, PR-9610
+
+ *** HIGHLIGHT ***
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- When booting the runtime system on a 32-bit computer with a single core, the
+ boot code will try to minimize the peak memory use by disabling parallel
+ loading of BEAM files.
+
+ Own Id: OTP-19450
+ Related Id(s): PR-9342
+
+- A `socket` option `{otp,select_read}` has been added that enables keeping a
+ socket in the VM select/poll set between calls to recv functions.
+
+ This increases throughput by reducing the number of calls to said functions.
+
+ Own Id: OTP-19451
+ Related Id(s): PR-9344
+
+- `erlc` will now write compiler warnings and errors to standard error, instead
+ of standard output, in common with other language compilers.
+
+ Own Id: OTP-19460
+ Related Id(s): GH-9255, PR-9363
+
+- Fixed the Windows build to always include `.pdb` files for all DLLs and
+ executables to help with debugging.
+
+ Own Id: OTP-19465
+ Related Id(s): PR-9229
+
+- Improve the naming of the (internal) esock mutex(es). It is now possible to
+ configure (as in autoconf) the use of simple names for the esock mutex(es).
+
+ Own Id: OTP-19472
+ Related Id(s): #9388
+
+- An optimization for appending 0 bits to a binary was removed in patch releases
+ for OTP versions 25, 26, and 27. This optimization has been reintroduced in
+ Erlang/OTP 28.
+
+ Own Id: OTP-19473
+ Related Id(s): PR-8697, PR-9396
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402
+
+- When using `enif_select_read` (or `enif_select` with `ERL_NIF_SELECT_READ`) on
+ systems with kernel polling enabled (that is most Unix systems), file
+ descriptors that are always re-enabled as soon as they trigger are now part of
+ a specialized pollset just as `driver_select`. This reduces the CPU usage in
+ such scenarios as the erts does not have to re-insert the FD everytime it it
+ triggered. As a result of this optimization `socket` based reading uses a
+ lot less CPU and achieves a higher throughput.
+
+ Own Id: OTP-19479
+ Related Id(s): PR-9275
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- The Windows installer no longer creates the `erl.ini` file, making
+ installations redistributable.
+
+ Own Id: OTP-19481
+ Related Id(s): PR-9330
+
+- Added erlang:hibernate/0, which hibernates a process without discarding the
+ stack.
+
+ Own Id: OTP-19503
+ Related Id(s): PR-9406
+
+- The asmjit library (used by BeamJIT) has been updated to version
+ 029075b84bf0161a761beb63e6eda519a29020db.
+
+ Own Id: OTP-19509
+ Related Id(s): PR-9495
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- If a process being suspended using `erlang:suspend_process()` currently is
+ waiting in a `receive ... after` expression, the timer for the timeout will
+ now also be suspended until the process is resumed.
+
+ Own Id: OTP-19536
+ Related Id(s): PR-8670
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- A test module for TLS distribution over `socket` has been implemented.
+
+ Own Id: OTP-19539
+ Related Id(s): PR-9511
+
+- Upgrade pcre2 to 10.45
+
+ Own Id: OTP-19541
+ Related Id(s): PR-9582
+
+- The `+R` emulator options has been removed. It has had any effect since
+ Erlang/OTP R9.
+
+ Own Id: OTP-19551
+ Related Id(s): PR-9608
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Increase the default inet-driver buffer size(s). Also introduce kernel
+ parameters for UDP and SCTP to change the sizes when creating (those) sockets.
+
+ Own Id: OTP-19576
+
+- Add `+JPperfdirectory <dir>` for specifying which directory Erlang should
+ place perf symbol information files.
+
+ Own Id: OTP-19589
+ Related Id(s): GH-9500, PR-9639
+
+- Allow multiple static nifs to be part of the same archive. See the NIF
+ documentation for details.
+
+ Own Id: OTP-19590
+ Related Id(s): PR-9625
+
+- Various improvements reducing lock contention on run queues due to task
+ stealing.
+
+ Own Id: OTP-19591
+ Related Id(s): PR-9594
+
+- The new implementation has the same behavior as the previous one. The newer
+ compilers already have native support for FP16, so this implementation is only
+ relevant for older compilers. For this reason, the new implementation has not
+ been tested for speed.
+
+ Own Id: OTP-19603
+ Related Id(s): PR-9735
+
+- An **experimental** API for a native debugger has been added. The main
+ components are the following:
+
+ - A new compiler option `beam_debug_info` for the Erlang compiler. When given,
+ most optimizations are disabled and debug information suitable for the
+ native debugger are added to generated BEAM files.
+ - A new `+D` emulator flag. When given, the VM becomes "debuggable", which
+ means that when modules that been compiled with the `beam_debug_info` option
+ are loaded, the code is instrumented so that one can enable and disable
+ breakpoints on executable lines.
+ - An experimental `erl_debugger` module with a new debugging API. Essentially,
+ it allows a single, local, process to be registered as the "debugger"
+ process for the node. This process is the one that will receive messages
+ notifying that a process hit a breakpoint. This way, the front-end
+ implementation of a debugger (such as edb from WhatApp) can be decoupled
+ from OTP.
+ - The `erl_debugger` module also exposes new BIFs to inspect `X` and `Y`
+ registers of a suspended process. Together with new code-information BIFs,
+ this let's a debugger show the values of variables in scope for a suspended
+ process.
+
+ Own Id: OTP-19609
+ Related Id(s): PR-8670, PR-9334, PR-9604
+
+ *** HIGHLIGHT ***
+
+- Update internal `ryu` implementation to use latest version. The new version is
+ a little bit faster in some scenarios. `ryu` is used by `float_to_list/1` and
+ similar functions to convert floats to strings.
+
+ Own Id: OTP-19613
+ Related Id(s): PR-9733
+
+- Update of MD5 implementation from OpenSSL version 3.1.4 to 3.5.
+
+ Own Id: OTP-19614
+ Related Id(s): PR-9775
+
+- Small optimization in binary_to_term by not allocating an unnecessary large
+ native stack frame.
+
+ Own Id: OTP-19618
+ Related Id(s): PR-9759
+
+> #### Full runtime dependencies of erts-16.0
+>
+> kernel-9.0, sasl-3.3, stdlib-4.1
+
+# et-1.7.2
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of et-1.7.2
+>
+> erts-9.0, kernel-5.3, runtime_tools-1.10, stdlib-3.4, wx-1.2
+
+# eunit-2.10
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of eunit-2.10
+>
+> erts-9.0, kernel-5.3, stdlib-3.4
+
+# ftp-1.2.4
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of ftp-1.2.4
+>
+> erts-7.0, kernel-6.0, runtime_tools-1.15.1, ssl-10.2, stdlib-3.5
+
+# inets-9.3.3
+
+## Fixed Bugs and Malfunctions
+
+- Replaced calls to deprecated `crypto:start()` with
+ `application:start(crypto)`.
+
+ Own Id: OTP-19485
+ Related Id(s): PR-8592
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- Enhanced http client documentation.
+
+ Own Id: OTP-19520
+ Related Id(s): PR-9516
+
+- Enhance made to mod_esi documentation
+
+ Own Id: OTP-19521
+ Related Id(s): PR-9472
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of inets-9.3.3
+>
+> erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14,
+> ssl-9.0, stdlib-5.0, stdlib-6.0
+
+# jinterface-1.15
+
+## Improvements and New Features
+
+- The `.class` files of jinterface are now part of the prebuilt archive using
+ Java 8.
+
+ Own Id: OTP-19308
+ Related Id(s): PR-8960
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+# kernel-10.3
+
+## Fixed Bugs and Malfunctions
+
+- Fixed an issue where output to the shell would not print the prompt on a new
+ line.
+
+ Own Id: OTP-19228
+ Related Id(s): PR-8820
+
+- When in `shell` is in `-noshell` mode, and in `latin1` encoding mode, io
+ requests in latin1 encoding will not be translated to unicode and back to
+ latin1.
+
+ Own Id: OTP-19296
+ Related Id(s): PR-9013
+
+- Fixed a bug where a composing unicode character would bind to a character not
+ available to the user and deleting that character would cause a crash.
+
+ Own Id: OTP-19297
+ Related Id(s): PR-9005
+
+- The `-noshell` mode has been updated to read data lazily from standard
+ input. Before this fix any data would be read greedily which meant that Erlang
+ could consume data not meant for it. It also meant that in order for
+ shell:start_interactive/0 to work on Windows an API that did not support
+ reading of Unicode characters had to be used.
+
+ Own Id: OTP-19313
+ Related Id(s): GH-8113, PR-8962
+
+- The Erlang shell no longer crashes when a shell prompt ends with an escape
+ sequence.
+
+ Own Id: OTP-19414
+ Related Id(s): PR-9272
+
+- code:get_doc/1 now works for cover-compiled modules.
+
+ Own Id: OTP-19513
+ Related Id(s): PR-9433
+
+- An infinite loop in CNAME loop detection that can cause Out Of Memory has been
+ fixed. This affected CNAME lookup with the internal DNS resolver.
+
+ Own Id: OTP-19544
+ Related Id(s): PR-9587, OTP-19545
+
+- The internal resolver framework has been fixed to wait with the first resolver
+ lookup until the ERL_INETRC environment variable has been applied.
+
+ Previously, on some platform(s) (Linux) a first lookup when figuring out the
+ domain name was always placed on the `native` resolver even if ERL_INETRC was
+ used to disable it.
+
+ Own Id: OTP-19555
+ Related Id(s): PR-9543
+
+- Fix `logger:add_handler(default, ...)` to correctly replay events generated
+ during startup when the default logger is set to `undefined` in logger's
+ configuration parameters.
+
+ Own Id: OTP-19588
+ Related Id(s): GH-9436, PR-9595
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- application:load/1 slows down as the number of directories in the code path
+ increases because the call to code:where_is_file/1 for the '.app' file must
+ scan each directory for the app.
+
+ `code_server` maintains a cache of the contents of directories in the path.
+ Re-using that cache when searching for '.app' files in application:load/1
+ may improve its runtime, especially when loading multiple applications.
+
+ Own Id: OTP-19194
+ Related Id(s): PR-8078
+
+- The `Erlang SSH daemon` now uses the same backend to handle multiline
+ functionality as the Erlang shell.
+
+ Own Id: OTP-19226
+ Related Id(s): PR-8805
+
+- Added support for `SIGWINCH`, `SIGCONT`, and `SIGINFO` signals to
+ os:set_signal/2 where available.
+
+ Own Id: OTP-19278
+ Related Id(s): PR-8887, PR-8938
+
+- Add net_kernel:allowed/0, it returns a list of nodes that are explicitly
+ allowed to connect to the node by calling net_kernel:allow/1
+
+ Own Id: OTP-19287
+ Related Id(s): PR-8207
+
+- Documentation chunks (EEP-48) has been updated to include the following
+ reserved metadata fields: `behaviours`, `group`, `source_path`, and
+ `source_annos`. The compiler has also been updated to emit this metadata. See
+ the EEP-48 documentation for more details.
+
+ Own Id: OTP-19306
+ Related Id(s): PR-8945, PR-8975
+
+- The erpc:call/3, erpc:call/5, erpc:multicall/3, and erpc:multicall/5
+ functions now also accept an option map as last argument containing the
+ `timeout` and `always_spawn` options. The `always_spawn` option can be used in
+ order to ensure that the call operation will use a newly spawned process when
+ executing the remote call.
+
+ Own Id: OTP-19343
+ Related Id(s): PR-8642
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Improved open debug for gen_tcp_socket (connect and listen) and gen_udp_socket
+ (open).
+
+ Own Id: OTP-19386
+
+- `t:io:standard_error/0` has been updated to write via a NIF API instead of a
+ port. This allows it to access the dirty-scheduler pool and make sure that
+ writes have been written to the OSs `stderr` when io:format/3 and equivalent
+ return.
+
+ Own Id: OTP-19401
+ Related Id(s): PR-9116
+
+- Added the option `exception_on_failure` to os:cmd/2 to make os:cmd/2 raise
+ an exception if the command fails to execute.
+
+ Own Id: OTP-19404
+ Related Id(s): PR-9082
+
+- A `socket` option `{otp,select_read}` has been added that enables keeping a
+ socket in the VM select/poll set between calls to recv functions.
+
+ This increases throughput by reducing the number of calls to said functions.
+
+ Own Id: OTP-19451
+ Related Id(s): PR-9344
+
+- Add a configure chapter to the socket usage guide
+
+ Own Id: OTP-19522
+ Related Id(s): PR-9508
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Increase the default inet-driver buffer size(s). Also introduce kernel
+ parameters for UDP and SCTP to change the sizes when creating (those) sockets.
+
+ Own Id: OTP-19576
+
+- An **experimental** API for a native debugger has been added. The main
+ components are the following:
+
+ - A new compiler option `beam_debug_info` for the Erlang compiler. When given,
+ most optimizations are disabled and debug information suitable for the
+ native debugger are added to generated BEAM files.
+ - A new `+D` emulator flag. When given, the VM becomes "debuggable", which
+ means that when modules that been compiled with the `beam_debug_info` option
+ are loaded, the code is instrumented so that one can enable and disable
+ breakpoints on executable lines.
+ - An experimental `erl_debugger` module with a new debugging API. Essentially,
+ it allows a single, local, process to be registered as the "debugger"
+ process for the node. This process is the one that will receive messages
+ notifying that a process hit a breakpoint. This way, the front-end
+ implementation of a debugger (such as edb from WhatApp) can be decoupled
+ from OTP.
+ - The `erl_debugger` module also exposes new BIFs to inspect `X` and `Y`
+ registers of a suspended process. Together with new code-information BIFs,
+ this let's a debugger show the values of variables in scope for a suspended
+ process.
+
+ Own Id: OTP-19609
+ Related Id(s): PR-8670, PR-9334, PR-9604
+
+ *** HIGHLIGHT ***
+
+> #### Full runtime dependencies of kernel-10.3
+>
+> crypto-5.0, erts-15.2.5, sasl-3.0, stdlib-6.0
+
+# megaco-4.8
+
+## Fixed Bugs and Malfunctions
+
+- Add missing spec and doc for exported functions.
+
+ Own Id: OTP-19523
+
+## Improvements and New Features
+
+- Nano seconds are now used for (example) meas result presentation.
+
+ Nanoseconds are now used, for example, in `meas` result presentations.
+
+ Own Id: OTP-19403
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- Add copyright notice to files that still had none.
+
+ Own Id: OTP-19570
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Tweaked some of the meas examples in order to make them benchmark compatible.
+
+ Own Id: OTP-19598
+
+> #### Full runtime dependencies of megaco-4.8
+>
+> asn1-3.0, debugger-4.0, erts-12.0, et-1.5, kernel-8.0, runtime_tools-1.8.14,
+> stdlib-2.5
+
+# mnesia-4.24
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of mnesia-4.24
+>
+> erts-9.0, kernel-5.3, stdlib-5.0
+
+# observer-2.18
+
+## Fixed Bugs and Malfunctions
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- With this change etop from observer application will scroll as top from shell
+
+ Own Id: OTP-19528
+ Related Id(s): PR-9659
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of observer-2.18
+>
+> erts-15.0, et-1.5, kernel-10.0, runtime_tools-2.1, stdlib-5.0, wx-2.3
+
+# odbc-2.16
+
+## Fixed Bugs and Malfunctions
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- Updated odbc configure to enable easier use of iodbc driver.
+
+ Own Id: OTP-19456
+ Related Id(s): PR-9083
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of odbc-2.16
+>
+> erts-6.0, kernel-3.0, stdlib-2.0
+
+# os_mon-2.11
+
+## Fixed Bugs and Malfunctions
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- `m:disksup` will now recognize HAMMER2 volumes.
+
+ Own Id: OTP-19207
+ Related Id(s): PR-8704
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of os_mon-2.11
+>
+> erts-14.0, kernel-9.0, sasl-4.2.1, stdlib-5.0
+
+# parsetools-2.7
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of parsetools-2.7
+>
+> erts-6.0, kernel-3.0, stdlib-3.4
+
+# public_key-1.18
+
+## Fixed Bugs and Malfunctions
+
+- Enable public_key to decode legacy certs using md2 hash.
+
+ Own Id: OTP-19616
+ Related Id(s): GH-9754, PR-9755
+
+## Improvements and New Features
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- Ignore instead of crashing unhandled entries when loading CA-certificates.
+
+ Own Id: OTP-19573
+ Related Id(s): GH-9565, PR-9677
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- The ancient ASN.1 modules used in `public_key` has been replaced with more
+ modern versions, but we have strived to keep the documented Erlang API for the
+ `public_key` application compatible.
+
+ Own Id: OTP-19612
+ Related Id(s): PR-9774
+
+ *** HIGHLIGHT ***
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+> #### Full runtime dependencies of public_key-1.18
+>
+> asn1-5.0, crypto-5.0, erts-13.0, kernel-8.0, stdlib-4.0
+
+# reltool-1.0.2
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of reltool-1.0.2
+>
+> erts-15.0, kernel-9.0, sasl-4.2.1, stdlib-5.0, tools-2.6.14, wx-2.3
+
+# runtime_tools-2.2
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- With this change observer will use cheaper iterators to avoid locking when not
+ necessary.
+
+ Own Id: OTP-19584
+ Related Id(s): PR-9711
+
+> #### Full runtime dependencies of runtime_tools-2.2
+>
+> erts-16.0, kernel-10.0, mnesia-4.12, stdlib-6.0
+
+# sasl-4.3
+
+## Fixed Bugs and Malfunctions
+
+- Fixed the documentation for the ExtraFiles option to systools:make_tar/2.
+
+ Own Id: OTP-19279
+ Related Id(s): GH-8842, PR-8894
+
+## Improvements and New Features
+
+- `.appup` files are now included in releases in order to make it possible to
+ create upgrade packages from an installed release.
+
+ Own Id: OTP-19398
+ Related Id(s): PR-8973
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of sasl-4.3
+>
+> erts-15.0, kernel-6.0, stdlib-4.0, tools-2.6.14
+
+# snmp-5.19
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- Add copyright notice to files that still had none.
+
+ Own Id: OTP-19572
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of snmp-5.19
+>
+> crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12, runtime_tools-1.8.14,
+> stdlib-5.0
+
+# ssh-5.3
+
+## Fixed Bugs and Malfunctions
+
+- The implementation of the ssh server-side supervision tree has been improved.
+
+ Own Id: OTP-19324
+ Related Id(s): GH-8223, PR-8968
+
+- SSH daemon accepts fun as tcpip_tunnel_in option. This provides more control
+ over TCP connection tunnel handle by server.
+
+ Own Id: OTP-19566
+ Related Id(s): PR-9571
+
+## Improvements and New Features
+
+- The `Erlang SSH daemon` now uses the same backend to handle multiline
+ functionality as the Erlang shell.
+
+ Own Id: OTP-19226
+ Related Id(s): PR-8805
+
+- CBC algorithms are not offered by default. See Configuring algorithms in SSH
+ if you wish to enable them.
+
+ Own Id: OTP-19420
+ Related Id(s): PR-9277
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Daemon can be configured (bannerfun option) to send banner message at the
+ beginning of user authentication.
+
+ Own Id: OTP-19535
+ Related Id(s): PR-9149
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- For interoperability reasons, SSH ignore message with no length specified is
+ treated as message with zero length specified - it will not cause decode
+ error.
+
+ Own Id: OTP-19586
+ Related Id(s): PR-9214
+
+- Documentation improvements.
+
+ Own Id: OTP-19596
+ Related Id(s): PR-9298
+
+> #### Full runtime dependencies of ssh-5.3
+>
+> crypto-5.0, erts-14.0, kernel-10.3, public_key-1.6.1, runtime_tools-1.15.1,
+> stdlib-5.0, stdlib-6.0
+
+# ssl-11.3
+
+## Improvements and New Features
+
+- Refactoring, minor optimizations and improved log printouts.
+
+ Own Id: OTP-19367
+ Related Id(s): PR-9019
+
+- supervisor:which_child/2 is now used to make start-up code for
+ TLS-connections simpler and more straight forward, and to increase stability
+ and maintainability of the ssl application.
+
+ Own Id: OTP-19406
+ Related Id(s): PR-9231
+
+- The data handling for tls-v1.3 has been optimized.
+
+ Own Id: OTP-19430
+ Related Id(s): PR-9305
+
+- Added experimental socket support.
+
+ Own Id: OTP-19463
+ Related Id(s): PR-9398
+
+- Improve code health by removing dead code.
+
+ Own Id: OTP-19531
+ Related Id(s): PR-9563
+
+- A test module for TLS distribution over `socket` has been implemented.
+
+ Own Id: OTP-19539
+ Related Id(s): PR-9511
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of ssl-11.3
+>
+> crypto-5.6, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.16.4,
+> runtime_tools-1.15.1, stdlib-7.0
+
+# stdlib-7.0
+
+## Fixed Bugs and Malfunctions
+
+- Shell help now orders the commands in alphabetical order.
+
+ Own Id: OTP-19161
+ Related Id(s): PR-8573
+
+- `proc_lib:stop/1,3` (and in extension gen_server:stop/3, gen_statem:stop/3
+ and so on) have been updated to not throw an error if the process to be
+ stopped exits with the same reason as given to proc_lib:stop/3.
+
+ Own Id: OTP-19233
+ Related Id(s): PR-8772
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- The size of an atom in the Erlang source code was limited to 255 bytes in
+ previous releases, meaning that an atom containing only emojis could contain
+ only 63 emojis.
+
+ While atoms are still only allowed to contain 255 characters, the number of
+ bytes is no longer limited.
+
+ External tools that parse the `AtU8` chunk of a BEAM file directly need to be
+ updated. Tools that use
+ `beam_lib:chunks(Beam, [atoms)`](beam_lib:chunks/2) to read the atom table
+ will continue to work.
+
+ Own Id: OTP-19285
+ Related Id(s): PR-8913
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- argparse:help/1 now accepts unicode:chardata/0.
+
+ Own Id: OTP-19303
+ Related Id(s): PR-8932
+
+- The literals chunk in BEAM is no longer compressed, resulting in slightly
+ smaller BEAM files when a BEAM file is stripped using
+ beam_lib:strip_files/1.
+
+ This is a potential incompatibility for tools that read and interpret the
+ contents of the literal chunk. One way to update such tools to work with the
+ new format is to retrieve the chunk using
+ `beam_lib:chunks(Beam, [literals)`](beam_lib:chunks/2).
+
+ Own Id: OTP-19323
+ Related Id(s): GH-8967, PR-8988
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- The previous digraph_utils:preorder/1 and digraph_utils:postorder/1 did
+ not start the traversal from root nodes. This fix makes both traversals only
+ start or restart from a root node in one of the components, or an arbitrary
+ node if no root node can be visited.
+
+ Own Id: OTP-19393
+ Related Id(s): PR-9171
+
+- Auto-completion in the shell is now significantly faster for function
+ parameters that uses complex custom types.
+
+ Own Id: OTP-19413
+ Related Id(s): PR-9271
+
+- Stringfying a non-latin1 atom will now produce a readable string instead of
+ encoding each character using `\x{...}` escape sequences. Example:
+
+ -define(S(T), ??T).
+
+ atom() ->
+ ?S('атом').
+
+ The `atom/0` function now returns `"'атом'"` instead of
+ `"'\\x{430}\\x{442}\\x{43E}\\x{43C}'"`.
+
+ Own Id: OTP-19421
+ Related Id(s): GH-9173, PR-9276
+
+- A few minor issues were corrected in `syntax_tools`, as well in the
+ `erl_anno` module.
+
+ Own Id: OTP-19422
+ Related Id(s): PR-9253
+
+- `m:dets` could print error messages to standard output when repairing DETS
+ files. This has been changed to send the messages to `logger`.
+
+ `ets:fun2ms` would print an error message to standard output as well as
+ returning an error tuple. The printing of the message has been removed.
+
+ Own Id: OTP-19427
+ Related Id(s): PR-9232, PR-9446
+
+- The functions for converting to and from the RFC1339 date and time format
+ would not properly handle fractional seconds for negative times.
+
+ Own Id: OTP-19441
+ Related Id(s): GH-9279, PR-9280
+
+- Replaced calls to deprecated `crypto:start()` with
+ `application:start(crypto)`.
+
+ Own Id: OTP-19485
+ Related Id(s): PR-8592
+
+- Corrected the spec of ets:update_element/4.
+
+ Own Id: OTP-19514
+ Related Id(s): PR-9504
+
+- Corrected the spec for ets:info/1.
+
+ Own Id: OTP-19515
+ Related Id(s): PR-9514
+
+- Details in the hibernation implementation and time-out handling has been
+ improved for `gen_statem`. In particular to avoid selective receive when
+ cancelling a time-out.
+
+ Own Id: OTP-19540
+ Related Id(s): PR-9579
+
+- Fix `zip` extraction to wrap invalid DOS timestamps to their correct value
+ instead of returning the actual value. Before this fix the timestamp returned
+ could have a second greater than 59. The bug has been present since Erlang/OTP
+ 27.1.
+
+ Own Id: OTP-19593
+ Related Id(s): GH-9536, PR-9537
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- Singleton type variables in an union type do not make sense from Dialyzer's
+ point of view. The following example is ill-typed:
+
+ -spec run_test(Opts) -> term()
+ when Opts :: {join_specs, Bool} | {test, Bool}.
+
+ This used to be reported as a warning. In OTP-28, this is an error
+
+ Own Id: OTP-19125
+ Related Id(s): PR-8556
+
+- By default, sets created by the `sets` module will now be represented as
+ maps.
+
+ Own Id: OTP-19127
+ Related Id(s): PR-8429
+
+- For various error types, the compiler now tries to suggest potential fixes by
+ adding "did you mean ...?" at the end of error messages.
+
+ When a function is used with wrong arity, the compiler will try to suggest a
+ defined function with the same name but a different arity. For example, given
+ the following module:
+
+ -module(typos).
+ -export([t/0]).
+ bar(A) -> A.
+ bar(A,A,A) -> A.
+ bar(A,A,A,A) -> A.
+ t() -> bar(0, 0).
+
+ The compiler will emit the following message:
+
+ typo.erl:6:12: function bar/2 undefined, did you mean bar/1,3,4?
+ % 6| t() -> bar(0, 0).
+ % | ^
+
+ For compiler errors that can easily be caused by typos, the compiler will try
+ to suggest what the correct variable or function name, could be. For example,
+ given the following module:
+
+ -module(typos).
+ -export([bar/2]).
+
+ bar(A0, B0) ->
+ A + B.
+
+ the compiler will emit the following error messages:
+
+ typos.erl:5:5: variable 'A' is unbound, did you mean 'A0'?
+ % 5| A + B.
+ % | ^
+
+ typos.erl:5:9: variable 'B' is unbound, did you mean 'B0'?
+ % 5| A + B.
+ % | ^
+
+ Error types that now suggest correct arities: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `bad_nowarn_bif_clash`, `undefined_function`.
+
+ Error types that now suggest correct names: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `undefined_on_load`, `undefined_function`,
+ `undefined_record`, `undefined_field`, `unbound_var`.
+
+ Using a function with wrong arity has higher precedence than having a typo in
+ the function name. If the compiler can find a defined function with the same
+ name but a different arity, it will not suggest a defined function with a
+ close-enough name, regardless of arity.
+
+ Own Id: OTP-19180
+ Related Id(s): PR-8699, PR-9094
+
+ *** HIGHLIGHT ***
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Related Id(s): PR-8926
+
+ *** HIGHLIGHT ***
+
+- Before restarting a child, a supervisor must check if the restart limit is
+ reached. This adds a penalty to the overall restart time, which should be kept
+ low. The algorithm has been optimized from 2\*O(n) to O(n) behavior.
+
+ Own Id: OTP-19204
+ Related Id(s): PR-8261
+
+- Added the possibility to configure shell docs column width through the stdlib
+ parameter `shell_docs_columns`.
+
+ Own Id: OTP-19224
+ Related Id(s): PR-8651
+
+- The io:setopts/2 function now accepts the `line_history` option for more
+ explicit handling of when to save shell history.
+
+ Own Id: OTP-19230
+ Related Id(s): PR-8792
+
+- The shell now prints a help message explaining how to interrupt a running
+ command when stuck executing a command for longer than 5 seconds.
+
+ Own Id: OTP-19231
+ Related Id(s): PR-8793
+
+- Binaries can now be used as input to calendar:rfc3339_to_system_time/2, and
+ produced as output of calendar:system_time_to_rfc3339/2.
+
+ Own Id: OTP-19250
+ Related Id(s): PR-8812
+
+- The `erl -noshell` mode has been updated to have two sub modes called `raw`
+ and `cooked`, where `cooked` is the old default behaviour and `raw` can be
+ used to bypass the line-editing support of the native terminal. Using `raw`
+ mode it is possible to read keystrokes as they happen without the user having
+ to press Enter. Also, the `raw` mode does not echo the typed characters to
+ stdout. An example of how to create a tic-tac-toe game using this mechanism is
+ included in the documentation.
+
+ Own Id: OTP-19314
+ Related Id(s): GH-8037, PR-8962
+
+ *** HIGHLIGHT ***
+
+- Added io:get_password/0 that can read passwords from stdin when in "raw"
+ `-noshell` mode.
+
+ Own Id: OTP-19315
+ Related Id(s): PR-8962, PR-9006
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Related Id(s): PR-8625
+
+ *** HIGHLIGHT ***
+
+- New options for suppressing behaviour warnings have been added:
+
+ - `nowarn_conflicting_behaviours`
+ - `nowarn_undefined_behaviour_func`
+ - `nowarn_undefined_behaviour`
+ - `nowarn_undefined_behaviour_callbacks`
+ - `nowarn_ill_defined_behaviour_callbacks`
+ - `nowarn_ill_defined_optional_callbacks`
+
+ Own Id: OTP-19334
+ Related Id(s): GH-8985, PR-9020
+
+- The `join(Binaries, Separator)` function that joins a list of binaries has
+ been added to the `binary` module.
+
+ Own Id: OTP-19337
+ Related Id(s): GH-8099, PR-8100
+
+ *** HIGHLIGHT ***
+
+- The supervisor:which_child/2 function has been added to facilitate getting
+ the pid of a sibling process; that is a process under same supervisor as the
+ process that calls to call the new function.
+
+ Own Id: OTP-19345
+ Related Id(s): PR-8976
+
+- The function erl_anno:set_end_location/2 for setting the end location of a
+ token has been added.
+
+ Own Id: OTP-19354
+ Related Id(s): PR-8966
+
+- Added a warning for calling non-exported functions with the remote function
+ call syntax from the same module, and likewise for the remote fun syntax.
+
+ Own Id: OTP-19371
+ Related Id(s): GH-9092, PR-9095
+
+- The `warn_deprecated_catch` option enables warnings for use of old-style catch
+ expressions on the form `catch Expr` instead of the modern
+ `try ... catch ... end`. To prevent new uses of uses of old catches to be
+ added, this compiler option can be enabled on the project level and
+ `-compile(nowarn_deprecated_catch).` added to individual files that still
+ contain old catches.
+
+ Own Id: OTP-19425
+ Related Id(s): PR-9154
+
+- Module `re` has been updated to use PCRE2, which is mostly backward
+ compatible with PCRE.
+
+ The most noticeable incompatibilities are
+
+ - The default character encoding is pure ASCII and not Latin1. Unicode support
+ is still available with options `unicode` and `ucp`.
+ - Options `bsr_anycrlf`, `bsr_unicode` and `{newline,_}` are only set when a
+ regex is compiled and cannot be changed at matching for precompiled regex.
+
+ Own Id: OTP-19431
+ Related Id(s): PR-9299, PR-9610
+
+ *** HIGHLIGHT ***
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Defining a fun in terms of an imported function is not allowed. Before this
+ release, the compiler would not catch this kind of error if the name of the
+ imported function happened to be a BIF. Consider this example:
+
+ -module(fun_example).
+ -export([foo/0, bar/0]).
+ -import(m, [max/2, not_a_bif/0]).
+
+ foo() ->
+ fun max/2.
+
+ bar() ->
+ fun not_a_bif/0.
+
+ The compiler in Erlang/OTP 27 would generate the following messages:
+
+ fun_example.erl:9:5: function not_a_bif/0 undefined
+ % 9| fun not_a_bif/0.
+ % | ^
+
+ fun_example.erl:3:2: Warning: import directive overrides auto-imported BIF max/2 --
+ use "-compile({no_auto_import,[max/2]})." to resolve name clash
+ % 3| -import(m, [max/2, not_a_bif/0]).
+ % | ^
+
+ That is, there would be a (cryptic) error for `fun not_a_bif/0`, but only a
+ warning for `fun max/2`.
+
+ When compiling with this release, both attempts to create a fun will result in
+ error messages (as well as a warning):
+
+ fun_example.erl:6:5: creating a fun from imported name max/2 is not allowed
+ % 6| fun max/2.
+ % | ^
+
+ fun_example.erl:9:5: creating a fun from imported name not_a_bif/0 is not allowed
+ % 9| fun not_a_bif/0.
+ % | ^
+
+ fun_example.erl:3:2: Warning: import directive overrides auto-imported BIF max/2 --
+ use "-compile({no_auto_import,[max/2]})." to resolve name clash
+ % 3| -import(m, [max/2, not_a_bif/0]).
+ % | ^
+
+ Also, attempting to call a local function having the same name as
+ auto-imported BIF would result in an error if the BIF was added to Erlang/OTP
+ before R14, and a warning for newer BIFs. This has been changed to always emit
+ a warning. For example:
+
+ -module(bif_example).
+ -export([bar/1]).
+
+ bar(B) ->
+ is_boolean(B).
+
+ is_boolean(B) ->
+ B =:= true orelse B =:= false.
+
+ will now result in the following warning instead of an error:
+
+ if_example.erl:5:5: Warning: ambiguous call of overridden auto-imported BIF is_boolean/1 --
+ use erlang:is_boolean/1 or "-compile({no_auto_import,[is_boolean/1]})." to resolve name clash
+ % 5| is_boolean(B).
+ % | ^
+
+ Own Id: OTP-19432
+ Related Id(s): PR-9246
+
+- It is now possible to use any base for floating point numbers as described in
+ EEP 75: Based Floating Point Literals.
+
+ Computers represent floating point numbers in binary, but such numbers are
+ typically printed using base ten, for example 0.314159265e1. To maintain exact
+ bit-level precision when converting numbers to and from text, it is better to
+ use a base that matches the internally used base, such as 16 for a compact but
+ still exact representation, or 2 for visualizing or writing down the exact
+ internal format. One particular case where such exact representations are
+ useful is in code generating tools.
+
+ Examples:
+
+ > 2#0.111.
+ 0.875
+ > 16#fefe.fefe#e16.
+ 1.2041849337671418e24
+
+ Own Id: OTP-19452
+ Related Id(s): PR-9106
+
+ *** HIGHLIGHT ***
+
+- The callback function `handle_continue/2` in `gen_server` callback modules is
+ now cached like the others, thanks to code cleanup and optimization of the
+ internal behaviour loop.
+
+ This should only improve performance, not affect functionality.
+
+ Own Id: OTP-19474
+ Related Id(s): PR-9333
+
+- Encoding done by the `json` module has been optimized.
+
+ Own Id: OTP-19476
+ Related Id(s): PR-9251
+
+- There is a new `zstd` module that does Zstandard compression.
+
+ Own Id: OTP-19477
+ Related Id(s): PR-9316
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402
+
+- Functions of a module can now be grouped in the shell code completion by using
+ the _group_ key in the _-doc_ attribute e.g. ``` -doc(#{group=><<"Public
+ API">>). fetch()->...
+
+
+ Functions, callbacks and types in the module reference documentation of OTP is now grouped using this feature.
+
+ Own Id: OTP-19483
+ Related Id(s): [PR-9408]
+
+
+- Added calendar:universal_time_to_system_time/1,2 and
+ calendar:local_time_to_system_time/1,2
+
+ Own Id: OTP-19505
+ Related Id(s): PR-9445
+
+- Improve error messages for json:decode/1.
+
+ Own Id: OTP-19508
+ Related Id(s): PR-9484
+
+- ETS `heir` can be set without getting an `ETS-TRANSFER` message. Useful when
+ the heir is a supervisor process that cannot handle custom messages.
+
+ Own Id: OTP-19512
+ Related Id(s): PR-7970
+
+- Added support for the Unicode 16 standard.
+
+ Own Id: OTP-19516
+ Related Id(s): PR-9141, PR-9518
+
+- When documenting a function or type that needs to deal with durations, usually
+ we can document it as "time in milliseconds". Since the `timer` family of
+ functions (`hms`, `hours`, `seconds`, ...) all return time in milliseconds, it
+ is useful to be able to use this type in type specifications.
+
+ Own Id: OTP-19526
+ Related Id(s): PR-9515
+
+- A new event time-out has been implemented in `gen_server`, that behaves more
+ like the one in `gen_statem`.
+
+ See the type gen_server:action/0 for `{timeout|hibernate,...}`, and also
+ related functions.
+
+ Own Id: OTP-19537
+ Related Id(s): PR-9287, PR-9615, PR-9621
+
+- Line numbers used to be reported in the following way:
+
+ 1> lists:last([]).
+ ** exception error: no function clause matching lists:last([]) (lists.erl, line 389)
+
+ Starting from Erlang/OTP 28, line numbers are now reported in the following
+ way:
+
+ 1> lists:last([]).
+ ** exception error: no function clause matching lists:last([]) (lists.erl:389)
+
+ Own Id: OTP-19538
+ Related Id(s): PR-9468
+
+ *** HIGHLIGHT ***
+
+- Upgrade pcre2 to 10.45
+
+ Own Id: OTP-19541
+ Related Id(s): PR-9582
+
+- Added functions that produce utf-8 binaries instead of iolists. New functions
+ are: io_lib:bformat/2, io_lib:bformat/3, io_lib:bfwrite/2,
+ io_lib:bfwrite/3, io_lib:bwrite/2 and io_lib:bwrite_string/3.
+
+ Own Id: OTP-19556
+ Related Id(s): PR-9772
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- A list of PCRE2 incompatibilities is documented in a user's guide for stdlib.
+
+ Own Id: OTP-19578
+ Related Id(s): PR-9705
+
+- Change automatic hibernation of static supervisors so that they will hibernate
+ after being idle for 1 second instead of only after starting, dynamic
+ supervisors (simple_one_for_one) will not be hibernated at all. An option to
+ the supervisor is added to make it configurable for the application. This
+ option defaults to 1 second for static supervisors and to infinity for the
+ simple_one_for_one supervisors.
+
+ Own Id: OTP-19597
+ Related Id(s): PR-9680
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+> #### Full runtime dependencies of stdlib-7.0
+>
+> compiler-5.0, crypto-4.5, erts-16.0, kernel-10.0, sasl-3.0, syntax_tools-3.2.1
+
+# syntax_tools-4.0
+
+## Fixed Bugs and Malfunctions
+
+- A few minor issues were corrected in `syntax_tools`, as well in the
+ `erl_anno` module.
+
+ Own Id: OTP-19422
+ Related Id(s): PR-9253
+
+## Improvements and New Features
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Related Id(s): PR-8926
+
+ *** HIGHLIGHT ***
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Related Id(s): PR-8625
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of syntax_tools-4.0
+>
+> compiler-9.0, erts-16.0, kernel-10.3, stdlib-7.0
+
+# tftp-1.2.3
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of tftp-1.2.3
+>
+> erts-6.0, kernel-6.0, stdlib-5.0
+
+# tools-4.1.2
+
+## Fixed Bugs and Malfunctions
+
+- A crash has been eliminated in tprof:collect/0 when unloading a module while
+ collecting traces.
+
+ Own Id: OTP-19135
+ Related Id(s): GH-8483, PR-8547
+
+- Improved the `indent-region` Emacs command, which could indent badly when
+ inside multiline string.
+
+ Own Id: OTP-19396
+ Related Id(s): PR-9186
+
+- eprof:start_profiling/3 can now return information about which process it
+ failed to trace.
+
+ Own Id: OTP-19419
+ Related Id(s): PR-9219
+
+- Fixed a race condition when processes cause the Cover server to be started at
+ the same time.
+
+ Own Id: OTP-19517
+ Related Id(s): PR-9124
+
+- Fix bug in `tprof` where the session name could not be set.
+
+ Own Id: OTP-19580
+ Related Id(s): PR-9648
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of tools-4.1.2
+>
+> compiler-8.5, erts-15.0, erts-15.0, kernel-10.0, runtime_tools-2.1, stdlib-6.0
+
+# wx-2.5
+
+## Improvements and New Features
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of wx-2.5
+>
+> erts-12.0, kernel-8.0, stdlib-5.0
+
+# xmerl-2.1.3
+
+## Fixed Bugs and Malfunctions
+
+- With this change all public functions in xmerl have specs.
+
+ Own Id: OTP-19534
+ Related Id(s): PR-9327
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of xmerl-2.1.3
+>
+> erts-6.0, kernel-8.4, stdlib-2.5
+
+# Thanks to
+
+Adam Wight, Aleksander Lisiecki, Alexandre Rodrigues, Anders Ågren Thuné, Andrea
+Leopardi, Ariel Otilibili, Benedikt Reinartz, Benjamin Philip, Brujo Benavides,
+Chris Freeze, Christophe De Troyer, Cocoa, Dairon Medina Caro, Daniel Gorin,
+Dániel Szoboszlay, dependabotbot, Dmitri Vereshchagin, Dominic Letz, Douglas
+Vought, Egor Ignatov, Eksperimental, Frank Hunleth, Freddie Lamble, Fredrik
+Frantzen, Frej Drejhammar, Gary Rennie, Hichem Fantar, Ilya Klyuchnikov, iri,
+Isabell H, Jan Uhlig, Jean-Louis Huynen, Jean-Sébastien Pédron, João Henrique
+Ferreira de Freitas, Johannes Christ, Jonas Bernoulli, Jonatan Kłosko, José
+Valim, Juan Barrios, Julian Doherty, Keyhan Jannat Khah ☕, Kirill A. Korinsky,
+lucioleKi, Lukasz Samson, Maria Scott, Mario Idival, Mario Uher, Marko Mindek,
+Martin Davidsson, Matwey V. Kornilov, Maxim Fedorov, Michael Davis, Michael
+Neumann, Nelson Vides, Nicholas Moen, Onno Vos, Paul Guyot, preciz, Richard
+Carlsson, Roberto Aloi, Robin Morisset, Roeland van Batenburg, ruslandoga, Ryan
+Kirkman, S0AndS0, sabiwara, Sam Weaver, Sergei Shuvatov, siiky, Simon Cornish,
+Stavros Aronis, Stefan Grundmann, Steffen Deusch, Tobias Pfeiffer, Tomer, Vadim
+Yanitskiy, Vance Shipley, William Fank Thomé, williamthome, William Yang, Wojtek
+Mach, yagogarea, Yoshiyuki Kurauchi
+
diff --git a/release-notes/OTP-28.0.1.README.txt b/release-notes/OTP-28.0.1.README.txt
new file mode 100644
index 0000000..7bd2ef0
--- /dev/null
+++ b/release-notes/OTP-28.0.1.README.txt
@@ -0,0 +1,231 @@
+Patch Package: OTP 28.0.1
+Git Tag: OTP-28.0.1
+Date: 2025-06-16
+Trouble Report Id: OTP-19634, OTP-19635, OTP-19637, OTP-19638,
+ OTP-19641, OTP-19644, OTP-19645, OTP-19650,
+ OTP-19653, OTP-19658, OTP-19662, OTP-19665,
+ OTP-19675, OTP-19676
+Seq num: CVE-2025-4748, ERIERL-1225, ERIERL-1235,
+ GH-6463, GH-9102, GH-9841, GH-9858, GH-9863,
+ GH-9872, PR-9103, PR-9691, PR-9838, PR-9846,
+ PR-9849, PR-9859, PR-9861, PR-9870, PR-9878,
+ PR-9880, PR-9892, PR-9905, PR-9926, PR-9941
+System: OTP
+Release: 28
+Application: asn1-5.4.1, debugger-6.0.1, eldap-1.2.16,
+ erts-16.0.1, kernel-10.3.1,
+ public_key-1.18.1, ssh-5.3.1, ssl-11.3.1,
+ stdlib-7.0.1, xmerl-2.1.5
+Predecessor: OTP 28.0
+
+Check out the git tag OTP-28.0.1, and build a full OTP system including
+documentation. Apply one or more applications from this build as patches to your
+installation using the 'otp_patch_apply' tool. For information on install
+requirements, see descriptions for each application version below.
+
+# asn1-5.4.1
+
+The asn1-5.4.1 application can be applied independently of other applications on
+a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- The ASN.1 compiler could generate code that would cause Dialyzer with the
+ `unmatched_returns` option to emit warnings.
+
+ Own Id: OTP-19638
+ Related Id(s): GH-9841, PR-9846
+
+> #### Full runtime dependencies of asn1-5.4.1
+>
+> erts-14.0, kernel-9.0, stdlib-5.0
+
+# debugger-6.0.1
+
+The debugger-6.0.1 application can be applied independently of other
+applications on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Restore deleted icon so that debugger does not crash on startup.
+
+ Own Id: OTP-19641
+ Related Id(s): GH-9858, PR-9861
+
+> #### Full runtime dependencies of debugger-6.0.1
+>
+> compiler-8.0, erts-15.0, kernel-10.0, stdlib-7.0, wx-2.0
+
+# eldap-1.2.16
+
+The eldap-1.2.16 application can be applied independently of other applications
+on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- With this change eldap's 'not' function will have specs fixed.
+
+ Own Id: OTP-19658
+ Related Id(s): PR-9859
+
+> #### Full runtime dependencies of eldap-1.2.16
+>
+> asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-3.4
+
+# erts-16.0.1
+
+The erts-16.0.1 application can be applied independently of other applications
+on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fix Erlang to not crash when io:standard_error/0 is a terminal but
+ io:standard_io/0 is not. This bug has existed since Erlang/OTP 28.0 and only
+ effects Windows.
+
+ Own Id: OTP-19650
+ Related Id(s): GH-9872, PR-9878
+
+- In a debug build, the BIFs for the native debugger could cause a lock order
+ violation diagnostic from the lock checker.
+
+ Own Id: OTP-19665
+ Related Id(s): PR-9926
+
+- When building ERTS make sure correct `pcre2.h` file is included even if CFLAGS
+ contains extra include paths.
+
+ Own Id: OTP-19675
+ Related Id(s): PR-9892
+
+> #### Full runtime dependencies of erts-16.0.1
+>
+> kernel-9.0, sasl-3.3, stdlib-4.1
+
+# kernel-10.3.1
+
+The kernel-10.3.1 application can be applied independently of other applications
+on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fix bug where calling io:setopts/1 in a shell without the `line_history`
+ option would always disable `line_history`. This bug was introduced in
+ Erlang/OTP 28.0.
+
+ Own Id: OTP-19645
+ Related Id(s): GH-9863, PR-9870
+
+> #### Full runtime dependencies of kernel-10.3.1
+>
+> crypto-5.0, erts-15.2.5, sasl-3.0, stdlib-6.0
+
+# public_key-1.18.1
+
+The public_key-1.18.1 application can be applied independently of other
+applications on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Add back some ASN-1 macros and definitions that should be included in API.
+
+ Own Id: OTP-19644
+ Related Id(s): PR-9880
+
+> #### Full runtime dependencies of public_key-1.18.1
+>
+> asn1-5.0, crypto-5.0, erts-13.0, kernel-8.0, stdlib-4.0
+
+# ssh-5.3.1
+
+The ssh-5.3.1 application can be applied independently of other applications on
+a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Various channel closing robustness improvements. Avoid crashes when channel
+ handling process closes channel and immediately exits. Avoid breaking the
+ protocol by sending duplicated channel-close messages. Cleanup channels which
+ timeout during closing procedure.
+
+ Own Id: OTP-19634
+ Related Id(s): GH-9102, PR-9103
+
+- Improved interoperability with clients acting as Paramiko.
+
+ Own Id: OTP-19637
+ Related Id(s): GH-6463, PR-9838
+
+> #### Full runtime dependencies of ssh-5.3.1
+>
+> crypto-5.0, erts-14.0, kernel-10.3, public_key-1.6.1, runtime_tools-1.15.1,
+> stdlib-5.0, stdlib-6.0
+
+# ssl-11.3.1
+
+The ssl-11.3.1 application can be applied independently of other applications on
+a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- hs_keylog callback properly handle alert in initial states, where encryption
+ is not yet used. Also add keylog callback invocation for corner-case where
+ server alert is encrypted with application secrets as client is already in
+ connection state.
+
+ Own Id: OTP-19635
+ Related Id(s): ERIERL-1235, PR-9849
+
+## Improvements and New Features
+
+- The documentation for SSL option `verify_fun` has been improved.
+
+ Own Id: OTP-19676
+ Related Id(s): PR-9691
+
+> #### Full runtime dependencies of ssl-11.3.1
+>
+> crypto-5.6, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.16.4,
+> runtime_tools-1.15.1, stdlib-7.0
+
+# stdlib-7.0.1
+
+The stdlib-7.0.1 application can be applied independently of other applications
+on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Properly strip the leading `/` and drive letter from filepaths when zipping
+ and unzipping archives.
+
+ Thanks to Wander Nauta for finding and responsibly disclosing this
+ vulnerability to the Erlang/OTP project.
+
+ Own Id: OTP-19653
+ Related Id(s): PR-9941, CVE-2025-4748
+
+> #### Full runtime dependencies of stdlib-7.0.1
+>
+> compiler-5.0, crypto-4.5, erts-16.0, kernel-10.0, sasl-3.0, syntax_tools-3.2.1
+
+# xmerl-2.1.5
+
+The xmerl-2.1.5 application can be applied independently of other applications
+on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- The type specs of xmerl_scan:file/2 and xmerl_scan:string/2 has been
+ updated to return `dynamic/0`. Due to hook functions they can return any user
+ defined term.
+
+ Own Id: OTP-19662
+ Related Id(s): ERIERL-1225, PR-9905
+
+> #### Full runtime dependencies of xmerl-2.1.5
+>
+> erts-6.0, kernel-8.4, stdlib-2.5
+
+# Thanks to
+
+Dan Janowski, Ilya Averyanov, Mikael Pettersson, Yaroslav Maslennikov \ No newline at end of file
diff --git a/release-notes/OTP-28.0.2.README.txt b/release-notes/OTP-28.0.2.README.txt
new file mode 100644
index 0000000..ba4152b
--- /dev/null
+++ b/release-notes/OTP-28.0.2.README.txt
@@ -0,0 +1,295 @@
+Patch Package: OTP 28.0.2
+Git Tag: OTP-28.0.2
+Date: 2025-07-17
+Trouble Report Id: OTP-19661, OTP-19670, OTP-19673, OTP-19674,
+ OTP-19678, OTP-19680, OTP-19682, OTP-19683,
+ OTP-19684, OTP-19687, OTP-19690, OTP-19691,
+ OTP-19697, OTP-19699, OTP-19700, OTP-19702,
+ OTP-19703, OTP-19707, OTP-19710, OTP-19711
+Seq num: ERIERL-1240, ERIERL-1241, ERIERL-1242,
+ GH-10001, GH-10007, GH-10028, GH-10047,
+ GH-9632, GH-9655, GH-9858, GH-9884, GH-9992,
+ PR-10003, PR-10008, PR-10016, PR-10023,
+ PR-10024, PR-10029, PR-10031, PR-10035,
+ PR-10036, PR-10039, PR-10048, PR-9887,
+ PR-9930, PR-9952, PR-9953, PR-9955, PR-9994,
+ PR-9996
+System: OTP
+Release: 28
+Application: compiler-9.0.1, debugger-6.0.2, erts-16.0.2,
+ kernel-10.3.2, public_key-1.18.2, ssh-5.3.2,
+ ssl-11.3.2, stdlib-7.0.2, wx-2.5.1
+Predecessor: OTP 28.0.1
+
+Check out the git tag OTP-28.0.2, and build a full OTP system including
+documentation. Apply one or more applications from this build as patches to your
+installation using the 'otp_patch_apply' tool. For information on install
+requirements, see descriptions for each application version below.
+
+# OTP-28.0.2
+
+## Fixed Bugs and Malfunctions
+
+- Fix `otp_patch_apply` to work with Erlang/OTP 28 and later.
+
+ Own Id: OTP-19682
+ Related Id(s): PR-9953
+
+# compiler-9.0.1
+
+The compiler-9.0.1 application can be applied independently of other
+applications on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fixed a bug that could cause empty bitstring matches to always succeed, even
+ when they should not.
+
+ Own Id: OTP-19711
+ Related Id(s): GH-10047, PR-10048
+
+> #### Full runtime dependencies of compiler-9.0.1
+>
+> crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0
+
+# debugger-6.0.2
+
+The debugger-6.0.2 application can be applied independently of other
+applications on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fixed debugger priv dir, which was removed and caused crashes when the icons
+ could not be found.
+
+ Own Id: OTP-19687
+ Related Id(s): GH-9858, PR-9994
+
+> #### Full runtime dependencies of debugger-6.0.2
+>
+> compiler-8.0, erts-15.0, kernel-10.0, stdlib-7.0, wx-2.0
+
+# erts-16.0.2
+
+The erts-16.0.2 application can be applied independently of other applications
+on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- prim_net nif used incorrect encoding for family resulting in non-functional
+ address selection.
+
+ Own Id: OTP-19674
+
+- Fix windows uninstall command.
+
+ Own Id: OTP-19683
+ Related Id(s): GH-9884, GH-9992, PR-9887
+
+- With this change erlang will start if it receives short (ms-dos compatible)
+ path to executable.
+
+ Own Id: OTP-19690
+ Related Id(s): PR-9996
+
+## Improvements and New Features
+
+- The maximum amount of connections for `epmd` on Windows platforms has been
+ increased from 64 to 1024.
+
+ Own Id: OTP-19710
+ Related Id(s): PR-10039
+
+> #### Full runtime dependencies of erts-16.0.2
+>
+> kernel-9.0, sasl-3.3, stdlib-4.1
+
+# kernel-10.3.2
+
+The kernel-10.3.2 application can be applied independently of other applications
+on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- socket:sendv/3 with 'nowait' sometimes return 'completion' without
+ 'CompletionInfo' (Windows only).
+
+ Own Id: OTP-19661
+
+- prim_net nif used incorrect encoding for family resulting in non-functional
+ address selection.
+
+ Own Id: OTP-19674
+
+- socket:accept can return unexpected 'select_sent'.
+
+ Own Id: OTP-19684
+ Related Id(s): ERIERL-1242
+
+- `net_kernel` could be blocked for a very long time when selecting distribution
+ module for a connection if the DNS service was slow. This prevented any new
+ connections to be set up during that time.
+
+ Own Id: OTP-19702
+ Related Id(s): ERIERL-1241, PR-10029
+
+## Improvements and New Features
+
+- Improved documentation of CompletionStatus for asynchronous (nowait) socket
+ operations.
+
+ Own Id: OTP-19670
+ Related Id(s): PR-9930
+
+> #### Full runtime dependencies of kernel-10.3.2
+>
+> crypto-5.0, erts-15.2.5, sasl-3.0, stdlib-6.0
+
+# public_key-1.18.2
+
+The public_key-1.18.2 application can be applied independently of other
+applications on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Adjustments in include file to retain compatibility with supported ASN-1
+ standards, although not all record and macros are explicitly documented.
+
+ Own Id: OTP-19678
+ Related Id(s): GH-10001, PR-10008, PR-9955
+
+- Handle certificates that are signed with RSASSA-PSS but the PSS params are
+ specified in the 'SignatureAlgorithm' of the signed cert and not in the
+ signer's 'SubjectPublicKeyInfo'.
+
+ Own Id: OTP-19699
+ Related Id(s): GH-9632, PR-10023
+
+- Add modern ASN-1 specs to be able to retain support for ExtensionRequest from
+ legacy PKCS-9 spec.
+
+ Own Id: OTP-19703
+ Related Id(s): GH-10028, PR-10031
+
+> #### Full runtime dependencies of public_key-1.18.2
+>
+> asn1-5.0, crypto-5.0, erts-13.0, kernel-8.0, stdlib-4.0
+
+# ssh-5.3.2
+
+The ssh-5.3.2 application can be applied independently of other applications on
+a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Fix file handle id generation.
+
+ Own Id: OTP-19691
+ Related Id(s): PR-10003
+
+- Fixes a badmatch error, when SFTP operation cannot be processed due to channel
+ closed in parallel.
+
+ Own Id: OTP-19707
+ Related Id(s): GH-9655, PR-10035, PR-10036
+
+> #### Full runtime dependencies of ssh-5.3.2
+>
+> crypto-5.0, erts-14.0, kernel-10.3, public_key-1.6.1, runtime_tools-1.15.1,
+> stdlib-5.0, stdlib-6.0
+
+# ssl-11.3.2
+
+The ssl-11.3.2 application can be applied independently of other applications on
+a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Improve error message for bad arguments to underlying connect.
+
+ Own Id: OTP-19697
+ Related Id(s): GH-10007, PR-10016
+
+> #### Full runtime dependencies of ssl-11.3.2
+>
+> crypto-5.6, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.16.4,
+> runtime_tools-1.15.1, stdlib-7.0
+
+# stdlib-7.0.2
+
+The stdlib-7.0.2 application can be applied independently of other applications
+on a full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- A set of small bugs in sort stability for \`lists:sort/1\` and
+ \`lists:keysort/1\` has been fixed. The bug happened for only some, seemingly
+ random, element sequences. Most sorts were stable.
+
+ Sort stability for \`lists:sort/1\` is only possible to observe when sorting
+ lists with floating point and integer numbers of the same value.
+
+ For \`lists:keysort/1\` the list had to start with two tuples where the keys
+ or the whole tuples compared equal.
+
+ Own Id: OTP-19673
+ Related Id(s): ERIERL-1240
+
+- Fixed bug in io_lib:bformat/2 which crashed if format string contained
+ unicode characters.
+
+ Own Id: OTP-19680
+ Related Id(s): PR-9952
+
+> #### Full runtime dependencies of stdlib-7.0.2
+>
+> compiler-5.0, crypto-4.5, erts-16.0, kernel-10.0, sasl-3.0, syntax_tools-3.2.1
+
+# wx-2.5.1
+
+The wx-2.5.1 application can be applied independently of other applications on a
+full OTP 28 installation.
+
+## Fixed Bugs and Malfunctions
+
+- Don't include `gl.beam` in pre-built source tar file, since it depends on
+ local configure results.
+
+ Own Id: OTP-19700
+ Related Id(s): PR-10024
+
+> #### Full runtime dependencies of wx-2.5.1
+>
+> erts-12.0, kernel-8.0, stdlib-5.0
+
+# Thanks to
+
+Dmytro Lytovchenko
+
+GH-10001: https://github.com/erlang/otp/issues/10001 GH-10007:
+https://github.com/erlang/otp/issues/10007 GH-10028:
+https://github.com/erlang/otp/issues/10028 GH-10047:
+https://github.com/erlang/otp/issues/10047 GH-9632:
+https://github.com/erlang/otp/issues/9632 GH-9655:
+https://github.com/erlang/otp/issues/9655 GH-9858:
+https://github.com/erlang/otp/issues/9858 GH-9884:
+https://github.com/erlang/otp/issues/9884 GH-9992:
+https://github.com/erlang/otp/issues/9992 PR-10003:
+https://github.com/erlang/otp/pull/10003 PR-10008:
+https://github.com/erlang/otp/pull/10008 PR-10016:
+https://github.com/erlang/otp/pull/10016 PR-10023:
+https://github.com/erlang/otp/pull/10023 PR-10024:
+https://github.com/erlang/otp/pull/10024 PR-10029:
+https://github.com/erlang/otp/pull/10029 PR-10031:
+https://github.com/erlang/otp/pull/10031 PR-10035:
+https://github.com/erlang/otp/pull/10035 PR-10036:
+https://github.com/erlang/otp/pull/10036 PR-10039:
+https://github.com/erlang/otp/pull/10039 PR-10048:
+https://github.com/erlang/otp/pull/10048 PR-9887:
+https://github.com/erlang/otp/pull/9887 PR-9930:
+https://github.com/erlang/otp/pull/9930 PR-9952:
+https://github.com/erlang/otp/pull/9952 PR-9953:
+https://github.com/erlang/otp/pull/9953 PR-9955:
+https://github.com/erlang/otp/pull/9955 PR-9994:
+https://github.com/erlang/otp/pull/9994 PR-9996:
+https://github.com/erlang/otp/pull/9996
diff --git a/release-notes/OTP-28.0.README.txt b/release-notes/OTP-28.0.README.txt
new file mode 100644
index 0000000..9370879
--- /dev/null
+++ b/release-notes/OTP-28.0.README.txt
@@ -0,0 +1,3730 @@
+Inital Release: OTP 28.0
+Git Tag: OTP-28.0
+Date: 2025-05-21
+Trouble Report Id: OTP-16607, OTP-19096, OTP-19115, OTP-19125,
+ OTP-19127, OTP-19135, OTP-19141, OTP-19144,
+ OTP-19155, OTP-19156, OTP-19159, OTP-19161,
+ OTP-19180, OTP-19184, OTP-19194, OTP-19198,
+ OTP-19204, OTP-19207, OTP-19224, OTP-19226,
+ OTP-19228, OTP-19230, OTP-19231, OTP-19233,
+ OTP-19250, OTP-19259, OTP-19262, OTP-19263,
+ OTP-19271, OTP-19278, OTP-19279, OTP-19285,
+ OTP-19287, OTP-19290, OTP-19295, OTP-19296,
+ OTP-19297, OTP-19303, OTP-19306, OTP-19308,
+ OTP-19313, OTP-19314, OTP-19315, OTP-19317,
+ OTP-19323, OTP-19324, OTP-19334, OTP-19337,
+ OTP-19339, OTP-19343, OTP-19345, OTP-19354,
+ OTP-19355, OTP-19364, OTP-19367, OTP-19369,
+ OTP-19371, OTP-19376, OTP-19386, OTP-19393,
+ OTP-19394, OTP-19396, OTP-19398, OTP-19401,
+ OTP-19403, OTP-19404, OTP-19406, OTP-19413,
+ OTP-19414, OTP-19419, OTP-19420, OTP-19421,
+ OTP-19422, OTP-19425, OTP-19426, OTP-19427,
+ OTP-19430, OTP-19431, OTP-19432, OTP-19441,
+ OTP-19450, OTP-19451, OTP-19452, OTP-19453,
+ OTP-19454, OTP-19456, OTP-19460, OTP-19463,
+ OTP-19465, OTP-19472, OTP-19473, OTP-19474,
+ OTP-19476, OTP-19477, OTP-19478, OTP-19479,
+ OTP-19480, OTP-19481, OTP-19483, OTP-19484,
+ OTP-19485, OTP-19487, OTP-19488, OTP-19492,
+ OTP-19500, OTP-19502, OTP-19503, OTP-19505,
+ OTP-19507, OTP-19508, OTP-19509, OTP-19510,
+ OTP-19511, OTP-19512, OTP-19513, OTP-19514,
+ OTP-19515, OTP-19516, OTP-19517, OTP-19518,
+ OTP-19519, OTP-19520, OTP-19521, OTP-19522,
+ OTP-19523, OTP-19524, OTP-19526, OTP-19528,
+ OTP-19531, OTP-19532, OTP-19533, OTP-19534,
+ OTP-19535, OTP-19536, OTP-19537, OTP-19538,
+ OTP-19539, OTP-19540, OTP-19541, OTP-19544,
+ OTP-19551, OTP-19553, OTP-19554, OTP-19555,
+ OTP-19556, OTP-19566, OTP-19570, OTP-19572,
+ OTP-19573, OTP-19574, OTP-19575, OTP-19576,
+ OTP-19578, OTP-19580, OTP-19583, OTP-19584,
+ OTP-19586, OTP-19588, OTP-19589, OTP-19590,
+ OTP-19591, OTP-19593, OTP-19594, OTP-19596,
+ OTP-19597, OTP-19598, OTP-19601, OTP-19603,
+ OTP-19604, OTP-19607, OTP-19609, OTP-19612,
+ OTP-19613, OTP-19614, OTP-19615, OTP-19616,
+ OTP-19617, OTP-19618, OTP-19620, OTP-19621,
+ OTP-19624, OTP-19627, OTP-19628, OTP-19629,
+ OTP-19630
+Seq num: GH-7819, GH-8037, GH-8099, GH-8113, GH-8223,
+ GH-8483, GH-8558, GH-8822, GH-8842, GH-8967,
+ GH-8985, GH-9092, GH-9113, GH-9173, GH-9255,
+ GH-9279, GH-9366, GH-9413, GH-9436, GH-9438,
+ GH-9470, GH-9487, GH-9500, GH-9536, GH-9557,
+ GH-9565, GH-9668, GH-9722, GH-9754,
+ OTP-16608, OTP-19482, OTP-19545, OTP-19576,
+ PR-7830, PR-7970, PR-8078, PR-8100, PR-8207,
+ PR-8261, PR-8429, PR-8494, PR-8540, PR-8547,
+ PR-8556, PR-8573, PR-8589, PR-8590, PR-8592,
+ PR-8600, PR-8625, PR-8642, PR-8651, PR-8660,
+ PR-8670, PR-8695, PR-8697, PR-8699, PR-8704,
+ PR-8734, PR-8772, PR-8792, PR-8793, PR-8798,
+ PR-8805, PR-8812, PR-8820, PR-8862, PR-8885,
+ PR-8887, PR-8894, PR-8913, PR-8926, PR-8932,
+ PR-8937, PR-8938, PR-8943, PR-8945, PR-8960,
+ PR-8962, PR-8966, PR-8968, PR-8973, PR-8975,
+ PR-8976, PR-8988, PR-9005, PR-9006, PR-9013,
+ PR-9019, PR-9020, PR-9042, PR-9045, PR-9079,
+ PR-9082, PR-9083, PR-9094, PR-9095, PR-9101,
+ PR-9106, PR-9116, PR-9119, PR-9121, PR-9122,
+ PR-9124, PR-9129, PR-9141, PR-9149, PR-9154,
+ PR-9171, PR-9186, PR-9192, PR-9207, PR-9214,
+ PR-9219, PR-9229, PR-9231, PR-9232, PR-9246,
+ PR-9251, PR-9253, PR-9269, PR-9271, PR-9272,
+ PR-9275, PR-9276, PR-9277, PR-9280, PR-9287,
+ PR-9289, PR-9298, PR-9299, PR-9305, PR-9316,
+ PR-9321, PR-9327, PR-9330, PR-9333, PR-9334,
+ PR-9342, PR-9344, PR-9363, PR-9376, PR-9388,
+ PR-9396, PR-9398, PR-9399, PR-9402, PR-9406,
+ PR-9408, PR-9409, PR-9410, PR-9417, PR-9433,
+ PR-9441, PR-9445, PR-9446, PR-9448, PR-9468,
+ PR-9472, PR-9478, PR-9484, PR-9488, PR-9495,
+ PR-9504, PR-9508, PR-9511, PR-9514, PR-9515,
+ PR-9516, PR-9517, PR-9518, PR-9519, PR-9537,
+ PR-9538, PR-9543, PR-9563, PR-9571, PR-9574,
+ PR-9579, PR-9582, PR-9586, PR-9587, PR-9590,
+ PR-9594, PR-9595, PR-9604, PR-9608, PR-9610,
+ PR-9615, PR-9621, PR-9625, PR-9630, PR-9639,
+ PR-9648, PR-9654, PR-9659, PR-9660, PR-9670,
+ PR-9671, PR-9677, PR-9678, PR-9680, PR-9705,
+ PR-9711, PR-9714, PR-9717, PR-9718, PR-9733,
+ PR-9735, PR-9755, PR-9758, PR-9759, PR-9772,
+ PR-9774, PR-9775, PR-9786, PR-9787, PR-9791,
+ PR-9794, PR-9809, PR-9819
+System: OTP
+Release: 28
+Application: asn1-5.4, common_test-1.28, compiler-9.0,
+ crypto-5.6, debugger-6.0, dialyzer-5.4,
+ diameter-2.5, edoc-1.4, eldap-1.2.15,
+ erl_interface-5.6, erts-16.0, et-1.7.2,
+ eunit-2.10, ftp-1.2.4, inets-9.4,
+ jinterface-1.15, kernel-10.3, megaco-4.8,
+ mnesia-4.24, observer-2.18, odbc-2.16,
+ os_mon-2.11, parsetools-2.7, public_key-1.18,
+ reltool-1.0.2, runtime_tools-2.2, sasl-4.3,
+ snmp-5.19, ssh-5.3, ssl-11.3, stdlib-7.0,
+ syntax_tools-4.0, tftp-1.2.3, tools-4.1.2,
+ wx-2.5, xmerl-2.1.4
+Predecessor: OTP
+
+Check out the git tag OTP-28.0, and build a full OTP system including
+documentation.
+
+# HIGHLIGHTS
+
+- For various error types, the compiler now tries to suggest potential fixes by
+ adding "did you mean ...?" at the end of error messages.
+
+ When a function is used with wrong arity, the compiler will try to suggest a
+ defined function with the same name but a different arity. For example, given
+ the following module:
+
+ -module(typos).
+ -export([t/0]).
+ bar(A) -> A.
+ bar(A,A,A) -> A.
+ bar(A,A,A,A) -> A.
+ t() -> bar(0, 0).
+
+ The compiler will emit the following message:
+
+ typo.erl:6:12: function bar/2 undefined, did you mean bar/1,3,4?
+ % 6| t() -> bar(0, 0).
+ % | ^
+
+ For compiler errors that can easily be caused by typos, the compiler will try
+ to suggest what the correct variable or function name, could be. For example,
+ given the following module:
+
+ -module(typos).
+ -export([bar/2]).
+
+ bar(A0, B0) ->
+ A + B.
+
+ the compiler will emit the following error messages:
+
+ typos.erl:5:5: variable 'A' is unbound, did you mean 'A0'?
+ % 5| A + B.
+ % | ^
+
+ typos.erl:5:9: variable 'B' is unbound, did you mean 'B0'?
+ % 5| A + B.
+ % | ^
+
+ Error types that now suggest correct arities: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `bad_nowarn_bif_clash`, `undefined_function`.
+
+ Error types that now suggest correct names: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `undefined_on_load`, `undefined_function`,
+ `undefined_record`, `undefined_field`, `unbound_var`.
+
+ Using a function with wrong arity has higher precedence than having a typo in
+ the function name. If the compiler can find a defined function with the same
+ name but a different arity, it will not suggest a defined function with a
+ close-enough name, regardless of arity.
+
+ Own Id: OTP-19180
+ Application(s): compiler, stdlib
+ Related Id(s): PR-8699, PR-9094
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Application(s): compiler, debugger, stdlib, syntax_tools
+ Related Id(s): PR-8926
+
+- Functionality making it possible for processes to enable reception of
+ priority messages has been introduced in accordance with EEP 76.
+
+ Own Id: OTP-19198
+ Application(s): erts
+ Related Id(s): PR-9269, PR-9519, PR-9590
+
+- The `erl -noshell` mode has been updated to have two sub modes called `raw`
+ and `cooked`, where `cooked` is the old default behaviour and `raw` can be
+ used to bypass the line-editing support of the native terminal. Using `raw`
+ mode it is possible to read keystrokes as they happen without the user having
+ to press Enter. Also, the `raw` mode does not echo the typed characters to
+ stdout. An example of how to create a tic-tac-toe game using this mechanism is
+ included in the documentation.
+
+ Own Id: OTP-19314
+ Application(s): erts, stdlib
+ Related Id(s): GH-8037, PR-8962
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Application(s): compiler, debugger, stdlib, syntax_tools
+ Related Id(s): PR-8625
+
+- The `join(Binaries, Separator)` function that joins a list of binaries has
+ been added to the `binary` module.
+
+ Own Id: OTP-19337
+ Application(s): stdlib
+ Related Id(s): GH-8099, PR-8100
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Application(s): dialyzer, diameter, edoc, erts, eunit, kernel, mnesia,
+ parsetools, runtime_tools, snmp
+ Related Id(s): PR-9079
+
+- Module `re` has been updated to use PCRE2, which is mostly backward
+ compatible with PCRE.
+
+ The most noticeable incompatibilities are
+
+ - The default character encoding is pure ASCII and not Latin1. Unicode support
+ is still available with options `unicode` and `ucp`.
+ - Options `bsr_anycrlf`, `bsr_unicode` and `{newline,_}` are only set when a
+ regex is compiled and cannot be changed at matching for precompiled regex.
+
+ Own Id: OTP-19431
+ Application(s): erts, stdlib
+ Related Id(s): PR-9299, PR-9610
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- It is now possible to use any base for floating point numbers as described in
+ EEP 75: Based Floating Point Literals.
+
+ Computers represent floating point numbers in binary, but such numbers are
+ typically printed using base ten, for example 0.314159265e1. To maintain exact
+ bit-level precision when converting numbers to and from text, it is better to
+ use a base that matches the internally used base, such as 16 for a compact but
+ still exact representation, or 2 for visualizing or writing down the exact
+ internal format. One particular case where such exact representations are
+ useful is in code generating tools.
+
+ Examples:
+
+ > 2#0.111.
+ 0.875
+ > 16#fefe.fefe#e16.
+ 1.2041849337671418e24
+
+ Own Id: OTP-19452
+ Application(s): otp, stdlib
+ Related Id(s): PR-9106
+
+- There is a new `zstd` module that does Zstandard compression.
+
+ Own Id: OTP-19477
+ Application(s): stdlib
+ Related Id(s): PR-9316
+
+- The compiler’s alias analysis pass is now both faster and less conservative,
+ allowing optimizations of records and binary construction to be applied in
+ more cases.
+
+ Own Id: OTP-19502
+ Application(s): compiler
+ Related Id(s): PR-8695
+
+- Line numbers used to be reported in the following way:
+
+ 1> lists:last([]).
+ ** exception error: no function clause matching lists:last([]) (lists.erl, line 389)
+
+ Starting from Erlang/OTP 28, line numbers are now reported in the following
+ way:
+
+ 1> lists:last([]).
+ ** exception error: no function clause matching lists:last([]) (lists.erl:389)
+
+ Own Id: OTP-19538
+ Application(s): stdlib
+ Related Id(s): PR-9468
+
+- SPDX 2.2 Source Software-Bill-Of-Materials for Erlang/OTP compliant with NTIA
+ minimum requirements.
+
+ The SBOM contains a root package. Inside the root package there are multiple
+ SPDX packages. Each SPDX package corresponds to an Erlang/OTP application and
+ the Erlang runtime system (erts). Inside each package, there may be multiple
+ packages, such as vendor dependency packages inside the erts SPDX package.
+
+ Own Id: OTP-19553
+ Application(s): otp
+ Related Id(s): PR-9586, PR-9630, PR-9660, PR-9714
+
+- Added functions that produce utf-8 binaries instead of iolists. New functions
+ are: io_lib:bformat/2, io_lib:bformat/3, io_lib:bfwrite/2,
+ io_lib:bfwrite/3, io_lib:bwrite/2 and io_lib:bwrite_string/3.
+
+ Own Id: OTP-19556
+ Application(s): stdlib
+ Related Id(s): PR-9772
+
+- An **experimental** API for a native debugger has been added. The main
+ components are the following:
+
+ - A new compiler option `beam_debug_info` for the Erlang compiler. When given,
+ most optimizations are disabled and debug information suitable for the
+ native debugger are added to generated BEAM files.
+ - A new `+D` emulator flag. When given, the VM becomes "debuggable", which
+ means that when modules that been compiled with the `beam_debug_info` option
+ are loaded, the code is instrumented so that one can enable and disable
+ breakpoints on executable lines.
+ - An experimental `erl_debugger` module with a new debugging API. Essentially,
+ it allows a single, local, process to be registered as the "debugger"
+ process for the node. This process is the one that will receive messages
+ notifying that a process hit a breakpoint. This way, the front-end
+ implementation of a debugger (such as edb from WhatApp) can be decoupled
+ from OTP.
+ - The `erl_debugger` module also exposes new BIFs to inspect `X` and `Y`
+ registers of a suspended process. Together with new code-information BIFs,
+ this let's a debugger show the values of variables in scope for a suspended
+ process.
+
+ Own Id: OTP-19609
+ Application(s): compiler, erts, kernel
+ Related Id(s): PR-8670, PR-9334, PR-9604
+
+- The ancient ASN.1 modules used in `public_key` has been replaced with more
+ modern versions, but we have strived to keep the documented Erlang API for the
+ `public_key` application compatible.
+
+ Own Id: OTP-19612
+ Application(s): asn1, public_key
+ Related Id(s): PR-9774
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Removed the default values for SCTP send (sndbuf) and receive (recbuf)
+ buffers.
+
+ Own Id: OTP-19627
+ Application(s): kernel
+ Related Id(s): GH-9722, OTP-19576
+
+# POTENTIAL INCOMPATIBILITIES
+
+- `proc_lib:stop/1,3` (and in extension gen_server:stop/3, gen_statem:stop/3
+ and so on) have been updated to not throw an error if the process to be
+ stopped exits with the same reason as given to proc_lib:stop/3.
+
+ Own Id: OTP-19233
+ Application(s): stdlib
+ Related Id(s): PR-8772
+
+- The size of an atom in the Erlang source code was limited to 255 bytes in
+ previous releases, meaning that an atom containing only emojis could contain
+ only 63 emojis.
+
+ While atoms are still only allowed to contain 255 characters, the number of
+ bytes is no longer limited.
+
+ External tools that parse the `AtU8` chunk of a BEAM file directly need to be
+ updated. Tools that use
+ `beam_lib:chunks(Beam, [atoms)`](beam_lib:chunks/2) to read the atom table
+ will continue to work.
+
+ Own Id: OTP-19285
+ Application(s): compiler, erts, stdlib
+ Related Id(s): PR-8913
+
+- The `undec_rest` option would be ignored in generated functions for exclusive
+ decode. The option is now respected, meaning that the return value from such
+ functions are now three-tuples instead of a two-tuples.
+
+ Own Id: OTP-19290
+ Application(s): asn1
+ Related Id(s): PR-8798
+
+- The literals chunk in BEAM is no longer compressed, resulting in slightly
+ smaller BEAM files when a BEAM file is stripped using
+ beam_lib:strip_files/1.
+
+ This is a potential incompatibility for tools that read and interpret the
+ contents of the literal chunk. One way to update such tools to work with the
+ new format is to retrieve the chunk using
+ `beam_lib:chunks(Beam, [literals)`](beam_lib:chunks/2).
+
+ Own Id: OTP-19323
+ Application(s): compiler, erts, stdlib
+ Related Id(s): GH-8967, PR-8988
+
+- The `abort_if_missing_suites` option now defaults to `true`. If you prefer the
+ old behavior, set `abort_if_missing_suites` to `false` in your test runs.
+
+ Own Id: OTP-19355
+ Application(s): common_test
+ Related Id(s): PR-9045
+
+- CBC algorithms are not offered by default. See Configuring algorithms in SSH
+ if you wish to enable them.
+
+ Own Id: OTP-19420
+ Application(s): ssh
+ Related Id(s): PR-9277
+
+- Module `re` has been updated to use PCRE2, which is mostly backward
+ compatible with PCRE.
+
+ The most noticeable incompatibilities are
+
+ - The default character encoding is pure ASCII and not Latin1. Unicode support
+ is still available with options `unicode` and `ucp`.
+ - Options `bsr_anycrlf`, `bsr_unicode` and `{newline,_}` are only set when a
+ regex is compiled and cannot be changed at matching for precompiled regex.
+
+ Own Id: OTP-19431
+ Application(s): erts, stdlib
+ Related Id(s): PR-9299, PR-9610
+
+ *** HIGHLIGHT ***
+
+- If a process being suspended using `erlang:suspend_process()` currently is
+ waiting in a `receive ... after` expression, the timer for the timeout will
+ now also be suspended until the process is resumed.
+
+ Own Id: OTP-19536
+ Application(s): erts
+ Related Id(s): PR-8670
+
+- Change automatic hibernation of static supervisors so that they will hibernate
+ after being idle for 1 second instead of only after starting, dynamic
+ supervisors (simple_one_for_one) will not be hibernated at all. An option to
+ the supervisor is added to make it configurable for the application. This
+ option defaults to 1 second for static supervisors and to infinity for the
+ simple_one_for_one supervisors.
+
+ Own Id: OTP-19597
+ Application(s): stdlib
+ Related Id(s): PR-9680
+
+- The ancient ASN.1 modules used in `public_key` has been replaced with more
+ modern versions, but we have strived to keep the documented Erlang API for the
+ `public_key` application compatible.
+
+ Own Id: OTP-19612
+ Application(s): asn1, public_key
+ Related Id(s): PR-9774
+
+ *** HIGHLIGHT ***
+
+- The socket option names for built-in socket options in the module `socket` has
+ been cleaned up.
+
+ Now, for known socket options, it is only the canonical protocol names that
+ are allowed such as `ip` for the socket option `{ip,recvtos}`. Previously, due
+ to being a protocol alias; `{'IP',recvtos}` was also allowed, as was the
+ incorrect `{hopopt,recvtos}` because the protocol `hopopt` on Linux has the
+ same protocol number as `ip`.
+
+ So, to reduce confusion, all enumerated protocol names with the same number,
+ are not allowed for the known protocol options, only the canonical name.
+
+ Own Id: OTP-19615
+ Application(s): erts
+ Related Id(s): PR-9718
+
+# OTP-28.0
+
+## Improvements and New Features
+
+- It is now possible to use any base for floating point numbers as described in
+ EEP 75: Based Floating Point Literals.
+
+ Computers represent floating point numbers in binary, but such numbers are
+ typically printed using base ten, for example 0.314159265e1. To maintain exact
+ bit-level precision when converting numbers to and from text, it is better to
+ use a base that matches the internally used base, such as 16 for a compact but
+ still exact representation, or 2 for visualizing or writing down the exact
+ internal format. One particular case where such exact representations are
+ useful is in code generating tools.
+
+ Examples:
+
+ > 2#0.111.
+ 0.875
+ > 16#fefe.fefe#e16.
+ 1.2041849337671418e24
+
+ Own Id: OTP-19452
+ Related Id(s): PR-9106
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- Fixes the sarif generation in the scan code script
+
+ Own Id: OTP-19492
+ Related Id(s): PR-9409
+
+- SPDX 2.2 Source Software-Bill-Of-Materials for Erlang/OTP compliant with NTIA
+ minimum requirements.
+
+ The SBOM contains a root package. Inside the root package there are multiple
+ SPDX packages. Each SPDX package corresponds to an Erlang/OTP application and
+ the Erlang runtime system (erts). Inside each package, there may be multiple
+ packages, such as vendor dependency packages inside the erts SPDX package.
+
+ Own Id: OTP-19553
+ Related Id(s): PR-9586, PR-9630, PR-9660, PR-9714
+
+ *** HIGHLIGHT ***
+
+- Fixes wrong relationship order for SPDX packages and mistaken inclusion of
+ erts documentation in the erts test SPDX package.
+
+ Own Id: OTP-19601
+ Related Id(s): PR-9717
+
+- sbom validates copyrights to be of a specific format, as defined in the
+ LICENSE-HEADERS.md, which will prevent mistakes in copyrights
+
+ Own Id: OTP-19607
+ Related Id(s): PR-9758
+
+- SBOM produces package url as per the Erlang Ecosystem Foundation guidelines
+
+ Own Id: OTP-19629
+ Related Id(s): PR-9791
+
+# asn1-5.4
+
+## Fixed Bugs and Malfunctions
+
+- The `undec_rest` option would be ignored in generated functions for exclusive
+ decode. The option is now respected, meaning that the return value from such
+ functions are now three-tuples instead of a two-tuples.
+
+ Own Id: OTP-19290
+ Related Id(s): PR-8798
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- The ancient ASN.1 modules used in `public_key` has been replaced with more
+ modern versions, but we have strived to keep the documented Erlang API for the
+ `public_key` application compatible.
+
+ Own Id: OTP-19612
+ Related Id(s): PR-9774
+
+ *** HIGHLIGHT ***
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+> #### Full runtime dependencies of asn1-5.4
+>
+> erts-14.0, kernel-9.0, stdlib-5.0
+
+# common_test-1.28
+
+## Fixed Bugs and Malfunctions
+
+- Replaced calls to deprecated `crypto:start()` with
+ `application:start(crypto)`.
+
+ Own Id: OTP-19485
+ Related Id(s): PR-8592
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- The overage reports in HTML can be rendered in dark mode if requested by the
+ user's browser.
+
+ Own Id: OTP-19159
+ Related Id(s): PR-7830
+
+- The `abort_if_missing_suites` option now defaults to `true`. If you prefer the
+ old behavior, set `abort_if_missing_suites` to `false` in your test runs.
+
+ Own Id: OTP-19355
+ Related Id(s): PR-9045
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of common_test-1.28
+>
+> compiler-6.0, crypto-4.5, debugger-4.1, erts-7.0, ftp-1.0, inets-6.0,
+> kernel-8.4, observer-2.1, runtime_tools-1.8.16, sasl-2.5, snmp-5.1.2, ssh-4.0,
+> stdlib-4.0, syntax_tools-1.7, tools-3.2, xmerl-1.3.8
+
+# compiler-9.0
+
+## Fixed Bugs and Malfunctions
+
+- The compiler will now emit warnings when some map patterns cannot possibly
+ match because a previous clauses matches the same pattern. For example:
+
+ mm_1(#{}) -> a;
+ mm_1(#{b := B}) -> {b,B}.
+
+ mm_2(#{a := A}) -> {a,A};
+ mm_2(#{a := A, b := B}) -> {b,A,B}.
+
+ The second clause of these function can never match and the compiler will now
+ emit a warning for both of them.
+
+ Note that the compiler is not guaranteed to emit warnings for every possible
+ map pattern that cannot match.
+
+ Own Id: OTP-19141
+ Related Id(s): GH-8558, PR-8600
+
+- The size of an atom in the Erlang source code was limited to 255 bytes in
+ previous releases, meaning that an atom containing only emojis could contain
+ only 63 emojis.
+
+ While atoms are still only allowed to contain 255 characters, the number of
+ bytes is no longer limited.
+
+ External tools that parse the `AtU8` chunk of a BEAM file directly need to be
+ updated. Tools that use
+ `beam_lib:chunks(Beam, [atoms)`](beam_lib:chunks/2) to read the atom table
+ will continue to work.
+
+ Own Id: OTP-19285
+ Related Id(s): PR-8913
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- The literals chunk in BEAM is no longer compressed, resulting in slightly
+ smaller BEAM files when a BEAM file is stripped using
+ beam_lib:strip_files/1.
+
+ This is a potential incompatibility for tools that read and interpret the
+ contents of the literal chunk. One way to update such tools to work with the
+ new format is to retrieve the chunk using
+ `beam_lib:chunks(Beam, [literals)`](beam_lib:chunks/2).
+
+ Own Id: OTP-19323
+ Related Id(s): GH-8967, PR-8988
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- The final validation step in the compiler will now reject modules containing
+ functions with more than 255 arguments. No impact is expected as the emulator
+ has always refused to load these modules.
+
+ Own Id: OTP-19376
+ Related Id(s): GH-9113, PR-9121
+
+- Replaced calls to deprecated `crypto:start()` with
+ `application:start(crypto)`.
+
+ Own Id: OTP-19485
+ Related Id(s): PR-8592
+
+- Refactor code to not rely on `+nowarn_shadow_vars`.
+
+ Own Id: OTP-19574
+ Related Id(s): PR-9678
+
+## Improvements and New Features
+
+- The EEP-48 doc chunk embedded into `.beam` files by the compiler is now
+ `compressed` and `deterministic`.
+
+ Own Id: OTP-19096
+ Related Id(s): PR-8494
+
+- Provided that the map argument for a maps:put/3 call is known to the
+ compiler to be a map, the compiler will replace such calls with the
+ corresponding update using the map syntax.
+
+ Own Id: OTP-19115
+ Related Id(s): PR-8540
+
+- For various error types, the compiler now tries to suggest potential fixes by
+ adding "did you mean ...?" at the end of error messages.
+
+ When a function is used with wrong arity, the compiler will try to suggest a
+ defined function with the same name but a different arity. For example, given
+ the following module:
+
+ -module(typos).
+ -export([t/0]).
+ bar(A) -> A.
+ bar(A,A,A) -> A.
+ bar(A,A,A,A) -> A.
+ t() -> bar(0, 0).
+
+ The compiler will emit the following message:
+
+ typo.erl:6:12: function bar/2 undefined, did you mean bar/1,3,4?
+ % 6| t() -> bar(0, 0).
+ % | ^
+
+ For compiler errors that can easily be caused by typos, the compiler will try
+ to suggest what the correct variable or function name, could be. For example,
+ given the following module:
+
+ -module(typos).
+ -export([bar/2]).
+
+ bar(A0, B0) ->
+ A + B.
+
+ the compiler will emit the following error messages:
+
+ typos.erl:5:5: variable 'A' is unbound, did you mean 'A0'?
+ % 5| A + B.
+ % | ^
+
+ typos.erl:5:9: variable 'B' is unbound, did you mean 'B0'?
+ % 5| A + B.
+ % | ^
+
+ Error types that now suggest correct arities: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `bad_nowarn_bif_clash`, `undefined_function`.
+
+ Error types that now suggest correct names: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `undefined_on_load`, `undefined_function`,
+ `undefined_record`, `undefined_field`, `unbound_var`.
+
+ Using a function with wrong arity has higher precedence than having a typo in
+ the function name. If the compiler can find a defined function with the same
+ name but a different arity, it will not suggest a defined function with a
+ close-enough name, regardless of arity.
+
+ Own Id: OTP-19180
+ Related Id(s): PR-8699, PR-9094
+
+ *** HIGHLIGHT ***
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Related Id(s): PR-8926
+
+ *** HIGHLIGHT ***
+
+- Documentation chunks (EEP-48) has been updated to include the following
+ reserved metadata fields: `behaviours`, `group`, `source_path`, and
+ `source_annos`. The compiler has also been updated to emit this metadata. See
+ the EEP-48 documentation for more details.
+
+ Own Id: OTP-19306
+ Related Id(s): PR-8945, PR-8975
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Related Id(s): PR-8625
+
+ *** HIGHLIGHT ***
+
+- New options for suppressing behaviour warnings have been added:
+
+ - `nowarn_conflicting_behaviours`
+ - `nowarn_undefined_behaviour_func`
+ - `nowarn_undefined_behaviour`
+ - `nowarn_undefined_behaviour_callbacks`
+ - `nowarn_ill_defined_behaviour_callbacks`
+ - `nowarn_ill_defined_optional_callbacks`
+
+ Own Id: OTP-19334
+ Related Id(s): GH-8985, PR-9020
+
+- Some BIFs with side-effects are optimized in `try`/`catch` in the same way as
+ guard BIFs in order to gain performance.
+
+ The following BIFs that are optimized in this way: `binary_to_atom/1`,
+ `binary_to_atom/2`, `binary_to_existing_atom/1`, `list_to_atom/1`, and
+ `list_to_existing_atom/1`.
+
+ Own Id: OTP-19339
+ Related Id(s): PR-9042, PR-9122
+
+- The compiler now converts known documentation attribute metadata entries from
+ unicode:chardata/0 to unicode:unicode_binary/0.
+
+ Own Id: OTP-19394
+ Related Id(s): PR-9192
+
+- The `warn_deprecated_catch` option enables warnings for use of old-style catch
+ expressions on the form `catch Expr` instead of the modern
+ `try ... catch ... end`. To prevent new uses of uses of old catches to be
+ added, this compiler option can be enabled on the project level and
+ `-compile(nowarn_deprecated_catch).` added to individual files that still
+ contain old catches.
+
+ Own Id: OTP-19425
+ Related Id(s): PR-9154
+
+- Defining a fun in terms of an imported function is not allowed. Before this
+ release, the compiler would not catch this kind of error if the name of the
+ imported function happened to be a BIF. Consider this example:
+
+ -module(fun_example).
+ -export([foo/0, bar/0]).
+ -import(m, [max/2, not_a_bif/0]).
+
+ foo() ->
+ fun max/2.
+
+ bar() ->
+ fun not_a_bif/0.
+
+ The compiler in Erlang/OTP 27 would generate the following messages:
+
+ fun_example.erl:9:5: function not_a_bif/0 undefined
+ % 9| fun not_a_bif/0.
+ % | ^
+
+ fun_example.erl:3:2: Warning: import directive overrides auto-imported BIF max/2 --
+ use "-compile({no_auto_import,[max/2]})." to resolve name clash
+ % 3| -import(m, [max/2, not_a_bif/0]).
+ % | ^
+
+ That is, there would be a (cryptic) error for `fun not_a_bif/0`, but only a
+ warning for `fun max/2`.
+
+ When compiling with this release, both attempts to create a fun will result in
+ error messages (as well as a warning):
+
+ fun_example.erl:6:5: creating a fun from imported name max/2 is not allowed
+ % 6| fun max/2.
+ % | ^
+
+ fun_example.erl:9:5: creating a fun from imported name not_a_bif/0 is not allowed
+ % 9| fun not_a_bif/0.
+ % | ^
+
+ fun_example.erl:3:2: Warning: import directive overrides auto-imported BIF max/2 --
+ use "-compile({no_auto_import,[max/2]})." to resolve name clash
+ % 3| -import(m, [max/2, not_a_bif/0]).
+ % | ^
+
+ Also, attempting to call a local function having the same name as
+ auto-imported BIF would result in an error if the BIF was added to Erlang/OTP
+ before R14, and a warning for newer BIFs. This has been changed to always emit
+ a warning. For example:
+
+ -module(bif_example).
+ -export([bar/1]).
+
+ bar(B) ->
+ is_boolean(B).
+
+ is_boolean(B) ->
+ B =:= true orelse B =:= false.
+
+ will now result in the following warning instead of an error:
+
+ if_example.erl:5:5: Warning: ambiguous call of overridden auto-imported BIF is_boolean/1 --
+ use erlang:is_boolean/1 or "-compile({no_auto_import,[is_boolean/1]})." to resolve name clash
+ % 5| is_boolean(B).
+ % | ^
+
+ Own Id: OTP-19432
+ Related Id(s): PR-9246
+
+- The compiler’s alias analysis pass is now both faster and less conservative,
+ allowing optimizations of records and binary construction to be applied in
+ more cases.
+
+ Own Id: OTP-19502
+ Related Id(s): PR-8695
+
+ *** HIGHLIGHT ***
+
+- BEAM files no longer include a `Meta` chunk if there are no features used.
+ That slightly decreases the size of BEAM files, and it also ensures that
+ `m(Module)` and `beam_lib:md5(Beam)` will match for preloaded modules.
+
+ Own Id: OTP-19524
+ Related Id(s): PR-9517
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- An **experimental** API for a native debugger has been added. The main
+ components are the following:
+
+ - A new compiler option `beam_debug_info` for the Erlang compiler. When given,
+ most optimizations are disabled and debug information suitable for the
+ native debugger are added to generated BEAM files.
+ - A new `+D` emulator flag. When given, the VM becomes "debuggable", which
+ means that when modules that been compiled with the `beam_debug_info` option
+ are loaded, the code is instrumented so that one can enable and disable
+ breakpoints on executable lines.
+ - An experimental `erl_debugger` module with a new debugging API. Essentially,
+ it allows a single, local, process to be registered as the "debugger"
+ process for the node. This process is the one that will receive messages
+ notifying that a process hit a breakpoint. This way, the front-end
+ implementation of a debugger (such as edb from WhatApp) can be decoupled
+ from OTP.
+ - The `erl_debugger` module also exposes new BIFs to inspect `X` and `Y`
+ registers of a suspended process. Together with new code-information BIFs,
+ this let's a debugger show the values of variables in scope for a suspended
+ process.
+
+ Own Id: OTP-19609
+ Related Id(s): PR-8670, PR-9334, PR-9604
+
+ *** HIGHLIGHT ***
+
+> #### Full runtime dependencies of compiler-9.0
+>
+> crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0
+
+# crypto-5.6
+
+## Fixed Bugs and Malfunctions
+
+- Fixed minor potential leak of EVP_MAC when `crypto` module is unloaded.
+
+ Own Id: OTP-19500
+ Related Id(s): PR-9119
+
+- Added copyright and license to crypto_ec_curves.erl
+
+ Own Id: OTP-19554
+
+## Improvements and New Features
+
+- The crypto:start/0, crypto:stop/0, and crypto:enable_fips_mode/1
+ functions have been deprecated.
+
+ Own Id: OTP-19155
+ Related Id(s): PR-8592
+
+- Warnings are now logged if module `crypto` with FIPS-supported OpenSSL is
+ loaded without application `crypto` being loaded. In this case FIPS will be
+ disabled even if the user had set application parameter `fips_mode`.
+
+ Own Id: OTP-19156
+ Related Id(s): PR-8590
+
+- The functionality of crypto:crypto_one_time_aead/6 is now also available in
+ the new functions crypto:crypto_one_time_aead_init/4 and
+ crypto:crypto_one_time_aead/4, which makes it possible to reuse
+ initialization.
+
+ Own Id: OTP-19426
+ Related Id(s): PR-9289
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- New key `fips_provider_buildinfo` in map returned by crypto:info/0. If
+ present, it contains the version of the FIPS provider which may be different
+ than the version of the rest of OpenSSL.
+
+ Own Id: OTP-19487
+ Related Id(s): GH-9366, PR-9410
+
+- Exported `crypto` types `sha3()`, `hmac_hash_algorithm()` and
+ `cmac_cipher_algorithm()`.
+
+ Own Id: OTP-19510
+ Related Id(s): PR-9448
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of crypto-5.6
+>
+> erts-9.0, kernel-6.0, stdlib-3.9
+
+# debugger-6.0
+
+## Fixed Bugs and Malfunctions
+
+- Error handling has been improved when modules fail to load.
+
+ Own Id: OTP-19484
+ Related Id(s): GH-7819, PR-9399
+
+## Improvements and New Features
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Related Id(s): PR-8926
+
+ *** HIGHLIGHT ***
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Related Id(s): PR-8625
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of debugger-6.0
+>
+> compiler-8.0, erts-15.0, kernel-10.0, stdlib-7.0, wx-2.0
+
+# dialyzer-5.4
+
+## Fixed Bugs and Malfunctions
+
+- The `-Wno_unknown` option will now prevent a warning being printed to standard
+ output when the command line interface is used.
+
+ Own Id: OTP-19262
+ Related Id(s): GH-8822, PR-8885
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of dialyzer-5.4
+>
+> compiler-8.0, erts-12.0, kernel-8.0, stdlib-5.0, syntax_tools-2.0
+
+# diameter-2.5
+
+## Fixed Bugs and Malfunctions
+
+- With this change diameter will not crash when decoding a DiameterURI without
+ port number.
+
+ Own Id: OTP-19620
+ Related Id(s): PR-9321
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- With this change diameter will not use slave terminology
+
+ Own Id: OTP-19621
+ Related Id(s): PR-9786
+
+> #### Full runtime dependencies of diameter-2.5
+>
+> erts-10.0, kernel-3.2, ssl-9.0, stdlib-5.0
+
+# edoc-1.4
+
+## Fixed Bugs and Malfunctions
+
+- Refactor code to not rely on `+nowarn_shadow_vars`.
+
+ Own Id: OTP-19574
+ Related Id(s): PR-9678
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of edoc-1.4
+>
+> erts-11.0, inets-5.10, kernel-7.0, stdlib-4.0, syntax_tools-2.0, xmerl-1.3.7
+
+# eldap-1.2.15
+
+## Fixed Bugs and Malfunctions
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of eldap-1.2.15
+>
+> asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-3.4
+
+# erl_interface-5.6
+
+## Improvements and New Features
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Update of MD5 implementation from OpenSSL version 3.1.4 to 3.5.
+
+ Own Id: OTP-19614
+ Related Id(s): PR-9775
+
+## Known Bugs and Problems
+
+- The `ei` API for decoding/encoding terms is not fully 64-bit compatible since
+ terms that have a representation on the external term format larger than 2 GB
+ cannot be handled.
+
+ Own Id: OTP-16607
+ Related Id(s): OTP-16608
+
+# erts-16.0
+
+## Fixed Bugs and Malfunctions
+
+- ETS tables with more than 2 billion keys are now supported.
+
+ Own Id: OTP-19144
+ Related Id(s): PR-8589
+
+- The zlib library included in Erlang/OTP has been updated to version 1.3.1.
+
+ Own Id: OTP-19259
+ Related Id(s): PR-8862
+
+- `to_erl` no longer clears the screen when attaching to a `run_erl` session.
+
+ Own Id: OTP-19263
+ Related Id(s): PR-8943
+
+- The size of an atom in the Erlang source code was limited to 255 bytes in
+ previous releases, meaning that an atom containing only emojis could contain
+ only 63 emojis.
+
+ While atoms are still only allowed to contain 255 characters, the number of
+ bytes is no longer limited.
+
+ External tools that parse the `AtU8` chunk of a BEAM file directly need to be
+ updated. Tools that use
+ `beam_lib:chunks(Beam, [atoms)`](beam_lib:chunks/2) to read the atom table
+ will continue to work.
+
+ Own Id: OTP-19285
+ Related Id(s): PR-8913
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Fixed a bug where `erlc` would crash if its path contained spaces.
+
+ Own Id: OTP-19295
+ Related Id(s): PR-8937
+
+- The `-noshell` mode has been updated to read data lazily from standard
+ input. Before this fix any data would be read greedily which meant that Erlang
+ could consume data not meant for it. It also meant that in order for
+ shell:start_interactive/0 to work on Windows an API that did not support
+ reading of Unicode characters had to be used.
+
+ Own Id: OTP-19313
+ Related Id(s): GH-8113, PR-8962
+
+- The literals chunk in BEAM is no longer compressed, resulting in slightly
+ smaller BEAM files when a BEAM file is stripped using
+ beam_lib:strip_files/1.
+
+ This is a potential incompatibility for tools that read and interpret the
+ contents of the literal chunk. One way to update such tools to work with the
+ new format is to retrieve the chunk using
+ `beam_lib:chunks(Beam, [literals)`](beam_lib:chunks/2).
+
+ Own Id: OTP-19323
+ Related Id(s): GH-8967, PR-8988
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Fixed erlang:localtime_to_universaltime/2 with `IsDST` set to `true` and a
+ timezone without daylight saving (for example `UTC`) to assume that the
+ provided localtime does not have DST. This has always been the behaviour, but
+ glibc versions after 2.37 changed it so that the behavior in Erlang also
+ changed.
+
+ Own Id: OTP-19453
+ Related Id(s): PR-9207
+
+- Support for the `TZ` environment variable has been added on Windows. Before
+ this change only the time zone configured in the OS was ever used.
+
+ Own Id: OTP-19454
+ Related Id(s): PR-9207
+
+- Suppressed various warnings when building the emulator with recent versions of
+ GCC
+
+ Own Id: OTP-19488
+ Related Id(s): GH-9413, PR-9417
+
+- Fixed a bug in re:run and re:compile where the pattern parameter would be read
+ incorrectly if it was a sub-binary.
+
+ Own Id: OTP-19507
+ Related Id(s): GH-9438, PR-9478
+
+- Fixed a broken makefile rule that made it so that `O2` and `-O2` could not be
+ part of the directory path when building Erlang/OTP. Bug has been present
+ since R11B released 2006.
+
+ Own Id: OTP-19518
+ Related Id(s): GH-9487, PR-9488
+
+- Fixed the index types of modules `atomics` and `counters` from `integer()` to
+ `pos_integer()`, which is more correct.
+
+ Own Id: OTP-19532
+ Related Id(s): PR-9538
+
+- Fix `erl` flags `+Q`, `+P` and `+t` to not allow values greater
+ than 4294975487. Before this fix, the runtime would either truncate the value
+ or crash depending on which value was given.
+
+ Own Id: OTP-19594
+ Related Id(s): GH-9668, PR-9671
+
+- The socket option names for built-in socket options in the module `socket` has
+ been cleaned up.
+
+ Now, for known socket options, it is only the canonical protocol names that
+ are allowed such as `ip` for the socket option `{ip,recvtos}`. Previously, due
+ to being a protocol alias; `{'IP',recvtos}` was also allowed, as was the
+ incorrect `{hopopt,recvtos}` because the protocol `hopopt` on Linux has the
+ same protocol number as `ip`.
+
+ So, to reduce confusion, all enumerated protocol names with the same number,
+ are not allowed for the known protocol options, only the canonical name.
+
+ Own Id: OTP-19615
+ Related Id(s): PR-9718
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- On windows, socket:sendv could incorrectly return {ok, integer()} on Windows.
+
+ Own Id: OTP-19617
+ Related Id(s): OTP-19482
+
+## Improvements and New Features
+
+- Functionality making it possible for processes to enable reception of
+ priority messages has been introduced in accordance with EEP 76.
+
+ Own Id: OTP-19198
+ Related Id(s): PR-9269, PR-9519, PR-9590
+
+ *** HIGHLIGHT ***
+
+- The trace:system/3 function has been added. It has a similar interface as
+ erlang:system_monitor/2 but it also supports trace sessions.
+
+ Own Id: OTP-19271
+ Related Id(s): PR-8660
+
+- Added support for `SIGWINCH`, `SIGCONT`, and `SIGINFO` signals to
+ os:set_signal/2 where available.
+
+ Own Id: OTP-19278
+ Related Id(s): PR-8887, PR-8938
+
+- The `erl -noshell` mode has been updated to have two sub modes called `raw`
+ and `cooked`, where `cooked` is the old default behaviour and `raw` can be
+ used to bypass the line-editing support of the native terminal. Using `raw`
+ mode it is possible to read keystrokes as they happen without the user having
+ to press Enter. Also, the `raw` mode does not echo the typed characters to
+ stdout. An example of how to create a tic-tac-toe game using this mechanism is
+ included in the documentation.
+
+ Own Id: OTP-19314
+ Related Id(s): GH-8037, PR-8962
+
+ *** HIGHLIGHT ***
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Two BIFs have been added to the `erlang` module.
+
+ erlang:processes_iterator/0 returns a process iterator that can be used to
+ iterate through the process table.
+
+ erlang:process_next/1 takes in a process iterator and returns a 2-tuple,
+ consisting of a process identifier and a new process iterator. When the
+ process iterator runs out of processes in the process table, `none` will be
+ returned.
+
+ Using these BIFs to scan the processes scales better than using
+ erlang:processes/0, at the cost of giving less consistency guarantees.
+ Process identifiers returned from consecutive calls of erlang:process_next/1
+ may not be a consistent snapshot of all elements existing in the table during
+ any of the calls. A process identifier is only guaranteed to be returned from
+ a call to erlang:processes_next/1 if it was alive before the call to
+ erlang:processes_iterator/0 and was still alive when
+ erlang:processes_next/1 returned `none`.
+
+ Own Id: OTP-19369
+ Related Id(s): PR-9129
+
+- Improved open debug for gen_tcp_socket (connect and listen) and gen_udp_socket
+ (open).
+
+ Own Id: OTP-19386
+
+- Module `re` has been updated to use PCRE2, which is mostly backward
+ compatible with PCRE.
+
+ The most noticeable incompatibilities are
+
+ - The default character encoding is pure ASCII and not Latin1. Unicode support
+ is still available with options `unicode` and `ucp`.
+ - Options `bsr_anycrlf`, `bsr_unicode` and `{newline,_}` are only set when a
+ regex is compiled and cannot be changed at matching for precompiled regex.
+
+ Own Id: OTP-19431
+ Related Id(s): PR-9299, PR-9610
+
+ *** HIGHLIGHT ***
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- When booting the runtime system on a 32-bit computer with a single core, the
+ boot code will try to minimize the peak memory use by disabling parallel
+ loading of BEAM files.
+
+ Own Id: OTP-19450
+ Related Id(s): PR-9342
+
+- A `socket` option `{otp,select_read}` has been added that enables keeping a
+ socket in the VM select/poll set between calls to recv functions.
+
+ This increases throughput by reducing the number of calls to said functions.
+
+ Own Id: OTP-19451
+ Related Id(s): PR-9344
+
+- `erlc` will now write compiler warnings and errors to standard error, instead
+ of standard output, in common with other language compilers.
+
+ Own Id: OTP-19460
+ Related Id(s): GH-9255, PR-9363
+
+- Fixed the Windows build to always include `.pdb` files for all DLLs and
+ executables to help with debugging.
+
+ Own Id: OTP-19465
+ Related Id(s): PR-9229
+
+- Improve the naming of the (internal) esock mutex(es). It is now possible to
+ configure (as in autoconf) the use of simple names for the esock mutex(es).
+
+ Own Id: OTP-19472
+ Related Id(s): PR-9388
+
+- An optimization for appending 0 bits to a binary was removed in patch releases
+ for OTP versions 25, 26, and 27. This optimization has been reintroduced in
+ Erlang/OTP 28.
+
+ Own Id: OTP-19473
+ Related Id(s): PR-8697, PR-9396
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- When using `enif_select_read` (or `enif_select` with `ERL_NIF_SELECT_READ`) on
+ systems with kernel polling enabled (that is most Unix systems), file
+ descriptors that are always re-enabled as soon as they trigger are now part of
+ a specialized pollset just as `driver_select`. This reduces the CPU usage in
+ such scenarios as the erts does not have to re-insert the FD everytime it it
+ triggered. As a result of this optimization `socket` based reading uses a
+ lot less CPU and achieves a higher throughput.
+
+ Own Id: OTP-19479
+ Related Id(s): PR-9275
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- The Windows installer no longer creates the `erl.ini` file, making
+ installations redistributable.
+
+ Own Id: OTP-19481
+ Related Id(s): PR-9330
+
+- Added erlang:hibernate/0, which hibernates a process without discarding the
+ stack.
+
+ Own Id: OTP-19503
+ Related Id(s): PR-9406
+
+- The asmjit library (used by BeamJIT) has been updated to version
+ 029075b84bf0161a761beb63e6eda519a29020db.
+
+ Own Id: OTP-19509
+ Related Id(s): PR-9495
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- If a process being suspended using `erlang:suspend_process()` currently is
+ waiting in a `receive ... after` expression, the timer for the timeout will
+ now also be suspended until the process is resumed.
+
+ Own Id: OTP-19536
+ Related Id(s): PR-8670
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- A test module for TLS distribution over `socket` has been implemented.
+
+ Own Id: OTP-19539
+ Related Id(s): PR-9511
+
+- Upgrade pcre2 to 10.45
+
+ Own Id: OTP-19541
+ Related Id(s): PR-9582
+
+- The `+R` emulator options has been removed. It has had any effect since
+ Erlang/OTP R9.
+
+ Own Id: OTP-19551
+ Related Id(s): PR-9608
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Increase the default inet-driver buffer size(s). Also introduce kernel
+ parameters for UDP and SCTP to change the sizes when creating (those) sockets.
+
+ Own Id: OTP-19576
+
+- Add `+JPperfdirectory <dir>` for specifying which directory Erlang should
+ place perf symbol information files.
+
+ Own Id: OTP-19589
+ Related Id(s): GH-9500, PR-9639
+
+- Allow multiple static nifs to be part of the same archive. See the NIF
+ documentation for details.
+
+ Own Id: OTP-19590
+ Related Id(s): PR-9625
+
+- Various improvements reducing lock contention on run queues due to task
+ stealing.
+
+ Own Id: OTP-19591
+ Related Id(s): PR-9594
+
+- The new implementation has the same behavior as the previous one. The newer
+ compilers already have native support for FP16, so this implementation is only
+ relevant for older compilers. For this reason, the new implementation has not
+ been tested for speed.
+
+ Own Id: OTP-19603
+ Related Id(s): PR-9735
+
+- An **experimental** API for a native debugger has been added. The main
+ components are the following:
+
+ - A new compiler option `beam_debug_info` for the Erlang compiler. When given,
+ most optimizations are disabled and debug information suitable for the
+ native debugger are added to generated BEAM files.
+ - A new `+D` emulator flag. When given, the VM becomes "debuggable", which
+ means that when modules that been compiled with the `beam_debug_info` option
+ are loaded, the code is instrumented so that one can enable and disable
+ breakpoints on executable lines.
+ - An experimental `erl_debugger` module with a new debugging API. Essentially,
+ it allows a single, local, process to be registered as the "debugger"
+ process for the node. This process is the one that will receive messages
+ notifying that a process hit a breakpoint. This way, the front-end
+ implementation of a debugger (such as edb from WhatApp) can be decoupled
+ from OTP.
+ - The `erl_debugger` module also exposes new BIFs to inspect `X` and `Y`
+ registers of a suspended process. Together with new code-information BIFs,
+ this let's a debugger show the values of variables in scope for a suspended
+ process.
+
+ Own Id: OTP-19609
+ Related Id(s): PR-8670, PR-9334, PR-9604
+
+ *** HIGHLIGHT ***
+
+- Update internal `ryu` implementation to use latest version. The new version is
+ a little bit faster in some scenarios. `ryu` is used by `float_to_list/1` and
+ similar functions to convert floats to strings.
+
+ Own Id: OTP-19613
+ Related Id(s): PR-9733
+
+- Update of MD5 implementation from OpenSSL version 3.1.4 to 3.5.
+
+ Own Id: OTP-19614
+ Related Id(s): PR-9775
+
+- Small optimization in binary_to_term by not allocating an unnecessary large
+ native stack frame.
+
+ Own Id: OTP-19618
+ Related Id(s): PR-9759, PR-9809
+
+> #### Full runtime dependencies of erts-16.0
+>
+> kernel-9.0, sasl-3.3, stdlib-4.1
+
+# et-1.7.2
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of et-1.7.2
+>
+> erts-9.0, kernel-5.3, runtime_tools-1.10, stdlib-3.4, wx-1.2
+
+# eunit-2.10
+
+## Fixed Bugs and Malfunctions
+
+- Fix so that when running tests in parallel and one test is cancelled due to a
+ failing setup, it is report as cancelled. Before this fix the cancellation was
+ ignored.
+
+ Own Id: OTP-19630
+ Related Id(s): PR-9794
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of eunit-2.10
+>
+> erts-9.0, kernel-5.3, stdlib-3.4
+
+# ftp-1.2.4
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of ftp-1.2.4
+>
+> erts-7.0, kernel-6.0, runtime_tools-1.15.1, ssl-10.2, stdlib-3.5
+
+# inets-9.4
+
+## Fixed Bugs and Malfunctions
+
+- Replaced calls to deprecated `crypto:start()` with
+ `application:start(crypto)`.
+
+ Own Id: OTP-19485
+ Related Id(s): PR-8592
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- Enhanced http client documentation.
+
+ Own Id: OTP-19520
+ Related Id(s): PR-9516
+
+- Enhance made to mod_esi documentation
+
+ Own Id: OTP-19521
+ Related Id(s): PR-9472
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Inets Makefiles now create and use dependencies files for .erl files
+
+ Own Id: OTP-19624
+ Related Id(s): PR-9101
+
+> #### Full runtime dependencies of inets-9.4
+>
+> erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14,
+> ssl-9.0, stdlib-5.0, stdlib-6.0
+
+# jinterface-1.15
+
+## Improvements and New Features
+
+- The `.class` files of jinterface are now part of the prebuilt archive using
+ Java 8.
+
+ Own Id: OTP-19308
+ Related Id(s): PR-8960
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+# kernel-10.3
+
+## Fixed Bugs and Malfunctions
+
+- Fixed an issue where output to the shell would not print the prompt on a new
+ line.
+
+ Own Id: OTP-19228
+ Related Id(s): PR-8820
+
+- When in `shell` is in `-noshell` mode, and in `latin1` encoding mode, io
+ requests in latin1 encoding will not be translated to unicode and back to
+ latin1.
+
+ Own Id: OTP-19296
+ Related Id(s): PR-9013
+
+- Fixed a bug where a composing unicode character would bind to a character not
+ available to the user and deleting that character would cause a crash.
+
+ Own Id: OTP-19297
+ Related Id(s): PR-9005
+
+- The `-noshell` mode has been updated to read data lazily from standard
+ input. Before this fix any data would be read greedily which meant that Erlang
+ could consume data not meant for it. It also meant that in order for
+ shell:start_interactive/0 to work on Windows an API that did not support
+ reading of Unicode characters had to be used.
+
+ Own Id: OTP-19313
+ Related Id(s): GH-8113, PR-8962
+
+- The Erlang shell no longer crashes when a shell prompt ends with an escape
+ sequence.
+
+ Own Id: OTP-19414
+ Related Id(s): PR-9272
+
+- code:get_doc/1 now works for cover-compiled modules.
+
+ Own Id: OTP-19513
+ Related Id(s): PR-9433
+
+- An infinite loop in CNAME loop detection that can cause Out Of Memory has been
+ fixed. This affected CNAME lookup with the internal DNS resolver.
+
+ Own Id: OTP-19544
+ Related Id(s): PR-9587, OTP-19545
+
+- The internal resolver framework has been fixed to wait with the first resolver
+ lookup until the ERL_INETRC environment variable has been applied.
+
+ Previously, on some platform(s) (Linux) a first lookup when figuring out the
+ domain name was always placed on the `native` resolver even if ERL_INETRC was
+ used to disable it.
+
+ Own Id: OTP-19555
+ Related Id(s): PR-9543
+
+- Fix `logger:add_handler(default, ...)` to correctly replay events generated
+ during startup when the default logger is set to `undefined` in logger's
+ configuration parameters.
+
+ Own Id: OTP-19588
+ Related Id(s): GH-9436, PR-9595
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+- Removed the default values for SCTP send (sndbuf) and receive (recbuf)
+ buffers.
+
+ Own Id: OTP-19627
+ Related Id(s): GH-9722, OTP-19576
+
+ *** HIGHLIGHT ***
+
+## Improvements and New Features
+
+- application:load/1 slows down as the number of directories in the code path
+ increases because the call to code:where_is_file/1 for the '.app' file must
+ scan each directory for the app.
+
+ `code_server` maintains a cache of the contents of directories in the path.
+ Re-using that cache when searching for '.app' files in application:load/1
+ may improve its runtime, especially when loading multiple applications.
+
+ Own Id: OTP-19194
+ Related Id(s): PR-8078
+
+- The `Erlang SSH daemon` now uses the same backend to handle multiline
+ functionality as the Erlang shell.
+
+ Own Id: OTP-19226
+ Related Id(s): PR-8805
+
+- Added support for `SIGWINCH`, `SIGCONT`, and `SIGINFO` signals to
+ os:set_signal/2 where available.
+
+ Own Id: OTP-19278
+ Related Id(s): PR-8887, PR-8938
+
+- Add net_kernel:allowed/0, it returns a list of nodes that are explicitly
+ allowed to connect to the node by calling net_kernel:allow/1
+
+ Own Id: OTP-19287
+ Related Id(s): PR-8207
+
+- Documentation chunks (EEP-48) has been updated to include the following
+ reserved metadata fields: `behaviours`, `group`, `source_path`, and
+ `source_annos`. The compiler has also been updated to emit this metadata. See
+ the EEP-48 documentation for more details.
+
+ Own Id: OTP-19306
+ Related Id(s): PR-8945, PR-8975
+
+- The erpc:call/3, erpc:call/5, erpc:multicall/3, and erpc:multicall/5
+ functions now also accept an option map as last argument containing the
+ `timeout` and `always_spawn` options. The `always_spawn` option can be used in
+ order to ensure that the call operation will use a newly spawned process when
+ executing the remote call.
+
+ Own Id: OTP-19343
+ Related Id(s): PR-8642
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Improved open debug for gen_tcp_socket (connect and listen) and gen_udp_socket
+ (open).
+
+ Own Id: OTP-19386
+
+- `t:io:standard_error/0` has been updated to write via a NIF API instead of a
+ port. This allows it to access the dirty-scheduler pool and make sure that
+ writes have been written to the OSs `stderr` when io:format/3 and equivalent
+ return.
+
+ Own Id: OTP-19401
+ Related Id(s): PR-9116
+
+- Added the option `exception_on_failure` to os:cmd/2 to make os:cmd/2 raise
+ an exception if the command fails to execute.
+
+ Own Id: OTP-19404
+ Related Id(s): PR-9082
+
+- A `socket` option `{otp,select_read}` has been added that enables keeping a
+ socket in the VM select/poll set between calls to recv functions.
+
+ This increases throughput by reducing the number of calls to said functions.
+
+ Own Id: OTP-19451
+ Related Id(s): PR-9344
+
+- Add a configure chapter to the socket usage guide
+
+ Own Id: OTP-19522
+ Related Id(s): PR-9508
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Increase the default inet-driver buffer size(s). Also introduce kernel
+ parameters for UDP and SCTP to change the sizes when creating (those) sockets.
+
+ Own Id: OTP-19576
+
+- An **experimental** API for a native debugger has been added. The main
+ components are the following:
+
+ - A new compiler option `beam_debug_info` for the Erlang compiler. When given,
+ most optimizations are disabled and debug information suitable for the
+ native debugger are added to generated BEAM files.
+ - A new `+D` emulator flag. When given, the VM becomes "debuggable", which
+ means that when modules that been compiled with the `beam_debug_info` option
+ are loaded, the code is instrumented so that one can enable and disable
+ breakpoints on executable lines.
+ - An experimental `erl_debugger` module with a new debugging API. Essentially,
+ it allows a single, local, process to be registered as the "debugger"
+ process for the node. This process is the one that will receive messages
+ notifying that a process hit a breakpoint. This way, the front-end
+ implementation of a debugger (such as edb from WhatApp) can be decoupled
+ from OTP.
+ - The `erl_debugger` module also exposes new BIFs to inspect `X` and `Y`
+ registers of a suspended process. Together with new code-information BIFs,
+ this let's a debugger show the values of variables in scope for a suspended
+ process.
+
+ Own Id: OTP-19609
+ Related Id(s): PR-8670, PR-9334, PR-9604
+
+ *** HIGHLIGHT ***
+
+> #### Full runtime dependencies of kernel-10.3
+>
+> crypto-5.0, erts-15.2.5, sasl-3.0, stdlib-6.0
+
+# megaco-4.8
+
+## Fixed Bugs and Malfunctions
+
+- Add missing spec and doc for exported functions.
+
+ Own Id: OTP-19523
+
+## Improvements and New Features
+
+- Nano seconds are now used for (example) meas result presentation.
+
+ Nanoseconds are now used, for example, in `meas` result presentations.
+
+ Own Id: OTP-19403
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- Add copyright notice to files that still had none.
+
+ Own Id: OTP-19570
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- Tweaked some of the meas examples in order to make them benchmark compatible.
+
+ Own Id: OTP-19598
+
+> #### Full runtime dependencies of megaco-4.8
+>
+> asn1-3.0, debugger-4.0, erts-12.0, et-1.5, kernel-8.0, runtime_tools-1.8.14,
+> stdlib-2.5
+
+# mnesia-4.24
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of mnesia-4.24
+>
+> erts-9.0, kernel-5.3, stdlib-5.0
+
+# observer-2.18
+
+## Fixed Bugs and Malfunctions
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- With this change etop from observer application will scroll as top from shell
+
+ Own Id: OTP-19528
+ Related Id(s): PR-9659
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of observer-2.18
+>
+> erts-15.0, et-1.5, kernel-10.0, runtime_tools-2.1, stdlib-5.0, wx-2.3
+
+# odbc-2.16
+
+## Fixed Bugs and Malfunctions
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- Updated odbc configure to enable easier use of iodbc driver.
+
+ Own Id: OTP-19456
+ Related Id(s): PR-9083
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of odbc-2.16
+>
+> erts-6.0, kernel-3.0, stdlib-2.0
+
+# os_mon-2.11
+
+## Fixed Bugs and Malfunctions
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- `m:disksup` will now recognize HAMMER2 volumes.
+
+ Own Id: OTP-19207
+ Related Id(s): PR-8704
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of os_mon-2.11
+>
+> erts-14.0, kernel-9.0, sasl-4.2.1, stdlib-5.0
+
+# parsetools-2.7
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of parsetools-2.7
+>
+> erts-6.0, kernel-3.0, stdlib-3.4
+
+# public_key-1.18
+
+## Fixed Bugs and Malfunctions
+
+- Enable public_key to decode legacy certs using md2 hash.
+
+ Own Id: OTP-19616
+ Related Id(s): GH-9754, PR-9755
+
+## Improvements and New Features
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- Ignore instead of crashing unhandled entries when loading CA-certificates.
+
+ Own Id: OTP-19573
+ Related Id(s): GH-9565, PR-9677
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- The ancient ASN.1 modules used in `public_key` has been replaced with more
+ modern versions, but we have strived to keep the documented Erlang API for the
+ `public_key` application compatible.
+
+ Own Id: OTP-19612
+ Related Id(s): PR-9774
+
+ *** HIGHLIGHT ***
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+> #### Full runtime dependencies of public_key-1.18
+>
+> asn1-5.0, crypto-5.0, erts-13.0, kernel-8.0, stdlib-4.0
+
+# reltool-1.0.2
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of reltool-1.0.2
+>
+> erts-15.0, kernel-9.0, sasl-4.2.1, stdlib-5.0, tools-2.6.14, wx-2.3
+
+# runtime_tools-2.2
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- With this change observer will use cheaper iterators to avoid locking when not
+ necessary.
+
+ Own Id: OTP-19584
+ Related Id(s): PR-9711
+
+> #### Full runtime dependencies of runtime_tools-2.2
+>
+> erts-16.0, kernel-10.0, mnesia-4.12, stdlib-6.0
+
+# sasl-4.3
+
+## Fixed Bugs and Malfunctions
+
+- Fixed the documentation for the ExtraFiles option to systools:make_tar/2.
+
+ Own Id: OTP-19279
+ Related Id(s): GH-8842, PR-8894
+
+## Improvements and New Features
+
+- `.appup` files are now included in releases in order to make it possible to
+ create upgrade packages from an installed release.
+
+ Own Id: OTP-19398
+ Related Id(s): PR-8973
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of sasl-4.3
+>
+> erts-15.0, kernel-6.0, stdlib-4.0, tools-2.6.14
+
+# snmp-5.19
+
+## Improvements and New Features
+
+- EEP-69: Nominal Types has been implemented. As a side effect, nominal types
+ can encode opaque types. We changed all opaque-handling logic and improved
+ opaque warnings in Dialyzer.
+
+ All existing Erlang type systems are structural: two types are seen as
+ equivalent if their structures are the same. Type comparisons are based on the
+ structures of the types, not on how the user explicitly defines them. For
+ example, in the following example, `meter()` and `foot()` are equivalent. The
+ two types can be used interchangeably. Neither of them differ from the basic
+ type `integer()`.
+
+ -type meter() :: integer().
+ -type foot() :: integer().
+
+ Nominal typing is an alternative type system, where two types are equivalent
+ if and only if they are declared with the same type name. The EEP proposes one
+ new syntax -nominal for declaring nominal types. Under nominal typing,
+ `meter()` and `foot()` are no longer compatible. Whenever a function expects
+ type `meter()`, passing in type `foot()` would result in a Dialyzer error.
+
+ -nominal meter() :: integer().
+ -nominal foot() :: integer().
+
+ More nominal type-checking rules can be found in the EEP. It is worth noting
+ that most work for adding nominal types and type-checking is in
+ `erl_types.erl`. The rest are changes that removed the previous opaque
+ type-checking, and added an improved version of it using nominal type-checking
+ with reworked warnings.
+
+ Backwards compatibility for opaque type-checking is not preserved by this PR.
+ Previous opaque warnings can appear with slightly different wordings. A new
+ kind of opaque warning `opaque_union` is added, together with a Dialyzer
+ option `no_opaque_union` to turn this kind of warnings off.
+
+ Own Id: OTP-19364
+ Related Id(s): PR-9079
+
+ *** HIGHLIGHT ***
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- Add copyright notice to files that still had none.
+
+ Own Id: OTP-19572
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of snmp-5.19
+>
+> crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12, runtime_tools-1.8.14,
+> stdlib-5.0
+
+# ssh-5.3
+
+## Fixed Bugs and Malfunctions
+
+- The implementation of the ssh server-side supervision tree has been improved.
+
+ Own Id: OTP-19324
+ Related Id(s): GH-8223, PR-8968
+
+- SSH daemon accepts fun as tcpip_tunnel_in option. This provides more control
+ over TCP connection tunnel handle by server.
+
+ Own Id: OTP-19566
+ Related Id(s): PR-9571
+
+## Improvements and New Features
+
+- The `Erlang SSH daemon` now uses the same backend to handle multiline
+ functionality as the Erlang shell.
+
+ Own Id: OTP-19226
+ Related Id(s): PR-8805
+
+- CBC algorithms are not offered by default. See Configuring algorithms in SSH
+ if you wish to enable them.
+
+ Own Id: OTP-19420
+ Related Id(s): PR-9277
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Daemon can be configured (bannerfun option) to send banner message at the
+ beginning of user authentication.
+
+ Own Id: OTP-19535
+ Related Id(s): PR-9149
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- For interoperability reasons, SSH ignore message with no length specified is
+ treated as message with zero length specified - it will not cause decode
+ error.
+
+ Own Id: OTP-19586
+ Related Id(s): PR-9214
+
+- Documentation improvements.
+
+ Own Id: OTP-19596
+ Related Id(s): PR-9298
+
+> #### Full runtime dependencies of ssh-5.3
+>
+> crypto-5.0, erts-14.0, kernel-10.3, public_key-1.6.1, runtime_tools-1.15.1,
+> stdlib-5.0, stdlib-6.0
+
+# ssl-11.3
+
+## Improvements and New Features
+
+- Refactoring, minor optimizations and improved log printouts.
+
+ Own Id: OTP-19367
+ Related Id(s): PR-9019
+
+- supervisor:which_child/2 is now used to make start-up code for
+ TLS-connections simpler and more straight forward, and to increase stability
+ and maintainability of the ssl application.
+
+ Own Id: OTP-19406
+ Related Id(s): PR-9231
+
+- The data handling for tls-v1.3 has been optimized.
+
+ Own Id: OTP-19430
+ Related Id(s): PR-9305
+
+- Added experimental socket support.
+
+ Own Id: OTP-19463
+ Related Id(s): PR-9398
+
+- Improve code health by removing dead code.
+
+ Own Id: OTP-19531
+ Related Id(s): PR-9563
+
+- A test module for TLS distribution over `socket` has been implemented.
+
+ Own Id: OTP-19539
+ Related Id(s): PR-9511
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of ssl-11.3
+>
+> crypto-5.6, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.16.4,
+> runtime_tools-1.15.1, stdlib-7.0
+
+# stdlib-7.0
+
+## Fixed Bugs and Malfunctions
+
+- Shell help now orders the commands in alphabetical order.
+
+ Own Id: OTP-19161
+ Related Id(s): PR-8573
+
+- `proc_lib:stop/1,3` (and in extension gen_server:stop/3, gen_statem:stop/3
+ and so on) have been updated to not throw an error if the process to be
+ stopped exits with the same reason as given to proc_lib:stop/3.
+
+ Own Id: OTP-19233
+ Related Id(s): PR-8772
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- The size of an atom in the Erlang source code was limited to 255 bytes in
+ previous releases, meaning that an atom containing only emojis could contain
+ only 63 emojis.
+
+ While atoms are still only allowed to contain 255 characters, the number of
+ bytes is no longer limited.
+
+ External tools that parse the `AtU8` chunk of a BEAM file directly need to be
+ updated. Tools that use
+ `beam_lib:chunks(Beam, [atoms)`](beam_lib:chunks/2) to read the atom table
+ will continue to work.
+
+ Own Id: OTP-19285
+ Related Id(s): PR-8913
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- argparse:help/1 now accepts unicode:chardata/0.
+
+ Own Id: OTP-19303
+ Related Id(s): PR-8932
+
+- The literals chunk in BEAM is no longer compressed, resulting in slightly
+ smaller BEAM files when a BEAM file is stripped using
+ beam_lib:strip_files/1.
+
+ This is a potential incompatibility for tools that read and interpret the
+ contents of the literal chunk. One way to update such tools to work with the
+ new format is to retrieve the chunk using
+ `beam_lib:chunks(Beam, [literals)`](beam_lib:chunks/2).
+
+ Own Id: OTP-19323
+ Related Id(s): GH-8967, PR-8988
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- The previous digraph_utils:preorder/1 and digraph_utils:postorder/1 did
+ not start the traversal from root nodes. This fix makes both traversals only
+ start or restart from a root node in one of the components, or an arbitrary
+ node if no root node can be visited.
+
+ Own Id: OTP-19393
+ Related Id(s): PR-9171
+
+- Auto-completion in the shell is now significantly faster for function
+ parameters that uses complex custom types.
+
+ Own Id: OTP-19413
+ Related Id(s): PR-9271
+
+- Stringfying a non-latin1 atom will now produce a readable string instead of
+ encoding each character using `\x{...}` escape sequences. Example:
+
+ -define(S(T), ??T).
+
+ atom() ->
+ ?S('атом').
+
+ The `atom/0` function now returns `"'атом'"` instead of
+ `"'\\x{430}\\x{442}\\x{43E}\\x{43C}'"`.
+
+ Own Id: OTP-19421
+ Related Id(s): GH-9173, PR-9276
+
+- A few minor issues were corrected in `syntax_tools`, as well in the
+ `erl_anno` module.
+
+ Own Id: OTP-19422
+ Related Id(s): PR-9253
+
+- `m:dets` could print error messages to standard output when repairing DETS
+ files. This has been changed to send the messages to `logger`.
+
+ `ets:fun2ms` would print an error message to standard output as well as
+ returning an error tuple. The printing of the message has been removed.
+
+ Own Id: OTP-19427
+ Related Id(s): PR-9232, PR-9446
+
+- The functions for converting to and from the RFC1339 date and time format
+ would not properly handle fractional seconds for negative times.
+
+ Own Id: OTP-19441
+ Related Id(s): GH-9279, PR-9280
+
+- Replaced calls to deprecated `crypto:start()` with
+ `application:start(crypto)`.
+
+ Own Id: OTP-19485
+ Related Id(s): PR-8592
+
+- Fixed a bug when calling shell completion on a reserved word followed by a _(_
+ would crash the shell.
+
+ Own Id: OTP-19511
+ Related Id(s): GH-9470
+
+- Corrected the spec of ets:update_element/4.
+
+ Own Id: OTP-19514
+ Related Id(s): PR-9504
+
+- Corrected the spec for ets:info/1.
+
+ Own Id: OTP-19515
+ Related Id(s): PR-9514
+
+- Fixed crash when defining records with a string field in the shell
+
+ Own Id: OTP-19533
+ Related Id(s): GH-9557
+
+- Details in the hibernation implementation and time-out handling has been
+ improved for `gen_statem`. In particular to avoid selective receive when
+ cancelling a time-out.
+
+ Own Id: OTP-19540
+ Related Id(s): PR-9579
+
+- Fixed a bug when getting help on a module compiled without debug_info.
+
+ Own Id: OTP-19583
+ Related Id(s): PR-9654
+
+- Fix `zip` extraction to wrap invalid DOS timestamps to their correct value
+ instead of returning the actual value. Before this fix the timestamp returned
+ could have a second greater than 59. The bug has been present since Erlang/OTP
+ 27.1.
+
+ Own Id: OTP-19593
+ Related Id(s): GH-9536, PR-9537
+
+- Enhance specs of timeout for improving documentation and dialyzer analysis.
+
+ Own Id: OTP-19604
+ Related Id(s): PR-9574
+
+## Improvements and New Features
+
+- Singleton type variables in an union type do not make sense from Dialyzer's
+ point of view. The following example is ill-typed:
+
+ -spec run_test(Opts) -> term()
+ when Opts :: {join_specs, Bool} | {test, Bool}.
+
+ This used to be reported as a warning. In OTP-28, this is an error
+
+ Own Id: OTP-19125
+ Related Id(s): PR-8556
+
+- By default, sets created by the `sets` module will now be represented as
+ maps.
+
+ Own Id: OTP-19127
+ Related Id(s): PR-8429
+
+- For various error types, the compiler now tries to suggest potential fixes by
+ adding "did you mean ...?" at the end of error messages.
+
+ When a function is used with wrong arity, the compiler will try to suggest a
+ defined function with the same name but a different arity. For example, given
+ the following module:
+
+ -module(typos).
+ -export([t/0]).
+ bar(A) -> A.
+ bar(A,A,A) -> A.
+ bar(A,A,A,A) -> A.
+ t() -> bar(0, 0).
+
+ The compiler will emit the following message:
+
+ typo.erl:6:12: function bar/2 undefined, did you mean bar/1,3,4?
+ % 6| t() -> bar(0, 0).
+ % | ^
+
+ For compiler errors that can easily be caused by typos, the compiler will try
+ to suggest what the correct variable or function name, could be. For example,
+ given the following module:
+
+ -module(typos).
+ -export([bar/2]).
+
+ bar(A0, B0) ->
+ A + B.
+
+ the compiler will emit the following error messages:
+
+ typos.erl:5:5: variable 'A' is unbound, did you mean 'A0'?
+ % 5| A + B.
+ % | ^
+
+ typos.erl:5:9: variable 'B' is unbound, did you mean 'B0'?
+ % 5| A + B.
+ % | ^
+
+ Error types that now suggest correct arities: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `bad_nowarn_bif_clash`, `undefined_function`.
+
+ Error types that now suggest correct names: `bad_inline`, `undefined_nif`,
+ `bad_nowarn_unused_function`, `undefined_on_load`, `undefined_function`,
+ `undefined_record`, `undefined_field`, `unbound_var`.
+
+ Using a function with wrong arity has higher precedence than having a typo in
+ the function name. If the compiler can find a defined function with the same
+ name but a different arity, it will not suggest a defined function with a
+ close-enough name, regardless of arity.
+
+ Own Id: OTP-19180
+ Related Id(s): PR-8699, PR-9094
+
+ *** HIGHLIGHT ***
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Related Id(s): PR-8926
+
+ *** HIGHLIGHT ***
+
+- Before restarting a child, a supervisor must check if the restart limit is
+ reached. This adds a penalty to the overall restart time, which should be kept
+ low. The algorithm has been optimized from 2\*O(n) to O(n) behavior.
+
+ Own Id: OTP-19204
+ Related Id(s): PR-8261
+
+- Added the possibility to configure shell docs column width through the stdlib
+ parameter `shell_docs_columns`.
+
+ Own Id: OTP-19224
+ Related Id(s): PR-8651
+
+- The io:setopts/2 function now accepts the `line_history` option for more
+ explicit handling of when to save shell history.
+
+ Own Id: OTP-19230
+ Related Id(s): PR-8792
+
+- The shell now prints a help message explaining how to interrupt a running
+ command when stuck executing a command for longer than 5 seconds.
+
+ Own Id: OTP-19231
+ Related Id(s): PR-8793
+
+- Binaries can now be used as input to calendar:rfc3339_to_system_time/2, and
+ produced as output of calendar:system_time_to_rfc3339/2.
+
+ Own Id: OTP-19250
+ Related Id(s): PR-8812
+
+- The `erl -noshell` mode has been updated to have two sub modes called `raw`
+ and `cooked`, where `cooked` is the old default behaviour and `raw` can be
+ used to bypass the line-editing support of the native terminal. Using `raw`
+ mode it is possible to read keystrokes as they happen without the user having
+ to press Enter. Also, the `raw` mode does not echo the typed characters to
+ stdout. An example of how to create a tic-tac-toe game using this mechanism is
+ included in the documentation.
+
+ Own Id: OTP-19314
+ Related Id(s): GH-8037, PR-8962
+
+ *** HIGHLIGHT ***
+
+- Added io:get_password/0 that can read passwords from stdin when in "raw"
+ `-noshell` mode.
+
+ Own Id: OTP-19315
+ Related Id(s): PR-8962, PR-9006
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Related Id(s): PR-8625
+
+ *** HIGHLIGHT ***
+
+- New options for suppressing behaviour warnings have been added:
+
+ - `nowarn_conflicting_behaviours`
+ - `nowarn_undefined_behaviour_func`
+ - `nowarn_undefined_behaviour`
+ - `nowarn_undefined_behaviour_callbacks`
+ - `nowarn_ill_defined_behaviour_callbacks`
+ - `nowarn_ill_defined_optional_callbacks`
+
+ Own Id: OTP-19334
+ Related Id(s): GH-8985, PR-9020
+
+- The `join(Binaries, Separator)` function that joins a list of binaries has
+ been added to the `binary` module.
+
+ Own Id: OTP-19337
+ Related Id(s): GH-8099, PR-8100
+
+ *** HIGHLIGHT ***
+
+- The supervisor:which_child/2 function has been added to facilitate getting
+ the pid of a sibling process; that is a process under same supervisor as the
+ process that calls to call the new function.
+
+ Own Id: OTP-19345
+ Related Id(s): PR-8976
+
+- The function erl_anno:set_end_location/2 for setting the end location of a
+ token has been added.
+
+ Own Id: OTP-19354
+ Related Id(s): PR-8966
+
+- Added a warning for calling non-exported functions with the remote function
+ call syntax from the same module, and likewise for the remote fun syntax.
+
+ Own Id: OTP-19371
+ Related Id(s): GH-9092, PR-9095
+
+- The `warn_deprecated_catch` option enables warnings for use of old-style catch
+ expressions on the form `catch Expr` instead of the modern
+ `try ... catch ... end`. To prevent new uses of uses of old catches to be
+ added, this compiler option can be enabled on the project level and
+ `-compile(nowarn_deprecated_catch).` added to individual files that still
+ contain old catches.
+
+ Own Id: OTP-19425
+ Related Id(s): PR-9154
+
+- Module `re` has been updated to use PCRE2, which is mostly backward
+ compatible with PCRE.
+
+ The most noticeable incompatibilities are
+
+ - The default character encoding is pure ASCII and not Latin1. Unicode support
+ is still available with options `unicode` and `ucp`.
+ - Options `bsr_anycrlf`, `bsr_unicode` and `{newline,_}` are only set when a
+ regex is compiled and cannot be changed at matching for precompiled regex.
+
+ Own Id: OTP-19431
+ Related Id(s): PR-9299, PR-9610
+
+ *** HIGHLIGHT ***
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- Defining a fun in terms of an imported function is not allowed. Before this
+ release, the compiler would not catch this kind of error if the name of the
+ imported function happened to be a BIF. Consider this example:
+
+ -module(fun_example).
+ -export([foo/0, bar/0]).
+ -import(m, [max/2, not_a_bif/0]).
+
+ foo() ->
+ fun max/2.
+
+ bar() ->
+ fun not_a_bif/0.
+
+ The compiler in Erlang/OTP 27 would generate the following messages:
+
+ fun_example.erl:9:5: function not_a_bif/0 undefined
+ % 9| fun not_a_bif/0.
+ % | ^
+
+ fun_example.erl:3:2: Warning: import directive overrides auto-imported BIF max/2 --
+ use "-compile({no_auto_import,[max/2]})." to resolve name clash
+ % 3| -import(m, [max/2, not_a_bif/0]).
+ % | ^
+
+ That is, there would be a (cryptic) error for `fun not_a_bif/0`, but only a
+ warning for `fun max/2`.
+
+ When compiling with this release, both attempts to create a fun will result in
+ error messages (as well as a warning):
+
+ fun_example.erl:6:5: creating a fun from imported name max/2 is not allowed
+ % 6| fun max/2.
+ % | ^
+
+ fun_example.erl:9:5: creating a fun from imported name not_a_bif/0 is not allowed
+ % 9| fun not_a_bif/0.
+ % | ^
+
+ fun_example.erl:3:2: Warning: import directive overrides auto-imported BIF max/2 --
+ use "-compile({no_auto_import,[max/2]})." to resolve name clash
+ % 3| -import(m, [max/2, not_a_bif/0]).
+ % | ^
+
+ Also, attempting to call a local function having the same name as
+ auto-imported BIF would result in an error if the BIF was added to Erlang/OTP
+ before R14, and a warning for newer BIFs. This has been changed to always emit
+ a warning. For example:
+
+ -module(bif_example).
+ -export([bar/1]).
+
+ bar(B) ->
+ is_boolean(B).
+
+ is_boolean(B) ->
+ B =:= true orelse B =:= false.
+
+ will now result in the following warning instead of an error:
+
+ if_example.erl:5:5: Warning: ambiguous call of overridden auto-imported BIF is_boolean/1 --
+ use erlang:is_boolean/1 or "-compile({no_auto_import,[is_boolean/1]})." to resolve name clash
+ % 5| is_boolean(B).
+ % | ^
+
+ Own Id: OTP-19432
+ Related Id(s): PR-9246
+
+- It is now possible to use any base for floating point numbers as described in
+ EEP 75: Based Floating Point Literals.
+
+ Computers represent floating point numbers in binary, but such numbers are
+ typically printed using base ten, for example 0.314159265e1. To maintain exact
+ bit-level precision when converting numbers to and from text, it is better to
+ use a base that matches the internally used base, such as 16 for a compact but
+ still exact representation, or 2 for visualizing or writing down the exact
+ internal format. One particular case where such exact representations are
+ useful is in code generating tools.
+
+ Examples:
+
+ > 2#0.111.
+ 0.875
+ > 16#fefe.fefe#e16.
+ 1.2041849337671418e24
+
+ Own Id: OTP-19452
+ Related Id(s): PR-9106
+
+ *** HIGHLIGHT ***
+
+- The callback function `handle_continue/2` in `gen_server` callback modules is
+ now cached like the others, thanks to code cleanup and optimization of the
+ internal behaviour loop.
+
+ This should only improve performance, not affect functionality.
+
+ Own Id: OTP-19474
+ Related Id(s): PR-9333
+
+- Encoding done by the `json` module has been optimized.
+
+ Own Id: OTP-19476
+ Related Id(s): PR-9251
+
+- There is a new `zstd` module that does Zstandard compression.
+
+ Own Id: OTP-19477
+ Related Id(s): PR-9316
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- Functions of a module can now be grouped in the shell code completion by using
+ the _group_ key in the _-doc_ attribute e.g. ``` -doc(#{group=><<"Public
+ API">>). fetch()->...
+
+
+ Functions, callbacks and types in the module reference documentation of OTP is now grouped using this feature.
+
+ Own Id: OTP-19483
+ Related Id(s): [PR-9408]
+
+
+- Added calendar:universal_time_to_system_time/1,2 and
+ calendar:local_time_to_system_time/1,2
+
+ Own Id: OTP-19505
+ Related Id(s): PR-9445
+
+- Improve error messages for json:decode/1.
+
+ Own Id: OTP-19508
+ Related Id(s): PR-9484
+
+- ETS `heir` can be set without getting an `ETS-TRANSFER` message. Useful when
+ the heir is a supervisor process that cannot handle custom messages.
+
+ Own Id: OTP-19512
+ Related Id(s): PR-7970
+
+- Added support for the Unicode 16 standard.
+
+ Own Id: OTP-19516
+ Related Id(s): PR-9141, PR-9518
+
+- When documenting a function or type that needs to deal with durations, usually
+ we can document it as "time in milliseconds". Since the `timer` family of
+ functions (`hms`, `hours`, `seconds`, ...) all return time in milliseconds, it
+ is useful to be able to use this type in type specifications.
+
+ Own Id: OTP-19526
+ Related Id(s): PR-9515
+
+- A new event time-out has been implemented in `gen_server`, that behaves more
+ like the one in `gen_statem`.
+
+ See the type gen_server:action/0 for `{timeout|hibernate,...}`, and also
+ related functions.
+
+ Own Id: OTP-19537
+ Related Id(s): PR-9287, PR-9615, PR-9621
+
+- Line numbers used to be reported in the following way:
+
+ 1> lists:last([]).
+ ** exception error: no function clause matching lists:last([]) (lists.erl, line 389)
+
+ Starting from Erlang/OTP 28, line numbers are now reported in the following
+ way:
+
+ 1> lists:last([]).
+ ** exception error: no function clause matching lists:last([]) (lists.erl:389)
+
+ Own Id: OTP-19538
+ Related Id(s): PR-9468
+
+ *** HIGHLIGHT ***
+
+- Upgrade pcre2 to 10.45
+
+ Own Id: OTP-19541
+ Related Id(s): PR-9582
+
+- Added functions that produce utf-8 binaries instead of iolists. New functions
+ are: io_lib:bformat/2, io_lib:bformat/3, io_lib:bfwrite/2,
+ io_lib:bfwrite/3, io_lib:bwrite/2 and io_lib:bwrite_string/3.
+
+ Own Id: OTP-19556
+ Related Id(s): PR-9772
+
+ *** HIGHLIGHT ***
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+- A list of PCRE2 incompatibilities is documented in a user's guide for stdlib.
+
+ Own Id: OTP-19578
+ Related Id(s): PR-9705
+
+- Change automatic hibernation of static supervisors so that they will hibernate
+ after being idle for 1 second instead of only after starting, dynamic
+ supervisors (simple_one_for_one) will not be hibernated at all. An option to
+ the supervisor is added to make it configurable for the application. This
+ option defaults to 1 second for static supervisors and to infinity for the
+ simple_one_for_one supervisors.
+
+ Own Id: OTP-19597
+ Related Id(s): PR-9680
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+> #### Full runtime dependencies of stdlib-7.0
+>
+> compiler-5.0, crypto-4.5, erts-16.0, kernel-10.0, sasl-3.0, syntax_tools-3.2.1
+
+# syntax_tools-4.0
+
+## Fixed Bugs and Malfunctions
+
+- A few minor issues were corrected in `syntax_tools`, as well in the
+ `erl_anno` module.
+
+ Own Id: OTP-19422
+ Related Id(s): PR-9253
+
+## Improvements and New Features
+
+- Comprehensions have been extended with zip generators according to EEP 73.
+
+ Example:
+
+ 1> [A+B || A <- [1,2,3] && B <- [4,5,6]].
+ [5,7,9]
+
+ Own Id: OTP-19184
+ Related Id(s): PR-8926
+
+ *** HIGHLIGHT ***
+
+- New strict generators have been added for comprehensions.
+
+ The currently existing generators are "relaxed": they ignore terms in the
+ right-hand side expression that do not match the left-hand side pattern.
+
+ The new strict generators fail with exception `badmatch` if a pattern doesn't
+ match.
+
+ Examples:
+
+ Using the current relaxed generator operator `<-`, any element not matching
+ the pattern `{_,_}` will be silently discarded:
+
+ 1> [T || {_,_}=T <- [{ok,1},ok,{error,2}]].
+ [{ok,1},{error,2}]
+
+ If the intention is that all lists processed by a list comprehension must only
+ contain tuples of size two, using the new strict version of the operator
+ ensures that term not matching will cause a crash:
+
+ 2> [T || {_,_}=T <:- [{ok,1},ok,{error,2}]].
+ ** exception error: no match of right hand side value ok
+
+ Using the strict generator operator to mark the intention that all list
+ elements must match the pattern could help finding mistakes quicker if
+ something unpexected is added to the list processed by the generator.
+
+ The strict version for bitstring generators is `<:=`.
+
+ Own Id: OTP-19317
+ Related Id(s): PR-8625
+
+ *** HIGHLIGHT ***
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of syntax_tools-4.0
+>
+> compiler-9.0, erts-16.0, kernel-10.3, stdlib-7.0
+
+# tftp-1.2.3
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of tftp-1.2.3
+>
+> erts-6.0, kernel-6.0, stdlib-5.0
+
+# tools-4.1.2
+
+## Fixed Bugs and Malfunctions
+
+- A crash has been eliminated in tprof:collect/0 when unloading a module while
+ collecting traces.
+
+ Own Id: OTP-19135
+ Related Id(s): GH-8483, PR-8547
+
+- Improved the `indent-region` Emacs command, which could indent badly when
+ inside multiline string.
+
+ Own Id: OTP-19396
+ Related Id(s): PR-9186
+
+- eprof:start_profiling/3 can now return information about which process it
+ failed to trace.
+
+ Own Id: OTP-19419
+ Related Id(s): PR-9219
+
+- Fixed a race condition when processes cause the Cover server to be started at
+ the same time.
+
+ Own Id: OTP-19517
+ Related Id(s): PR-9124
+
+- Fix bug in `tprof` where the session name could not be set.
+
+ Own Id: OTP-19580
+ Related Id(s): PR-9648
+
+- Add `tprof` to the `.app` file.
+
+ Own Id: OTP-19628
+ Related Id(s): PR-9787
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of tools-4.1.2
+>
+> compiler-8.5, erts-15.0, erts-15.0, kernel-10.0, runtime_tools-2.1, stdlib-6.0
+
+# wx-2.5
+
+## Improvements and New Features
+
+- Fixed licenses in files and added ORT curations to the following apps: otp,
+ eldap, erl_interface, eunit, parsetools, stdlib, syntax_tools, and ERTS.
+
+ Own Id: OTP-19478
+ Related Id(s): PR-9376, PR-9402, PR-9819
+
+- Added support for compiling Erlang/OTP for Windows on ARM64.
+
+ Own Id: OTP-19480
+ Related Id(s): PR-8734
+
+- When compiling C/C++ code on Unix systems, the compiler hardening flags
+ suggested by the Open Source Security Foundation are now enabled by default.
+ To disable them, pass `--disable-security-hardening-flags` to `configure`.
+
+ Own Id: OTP-19519
+ Related Id(s): PR-9441
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of wx-2.5
+>
+> erts-12.0, kernel-8.0, stdlib-5.0
+
+# xmerl-2.1.4
+
+## Fixed Bugs and Malfunctions
+
+- With this change all public functions in xmerl have specs.
+
+ Own Id: OTP-19534
+ Related Id(s): PR-9327
+
+## Improvements and New Features
+
+- The license and copyright header has changed format to include an
+ `SPDX-License-Identifier`. At the same time, most files have been updated to
+ follow a uniform standard for license headers.
+
+ Own Id: OTP-19575
+ Related Id(s): PR-9670
+
+> #### Full runtime dependencies of xmerl-2.1.4
+>
+> erts-6.0, kernel-8.4, stdlib-2.5
+
+# Thanks to
+
+Adam Wight, Aleksander Lisiecki, Alexandre Rodrigues, Anders Ågren Thuné, Andrea
+Leopardi, Ariel Otilibili, Benedikt Reinartz, Benjamin Philip, Brujo Benavides,
+Chris Freeze, Christophe De Troyer, Cocoa, Dairon Medina Caro, Daniel Gorin,
+Daniel Kozmacs, Dániel Szoboszlay, dependabotbot, Dmitri Vereshchagin, Dominic
+Letz, Douglas Vought, Egor Ignatov, Eksperimental, Frank Hunleth, Freddie
+Lamble, Fredrik Frantzen, Frej Drejhammar, Gary Rennie, Hichem Fantar, Ilya
+Klyuchnikov, iri, Isabell H, Jan Uhlig, Jean-Louis Huynen, Jean-Sébastien
+Pédron, João Henrique Ferreira de Freitas, Johannes Christ, Jonas Bernoulli,
+Jonatan Kłosko, José Valim, Juan Barrios, Julian Doherty, Keyhan Jannat Khah ☕,
+Kirill A. Korinsky, lucioleKi, Lukasz Samson, Maria Scott, Mario Idival, Mario
+Uher, Marko Mindek, Martin Davidsson, Matwey V. Kornilov, Maxim Fedorov, Michael
+Davis, Michael Neumann, Nelson Vides, Nicholas Moen, Onno Vos, Paul Guyot,
+Philip Munksgaard, preciz, Richard Carlsson, Roberto Aloi, Robin Morisset,
+Roeland van Batenburg, ruslandoga, Ryan Kirkman, S0AndS0, sabiwara, Sam Weaver,
+Sergei Shuvatov, siiky, Simon Cornish, Siri Hansen, Stavros Aronis, Stefan
+Grundmann, Steffen Deusch, Tobias Pfeiffer, Tomer, Vadim Yanitskiy, Vance
+Shipley, William Fank Thomé, williamthome, William Yang, Wojtek Mach, Wojtek
+Surowka, yagogarea, Yoshiyuki Kurauchi, Zero King
+