Erlang/OTP 23.0

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 or asdf).

docker run -it erlang:23.0

Highlights #

OTP-13450
Application(s):
kernel
Related Id(s):
OTP-15251

*** POTENTIAL INCOMPATIBILITY ***

A new module erpc has been introduced in the kernel application. The erpc module implements an enhanced subset of the operations provided by the rpc module. Enhanced in the sense that it makes it possible to distinguish between returned value, raised exceptions, and other errors. erpc also has better performance and scalability than the original rpc implementation. This by utilizing the newly introduced spawn_request() BIF. Also the rpc module benefits from these improvements by utilizing erpc when it is possible.

This change has been marked as a potential incompatibility since rpc:block_call() now only is guaranteed to block other block_call() operations. The documentation previously claimed that it would block all rpc operations. This has however never been the case. It previously did not block node-local block_call() operations.

OTP-14708
Application(s):
compiler, debugger, erts

EEP-52 has been implemented.

In binary matching, the size of the segment to be matched is now allowed to be a guard expression, and similarly in map matching the keys can now be guard expressions. See the Erlang Reference Manual and Programming Examples for more details.

Language compilers or code generators that generate Core Erlang code may need to be updated to be compatible with the compiler in OTP 23. For more details, see the section Backwards Compatibility in EEP 52.

OTP-15247
Application(s):
public_key, ssl

Added support for RSA-PSS signature schemes

OTP-15251
Application(s):
erts

Improvements of distributed spawn operations. These include both scalability and performance improvements as well as new functionality.

New functionality:

-- A distributed spawn_monitor() BIF.

-- Support for monitor option in the distributed spawn_opt() BIF.

-- New spawn_request() BIFs for asynchronous spawn of processes. spawn_request() supports all options that spawn_opt() support plus a few more.

OTP-15434
Application(s):
ssh

OpenSSH 6.5 introduced a new file representation of keys called openssh-key-v1.

OTP/SSH had an experimental implementation of this format. That implementation is now improved and supported with the exception of handling encrypted keys.

OTP-15589
Application(s):
ssl

Improve interoperability by implementing the middlebox compatiblity mode.

The middlebox compatibility mode makes the TLS 1.3 handshake look more like a TLS 1.2 handshake and increases the chance of successfully establishing TLS 1.3 connections through legacy middleboxes.

OTP-15744
Application(s):
erts, stdlib
Related Id(s):
OTP-15623 , PR-2229

Improved ETS scalability of concurrent calls that change the size of a table, like ets:insert/2 and ets:delete/2.

This performance feature was implemented for ordered_set in OTP 22.0 and does now apply for all ETS table types.

The improved scalability may come at the cost of longer latency of ets:info(T,size) and ets:info(T,memory). A new table option decentralized_counters has therefore been added. It is default true for ordered_set with write_concurrency enabled and default false for all other table types.

OTP-15998
Application(s):
ssh
Related Id(s):
PR-2368 , PR-2376

TCP/IP port forwarding, a.k.a tunneling a.k.a tcp-forward/direct-tcp is implemented. In the OpenSSH client, this corresponds to the options -L and -R.

The client or server listens to a specified socket, and when something connects to it with TCP/IP, that connection is forwarded in an encrypted tunnel to the peer. The peer then connects to a predefined IP/port pair and then acts as a proxy.

See the manual, ssh:tcpip_tunnel_to_server/6 and ssh:tcpip_tunnel_from_server/6.

The functionality is disabled per default but can be enabled when starting a daemon.

OTP-16007
Application(s):
compiler
Related Id(s):
PR-2324

Allow underscores in numeric literals to improve readability. Examples: 123_456_789, 16#1234_ABCD.

OTP-16214
Application(s):
compiler
Related Id(s):
PR-2460

Improved the type optimization pass' inference of types that depend on themselves, giving us more accurate types and letting us track the content types of lists.

OTP-16222
Application(s):
stdlib

New functions have been added to c(3) for printing embedded documentation for Erlang modules. The functions are:

-- h/1,2,3 -- Print the documentation for a Module:Function/Arity.

-- ht/1,2,3 -- Print the type documentation for a Module:Type/Arity.

The embedded documentation is created when building the Erlang/OTP documentation.

OTP-16232
Application(s):
crypto

As announced in OTP 22.0, a New API was introduced in CRYPTO. See the New and Old API chapter in the CRYPTO User's Guide for more information and suggested replacement functions.

The Old API is now deprecated in OTP-23.0 and will be removed in OTP-24.0.

This deprecation includes cipher names. See the section Retired cipher names in the crypto User's Guide, chapter The Old API.

OTP-16250
Application(s):
erts, kernel

The possibility to run Erlang distribution without relying on EPMD has been extended. To achieve this a couple of new options to the inet distribution has been added.

-- -dist_listen false -- Setup the distribution channel, but do not listen for incoming connection. This is useful when you want to use the current node to interact with another node on the same machine without it joining the entire cluster.

-- -erl_epmd_port Port -- Configure a default port that the built-in EPMD client should return. This allows the local node to know the port to connect to for any other node in the cluster.

The erl_epmd callback API has also been extended to allow returning -1 as the creation which means that a random creation will be created by the node.

In addition a new callback function called listen_port_please has been added that allows the callback to return which listen port the distribution should use. This can be used instead of inet_dist_listen_min/max if the listen port is to be fetched from an external service.

OTP-16260
Application(s):
kernel
Related Id(s):
OTP-15403

A first EXPERIMENTAL module that is a socket backend to gen_tcp and inet has been implemented. Others will follow. Feedback will be appreciated.

OTP-16400
Application(s):
ssl

*** POTENTIAL INCOMPATIBILITY ***

This change adds TLS-1.3 to the list of default supported versions. That is, TLS-1.3 and TLS-1.2 are configured when ssl option 'versions' is not explicitly set.

OTP-16406
Application(s):
erl_docgen, otp

Embedded documentation (also known as Documentation Chunks) is now also available in the form of files according to EEP-48. The Documentation Chunks are produced by default when building the other Erlang/OTP documentation. If you want to only build the embedded documentation you can pass the DOC_TARGETS=chunks environment variable to make.

OTP-16453
Application(s):
kernel
Related Id(s):
PR-2524

A new implementation of distributed named process groups has been introduced. It is available in the pg module.

Note that this pg module only has the name in common with the experimental pg module that was present in stdlib up until OTP 17.

Thanks to Maxim Fedorov for the implementation.

OTP-16484
Application(s):
debugger, erts, hipe

*** POTENTIAL INCOMPATIBILITY ***

The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace. To retrieve the stacktrace, use the extended try/catch syntax that was introduced in OTP 21. erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

OTP-16501
Application(s):
stdlib
Related Id(s):
ERL-708 , OTP-16222 , OTP-16406 , OTP-16494 , OTP-16499 , OTP-16500 , PR-2545

Module and function auto-completion in the shell now looks at all available modules instead of only those loaded. A module is considered available if it either is loaded already or would be loaded if called.

The auto-completion has also been expanded to work in the new h/1,2,3 function in c(3).

OTP-16506
Application(s):
ssh

The default known_hosts file handling is improved to include ports.

The handling of the contents in that file is updated to support the full syntax, with exception of 1) the wildcard '?', 2) wildcards in canonical names and 3) the option '@cert-authority'

OTP-16513
Application(s):
ssh

The ssh agent is now implemented in the ssh_agent key callback module.

Enable with the the option {key_cb, {ssh_agent, []}} in for example ssh:connect/3.

See the ssh_agent manual for details.

OTP-16540
Application(s):
ssh

Algorithm configuration could now be done in a .config file.

This is useful for example to enable an algorithm that is disabled by default. It could now be enabled in an .config-file without changing the code,

See the SSH User's Guide chapter "Configuration in SSH".

Potential Incompatibilities #

OTP-13450
Application(s):
kernel
Related Id(s):
OTP-15251

*** HIGHLIGHT ***

A new module erpc has been introduced in the kernel application. The erpc module implements an enhanced subset of the operations provided by the rpc module. Enhanced in the sense that it makes it possible to distinguish between returned value, raised exceptions, and other errors. erpc also has better performance and scalability than the original rpc implementation. This by utilizing the newly introduced spawn_request() BIF. Also the rpc module benefits from these improvements by utilizing erpc when it is possible.

This change has been marked as a potential incompatibility since rpc:block_call() now only is guaranteed to block other block_call() operations. The documentation previously claimed that it would block all rpc operations. This has however never been the case. It previously did not block node-local block_call() operations.

OTP-14790
Application(s):
ssl

