Erlang/OTP 28.1

This release of Erlang/OTP can be built from source or installed using pre-built packages for your OS or third-party tools (such as kerl, asdf or mise).

docker run -it erlang:28.1

Highlights #

OTP-19552
Application(s):
public_key, ssl
Related Id(s):

PR-10004

Added support for quantum crypto signature algorithm ML-DSA (ssl and public_key) and key exchange algorithm ML-KEM (ssl).

OTP-19655
Application(s):
runtime_tools
Related Id(s):

PR-9853

A User’s Guide to dbg is now available in the documentation.

OTP-19657
Application(s):
crypto
Related Id(s):

PR-9900

Support for ML-DSA and ML-KEM provided by OpenSSL 3.5.

Algorithms mldsa44, mldsa65 and mldsa87 can be passed to crypto:sign/4 and crypto:verify/5.

New functions crypto:encapsulate_key/2 and crypto:decapsulate_key/3 can be used with mlkem512, mlkem768 and mlkem1024 to safely generate and communicate an encapsulated shared secret.

OTP-19706
Application(s):
ssl
Related Id(s):

GH-9631, PR-10046

TLS server now fails early for supplied PEM file issues, such as the file not being found.

Potential Incompatibilities #

OTP-19756
Application(s):
kernel
Related Id(s):

PR-10146

The internal inet_dns_tsig and inet_res modules have been fixed to TSIG verify the correct timestamp.

In the process two undocumented error code atoms have been corrected to notauth and notzone to adhere to the DNS RFCs. Code that relied on the previous incorrect values may have to be corrected.

OTP-28.1 #

OTP-19646
Related Id(s):

GH-9875, PR-9876

When any Erlang/OTP application has been disabled by configure, warnings from ex_doc when building the documentation are now disabled.

OTP-19677
Related Id(s):

PR-9954

./otp_build now respects TYPE and FLAVOR to when set.

OTP-19752
Related Id(s):

PR-10142

Rendering of some tables in the documentation has been improved.

OTP-19749
Related Id(s):

PR-10140

In Efficiency Guide, the section about setelement/3 in Common Caveats has been updated.

asn1-5.4.2 #

The asn1-5.4.2 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19681
Related Id(s):

PR-9949

Decoding a constrained BIT STRING using JER was broken.

OTP-19686
Related Id(s):

PR-9969

NIFs and linked-in drivers are now loadable when running in an Erlang source tree on Windows.

Full runtime dependencies of asn1-5.4.2

erts-14.0, kernel-9.0, stdlib-5.0

common_test-1.29 #

The common_test-1.29 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19642
Related Id(s):

ERIERL-1231, PR-9862

Improved printing of maps. Map keys are now printed in the same order as maps:iterator(Map, ordered) would sort them.

OTP-19714
Related Id(s):

PR-10051

ct:print will now suppress printing of timestamp and heading when the heading option is set to the empty string.

Full runtime dependencies of common_test-1.29

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.2 #

The compiler-9.0.2 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19660
Related Id(s):

GH-9903, PR-9909

Fixed a compiler crash caused by patch order in destructive update.

OTP-19689
Related Id(s):

GH-9987, PR-9990

Fixed a compiler crash in beam_ssa_pre_codegen caused by wrong handling of multiple phi patches in the destructive update pass.

OTP-19693
Related Id(s):

GH-10002, PR-10009

Fixed a crash when a zip generator contains a map pattern.

OTP-19722
Related Id(s):

GH-10077, PR-10090

In rare circumstances, the compiler could crash when compiling code using bit syntax construction.

OTP-19758
Related Id(s):

PR-10153

A few minor bugs that could affect the beam_debug_info option were fixed.

Full runtime dependencies of compiler-9.0.2

crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0

crypto-5.7 #

The crypto-5.7 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19686
Related Id(s):

PR-9969

NIFs and linked-in drivers are now loadable when running in an Erlang source tree on Windows.

OTP-19721
Related Id(s):

GH-10061, PR-10076

Fixed bug seen to cause beam crash when doing init:restart() with crypto statically linked to OpenSSL (--disable-dynamic-ssl-lib). Bug exists since OTP 28.0.

OTP-19725
Related Id(s):

GH-10079, PR-10085

Fixed crypto:strong_rand_bytes failing after init:restart on MacOS with statically linked OpenSSL.

