aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2025-05-06 11:07:57 +0200
committerLoïc Hoguin <[email protected]>2025-05-06 11:07:57 +0200
commit94c34b9d2375a135dd001fcc3acc9cbc4d55cc2c (patch)
tree42bd0097a79929924850b5db4bda8aeb6080a049
parentfc2245b842fd7d4c11fee289a14a2a82058775c2 (diff)
downloadci.erlang.mk-94c34b9d2375a135dd001fcc3acc9cbc4d55cc2c.tar.gz
ci.erlang.mk-94c34b9d2375a135dd001fcc3acc9cbc4d55cc2c.tar.bz2
ci.erlang.mk-94c34b9d2375a135dd001fcc3acc9cbc4d55cc2c.zip
OTP-28.0-rc4
-rw-r--r--early-plugins.mk4
-rw-r--r--release-notes/OTP-28.0-rc4.README.txt3652
2 files changed, 3654 insertions, 2 deletions
diff --git a/early-plugins.mk b/early-plugins.mk
index 75dd652..e15c9ef 100644
--- a/early-plugins.mk
+++ b/early-plugins.mk
@@ -22,7 +22,7 @@ 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-28 := OTP-28.0-rc4
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)
@@ -128,7 +128,7 @@ 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-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-28-DROPPED := OTP-28.0-rc1 OTP-28.0-rc2 OTP-28.0-rc3
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-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
+