Drop support for SSL-3.0. Support for this legacy TLS version has not been enabled by default since OTP 19. Now all code to support it has been removed, that is SSL-3.0 protocol version can not be used and is considered invalid.

OTP-16168
Application(s):
erts
Related Id(s):
ERL-1053

erlang:decode_packet with type set to httph no longer accepts http headers that have whitespaces in between the header name and the colon. That is:

Content-Type : text/html

is no longer allowed. This has been changed to conform with RFC 7230 and thus protect against http desync attacks.

OTP-16215
Application(s):
erts

Removed the scheduler_poll and async I/O dtrace and LTTng trace probes.

OTP-16244
Application(s):
erts
Related Id(s):
ERL-1051

Fix the quoting rules in erl -args_file, ERL_FLAGS, ERL_AFLAGS and ERL_ZFLAGS to work as unix sh quoting.

This bug fix can make previous configuration options to erl passed through ERL_FLAGS, ERL_AFLAGS, ERL_ZFLAGS or -args_file not be interpreted in the same way as before the fix.

OTP-16328
Application(s):
erl_interface

As announced in OTP 22.0, the deprecated parts of erl_interface have now been removed (essentially all C functions with prefix erl_).

OTP-16329
Application(s):
erl_interface, erts, otp
Related Id(s):
OTP-15621

As announced in OTP 22.0, the previously existing limited support for VxWorks has now been removed.

OTP-16400
Application(s):
ssl

*** HIGHLIGHT ***

This change adds TLS-1.3 to the list of default supported versions. That is, TLS-1.3 and TLS-1.2 are configured when ssl option 'versions' is not explicitly set.

OTP-16455
Application(s):
kernel

The pg2 module has been deprecated. It has also been scheduled for removal in OTP 24.

You are advised to replace the usage of pg2 with the newly introduced pg module. pg has a similar API, but with a more scalable implementation.

OTP-16484
Application(s):
debugger, erts, hipe

*** HIGHLIGHT ***

The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace. To retrieve the stacktrace, use the extended try/catch syntax that was introduced in OTP 21. erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

OTP-16495
Application(s):
kernel

As of OTP 23, the distributed disk_log feature has been deprecated. It has also been scheduled for removal in OTP 24.

OTP-16502
Application(s):
kernel

code:lib_dir/1 has been fixed to also return the lib dir for erts.

This is been marked as an incompatibility for any application that depended on {error,bad_name} to be returned for erts.

OTP-16503
Application(s):
erl_docgen

The seealso tag has been replaced with type aware tags instead. The new tags are: seemfa|seeerl|seetype|seeapp|seecom|seecref|seefile|seeguide.

fsdescription has been added for adding a title to groups of functions, for instance Module Callbacks.

The dtds of all documentation files have been trimmed from all unused or rarely-used tags.

Unused dtds have been removed.

OTP-16509
Application(s):
ssh

The key-exchange algorithms 'diffie-hellman-group14-sha1' and 'diffie-hellman-group-exchange-sha1' are disabled per default. The reason is that SHA1 now is considered insecure.

They can be enabled if needed, see SSH (App).

OTP-16510
Application(s):
ssh

The public key algorithm 'ssh-dss' is disabled per default. The reason is that it is now considered as insecure.

It can be enabled if needed, see SSH (App).

OTP-16511
Application(s):
ssh

The public key 'ssh-rsa' is now considered as insecure because of its usage of SHA1.

It is therefore deprecated and will no longer be enabled per default in OTP-24.0.

OTP-16603
Application(s):
sasl

systools:make_tar/1,2 now filters out any tools from erts if included in the release tar ball. See the documentation for more details.

OTP-16630
Application(s):
erl_interface

The erl_interface registry functionality is deprecated as of OTP 23, and will be removed in OTP 24. Reasonably new gcc compilers will issue deprecation warnings when using this functionality. In order to disable these warnings, define the macro EI_NO_DEPR_WARN.

OTP-23.0 #

OTP-16394
Application(s):
otp
Related Id(s):
PR-2450

The Android cross-compilation support has been updated to support Android 4.1 and 5.0.

OTP-15812
Application(s):
otp

Add new "make test" target for simplified test execution. Read more in HOWTO/TESTING.md.

OTP-15915
Application(s):
otp

Added make dialyzer to top-level makefile and each application.

OTP-16264
Application(s):
otp

Updated the Android build instructions

OTP-16329
Application(s):
erl_interface, erts, otp
Related Id(s):
OTP-15621

*** POTENTIAL INCOMPATIBILITY ***

As announced in OTP 22.0, the previously existing limited support for VxWorks has now been removed.

OTP-16406
Application(s):
erl_docgen, otp

*** HIGHLIGHT ***

Embedded documentation (also known as Documentation Chunks) is now also available in the form of files according to EEP-48. The Documentation Chunks are produced by default when building the other Erlang/OTP documentation. If you want to only build the embedded documentation you can pass the DOC_TARGETS=chunks environment variable to make.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

OTP-16551
Application(s):
otp

Starting from OTP 23, the pages in the documentation for which functions that are deprecated and scheduled for removal are now up to date.

asn1-5.0.13 #

OTP-16490
Application(s):
asn1

Adhere to the ASN.1 specification for hstring & bstring lexical items. That is they may include white space.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

OTP-16554
Application(s):
asn1
Related Id(s):
ERL-1189

Improve handling of ellipsis in a CHOICE

Full runtime dependencies of asn1-5.0.13: erts-7.0, kernel-3.0, stdlib-2.0

common_test-1.19 #

OTP-16029
Application(s):
common_test
Related Id(s):
PR-2145

The function ct_property_test:init_tool/1 is added for the cases when the user does not want ct_property_test to compile properties. init_tool/1 can be used to set the property_test_tool config value.

OTP-16273
Application(s):
common_test

The built-in Common Test Hook, cth_log_redirect, has been updated to use the system default Logger handler's configuration instead of its own. See the section on Built-in Hooks in the Common Test User's Guide.

OTP-16346
Application(s):
common_test, public_key, snmp, ssh, ssl

Calls of deprecated functions in the Old Crypto API are replaced by calls of their substitutions.

Full runtime dependencies of common_test-1.19: compiler-6.0, crypto-3.6, debugger-4.1, erts-7.0, ftp-1.0.0, inets-6.0, kernel-4.0, observer-2.1, runtime_tools-1.8.16, sasl-2.4.2, snmp-5.1.2, ssh-4.0, stdlib-3.5, syntax_tools-1.7, tools-2.8, xmerl-1.3.8

compiler-7.6 #

OTP-15837
Application(s):
compiler, erts

erlang:fun_info(fun foo/1, name/1) used to return a function name based on the name of the function that fun foo/1 was used in. The name returned is now -fun.foo/1-.

OTP-16516
Application(s):
compiler, stdlib

Initialization of record fields using _ is no longer allowed if the number of affected fields is zero.

OTP-14708
Application(s):
compiler, debugger, erts

*** HIGHLIGHT ***

EEP-52 has been implemented.

In binary matching, the size of the segment to be matched is now allowed to be a guard expression, and similarly in map matching the keys can now be guard expressions. See the Erlang Reference Manual and Programming Examples for more details.

Language compilers or code generators that generate Core Erlang code may need to be updated to be compatible with the compiler in OTP 23. For more details, see the section Backwards Compatibility in EEP 52.

OTP-16007
Application(s):
compiler
Related Id(s):
PR-2324

*** HIGHLIGHT ***

Allow underscores in numeric literals to improve readability. Examples: 123_456_789, 16#1234_ABCD.

OTP-16214
Application(s):
compiler
Related Id(s):
PR-2460

*** HIGHLIGHT ***

Improved the type optimization pass' inference of types that depend on themselves, giving us more accurate types and letting us track the content types of lists.

OTP-16367
Application(s):
compiler
Related Id(s):
OTP-15251

Support message queue optimization also for references returned from the new spawn_request() BIFs.

OTP-16429
Application(s):
compiler, stdlib
Related Id(s):
ERL-303

The compiler will now raise a warning when inlining is used in modules that load NIFs.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

OTP-16505
Application(s):
compiler
Related Id(s):
ERL-1178

Line information was sometimes incorrect for floating-point math exceptions.

OTP-16523
Application(s):
compiler
Related Id(s):
ERL-1058

The debug_info option can now be specified in -compile() attributes.

OTP-16543
Application(s):
compiler, erts
Related Id(s):
ERL-1186

Reduced the resource usage of erlc in parallel builds (e.g. make -j128).