OTP-19733
Related Id(s):

GH-9901, PR-9982

Fixed crypto:hash(shake128 | shake256) for OpenSSL 3.4 and newer.

OTP-19752
Related Id(s):

PR-10142

Rendering of some tables in the documentation has been improved.

OTP-19657
HIGHLIGHT
 

Support for ML-DSA and ML-KEM provided by OpenSSL 3.5.

Algorithms mldsa44, mldsa65 and mldsa87 can be passed to crypto:sign/4 and crypto:verify/5.

New functions crypto:encapsulate_key/2 and crypto:decapsulate_key/3 can be used with mlkem512, mlkem768 and mlkem1024 to safely generate and communicate an encapsulated shared secret.

OTP-19666
Related Id(s):

PR-9721

Added support for SHA2 512/224 and SHA2 512/256 truncated hashes.

Full runtime dependencies of crypto-5.7

erts-9.0, kernel-6.0, stdlib-3.9

debugger-6.0.3 #

The debugger-6.0.3 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19719
Related Id(s):

GH-10057, PR-10066

Fixed unbound error in interpreted modules

Full runtime dependencies of debugger-6.0.3

compiler-8.0, erts-15.0, kernel-10.0, stdlib-7.0, wx-2.0

edoc-1.4.1 #

The edoc-1.4.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19752
Related Id(s):

PR-10142

Rendering of some tables in the documentation has been improved.

Full runtime dependencies of edoc-1.4.1

erts-11.0, inets-5.10, kernel-7.0, stdlib-4.0, syntax_tools-2.0, xmerl-1.3.7

erl_interface-5.6.1 #

The erl_interface-5.6.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19671
Related Id(s):

PR-9832

Fixed C compiler warnings generated by codechecker.

OTP-16607
Related Id(s):

OTP-16608

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.

erts-16.1 #

The erts-16.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19685
Related Id(s):

PR-9906

Made sure to not set any terminal settings when they have not been changed. Doing so can trigger a SIGTTOU signal which would terminate Erlang when it should not.

OTP-19728
Related Id(s):

GH-10072, PR-10093

As an optimization, when the unicode:characters_to_binary/3 was used to convert from latin1 to utf8 or vice versa, it would return the original binary unchanged if it only contained 7-bit ASCII characters. That otpimization was broken in Erlang/OTP 27, and has now been mended.

OTP-19671
Related Id(s):

PR-9832

Fixed C compiler warnings generated by codechecker.

OTP-19730
Related Id(s):

PR-9976

Added support in module re for export and import of compiled regular expression in order to safely move them between Erlang node instances.

OTP-19739
Related Id(s):

PR-10113

Added new erl command line flag +Mumadtn <bool> causing MADV_DONTNEED to be passed to madvise() instead of MADV_FREE.

Full runtime dependencies of erts-16.1

kernel-9.0, sasl-3.3, stdlib-4.1

inets-9.4.2 #

The inets-9.4.2 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19760
Related Id(s):

GH-10065, PR-10120

Fixed a RFC 2616 violation, where a http request, made by httpc, without providing any options, would be sent with an empty TE header, without also having a TE value in the connection header. Now the default request doesn’t send a TE header at all.

Full runtime dependencies of inets-9.4.2

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

kernel-10.4 #

The kernel-10.4 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19667
Related Id(s):

PR-9912

A remote shell can now exit by closing the input stream, without terminating the remote node.

OTP-19756
POTENTIAL INCOMPATIBILITY
 

The internal inet_dns_tsig and inet_res modules have been fixed to TSIG verify the correct timestamp.

In the process two undocumented error code atoms have been corrected to notauth and notzone to adhere to the DNS RFCs. Code that relied on the previous incorrect values may have to be corrected.

OTP-19737
Related Id(s):

ERIERL-1209, PR-10112

The rudimentary DNS resolver inet_res has aqcuired 3 new functions inet_res:gethostbyname/4, inet_res;getbyname/4 and inet_res:gethostbyaddr/3, that all take an option list argument.

This option list can be used to override the Kernel application’s resolver options when calling the inet_res function directly.

Full runtime dependencies of kernel-10.4

crypto-5.0, erts-15.2.5, sasl-3.0, stdlib-6.0

megaco-4.8.1 #

