Inital Release: OTP 23.0 Git Tag: OTP-23.0 Date: 2020-04-22 Trouble Report Id: OTP-10278, OTP-11688, OTP-13450, OTP-13812, OTP-14708, OTP-14734, OTP-14790, OTP-15077, OTP-15232, OTP-15247, OTP-15251, OTP-15299, OTP-15434, OTP-15517, OTP-15589, OTP-15603, OTP-15618, OTP-15695, OTP-15744, OTP-15812, OTP-15835, OTP-15837, OTP-15840, OTP-15842, OTP-15866, OTP-15868, OTP-15915, OTP-15925, OTP-15948, OTP-15950, OTP-15956, OTP-15967, OTP-15995, OTP-15998, OTP-15999, OTP-16005, OTP-16007, OTP-16008, OTP-16014, OTP-16026, OTP-16029, OTP-16055, OTP-16072, OTP-16073, OTP-16105, OTP-16120, OTP-16127, OTP-16128, OTP-16148, OTP-16155, OTP-16160, OTP-16168, OTP-16171, OTP-16189, OTP-16210, OTP-16214, OTP-16215, OTP-16222, OTP-16229, OTP-16232, OTP-16237, OTP-16244, OTP-16250, OTP-16251, OTP-16252, OTP-16260, OTP-16264, OTP-16270, OTP-16273, OTP-16275, OTP-16276, OTP-16283, OTP-16284, OTP-16289, OTP-16312, OTP-16327, OTP-16328, OTP-16329, OTP-16345, OTP-16346, OTP-16347, OTP-16362, OTP-16363, OTP-16367, OTP-16368, OTP-16369, OTP-16370, OTP-16386, OTP-16391, OTP-16394, OTP-16395, OTP-16398, OTP-16400, OTP-16402, OTP-16406, OTP-16419, OTP-16429, OTP-16431, OTP-16432, OTP-16453, OTP-16454, OTP-16455, OTP-16463, OTP-16469, OTP-16470, OTP-16478, OTP-16480, OTP-16482, OTP-16483, OTP-16484, OTP-16487, OTP-16489, OTP-16490, OTP-16492, OTP-16494, OTP-16495, OTP-16496, OTP-16497, OTP-16499, OTP-16500, OTP-16501, OTP-16502, OTP-16503, OTP-16504, OTP-16505, OTP-16506, OTP-16508, OTP-16509, OTP-16510, OTP-16511, OTP-16512, OTP-16513, OTP-16516, OTP-16519, OTP-16521, OTP-16523, OTP-16530, OTP-16531, OTP-16533, OTP-16540, OTP-16541, OTP-16543, OTP-16544, OTP-16545, OTP-16549, OTP-16551, OTP-16552, OTP-16554, OTP-16561, OTP-16562, OTP-16563, OTP-16570, OTP-16571, OTP-16573, OTP-16576, OTP-16579, OTP-16583, OTP-16594, OTP-16607, OTP-16615, OTP-16616, OTP-16617 Seq num: ERIERL-402, ERIERL-477, ERL-1002, ERL-1003, ERL-1051, ERL-1053, ERL-1057, ERL-1058, ERL-1115, ERL-1134, ERL-1150, ERL-1154, ERL-1168, ERL-1178, ERL-1186, ERL-1189, ERL-1196, ERL-1208, ERL-303, ERL-496, ERL-560, ERL-592, ERL-700, ERL-708, ERL-716, ERL-825, ERL-927, ERL-991 System: OTP Release: 23 Application: asn1-5.0.12, common_test-1.19, compiler-7.6, crypto-4.7, debugger-5.0, dialyzer-4.2, edoc-0.12, erl_docgen-1.0, erl_interface-4.0, erts-11.0, eunit-2.5, hipe-4.0, inets-7.2, jinterface-1.11, kernel-7.0, megaco-3.19, mnesia-4.17, observer-2.9.4, odbc-2.13, os_mon-2.5.2, parsetools-2.2, public_key-1.8, runtime_tools-1.15, sasl-3.5, snmp-5.6, ssh-4.10, ssl-10.0, stdlib-3.13, syntax_tools-2.3, tools-3.4, wx-1.9.1, xmerl-1.3.25 Predecessor: OTP Check out the git tag OTP-23.0, and build a full OTP system including documentation. --------------------------------------------------------------------- --- 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-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-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 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-23.0 -------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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. --- Improvements and New Features --- 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.12 ----------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-16490 Application(s): asn1 Adhere to the ASN.1 specification for hstring & bstring lexical items. That is they may include white space. --- Improvements and New Features --- 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.12: erts-7.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- common_test-1.19 ------------------------------------------------ --------------------------------------------------------------------- --- Improvements and New Features --- 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 ---------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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. --- Improvements and New Features --- 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 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-16579 Application(s): crypto Related Id(s): ERL-825 Crypto reported unsupported elliptic curves as supported on e.g Fedora distros. --- Improvements and New Features --- 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 ---------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ---------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-15999 Application(s): edoc Related Id(s): PR-2317 Remove Inets dependency from EDoc. 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 -------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ----------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 -dist_listen false -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 new function ei_decode_iodata() has been added. --- Known Bugs and Problems --- 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. In order to fix this, a binary incompatible change in the API is needed. This API change is planned for OTP 24. --------------------------------------------------------------------- --- erts-11.0 ------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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-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. --- Improvements and New Features --- 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-16543 Application(s): compiler, erts Related Id(s): ERL-1186 Reduced the resource usage of erlc in parallel builds (e.g. make -j128). 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. Full runtime dependencies of erts-11.0: kernel-7.0, sasl-3.3, stdlib-3.13 --------------------------------------------------------------------- --- eunit-2.5 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 -------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-16470 Application(s): hipe Fixed a rare miss-compilation of tuple matching. --- Improvements and New Features --- 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 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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. --- Improvements and New Features --- 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 -dist_listen false -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-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. Full runtime dependencies of kernel-7.0: erts-11.0, sasl-3.0, stdlib-3.13 --------------------------------------------------------------------- --- megaco-3.19 ----------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ----------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-16072 Application(s): mnesia Related Id(s): PR-2320 Make mnesia:create_table/2 return correct badarg value. --- Improvements and New Features --- 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 -------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ---------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 -------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 -------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-15247 Application(s): public_key, ssl 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 ---------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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-3.5 -------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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. Full runtime dependencies of sasl-3.5: erts-10.2, kernel-5.3, stdlib-3.4, tools-2.6.14 --------------------------------------------------------------------- --- snmp-5.6 -------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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. --- Improvements and New Features --- 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 -------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-16363 Application(s): ssh Fix error in ssh_sftpd typespec. --- Improvements and New Features --- 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". 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 -------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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 --- Improvements and New Features --- 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 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 *** 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-16533 Application(s): ssl Avoid DoS attack against stateful session_tickets by making session ticket ids unpredictable. 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 ----------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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. --- Improvements and New Features --- 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). 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 ------------------------------------------------ --------------------------------------------------------------------- --- Improvements and New Features --- 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 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 -------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 ---------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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 --------------------------------------------------------------------- --------------------------------------------------------------------- ---------------------------------------------------------------------