Full runtime dependencies of compiler-7.6: crypto-3.6, erts-11.0, hipe-3.12, kernel-7.0, stdlib-3.13

crypto-4.7 #

OTP-16579
Application(s):
crypto
Related Id(s):
ERL-825

Crypto reported unsupported elliptic curves as supported on e.g Fedora distros.

OTP-15967
Application(s):
crypto
Related Id(s):
PR-2329

Support for ed25519 and ed448 added to crypto:generate_key.

OTP-16160
Application(s):
crypto

The new crypto functions api (crypto_init, crypto_update and crypto_one_time) has been updated.

There is now a function crypto_final/1 and a possibility to set options in crypto_init/3 and crypto_init/4. See the manual for details.

OTP-16232
Application(s):
crypto

*** HIGHLIGHT ***

As announced in OTP 22.0, a New API was introduced in CRYPTO. See the New and Old API chapter in the CRYPTO User's Guide for more information and suggested replacement functions.

The Old API is now deprecated in OTP-23.0 and will be removed in OTP-24.0.

This deprecation includes cipher names. See the section Retired cipher names in the crypto User's Guide, chapter The Old API.

OTP-16369
Application(s):
crypto
Related Id(s):
PR-2474

Fix C-compilation without deprecated OpenSSL cryptolib APIs

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

OTP-16583
Application(s):
crypto

Added missing 'eddh' to crypto:supports(public_keys).

Full runtime dependencies of crypto-4.7: erts-9.0, kernel-5.3, stdlib-3.4

debugger-5.0 #

OTP-14708
Application(s):
compiler, debugger, erts

*** HIGHLIGHT ***

EEP-52 has been implemented.

In binary matching, the size of the segment to be matched is now allowed to be a guard expression, and similarly in map matching the keys can now be guard expressions. See the Erlang Reference Manual and Programming Examples for more details.

Language compilers or code generators that generate Core Erlang code may need to be updated to be compatible with the compiler in OTP 23. For more details, see the section Backwards Compatibility in EEP 52.

OTP-16484
Application(s):
debugger, erts, hipe

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace. To retrieve the stacktrace, use the extended try/catch syntax that was introduced in OTP 21. erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

Full runtime dependencies of debugger-5.0: compiler-5.0, erts-9.0, kernel-5.3, stdlib-3.4, wx-1.2

dialyzer-4.2 #

OTP-16055
Application(s):
dialyzer
Related Id(s):
ERL-1002

Improve handling of maps:remove/2.

Full runtime dependencies of dialyzer-4.2: compiler-7.0, erts-9.0, hipe-3.16.1, kernel-5.3, stdlib-3.4, syntax_tools-2.0, wx-1.2

edoc-0.12 #

OTP-15999
Application(s):
edoc
Related Id(s):
PR-2317

Remove Inets dependency from EDoc.

OTP-16407
Application(s):
edoc
Related Id(s):
PR-2430

Add support for overloaded Erlang specifications.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

Full runtime dependencies of edoc-0.12: erts-6.0, kernel-3.0, stdlib-2.5, syntax_tools-1.6.14, xmerl-1.3.7

erl_docgen-1.0 #

OTP-16406
Application(s):
erl_docgen, otp

*** HIGHLIGHT ***

Embedded documentation (also known as Documentation Chunks) is now also available in the form of files according to EEP-48. The Documentation Chunks are produced by default when building the other Erlang/OTP documentation. If you want to only build the embedded documentation you can pass the DOC_TARGETS=chunks environment variable to make.

OTP-16497
Application(s):
erl_docgen

Minor DTD additions.

OTP-16503
Application(s):
erl_docgen

*** POTENTIAL INCOMPATIBILITY ***

The seealso tag has been replaced with type aware tags instead. The new tags are: seemfa|seeerl|seetype|seeapp|seecom|seecref|seefile|seeguide.

fsdescription has been added for adding a title to groups of functions, for instance Module Callbacks.

The dtds of all documentation files have been trimmed from all unused or rarely-used tags.

Unused dtds have been removed.

Full runtime dependencies of erl_docgen-1.0: edoc-0.7.13, erts-9.0, stdlib-3.4, xmerl-1.3.7

erl_interface-4.0 #

OTP-15800
Application(s):
erl_interface, erts, odbc, os_mon, wx

Fix various compiler warnings on 64-bit Windows.

OTP-16604
Application(s):
erl_interface

erl_call will now work properly on systems that cannot resolve their own hostname.

OTP-16623
Application(s):
erl_interface

Various bug fixes:

-- Internal error checking in various functions.

-- ei_rpc() accepted any 2-tuple message as an rpc response.

-- ei_decode_ref() now refuse to write outside of allocated memory in case a huge reference is decoded.

-- ei_decode_ei_term() now reports the same term types as ei_get_type().

OTP-13812
Application(s):
erl_interface, kernel

A client node can receive its node name dynamically from the node that it first connects to. This featured can by used by

-- starting with erl -sname undefined

-- erl_interface functions ei_connect_init and friends

-- erl_call -R

OTP-15603
Application(s):
erl_interface, erts, jinterface

Increased size of node incarnation numbers (aka "creation"), from 2 bits to 32 bits. This will reduce the risk of pids/ports/refs, from different node incarnation with the same name, being mixed up.

OTP-15866
Application(s):
erl_interface, erts
Related Id(s):
PR-2110

Fix various build issues when compiling Erlang/OTP to the IBM AIX platform.

OTP-16229
Application(s):
erl_interface, jinterface, kernel

Improved node connection setup handshake protocol. Made possible to agree on protocol version without dependence on epmd or other prior knowledge of peer node version. Also added exchange of node incarnation ("creation") values and expanded the distribution capability flag field from 32 to 64 bits.

OTP-16251
Application(s):
erl_interface

New erl_call option -address [Host]:Port to connect directly to a node without being dependent on epmd to resolve the node name.

OTP-16328
Application(s):
erl_interface

*** POTENTIAL INCOMPATIBILITY ***

As announced in OTP 22.0, the deprecated parts of erl_interface have now been removed (essentially all C functions with prefix erl_).

OTP-16329
Application(s):
erl_interface, erts, otp
Related Id(s):
OTP-15621

*** POTENTIAL INCOMPATIBILITY ***

As announced in OTP 22.0, the previously existing limited support for VxWorks has now been removed.

OTP-16496
Application(s):
erl_interface
Related Id(s):
OTP-16251

New function ei_connect_host_port and friends to allow node connection without being dependent on epmd for node name resolution.

OTP-16594
Application(s):
erl_interface

A number of new functions have been added to the erl_interface API:

-- ei_cmp_pids()

-- ei_cmp_ports()

-- ei_cmp_refs()

-- ei_decode_iodata()

-- ei_make_pid()

-- ei_make_ref()

OTP-16624
Application(s):
erl_interface

Added a -timeout option to erl_call.

OTP-16630
Application(s):
erl_interface

*** POTENTIAL INCOMPATIBILITY ***

The erl_interface registry functionality is deprecated as of OTP 23, and will be removed in OTP 24. Reasonably new gcc compilers will issue deprecation warnings when using this functionality. In order to disable these warnings, define the macro EI_NO_DEPR_WARN.

OTP-16633
Application(s):
erl_interface

Documentation improvements.

OTP-16607
Application(s):
erl_interface
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-11.0 #

OTP-14734
Application(s):
erts
Related Id(s):
ERL-496

BIFs now behave like ordinary functions with regard to tracing, allowing call_count tracing and fixing a few bugs where return trace messages were lost when BIFs tail-called themselves or other functions ("trapping").

OTP-15800
Application(s):
erl_interface, erts, odbc, os_mon, wx

Fix various compiler warnings on 64-bit Windows.

OTP-15837
Application(s):
compiler, erts

erlang:fun_info(fun foo/1, name/1) used to return a function name based on the name of the function that fun foo/1 was used in. The name returned is now -fun.foo/1-.

OTP-16155
Application(s):
erts
Related Id(s):
PR-2408

file:allocate/3 will now update the file size on all platforms.

OTP-16168
Application(s):
erts
Related Id(s):
ERL-1053

*** POTENTIAL INCOMPATIBILITY ***

erlang:decode_packet with type set to httph no longer accepts http headers that have whitespaces in between the header name and the colon. That is:

Content-Type : text/html

is no longer allowed. This has been changed to conform with RFC 7230 and thus protect against http desync attacks.

OTP-16244
Application(s):
erts
Related Id(s):
ERL-1051

*** POTENTIAL INCOMPATIBILITY ***

Fix the quoting rules in erl -args_file, ERL_FLAGS, ERL_AFLAGS and ERL_ZFLAGS to work as unix sh quoting.