The megaco-4.8.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19669
Related Id(s):

PR-9927

Documentation improvements.

OTP-19752
Related Id(s):

PR-10142

Rendering of some tables in the documentation has been improved.

Full runtime dependencies of megaco-4.8.1

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.1 #

The mnesia-4.24.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19745
Related Id(s):

PR-10147

Mnesia no longer crashes when the node name is used as a table name.

Full runtime dependencies of mnesia-4.24.1

erts-9.0, kernel-5.3, stdlib-5.0

observer-2.18.1 #

The observer-2.18.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19754
Related Id(s):

PR-9815

etop will now fully stop before returning from etop:stop/0.

Full runtime dependencies of observer-2.18.1

erts-15.0, et-1.5, kernel-10.0, runtime_tools-2.1, stdlib-5.0, wx-2.3

os_mon-2.11.1 #

The os_mon-2.11.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19686
Related Id(s):

PR-9969

NIFs and linked-in drivers are now loadable when running in an Erlang source tree on Windows.

Full runtime dependencies of os_mon-2.11.1

erts-14.0, kernel-9.0, sasl-4.2.1, stdlib-5.0

public_key-1.18.3 #

Note! The public_key-1.18.3 application cannot be applied independently of other applications on an arbitrary OTP 28 installation.

   On a full OTP 28 installation, also the following runtime
   dependency has to be satisfied:
   -- crypto-5.7 (first satisfied in OTP 28.1)
OTP-19686
Related Id(s):

PR-9969

NIFs and linked-in drivers are now loadable when running in an Erlang source tree on Windows.

OTP-19727
Related Id(s):

PR-10091

Added missing reference to SignedAttributes so that it now works with the der_encode and der_decode functions.

OTP-19552
HIGHLIGHT
 

Added support for quantum crypto signature algorithm ML-DSA (ssl and public_key) and key exchange algorithm ML-KEM (ssl).

Full runtime dependencies of public_key-1.18.3

asn1-5.0, crypto-5.7, erts-13.0, kernel-8.0, stdlib-4.0

runtime_tools-2.3 #

The runtime_tools-2.3 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19686
Related Id(s):

PR-9969

NIFs and linked-in drivers are now loadable when running in an Erlang source tree on Windows.

OTP-19648
Related Id(s):

PR-9589

The default tracer is now aware that it is started by a remote shell (-remsh), in which case the traces will be sent to the remote group_leader to make the traces visible in the remote shell.

OTP-19655
HIGHLIGHT
 

A User’s Guide to dbg is now available in the documentation.

Full runtime dependencies of runtime_tools-2.3

erts-16.0, kernel-10.0, mnesia-4.12, stdlib-6.0

snmp-5.19.1 #

The snmp-5.19.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19619
Related Id(s):

GH-5756, PR-9869

Using ASN.1 generated code for decode/encode of basic types, starting with Counter64.

OTP-19696
Related Id(s):

PR-10014

Reworked the timer handling of the (SNMP) manager start notification feature.

OTP-19723
Related Id(s):

PR-10087

Added missing specs to already documented functions.

Full runtime dependencies of snmp-5.19.1

asn1-5.4, crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12, runtime_tools-1.8.14, stdlib-5.0

ssl-11.4 #

Note! The ssl-11.4 application cannot be applied independently of other applications on an arbitrary OTP 28 installation.

   On a full OTP 28 installation, also the following runtime
   dependencies have to be satisfied:
   -- crypto-5.7 (first satisfied in OTP 28.1)
   -- public_key-1.18.3 (first satisfied in OTP 28.1)
OTP-19694
Related Id(s):

PR-10011

The sender side is now closed if an error occurs on the socket.

OTP-19698
Related Id(s):

GH-9638, PR-10019

The PEM cache process no longer crashes when a configured file has been deleted before it could be read.

OTP-19736
Related Id(s):

GH-10097, PR-10108

Corrected handling of ssl:sockname/1 for DTLS, so that it now will return the correct result in all situations.

OTP-19752
Related Id(s):

PR-10142

Rendering of some tables in the documentation has been improved.

OTP-19552
HIGHLIGHT
 

Added support for quantum crypto signature algorithm ML-DSA (ssl and public_key) and key exchange algorithm ML-KEM (ssl).

OTP-19651
Related Id(s):

PR-9879

Now allowingsend/2 to buffer data when using sockets backend. Use ‘high_watermark’ and ‘low_watermark’ to steer buffering as gen_tcp does.

OTP-19688
Related Id(s):

PR-9843

Now allowing the PSK identity to be the empty string in TLS-1.2 for compatibility reasons. It is allowed according to the spec, although providing a proper value makes more sense.

OTP-19706
HIGHLIGHT
 

TLS server now fails early for supplied PEM file issues, such as the file not being found.

Full runtime dependencies of ssl-11.4

crypto-5.7, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.18.3, runtime_tools-1.15.1, stdlib-7.0

stdlib-7.1 #

Note! The stdlib-7.1 application cannot be applied independently of other applications on an arbitrary OTP 28 installation.

   On a full OTP 28 installation, also the following runtime
   dependency has to be satisfied:
   -- erts-16.0.3 (first satisfied in OTP 28.0.3)
OTP-19647
Related Id(s):

GH-9816, PR-9897

The save_module/1 command in the shell now saves both the locally defined records and the imported records using the rr/1 command.

OTP-19649
Related Id(s):

GH-9771, PR-9898

It’s now possible to write lists:map(fun is_atom/1, []) or lists:map(fun my_func/1, []) in the shell, instead of lists:map(fun erlang:is_atom/1, []) or lists:map(fun shell_default:my_func/1, []).

OTP-19659
Related Id(s):

PR-9896

The shell no longer crashes when requesting to auto-complete map keys containing non-atoms.

OTP-19667
Related Id(s):

PR-9912

A remote shell can now exit by closing the input stream, without terminating the remote node.

OTP-19704
Related Id(s):

GH-10020, PR-10034

Fixed guard check for is_record/2 in the linter.

OTP-19759
Related Id(s):

PR-10121

Added a flag option shell_hints and function shell:hints/1. You can now disable the warning in the shell when a command is taking longer than 5 seconds.

Full runtime dependencies of stdlib-7.1

compiler-5.0, crypto-4.5, erts-16.0.3, kernel-10.0, sasl-3.0, syntax_tools-3.2.1

syntax_tools-4.0.1 #

The syntax_tools-4.0.1 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19731
Related Id(s):

GH-10102, PR-10104

Fixed zip generator crash in annotate_bindings/1

Full runtime dependencies of syntax_tools-4.0.1

compiler-9.0, erts-16.0, kernel-10.3, stdlib-7.0

tools-4.1.3 #

The tools-4.1.3 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19726
Related Id(s):

PR-10106

Fixed some deprecations for newer emacs versions.

Full runtime dependencies of tools-4.1.3

compiler-8.5, erts-15.0, erts-15.0, kernel-10.0, runtime_tools-2.1, stdlib-6.0

wx-2.5.2 #

The wx-2.5.2 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19686
Related Id(s):

PR-9969

NIFs and linked-in drivers are now loadable when running in an Erlang source tree on Windows.

OTP-19724
Related Id(s):

GH-9972, PR-10084

Now avoiding that wx crashes the VM when running on OTP28+ due to one of the new compiler hardening options.

OTP-19735
Related Id(s):

PR-10094

wx was missing licenses that come from OpenGL documentation and wxWidgets documentation.

Full runtime dependencies of wx-2.5.2

erts-12.0, kernel-8.0, stdlib-5.0

xmerl-2.1.6 #

The xmerl-2.1.6 application can be applied independently of other applications on a full OTP 28 installation.

OTP-19757
Related Id(s):

GH-5697, PR-9796

Corrected the bug that comments couldn’t be exported.

#xmlComment elements is now exported when calling export/3 or export_simple/3 and similar functions. Top level comments will only be exported if one creates and export elements as a document.

Full runtime dependencies of xmerl-2.1.6

erts-6.0, kernel-8.4, stdlib-2.5

Thanks To #

Alberto Sartori, Alexander Clouter, ausimian, Danil Zagoskin, dependabot[bot], Dmytro Lytovchenko, Dunya Kokoschka, Håkan Stenholm, Hans Svensson, Jan Uhlig, Magnus Henoch, Mend Renovate, Paulo Tomé, Rodolfo Carvalho, Savvas Nicholas, Simon Oulevay, Tomas Abrahamsson, Tom Schuster, Yaroslav Maslennikov