This bug fix can make previous configuration options to erl passed through ERL_FLAGS, ERL_AFLAGS, ERL_ZFLAGS or -args_file not be interpreted in the same way as before the fix.

OTP-16284
Application(s):
erts, kernel

Fix the Erlang distribution to handle the scenario when a node connects that can handle message fragmentation but can not handle the atom cache. This bug only affects users that have implemented a custom distribution carrier. It has been present since OTP-21.

The DFLAG_FRAGMENT distribution flag was added to the set of flags that can be rejected by a distribution implementation.

OTP-16431
Application(s):
erts, stdlib
Related Id(s):
ERL-592

Compiling a match specification with excessive nesting caused the runtime system to crash due to scheduler stack exhaustion. Instead of crashing the runtime system, effected functions will now raise a system_limit error exception in this situation.

OTP-16478
Application(s):
erts
Related Id(s):
ERL-1115

Fixed a bug that prevented Erlang from being started on Windows if it were installed on certain paths.

OTP-16521
Application(s):
erts
Related Id(s):
ERL-716

Fix bug on Windows causing bad performance when standard input is closed, especially if the VM is only assigned one CPU core. Could be provoked for example by starting erl or escript via function os:cmd/1. Could be avoided with command line option -noinput.

The bad performance was caused by an io thread spinning indefinitely.

OTP-16571
Application(s):
erts

Fixed a bug on Unix platforms that would cause file:read_file_info/1 to return incorrect results if the emulator's effective user or group id differed from its actual ones.

OTP-16576
Application(s):
erts
Related Id(s):
ERL-1208

socket: Compile problems on Android when PACKET_FASTROUTE and PACKET_USER are both defined and has the same value. Use of PACKET_FASTROUTE has been removed as it may be unused and also only for none user-land.

OTP-16596
Application(s):
erts
Related Id(s):
ERL-1105 , PR-2606

Fixed bug in erl_crash.dump generation that could cause a SEGV core dump if a recently cancelled timer was found.

OTP-10278
Application(s):
erts

Improved concurrency of erlang:load_nif/2 as it does no longer block other schedulers from executing during initial load of a NIF library.

OTP-14708
Application(s):
compiler, debugger, erts

*** HIGHLIGHT ***

EEP-52 has been implemented.

In binary matching, the size of the segment to be matched is now allowed to be a guard expression, and similarly in map matching the keys can now be guard expressions. See the Erlang Reference Manual and Programming Examples for more details.

Language compilers or code generators that generate Core Erlang code may need to be updated to be compatible with the compiler in OTP 23. For more details, see the section Backwards Compatibility in EEP 52.

OTP-15077
Application(s):
erts

Internally in BEAM, handling of continuation pointers has been simplified. This change is not user-visible, except when examing a process stack in the crashdump viewer. The continuation pointer for a function will now be stored below the y(0) for that function.

OTP-15232
Application(s):
erts
Related Id(s):
ERL-700

seq_trace tokens are now propagated to spawned processes.

OTP-15251
Application(s):
erts

*** HIGHLIGHT ***

Improvements of distributed spawn operations. These include both scalability and performance improvements as well as new functionality.

New functionality:

-- A distributed spawn_monitor() BIF.

-- Support for monitor option in the distributed spawn_opt() BIF.

-- New spawn_request() BIFs for asynchronous spawn of processes. spawn_request() supports all options that spawn_opt() support plus a few more.

OTP-15517
Application(s):
erts
Related Id(s):
ERL-560

Make ets:insert/2 and ets:insert_new/2 yield scheduler execution on long lists of records to insert.

OTP-15603
Application(s):
erl_interface, erts, jinterface

Increased size of node incarnation numbers (aka "creation"), from 2 bits to 32 bits. This will reduce the risk of pids/ports/refs, from different node incarnation with the same name, being mixed up.

OTP-15618
Application(s):
erts

The runtime system can now encode Erlang terms to the Erlang external term format as I/O vectors. The main benefit of this is that reference counted binaries can be referred to directly instead of copied into a new binary.

The default Erlang distribution over TCP will always utilize this. Alternate distribution implementations utilizing a port as distribution controller will utilize this if the driver implements the outputv callback. Alternate Erlang distribution implementations utilizing a process as distribution controller will utilize this if I/O vectors are utilized by the functionality that processes the data returned from erlang:dist_ctrl_get_data().

The return type for data returned by erlang:dist_ctrl_get_data() has been changed from iodata() to iovec(). Note that iovec() data is valid iodata() so old implementations using erlang:dist_ctrl_get_data() do not need to be changed, but may benefit from being changed depending on usage scenario.

The new BIFs term_to_iovec/1 and term_to_iovec/2 have been introduced. These work exactly as term_to_binary() with the corresponding arity except the return type.

OTP-15744
Application(s):
erts, stdlib
Related Id(s):
OTP-15623 , PR-2229

*** HIGHLIGHT ***

Improved ETS scalability of concurrent calls that change the size of a table, like ets:insert/2 and ets:delete/2.

This performance feature was implemented for ordered_set in OTP 22.0 and does now apply for all ETS table types.

The improved scalability may come at the cost of longer latency of ets:info(T,size) and ets:info(T,memory). A new table option decentralized_counters has therefore been added. It is default true for ordered_set with write_concurrency enabled and default false for all other table types.

OTP-15835
Application(s):
erts, kernel
Related Id(s):
PR-2212

Directories can now be opened by file:open/2 when passing the directory option.

OTP-15840
Application(s):
erts

Add Hygon Dhyana as known processor to enable support for atomic operations.

OTP-15842
Application(s):
erts
Related Id(s):
PR-2182

Make erlang:phash2 functions consume reductions proportional to the size of the input term and yield scheduler when reductions are depleted.

OTP-15866
Application(s):
erl_interface, erts
Related Id(s):
PR-2110

Fix various build issues when compiling Erlang/OTP to the IBM AIX platform.

OTP-15868
Application(s):
erts

Add configure options --enable-pie and --disable-pie to control the build of position independent executables.

OTP-15956
Application(s):
erts, kernel
Related Id(s):
PR-2231

file:read_file_info/2 can now be used on opened files and directories.

OTP-15995
Application(s):
erts
Related Id(s):
PR-2358

Add arity-1 versions of atom_to_binary, binary_to_atom and binary_to_existing_atom, all with utf8 as default encoding.

OTP-16014
Application(s):
erts
Related Id(s):
PR-2345

Optimized the erts internal hash table implementation for faster lookups. The internal hash is used for things like; the process registry, executing erlang:apply/2, executing M:func(test), and more.

OTP-16105
Application(s):
erts
Related Id(s):
ERL-927

CPU quotas are now taken into account when deciding the default number of online schedulers, improving performance in container environments where quotas are applied, such as docker with the --cpus flag.

OTP-16148
Application(s):
erts, kernel
Related Id(s):
PR-2373

The -config option to erl now can take multiple config files without repeating the -config option. Example:

erl -config sys local

OTP-16215
Application(s):
erts

*** POTENTIAL INCOMPATIBILITY ***

Removed the scheduler_poll and async I/O dtrace and LTTng trace probes.

OTP-16237
Application(s):
erts
Related Id(s):
PR-2389

Optimized persistent_term:put/2 and erase/1 to consume less CPU in many cases.

OTP-16250
Application(s):
erts, kernel

*** HIGHLIGHT ***

The possibility to run Erlang distribution without relying on EPMD has been extended. To achieve this a couple of new options to the inet distribution has been added.

-- -dist_listen false -- Setup the distribution channel, but do not listen for incoming connection. This is useful when you want to use the current node to interact with another node on the same machine without it joining the entire cluster.

-- -erl_epmd_port Port -- Configure a default port that the built-in EPMD client should return. This allows the local node to know the port to connect to for any other node in the cluster.

The erl_epmd callback API has also been extended to allow returning -1 as the creation which means that a random creation will be created by the node.

In addition a new callback function called listen_port_please has been added that allows the callback to return which listen port the distribution should use. This can be used instead of inet_dist_listen_min/max if the listen port is to be fetched from an external service.

OTP-16270
Application(s):
erts

On systems without closefrom(), such as Linux, iterating over all possible file descriptors and calling close() for each is inefficient. This is markedly so when the maximum number of file descriptors has been tuned to a large number.

Instead, in erl_child_setup, walk the open descriptors under /dev/fd and close only those which are open.

This optimization affects the CPU usage of starting a new Erlang instance.

OTP-16283
Application(s):
erts
Related Id(s):
PR-2441

Optimized maps:merge/2 for trivial cases of an empty map(s) or same map.

OTP-16312
Application(s):
erts, kernel

The new experimental socket module has been moved to the Kernel application.

OTP-16327
Application(s):
erts, runtime_tools, tools

Improved the presentation of allocations and carriers in the instrument module.

OTP-16329
Application(s):
erl_interface, erts, otp
Related Id(s):
OTP-15621

*** POTENTIAL INCOMPATIBILITY ***

As announced in OTP 22.0, the previously existing limited support for VxWorks has now been removed.

OTP-16347
Application(s):
erts
Related Id(s):
PR-2466

The return value when using the httph and httph_bin option to erlang:decode_packet/3 and inet:setopts/2 has been changed to also include the original header unmodified. See erlang:decode_packet/3. Example:

> erlang:decode_packet(httph_bin,<<"HELLO: hi\r\n\r\n">>,[]). {ok,{http_header,0,<<"Hello">>,<<"HELLO">>,<<"hi">>},<<"\r\n">>}

OTP-16362
Application(s):
erts

Ensure net_kernel:monitor_nodes/1 sends nodedown messages of a failed connection before nodeup messages of a reestablished connection toward the same node.

OTP-16370
Application(s):
erts, kernel
Related Id(s):
OTP-15232 , OTP-15251

Update of sequential tracing to also support other information transfers than message passing.

OTP-16398
Application(s):
erts
Related Id(s):
ERL-1154

socket: It is now possible to create a socket from an already existing file descriptor.

OTP-16432
Application(s):
erts

socket: The socket:supports/1 function now also report if netns is supported or not.

OTP-16454
Application(s):
erts

=:= has been optimized to return false immediately when comparing two maps of different sizes.

OTP-16482
Application(s):
erts

Changed the behaviour of passing the erl command line argument +A 0 to silently imply +A 1. That is, it will no longer be possible to completely disable the async thread pool. Disabling of the async thread pool has since OTP 21 had no benefits; only lots of drawbacks.

OTP-16484
Application(s):
debugger, erts, hipe

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace. To retrieve the stacktrace, use the extended try/catch syntax that was introduced in OTP 21. erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

OTP-16492
Application(s):
erts
Related Id(s):
PR-2461

init:restart/1 has been introduced. init:restart/1 can be utilized for changing the code loading mode during a restart.

OTP-16530
Application(s):
erts, kernel
Related Id(s):
OTP-16464

Improve configure for the net nif, which should increase portability.

OTP-16535
Application(s):
erts, kernel

socket: Socket counters and socket global counters are now represented as maps (instead of property lists).

OTP-16543
Application(s):
compiler, erts
Related Id(s):
ERL-1186

Reduced the resource usage of erlc in parallel builds (e.g. make -j128).

OTP-16550
Application(s):
erts, kernel
Related Id(s):
ERIERL-476

The experimental socket module has gotten restrictions removed so now the 'seqpacket' socket type should work for any communication domain (protocol family) where the OS supports it, typically the Unix Domain.

OTP-16557
Application(s):
erts, stdlib

Updated the internal pcre library to 8.44.

OTP-16601
Application(s):
erts
Related Id(s):
OTP-16577

There is now cost in terms of reductions when copying binary data using the binary syntax.

OTP-16602
Application(s):
erts

The executable erl_call is now part of the erts distribution in addition to erl_interface.

OTP-16615
Application(s):
erts

Fix a buffer overflow bug that caused EPMD to consume 100% CPU after many nodes had been connected on the same time on NetBSD.

OTP-16616
Application(s):
erts

erl -remsh now uses the dynamic node names feature by default. See the erl documentation for details.

OTP-16620
Application(s):
erts, kernel

socket: By default the socket options rcvtimeo and sndtimeo are now disabled. To enable these, OTP now has to be built with the configure option --enable-esock-rcvsndtimeo

OTP-16635
Application(s):
erts
Related Id(s):
ERL-476 , PR-2390

The environment variable $HOME does no longer have to be set before Erlang can be started.

Full runtime dependencies of erts-11.0: kernel-7.0, sasl-3.3, stdlib-3.13

eunit-2.5 #

OTP-15950
Application(s):
eunit
Related Id(s):
ERL-991 , PR-2316

Let eunit_surefire skip invalid XML 1.0 characters.

OTP-16275
Application(s):
eunit
Related Id(s):
PR-2424

Add new macro ?capturedOutput for enabling to write test cases that verify data printed to standard out

OTP-16549
Application(s):
eunit
Related Id(s):
PR-2532

Add option to limit print depth of exceptions generated by eunit test suites.

Full runtime dependencies of eunit-2.5: erts-9.0, kernel-5.3, stdlib-3.4

hipe-4.0 #

OTP-16470
Application(s):
hipe

Fixed a rare miss-compilation of tuple matching.

OTP-16484
Application(s):
debugger, erts, hipe

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace. To retrieve the stacktrace, use the extended try/catch syntax that was introduced in OTP 21. erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

Full runtime dependencies of hipe-4.0: compiler-5.0, erts-9.3, kernel-5.3, stdlib-3.4, syntax_tools-1.6.14

inets-7.2 #

OTP-16252
Application(s):
inets

Remove support for deprecated functionality. Support for mod_esi eval scheme, mod_htacess, mod_browser, apache config files and deprecated httpd_conf functions are dropped. Module http_uri is deprecated.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

Full runtime dependencies of inets-7.2: erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, ssl-5.3.4, stdlib-3.5

jinterface-1.11 #

OTP-15603
Application(s):
erl_interface, erts, jinterface

Increased size of node incarnation numbers (aka "creation"), from 2 bits to 32 bits. This will reduce the risk of pids/ports/refs, from different node incarnation with the same name, being mixed up.

OTP-16229
Application(s):
erl_interface, jinterface, kernel

Improved node connection setup handshake protocol. Made possible to agree on protocol version without dependence on epmd or other prior knowledge of peer node version. Also added exchange of node incarnation ("creation") values and expanded the distribution capability flag field from 32 to 64 bits.

kernel-7.0 #

OTP-16008
Application(s):
kernel
Related Id(s):
PR-2302

Fix race condition during shutdown when shell_history is enabled. The race condition would trigger crashes in disk_log.

OTP-16284
Application(s):
erts, kernel

Fix the Erlang distribution to handle the scenario when a node connects that can handle message fragmentation but can not handle the atom cache. This bug only affects users that have implemented a custom distribution carrier. It has been present since OTP-21.

The DFLAG_FRAGMENT distribution flag was added to the set of flags that can be rejected by a distribution implementation.

OTP-16395
Application(s):
kernel
Related Id(s):
PR-2444

Fix bug where a binary was not allowed to be the format string in calls to logger:log.

OTP-16489
Application(s):
kernel
Related Id(s):
ERL-1134

Fix bug where logger would end up in an infinite loop when trying to log the crash of a handler or formatter.

OTP-16502
Application(s):
kernel

*** POTENTIAL INCOMPATIBILITY ***

code:lib_dir/1 has been fixed to also return the lib dir for erts.

This is been marked as an incompatibility for any application that depended on {error,bad_name} to be returned for erts.

OTP-16504
Application(s):
kernel
Related Id(s):
PR-2328

The application stop/1 callback was not called if the application master of the application terminated.

OTP-16627
Application(s):
kernel
Related Id(s):
PR-2601

Fix bug in application:loaded_applications/0 that could cause it to fail with badarg if for example a concurrent upgrade/downgrade is running.

OTP-13450
Application(s):
kernel
Related Id(s):
OTP-15251

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

A new module erpc has been introduced in the kernel application. The erpc module implements an enhanced subset of the operations provided by the rpc module. Enhanced in the sense that it makes it possible to distinguish between returned value, raised exceptions, and other errors. erpc also has better performance and scalability than the original rpc implementation. This by utilizing the newly introduced spawn_request() BIF. Also the rpc module benefits from these improvements by utilizing erpc when it is possible.

This change has been marked as a potential incompatibility since rpc:block_call() now only is guaranteed to block other block_call() operations. The documentation previously claimed that it would block all rpc operations. This has however never been the case. It previously did not block node-local block_call() operations.

OTP-13812
Application(s):
erl_interface, kernel

A client node can receive its node name dynamically from the node that it first connects to. This featured can by used by

-- starting with erl -sname undefined

-- erl_interface functions ei_connect_init and friends

-- erl_call -R

OTP-15299
Application(s):
kernel, stdlib

Improved the printout of single line logger events for most of the OTP behaviours in STDLIB and Kernel. This includes proc_lib, gen_server, gen_event, gen_statem, gen_fsm, supervisor, supervisor_bridge and application.

Improved the chars_limit and depth handling in proc_lib and when formatting of exceptions.

OTP-15695
Application(s):
kernel, mnesia, parsetools, sasl, snmp, stdlib

Remove usage and documentation of old requests of the I/O-protocol.

OTP-15835
Application(s):
erts, kernel
Related Id(s):
PR-2212

Directories can now be opened by file:open/2 when passing the directory option.

OTP-15948
Application(s):
kernel
Related Id(s):
PR-2356

The check of whether to log or not based on the log level in logger has been optimized by using persistent_term to store the log level.

OTP-15956
Application(s):
erts, kernel
Related Id(s):
PR-2231

file:read_file_info/2 can now be used on opened files and directories.

OTP-16148
Application(s):
erts, kernel
Related Id(s):
PR-2373

The -config option to erl now can take multiple config files without repeating the -config option. Example:

erl -config sys local

OTP-16229
Application(s):
erl_interface, jinterface, kernel

Improved node connection setup handshake protocol. Made possible to agree on protocol version without dependence on epmd or other prior knowledge of peer node version. Also added exchange of node incarnation ("creation") values and expanded the distribution capability flag field from 32 to 64 bits.

OTP-16250
Application(s):
erts, kernel

*** HIGHLIGHT ***

The possibility to run Erlang distribution without relying on EPMD has been extended. To achieve this a couple of new options to the inet distribution has been added.

-- -dist_listen false -- Setup the distribution channel, but do not listen for incoming connection. This is useful when you want to use the current node to interact with another node on the same machine without it joining the entire cluster.

-- -erl_epmd_port Port -- Configure a default port that the built-in EPMD client should return. This allows the local node to know the port to connect to for any other node in the cluster.

The erl_epmd callback API has also been extended to allow returning -1 as the creation which means that a random creation will be created by the node.

In addition a new callback function called listen_port_please has been added that allows the callback to return which listen port the distribution should use. This can be used instead of inet_dist_listen_min/max if the listen port is to be fetched from an external service.

OTP-16260
Application(s):
kernel
Related Id(s):
OTP-15403

*** HIGHLIGHT ***

A first EXPERIMENTAL module that is a socket backend to gen_tcp and inet has been implemented. Others will follow. Feedback will be appreciated.

OTP-16312
Application(s):
erts, kernel

The new experimental socket module has been moved to the Kernel application.

OTP-16345
Application(s):
kernel

Replace usage of deprecated function in the group module.

OTP-16368
Application(s):
kernel, observer, runtime_tools, stdlib, tools
Related Id(s):
OTP-15251

Minor updates due to the new spawn improvements made.

OTP-16370
Application(s):
erts, kernel
Related Id(s):
OTP-15232 , OTP-15251

Update of sequential tracing to also support other information transfers than message passing.

OTP-16402
Application(s):
kernel

code:module_status/1 now accepts a list of modules. code:module_status/0, which returns the statuses for all loaded modules, has been added.

OTP-16419
Application(s):
kernel

filelib:wildcard/1,2 is now twice as fast when a double star (**) is part of the pattern.

OTP-16453
Application(s):
kernel
Related Id(s):
PR-2524

*** HIGHLIGHT ***

A new implementation of distributed named process groups has been introduced. It is available in the pg module.

Note that this pg module only has the name in common with the experimental pg module that was present in stdlib up until OTP 17.

Thanks to Maxim Fedorov for the implementation.

OTP-16455
Application(s):
kernel

*** POTENTIAL INCOMPATIBILITY ***

The pg2 module has been deprecated. It has also been scheduled for removal in OTP 24.

You are advised to replace the usage of pg2 with the newly introduced pg module. pg has a similar API, but with a more scalable implementation.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

OTP-16487
Application(s):
kernel
Related Id(s):
PR-2516

The internal hosts file resolver cache inet_hosts has been rewritten to behave better when the hosts file changes. For example the cache is updated per entry instead of cleared and reloaded so lookups do not temporarily fail during reloading, and; when multiple processes simultaneously request reload these are now folded into one instead of all done in sequence. Reported and first solution suggestion by Maxim Fedorov.

OTP-16494
Application(s):
kernel

Add code:all_available/0 that can be used to get all available modules.

OTP-16495
Application(s):
kernel

*** POTENTIAL INCOMPATIBILITY ***

As of OTP 23, the distributed disk_log feature has been deprecated. It has also been scheduled for removal in OTP 24.

OTP-16499
Application(s):
kernel

Add the function code:fetch_docs/1 for fetching embedded documentation for aa Erlang module.

OTP-16530
Application(s):
erts, kernel
Related Id(s):
OTP-16464

Improve configure for the net nif, which should increase portability.

OTP-16535
Application(s):
erts, kernel

socket: Socket counters and socket global counters are now represented as maps (instead of property lists).

OTP-16550
Application(s):
erts, kernel
Related Id(s):
ERIERL-476

The experimental socket module has gotten restrictions removed so now the 'seqpacket' socket type should work for any communication domain (protocol family) where the OS supports it, typically the Unix Domain.

OTP-16563
Application(s):
kernel
Related Id(s):
PR-2523

Allow using custom IO devices in logger_std_h.

OTP-16570
Application(s):
kernel
Related Id(s):
PR-2565

Added file:del_dir_r/1 which deletes a directory together with all of its contents, similar to rm -rf on Unix systems.

OTP-16620
Application(s):
erts, kernel

socket: By default the socket options rcvtimeo and sndtimeo are now disabled. To enable these, OTP now has to be built with the configure option --enable-esock-rcvsndtimeo

OTP-16632
Application(s):
kernel
Related Id(s):
ERL-1234

The experimental gen_tcp compatibility code utilizing the socket module could loose buffered data when receiving a specified number of bytes. This bug has been fixed. Reported by Maksim Lapshin on bugs.erlang.org ERL-1234

Full runtime dependencies of kernel-7.0: erts-11.0, sasl-3.0, stdlib-3.13

megaco-3.19 #

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

OTP-16531
Application(s):
megaco

The preliminary version 3 codec(s) prev3a, prev3b and prev3c has been deprecated and will be *removed* in OTP 24. The encoding config option 'version3' will continue to work until OTP 24.

Full runtime dependencies of megaco-3.19: asn1-3.0, debugger-4.0, erts-7.0, et-1.5, kernel-3.0, runtime_tools-1.8.14, stdlib-2.5

mnesia-4.17 #

OTP-16072
Application(s):
mnesia
Related Id(s):
PR-2320

Make mnesia:create_table/2 return correct badarg value.

OTP-16634
Application(s):
mnesia
Related Id(s):
ERL-1227 , PR-2610

Fixed a bug where mnesia was sometimes not waiting during start for a commit decision on asymmetric transactions.

OTP-15695
Application(s):
kernel, mnesia, parsetools, sasl, snmp, stdlib

Remove usage and documentation of old requests of the I/O-protocol.

OTP-16189
Application(s):
mnesia

Avoid using rpc calls to do table reads, which will reduce the load on rpc server and improve performance.

Full runtime dependencies of mnesia-4.17: erts-9.0, kernel-5.3, stdlib-3.4

observer-2.9.4 #

OTP-16368
Application(s):
kernel, observer, runtime_tools, stdlib, tools
Related Id(s):
OTP-15251

Minor updates due to the new spawn improvements made.

Full runtime dependencies of observer-2.9.4: erts-11.0, et-1.5, kernel-7.0, runtime_tools-1.8.14, stdlib-3.13, wx-1.2

odbc-2.13 #

OTP-15800
Application(s):
erl_interface, erts, odbc, os_mon, wx

Fix various compiler warnings on 64-bit Windows.

OTP-16544
Application(s):
odbc
Related Id(s):
OTP-16328

Rewrite due to the removal of erl_interface legacy functions.

Full runtime dependencies of odbc-2.13: erts-6.0, kernel-3.0, stdlib-2.0

os_mon-2.5.2 #

OTP-15800
Application(s):
erl_interface, erts, odbc, os_mon, wx

Fix various compiler warnings on 64-bit Windows.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

Full runtime dependencies of os_mon-2.5.2: erts-6.0, kernel-3.0, sasl-2.4, stdlib-2.0

parsetools-2.2 #

OTP-15695
Application(s):
kernel, mnesia, parsetools, sasl, snmp, stdlib

Remove usage and documentation of old requests of the I/O-protocol.

Full runtime dependencies of parsetools-2.2: erts-6.0, kernel-3.0, stdlib-2.5

public_key-1.8 #

OTP-15247
Application(s):
public_key, ssl

*** HIGHLIGHT ***

Added support for RSA-PSS signature schemes

OTP-16346
Application(s):
common_test, public_key, snmp, ssh, ssl

Calls of deprecated functions in the Old Crypto API are replaced by calls of their substitutions.

Full runtime dependencies of public_key-1.8: asn1-3.0, crypto-3.8, erts-6.0, kernel-3.0, stdlib-3.5

runtime_tools-1.15 #

OTP-16327
Application(s):
erts, runtime_tools, tools

Improved the presentation of allocations and carriers in the instrument module.

OTP-16368
Application(s):
kernel, observer, runtime_tools, stdlib, tools
Related Id(s):
OTP-15251

Minor updates due to the new spawn improvements made.

Full runtime dependencies of runtime_tools-1.15: erts-11.0, kernel-7.0, mnesia-4.12, stdlib-3.13

sasl-4.0 #

OTP-15695
Application(s):
kernel, mnesia, parsetools, sasl, snmp, stdlib

Remove usage and documentation of old requests of the I/O-protocol.

OTP-16561
Application(s):
sasl
Related Id(s):
PR-2420

systools:make_script/2 now accepts the name of the boot file to create, it is not restricted to only RelName.boot or start.boot.

systools:make_tar/2 now accepts the option extra_files to add any extra non release related files to the tar file.

OTP-16603
Application(s):
sasl

*** POTENTIAL INCOMPATIBILITY ***

systools:make_tar/1,2 now filters out any tools from erts if included in the release tar ball. See the documentation for more details.

Full runtime dependencies of sasl-4.0: erts-10.2, kernel-5.3, stdlib-3.4, tools-2.6.14

snmp-5.6 #

OTP-16541
Application(s):
snmp
Related Id(s):
#2544

For manager, fix PrivParams for SNMPv3 USM with AES privacy; * In `snmp_usm:do_decrypt/3`, pass full UsmSecParams to `snmp_usm:try_decrypt/5` as expected by AES clause. * Change `snmpm_usm:aes_encrypt/3` to use EngineBoots and EngineTime as cached by `snmpm_config:get_usm_eboots/1` and `snmpm_config:get_usm_etime/1` instead of `snmpm_config:get_engine_boots/0` and `snmpm_config:get_engine_time/0`. This ensures correct msgPrivacyParameters are sent when AES is used. * Add test `snmp.snmp_manager_SUITE.usm_priv_aes/1` to avoid regression.

OTP-16552
Application(s):
snmp
Related Id(s):
ERL-1196

Invalid character in (manager) usm config entry generator function.

OTP-15695
Application(s):
kernel, mnesia, parsetools, sasl, snmp, stdlib

Remove usage and documentation of old requests of the I/O-protocol.

OTP-16346
Application(s):
common_test, public_key, snmp, ssh, ssl

Calls of deprecated functions in the Old Crypto API are replaced by calls of their substitutions.

OTP-16463
Application(s):
snmp

Finalize deprecation. Already deprecated functions has a "remove version 24" set and "new" functions added to list of deprecated functions.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

Full runtime dependencies of snmp-5.6: crypto-3.3, erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, stdlib-2.5

ssh-4.10 #

OTP-16363
Application(s):
ssh

Fix error in ssh_sftpd typespec.

OTP-11688
Application(s):
ssh
Related Id(s):
OTP-12699

The plug-in file ssh_file.erl, that is responsible for default file handling, is re-factored, optimized and re-written.

OTP-15434
Application(s):
ssh

*** HIGHLIGHT ***

OpenSSH 6.5 introduced a new file representation of keys called openssh-key-v1.

OTP/SSH had an experimental implementation of this format. That implementation is now improved and supported with the exception of handling encrypted keys.

OTP-15998
Application(s):
ssh
Related Id(s):
PR-2368 , PR-2376

*** HIGHLIGHT ***

TCP/IP port forwarding, a.k.a tunneling a.k.a tcp-forward/direct-tcp is implemented. In the OpenSSH client, this corresponds to the options -L and -R.

The client or server listens to a specified socket, and when something connects to it with TCP/IP, that connection is forwarded in an encrypted tunnel to the peer. The peer then connects to a predefined IP/port pair and then acts as a proxy.

See the manual, ssh:tcpip_tunnel_to_server/6 and ssh:tcpip_tunnel_from_server/6.

The functionality is disabled per default but can be enabled when starting a daemon.

OTP-16026
Application(s):
ssh
Related Id(s):
(OTP-15998) , PR-2368

The client-side of the supervisor tree (under sshc_sup) was previously not complete; the channel handling processes were handled with links but had no supervisors.

This is now corrected with a client-side supervisor tree under sshc_sup, similar to the server-side supervisor tree under sshd_sup.

OTP-16289
Application(s):
ssh
Related Id(s):
PR-2448

The extension posix-rename@openssh.com is added to the ssh/sftp rename operation.

OTP-16346
Application(s):
common_test, public_key, snmp, ssh, ssl

Calls of deprecated functions in the Old Crypto API are replaced by calls of their substitutions.

OTP-16506
Application(s):
ssh

*** HIGHLIGHT ***

The default known_hosts file handling is improved to include ports.

The handling of the contents in that file is updated to support the full syntax, with exception of 1) the wildcard '?', 2) wildcards in canonical names and 3) the option '@cert-authority'

OTP-16508
Application(s):
ssh

The MAC (Message Authorization Code) algorithms

-- hmac-sha1-etm@openssh.com

-- hmac-sha2-256-etm@openssh.com

-- hmac-sha2-512-etm@openssh.com

are implemented.

OTP-16509
Application(s):
ssh

*** POTENTIAL INCOMPATIBILITY ***

The key-exchange algorithms 'diffie-hellman-group14-sha1' and 'diffie-hellman-group-exchange-sha1' are disabled per default. The reason is that SHA1 now is considered insecure.

They can be enabled if needed, see SSH (App).

OTP-16510
Application(s):
ssh

*** POTENTIAL INCOMPATIBILITY ***

The public key algorithm 'ssh-dss' is disabled per default. The reason is that it is now considered as insecure.

It can be enabled if needed, see SSH (App).

OTP-16511
Application(s):
ssh

*** POTENTIAL INCOMPATIBILITY ***

The public key 'ssh-rsa' is now considered as insecure because of its usage of SHA1.

It is therefore deprecated and will no longer be enabled per default in OTP-24.0.

OTP-16512
Application(s):
ssh

An option optimize (optimize_key_lookup) is introduced for the file interface ssh_file.erl

The option enables the user to select between the default handling which is fast but memory consuming vs memory efficient but not as fast. The effect might be observable only for large files.

See the manual for ssh_file:is_host_key/5 and ssh_file:is_auth_key/3.

OTP-16513
Application(s):
ssh

*** HIGHLIGHT ***

The ssh agent is now implemented in the ssh_agent key callback module.

Enable with the the option {key_cb, {ssh_agent, []}} in for example ssh:connect/3.

See the ssh_agent manual for details.

OTP-16540
Application(s):
ssh

*** HIGHLIGHT ***

Algorithm configuration could now be done in a .config file.

This is useful for example to enable an algorithm that is disabled by default. It could now be enabled in an .config-file without changing the code,

See the SSH User's Guide chapter "Configuration in SSH".

OTP-16589
Application(s):
ssh

Documented which gen_tcp socket options can't be used in calls to ssh:connect and ssh:daemon.

OTP-16622
Application(s):
ssh
Related Id(s):
PR-2604

Added kb_int_fun_4() to the authentication_daemon_options() to enable generating dynamic keyboard-interactive prompts from the user's state returned from the authentication fun pwdfun_4().

Full runtime dependencies of ssh-4.10: crypto-4.6.4, erts-9.0, kernel-5.3, public_key-1.6.1, stdlib-3.4.1

ssl-10.0 #

OTP-16562
Application(s):
ssl
Related Id(s):
ERL-1168

Fix a bug that causes cross-build failure.

This change excludes the ssl.d dependency file from the source tar balls.

OTP-16573
Application(s):
ssl
Related Id(s):
ERIERL-477

Correct translation of OpenSSL legacy names for two legacy cipher suites

OTP-16585
Application(s):
ssl

Correct documentation for PSK identity and SRP username.

OTP-16626
Application(s):
ssl
Related Id(s):
ERL-1232

Make sure client hostname check is run when client uses its own verify_fun

OTP-16638
Application(s):
ssl
Related Id(s):
ERL-1206

Improved signature selection mechanism in TLS 1.3 for increased interoperability.

OTP-14790
Application(s):
ssl

*** POTENTIAL INCOMPATIBILITY ***

Drop support for SSL-3.0. Support for this legacy TLS version has not been enabled by default since OTP 19. Now all code to support it has been removed, that is SSL-3.0 protocol version can not be used and is considered invalid.

OTP-15247
Application(s):
public_key, ssl

*** HIGHLIGHT ***

Added support for RSA-PSS signature schemes

OTP-15589
Application(s):
ssl

*** HIGHLIGHT ***

Improve interoperability by implementing the middlebox compatiblity mode.

The middlebox compatibility mode makes the TLS 1.3 handshake look more like a TLS 1.2 handshake and increases the chance of successfully establishing TLS 1.3 connections through legacy middleboxes.

OTP-16127
Application(s):
ssl
Related Id(s):
OTP-15618

Utilize new properties of erlang:dist_ctrl_get_data() for performance improvement of Erlang distribution over TLS.

OTP-16346
Application(s):
common_test, public_key, snmp, ssh, ssl

Calls of deprecated functions in the Old Crypto API are replaced by calls of their substitutions.

OTP-16391
Application(s):
ssl

Implement cipher suite TLS_AES_128_CCM_8_SHA256.

OTP-16400
Application(s):
ssl

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

This change adds TLS-1.3 to the list of default supported versions. That is, TLS-1.3 and TLS-1.2 are configured when ssl option 'versions' is not explicitly set.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

OTP-16519
Application(s):
ssl

Extended ssl:versions so that it lists supported, available and implemented TLS/DTLS versions.

OTP-16532
Application(s):
ssl

Added new option exclusive for ssl:cipher_suites/2,3

OTP-16533
Application(s):
ssl

Avoid DoS attack against stateful session_tickets by making session ticket ids unpredictable.

OTP-16547
Application(s):
ssl
Related Id(s):
PR-2547

Add support for the max_fragment_length extension (RFC 6066).

OTP-16584
Application(s):
ssl

Add srp_username in ssl:connection_info, update the document with types of this function.

Full runtime dependencies of ssl-10.0: crypto-4.2, erts-10.0, inets-5.10.7, kernel-6.0, public_key-1.8, stdlib-3.5

stdlib-3.13 #

OTP-16431
Application(s):
erts, stdlib
Related Id(s):
ERL-592

Compiling a match specification with excessive nesting caused the runtime system to crash due to scheduler stack exhaustion. Instead of crashing the runtime system, effected functions will now raise a system_limit error exception in this situation.

OTP-16516
Application(s):
compiler, stdlib

Initialization of record fields using _ is no longer allowed if the number of affected fields is zero.

OTP-16545
Application(s):
stdlib

Fix bugs in eval_bits.

OTP-15299
Application(s):
kernel, stdlib

Improved the printout of single line logger events for most of the OTP behaviours in STDLIB and Kernel. This includes proc_lib, gen_server, gen_event, gen_statem, gen_fsm, supervisor, supervisor_bridge and application.

Improved the chars_limit and depth handling in proc_lib and when formatting of exceptions.

OTP-15695
Application(s):
kernel, mnesia, parsetools, sasl, snmp, stdlib

Remove usage and documentation of old requests of the I/O-protocol.

OTP-15744
Application(s):
erts, stdlib
Related Id(s):
OTP-15623 , PR-2229

*** HIGHLIGHT ***

Improved ETS scalability of concurrent calls that change the size of a table, like ets:insert/2 and ets:delete/2.

This performance feature was implemented for ordered_set in OTP 22.0 and does now apply for all ETS table types.

The improved scalability may come at the cost of longer latency of ets:info(T,size) and ets:info(T,memory). A new table option decentralized_counters has therefore been added. It is default true for ordered_set with write_concurrency enabled and default false for all other table types.

OTP-16005
Application(s):
stdlib
Related Id(s):
ERL-1003 , ERL-1150

Handle Unicode filenames in the zip module.

OTP-16073
Application(s):
stdlib
Related Id(s):
PR-2339

Unicode support was updated to the Unicode 12.1 standard.

OTP-16120
Application(s):
stdlib
Related Id(s):
ERIERL-402 , PR-2427

All of the modules proc_lib, gen_server, gen_statem, and gen_event have been extended with a start_monitor() function. For more information, see the documentation of start_monitor() for these modules.

OTP-16128
Application(s):
stdlib, tools
Related Id(s):
OTP-15618

Updates for new erlang:term_to_iovec() BIF.

OTP-16171
Application(s):
stdlib
Related Id(s):
ERL-1057

Documented a quirk regarding extraction from file descriptors in erl_tar.

OTP-16210
Application(s):
stdlib
Related Id(s):
PR-2411

Added ok as return value to gen_server:reply/2

OTP-16222
Application(s):
stdlib

*** HIGHLIGHT ***

New functions have been added to c(3) for printing embedded documentation for Erlang modules. The functions are:

-- h/1,2,3 -- Print the documentation for a Module:Function/Arity.

-- ht/1,2,3 -- Print the type documentation for a Module:Type/Arity.

The embedded documentation is created when building the Erlang/OTP documentation.

OTP-16276
Application(s):
stdlib
Related Id(s):
PR-2443

Add indent and linewidth to the options of the erl_pp module's functions.

OTP-16368
Application(s):
kernel, observer, runtime_tools, stdlib, tools
Related Id(s):
OTP-15251

Minor updates due to the new spawn improvements made.

OTP-16429
Application(s):
compiler, stdlib
Related Id(s):
ERL-303

The compiler will now raise a warning when inlining is used in modules that load NIFs.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

OTP-16480
Application(s):
stdlib

Extend erl_parse:abstract/1,2 to handle external fun expressions (fun M:F/A).

OTP-16483
Application(s):
stdlib
Related Id(s):
PR-2542

Added filelib:safe_relative_path/2 to replace filename:safe_relative_path/1, which did not safely handle symbolic links.

filename:safe_relative_path/1 has been deprecated.

OTP-16500
Application(s):
stdlib

The module shell_docs has been added. The module contains functions for rendering, validating and normalizing embedded documentation.

OTP-16501
Application(s):
stdlib
Related Id(s):
ERL-708 , OTP-16222 , OTP-16406 , OTP-16494 , OTP-16499 , OTP-16500 , PR-2545

*** HIGHLIGHT ***

Module and function auto-completion in the shell now looks at all available modules instead of only those loaded. A module is considered available if it either is loaded already or would be loaded if called.

The auto-completion has also been expanded to work in the new h/1,2,3 function in c(3).

OTP-16557
Application(s):
erts, stdlib

Updated the internal pcre library to 8.44.

Full runtime dependencies of stdlib-3.13: compiler-5.0, crypto-3.3, erts-11.0, kernel-7.0, sasl-3.0

syntax_tools-2.3 #

OTP-15925
Application(s):
syntax_tools
Related Id(s):
PR-2304

Remove incomplete support for cond expressions.

OTP-16386
Application(s):
syntax_tools
Related Id(s):
PR-2451

Improved indentation for code generated with erl_prettypr and tidier.

Full runtime dependencies of syntax_tools-2.3: compiler-7.0, erts-9.0, kernel-5.0, stdlib-3.4

tools-3.4 #

OTP-16128
Application(s):
stdlib, tools
Related Id(s):
OTP-15618

Updates for new erlang:term_to_iovec() BIF.

OTP-16327
Application(s):
erts, runtime_tools, tools

Improved the presentation of allocations and carriers in the instrument module.

OTP-16368
Application(s):
kernel, observer, runtime_tools, stdlib, tools
Related Id(s):
OTP-15251

Minor updates due to the new spawn improvements made.

Full runtime dependencies of tools-3.4: compiler-5.0, erts-11.0, erts-9.1, kernel-5.4, runtime_tools-1.8.14, stdlib-3.4

wx-1.9.1 #

OTP-15800
Application(s):
erl_interface, erts, odbc, os_mon, wx

Fix various compiler warnings on 64-bit Windows.

OTP-16469
Application(s):
asn1, compiler, crypto, edoc, inets, kernel, megaco, os_mon, otp, snmp, ssl, stdlib, wx

Refactored the internal handling of deprecated and removed functions.

Full runtime dependencies of wx-1.9.1: erts-6.0, kernel-3.0, stdlib-2.0

xmerl-1.3.25 #

OTP-16617
Application(s):
xmerl

Fix a bug that the function name didn't get normalized in some case which left white spaces in links.

Full runtime dependencies of xmerl-1.3.25: erts-6.0, kernel-3.0, stdlib-2.5