Patch Package: OTP 21.0 Git Tag: OTP-21.0 Date: 2018-06-19 Trouble Report Id: OTP-10551, OTP-11462, OTP-11694, OTP-13019, OTP-13073, OTP-13133, OTP-13295, OTP-13370, OTP-13413, OTP-13713, OTP-13760, OTP-13761, OTP-13764, OTP-14012, OTP-14015, OTP-14019, OTP-14113, OTP-14256, OTP-14346, OTP-14359, OTP-14370, OTP-14439, OTP-14459, OTP-14465, OTP-14469, OTP-14492, OTP-14493, OTP-14496, OTP-14497, OTP-14501, OTP-14502, OTP-14503, OTP-14505, OTP-14508, OTP-14513, OTP-14518, OTP-14525, OTP-14537, OTP-14543, OTP-14547, OTP-14575, OTP-14577, OTP-14586, OTP-14589, OTP-14594, OTP-14604, OTP-14610, OTP-14613, OTP-14615, OTP-14624, OTP-14626, OTP-14637, OTP-14651, OTP-14652, OTP-14654, OTP-14666, OTP-14667, OTP-14675, OTP-14680, OTP-14681, OTP-14682, OTP-14683, OTP-14687, OTP-14692, OTP-14712, OTP-14713, OTP-14719, OTP-14726, OTP-14729, OTP-14747, OTP-14764, OTP-14768, OTP-14769, OTP-14774, OTP-14780, OTP-14782, OTP-14785, OTP-14788, OTP-14789, OTP-14795, OTP-14797, OTP-14808, OTP-14810, OTP-14824, OTP-14826, OTP-14830, OTP-14834, OTP-14844, OTP-14851, OTP-14855, OTP-14861, OTP-14864, OTP-14880, OTP-14882, OTP-14884, OTP-14888, OTP-14896, OTP-14899, OTP-14900, OTP-14901, OTP-14902, OTP-14903, OTP-14904, OTP-14909, OTP-14910, OTP-14928, OTP-14931, OTP-14932, OTP-14934, OTP-14937, OTP-14941, OTP-14943, OTP-14948, OTP-14950, OTP-14951, OTP-14954, OTP-14955, OTP-14956, OTP-14957, OTP-14958, OTP-14959, OTP-14960, OTP-14961, OTP-14962, OTP-14964, OTP-14965, OTP-14966, OTP-14968, OTP-14969, OTP-14970, OTP-14971, OTP-14974, OTP-14975, OTP-14976, OTP-14977, OTP-14978, OTP-14979, OTP-14982, OTP-14983, OTP-14986, OTP-14987, OTP-14988, OTP-14991, OTP-14992, OTP-14993, OTP-14994, OTP-14996, OTP-14998, OTP-15001, OTP-15002, OTP-15003, OTP-15006, OTP-15008, OTP-15009, OTP-15013, OTP-15015, OTP-15019, OTP-15021, OTP-15024, OTP-15025, OTP-15026, OTP-15027, OTP-15028, OTP-15029, OTP-15030, OTP-15031, OTP-15032, OTP-15033, OTP-15035, OTP-15036, OTP-15037, OTP-15039, OTP-15041, OTP-15042, OTP-15044, OTP-15045, OTP-15047, OTP-15048, OTP-15049, OTP-15050, OTP-15051, OTP-15056, OTP-15062, OTP-15069, OTP-15071, OTP-15072, OTP-15078, OTP-15079, OTP-15080, OTP-15081, OTP-15082, OTP-15083, OTP-15084, OTP-15085, OTP-15086, OTP-15087, OTP-15088, OTP-15090, OTP-15093, OTP-15098, OTP-15101, OTP-15102, OTP-15103, OTP-15105, OTP-15106, OTP-15108, OTP-15109, OTP-15113, OTP-15114, OTP-15115, OTP-15117, OTP-15118, OTP-15119, OTP-15125, OTP-15137, OTP-15141, OTP-15142 Seq num: ERIERL-177, ERL-327, ERL-370, ERL-444, ERL-500, ERL-503, ERL-511, ERL-514, ERL-542, ERL-549, ERL-550, ERL-557, ERL-563, ERL-572, ERL-576, ERL-579, ERL-593, ERL-598, ERL-601, ERL-607, ERL-613, ERL-614, ERL-615, ERL-617, ERL-621, ERL-629, ERL-634, ERL-88 System: OTP Release: 21 Application: asn1-5.0.6, common_test-1.16, compiler-7.2, crypto-4.3, debugger-4.2.5, dialyzer-3.3, diameter-2.1.5, edoc-0.9.3, eldap-1.2.4, erl_docgen-0.8, erl_interface-3.10.3, erts-10.0, et-1.6.2, eunit-2.3.6, ftp-1.0, hipe-3.18, inets-7.0, jinterface-1.9, kernel-6.0, mnesia-4.15.4, observer-2.8, os_mon-2.4.5, otp_mibs-1.2, parsetools-2.1.7, public_key-1.6, reltool-0.7.6, runtime_tools-1.13, sasl-3.2, ssh-4.7, ssl-9.0, stdlib-3.5, syntax_tools-2.1.5, tftp-1.0, tools-3.0, wx-1.8.4, xmerl-1.3.17 Predecessor: OTP Check out the git tag OTP-21.0, and build a full OTP system including documentation. --------------------------------------------------------------------- --- HIGHLIGHTS ------------------------------------------------------ --------------------------------------------------------------------- OTP-14370 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** Truly asynchronous auto-connect. Earlier, when erlang:send was aimed toward an unconnected node, the function would not return until the connection setup had completed (or failed). Now the function returns directly after the message has been enqueued and the connection setup started. The same applies to all distributed operations that may trigger auto-connect, i.e. '!', send, link, monitor, monitor_node, exit/2 and group_leader. The interface for all these functions are unchanged as they do not return connection failures. The only exception is erlang:monitor where a *possible incompatibility* is introduced: An attempt to monitor a process on a primitive node (such as erl_interface or jinterface), where remote process monitoring is not implemented, will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node. OTP-14459 Application(s): erts, kernel New functionality for implementation of alternative carriers for the Erlang distribution has been introduced. This mainly consists of support for usage of distribution controller processes (previously only ports could be used as distribution controllers). For more information see ERTS User's Guide ➜ How to implement an Alternative Carrier for the Erlang Distribution ➜ Distribution Module. OTP-14497 Application(s): compiler, erts *** POTENTIAL INCOMPATIBILITY *** Support for "tuple calls" have been removed from the run-time system. Tuple calls was an undocumented and unsupported feature which allowed the module argument for an apply operation to be a tuple: Var = dict:new(), Var:size(). This "feature" frequently caused confusion, especially when such call failed. The stacktrace would point out functions that don't exist in the source code. For legacy code that need to use parameterized modules or tuple calls for some other reason, there is a new compiler option called tuple_calls. When this option is given, the compiler will generate extra code that emulates the old behavior for calls where the module is a variable. OTP-14502 Application(s): erts Creation of small maps with literal keys has been optimized to be faster and potentially use less memory. The keys are combined into a literal key tuple which is put into the literal pool. The key tuple can be shared between many instances of maps having the same keys. OTP-14518 Application(s): erts, otp *** POTENTIAL INCOMPATIBILITY *** The non-smp emulators have been removed. This means that the configure options --disable-threads and --enable-plain-emulator have been removed and configure will now refuse to build Erlang/OTP on platforms without thread support. In order to achieve a similar setup as the non-smp emulator, it is possible to start Erlang/OTP with the +S 1 option. OTP-14589 Application(s): erts Implementation of true asynchronous signaling between processes in order to improve scalability. Signals affected include exit, monitor, demonitor, monitor triggered, link, unlink, and group leader. OTP-14626 Application(s): compiler, erts Loaded BEAM code in a 64-bit system requires less memory because of better packing of operands for instructions. These memory savings were achieved by major improvements to the beam_makeops scripts used when building the run time system and BEAM compiler. There is also new for documentation for beam_makeops that describes how new BEAM instructions and loader transformations can be implemented. The documentation is found in here in a source directory or git repository: erts/emulator/internal_doc/beam_makeops.md. An online version can be found here: https://github.com/erlang/otp/blob/master/erts/emulator/internal_doc/beam_makeops.md OTP-14692 Application(s): compiler, erts There is a new syntax in 'try/catch' for retrieving the stacktrace without calling 'erlang:get_stacktrace/0'. See the reference manual for a description of the new syntax. The 'erlang:get_stacktrace/0' BIF is now deprecated. OTP-14899 Application(s): erts, kernel seq_trace labels may now be any erlang term. OTP-14928 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** The number of driver async threads will now default to 1 as the standard drivers do not use them anymore. Users that changed this value to tweak the file driver should replace +A with +SDio since it now uses dirty IO schedulers instead of async threads. OTP-14968 Application(s): compiler Related Id(s): ERL-563 When compiling modules with huge functions, the compiler would generate a lot of atoms for its internal, sometimes so many that the atom table would overflow. The compiler has been rewritten to generate far less internal atoms to avoid filling the atom table. OTP-15037 Application(s): compiler, erts Related Id(s): PR-1784, PR-1802 Two new guards BIFs operating on maps have been added: map_get/2 and is_map_key/2. They do the same as maps:get/2 and maps:is_key/2, respectively, except that they are allowed to be used in guards. OTP-15087 Application(s): compiler Related Id(s): PR-1810 Part of EEP-44 has been implemented. There is a new predefined macro called OTP_RELEASE which is an integer indicating the OTP release number (its value is 21 in this release). There are new preprocessor directives -if(Condition). and -elif(Condition).. The if/elif supports the builtin function defined(Symbol). OTP-15142 Application(s): ssl First version with support for DTLS --------------------------------------------------------------------- --- POTENTIAL INCOMPATIBILITIES ------------------------------------- --------------------------------------------------------------------- OTP-11694 Application(s): erts The erlang:system_flag(scheduler_wall_time,Bool) call is now reference counted and will be turned off if the (last) process that started the performance statistics dies. Thus it is no longer possible to start the statistics with rpc:call(Node, erlang, system_flag, [scheduler_wall_time, true]) since it will be turned off directly afterwards when the rpc process dies. OTP-13073 Application(s): stdlib Related Id(s): PR-1595 The semantics of timeout parameter {clean_timeout,infinity} to gen_statem:call/3 has been changed to use a proxy process for the call. With this change clean_timeout implicates a proxy process with no exceptions. This may be a hard to observe incompatibility: in the presence of network problems a late reply could arrive in the caller's message queue when catching errors. That will not happen after this correction. The semantics of timeout parameter infinity has not been changed. OTP-13295 Application(s): erts, kernel, sasl, stdlib A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide. Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code. Notice the following potential incompatibilities: -- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger. In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger. -- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged. By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP. Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level. To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events. Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version. OTP-13761 Application(s): kernel Related Id(s): ERL-503 No resolver backend returns V4Mapped IPv6 addresses any more. This was inconsistent before, some did, some did not. To facilitate working with such addresses a new function inet:ipv4_mapped_ipv6_address/1 has been added. OTP-14256 Application(s): erts The file driver has been rewritten as a NIF, decreasing the latency of file operations. Notable incompatibilities are: -- The use_threads option for file:sendfile/5 no longer has any effect; we either use non-blocking sendfile(2) or fall back to file:read + gen_tcp:send. -- The file-specific DTrace probes have been removed. The same effect can be achieved with normal tracing together with the nif__entry/nif__return probes to track scheduling. OTP-14370 Application(s): erts *** HIGHLIGHT *** Truly asynchronous auto-connect. Earlier, when erlang:send was aimed toward an unconnected node, the function would not return until the connection setup had completed (or failed). Now the function returns directly after the message has been enqueued and the connection setup started. The same applies to all distributed operations that may trigger auto-connect, i.e. '!', send, link, monitor, monitor_node, exit/2 and group_leader. The interface for all these functions are unchanged as they do not return connection failures. The only exception is erlang:monitor where a *possible incompatibility* is introduced: An attempt to monitor a process on a primitive node (such as erl_interface or jinterface), where remote process monitoring is not implemented, will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node. OTP-14439 Application(s): compiler, dialyzer, erts, stdlib Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories. escript, erlc, dialyzer and typer no longer load an .erlang at all. OTP-14469 Application(s): sasl The old and outdated "Status Inspection" tool (modules si and si_sasl_sup) is removed. OTP-14497 Application(s): compiler, erts *** HIGHLIGHT *** Support for "tuple calls" have been removed from the run-time system. Tuple calls was an undocumented and unsupported feature which allowed the module argument for an apply operation to be a tuple: Var = dict:new(), Var:size(). This "feature" frequently caused confusion, especially when such call failed. The stacktrace would point out functions that don't exist in the source code. For legacy code that need to use parameterized modules or tuple calls for some other reason, there is a new compiler option called tuple_calls. When this option is given, the compiler will generate extra code that emulates the old behavior for calls where the module is a variable. OTP-14508 Application(s): erts When an exception is thrown, include the arguments of the call in the stacktrace for BIFs band, bor, bsl, bsr, bxor, div, rem and the operators +, -, * and /. OTP-14518 Application(s): erts, otp *** HIGHLIGHT *** The non-smp emulators have been removed. This means that the configure options --disable-threads and --enable-plain-emulator have been removed and configure will now refuse to build Erlang/OTP on platforms without thread support. In order to achieve a similar setup as the non-smp emulator, it is possible to start Erlang/OTP with the +S 1 option. OTP-14543 Application(s): erts, kernel, stdlib Related Id(s): ERL-370 File operations used to accept filenames containing null characters (integer value zero). This caused the name to be truncated and in some cases arguments to primitive operations to be mixed up. Filenames containing null characters inside the filename are now *rejected* and will cause primitive file operations to fail. Also environment variable operations used to accept names and values of environment variables containing null characters (integer value zero). This caused operations to silently produce erroneous results. Environment variable names and values containing null characters inside the name or value are now *rejected* and will cause environment variable operations to fail. Primitive environment variable operations also used to accept the $= character in environment variable names causing various problems. $= characters in environment variable names are now also *rejected*. Also os:cmd/1 now reject null characters inside its command. erlang:open_port/2 will also reject null characters inside the port name from now on. OTP-14577 Application(s): stdlib filelib:wildcard() now allows characters with a special meaning to be escaped using backslashes. This is an incompatible change, but note that the use of backslashes in wildcards would already work differently on Windows and Unix. Existing calls to filelib:wildcard() needs to be updated. On Windows, directory separators must always be written as a slash. OTP-14666 Application(s): erts, kernel os:putenv and os:getenv no longer access the process environment directly and instead work on a thread-safe emulation. The only observable difference is that it's *not* kept in sync with libc getenv(3) / putenv(3), so those who relied on that behavior in drivers or NIFs will need to add manual synchronization. On Windows this means that you can no longer resolve DLL dependencies by modifying the PATH just before loading the driver/NIF. To make this less of a problem, the emulator now adds the target DLL's folder to the DLL search path. OTP-14768 Application(s): ssl For security reasons no longer support 3-DES cipher suites by default OTP-14769 Application(s): ssl For security reasons RSA-key exchange cipher suites are no longer supported by default OTP-14789 Application(s): ssl The interoperability option to fallback to insecure renegotiation now has to be explicitly turned on. OTP-14824 Application(s): ssl Drop support for SSLv2 enabled clients. SSLv2 has been broken for decades and never supported by the Erlang SSL/TLS implementation. This option was by default disabled and enabling it has proved to sometimes break connections not using SSLv2 enabled clients. OTP-14851 Application(s): ssh The option exec has new option values defined to make it much more easy to implement an own exec server. An option called exec for daemons implementing the handling of 'exec' requests has existed a long time but has been undocumented. The old undocumented value - as well as its behavior - is kept for compatibility EXCEPT that error messages are changed and are sent as "stderror" text. OTP-14882 Application(s): ssl Remove CHACHA20_POLY1305 ciphers form default for now. We have discovered interoperability problems, ERL-538, that we believe needs to be solved in crypto. OTP-14928 Application(s): erts *** HIGHLIGHT *** The number of driver async threads will now default to 1 as the standard drivers do not use them anymore. Users that changed this value to tweak the file driver should replace +A with +SDio since it now uses dirty IO schedulers instead of async threads. OTP-14961 Application(s): erts, tools Added instrument:allocations and instrument:carriers for retrieving information about memory utilization and fragmentation. The old instrument interface has been removed, as have the related options +Mim and +Mis. OTP-14964 Application(s): erts Related Id(s): OTP-14589 The process suspend functionality used by the erlang:suspend_process/2 BIF has been reimplemented using the newly introduced true asynchronous signaling between processes. This mainly to reduce memory usage in the process control block of all processes, but also in order to simplify the implementation. WARNING: You can easily create deadlocks if processes suspends each other (directly or in circles). In ERTS versions prior to ERTS version 10.0, the runtime system prevented such deadlocks, but this prevention has now been removed due to performance reasons. Other ERTS internal functionality that used the previous process suspend functionality have also been reimplemented to use asynchronous signaling instead. OTP-14986 Application(s): erts Related Id(s): PR-1745 erlang:process_info/1 has been changed to no longer include messages by default. Instead erlang:process_info/2 should be used. OTP-15002 Application(s): ssh Related Id(s): OTP-15030 The type specifications in SSH are completly reworked and the following types are renamed: ssh:ssh_connection_ref() is changed to ssh:connection_ref(), ssh:ssh_daemon_ref() is changed to ssh:daemon_ref(), ssh:ssh_channel_id() is changed to ssh:channel_id(). OTP-15071 Application(s): kernel The included_applications key are no longer duplicated as application environment variable. Earlier, the included applications could be read both with application:get[_all]_env(...) and application:get[_all]_key(...) functions. Now, it can only be read with application:get[_all]_key(...). OTP-15072 Application(s): stdlib Related Id(s): 1786, OTP-15114, PR The lib module is removed: -- lib:error_message/2 is removed. -- lib:flush_receive/0 is removed. -- lib:nonl/1 is removed. -- lib:progname/0 is replaced by ct:get_progname/0. -- lib:send/2 is removed. -- lib:sendw/2 is removed. OTP-15103 Application(s): stdlib Related Id(s): ERL-607 In control sequences of the functions io:fwrite/2,3 and io_lib:fwrite/2,3 containing p or P, a field width of value 0 means that no line breaks are inserted. This is in contrast to the old behaviour, where 0 used to insert line breaks after every subterm. To insert line breaks after every subterm, a field width of value 1 can be used. OTP-15118 Application(s): erts, kernel Owner and group changes through file:write_file_info, file:change_owner, and file:change_group will no longer report success on permission errors. --------------------------------------------------------------------- --- asn1-5.0.6 ------------------------------------------------------ --------------------------------------------------------------------- --- Improvements and New Features --- OTP-15036 Application(s): asn1, edoc, eldap, syntax_tools Update to use the new string api instead of the old. Full runtime dependencies of asn1-5.0.6: erts-7.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- common_test-1.16 ------------------------------------------------ --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14810 Application(s): common_test Use the compiler option nowarn_export_all to disable export_all warnings when automatically compiling test suites. OTP-14902 Application(s): common_test, observer, public_key, ssl Use uri_string module instead of http_uri. Full runtime dependencies of common_test-1.16: 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.2 ---------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14855 Application(s): compiler Related Id(s): ERL-549 Fixed an error in an optimization pass that caused impossible tuple matching. OTP-14992 Application(s): compiler Related Id(s): ERL-572 The exception thrown when a list comprehension was given a non-list term was not always correct. OTP-15115 Application(s): compiler Related Id(s): PR-1831 The compiler could produce incorrect code in rare circumstances when the [{inline,F/A}] option was used. --- Improvements and New Features --- OTP-14439 Application(s): compiler, dialyzer, erts, stdlib *** POTENTIAL INCOMPATIBILITY *** Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories. escript, erlc, dialyzer and typer no longer load an .erlang at all. OTP-14497 Application(s): compiler, erts *** HIGHLIGHT *** *** POTENTIAL INCOMPATIBILITY *** Support for "tuple calls" have been removed from the run-time system. Tuple calls was an undocumented and unsupported feature which allowed the module argument for an apply operation to be a tuple: Var = dict:new(), Var:size(). This "feature" frequently caused confusion, especially when such call failed. The stacktrace would point out functions that don't exist in the source code. For legacy code that need to use parameterized modules or tuple calls for some other reason, there is a new compiler option called tuple_calls. When this option is given, the compiler will generate extra code that emulates the old behavior for calls where the module is a variable. OTP-14505 Application(s): compiler In code such as example({ok, Val}) -> {ok, Val}. a tuple would be built. The compiler will now automatically rewrite the code to example({ok,Val}=Tuple) -> Tuple. which will reduce code size, execution time, and remove GC pressure. OTP-14525 Application(s): compiler The optimization of case expression where only one of the case arms can execute successfully has been improved. OTP-14594 Application(s): compiler Related Id(s): ERL-444 Some uses of binary matching has been slightly improved, eliminating unnecessary register shuffling. OTP-14615 Application(s): compiler Related Id(s): PR-1558 There is a new {compile_info,Info} option for the compiler that allows BEAM-based languages such as Elixir and LFE to add their own compiler versions. OTP-14626 Application(s): compiler, erts *** HIGHLIGHT *** Loaded BEAM code in a 64-bit system requires less memory because of better packing of operands for instructions. These memory savings were achieved by major improvements to the beam_makeops scripts used when building the run time system and BEAM compiler. There is also new for documentation for beam_makeops that describes how new BEAM instructions and loader transformations can be implemented. The documentation is found in here in a source directory or git repository: erts/emulator/internal_doc/beam_makeops.md. An online version can be found here: https://github.com/erlang/otp/blob/master/erts/emulator/internal_doc/beam_makeops.md OTP-14654 Application(s): compiler Size calculations for binary constructions has been somewhat optimized, producing smaller code. OTP-14683 Application(s): compiler, erts When the value returned from a 'catch' expression is ignored, no stacktrace will be built if an exception is caught. That will save time and produce less garbage. There are also some minor optimizations of 'try/catch' both in the compiler and run-time system. OTP-14692 Application(s): compiler, erts *** HIGHLIGHT *** There is a new syntax in 'try/catch' for retrieving the stacktrace without calling 'erlang:get_stacktrace/0'. See the reference manual for a description of the new syntax. The 'erlang:get_stacktrace/0' BIF is now deprecated. OTP-14712 Application(s): compiler The following is an internal change in the compiler, that is not noticeable for normal use of the compiler: The module v3_life has been removed. Its functionality has been simplified and integrated into v3_codegen. OTP-14774 Application(s): compiler The optimization of binary matching that delays creation of sub binaries (see the Efficiency Guide) could be thwarted by the argument order and could be necessary to change the argument order. The compiler has now become smarter and can handle any argument order. OTP-14808 Application(s): compiler Related Id(s): ERL-514 When the compiler was faced with complex case expressions it would unnecessarily allocate stack elements and shuffle data between x and y registers. Improved code generation to only allocate a stack frame when strictly necessary. OTP-14830 Application(s): compiler, erts There is a new option 'makedep_side_effect' for the compiler and -MMD for 'erlc' that generates dependencies and continues to compile as normal. OTP-14968 Application(s): compiler Related Id(s): ERL-563 *** HIGHLIGHT *** When compiling modules with huge functions, the compiler would generate a lot of atoms for its internal, sometimes so many that the atom table would overflow. The compiler has been rewritten to generate far less internal atoms to avoid filling the atom table. OTP-15003 Application(s): compiler, stdlib External funs with literal values for module, name, and arity (e.g. erlang:abs/1) are now treated as literals. That means more efficient code that produces less garbage on the heap. OTP-15037 Application(s): compiler, erts Related Id(s): PR-1784, PR-1802 *** HIGHLIGHT *** Two new guards BIFs operating on maps have been added: map_get/2 and is_map_key/2. They do the same as maps:get/2 and maps:is_key/2, respectively, except that they are allowed to be used in guards. OTP-15044 Application(s): compiler Related Id(s): ERL-614 A call or apply of a literal external fun will be replaced with a direct call. OTP-15087 Application(s): compiler Related Id(s): PR-1810 *** HIGHLIGHT *** Part of EEP-44 has been implemented. There is a new predefined macro called OTP_RELEASE which is an integer indicating the OTP release number (its value is 21 in this release). There are new preprocessor directives -if(Condition). and -elif(Condition).. The if/elif supports the builtin function defined(Symbol). Full runtime dependencies of compiler-7.2: crypto-3.6, erts-9.0, hipe-3.12, kernel-4.0, stdlib-2.5 --------------------------------------------------------------------- --- crypto-4.3 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14956 Application(s): crypto Related Id(s): ERL-579 Removed two undocumented and erroneous functions (crypto:dh_generate_parameters/2 and crypto:dh_check/1). OTP-15088 Application(s): crypto Fixed bug causing VM crash if doing runtime upgrade of a crypto module built against OpenSSL older than 0.9.8h. Bug exists since OTP-20.2. --- Improvements and New Features --- OTP-13370 Application(s): crypto Related Id(s): PR-1573 A new rand plugin algorithm has been implemented in crypto, that is: crypto_cache. It uses strong random bytes as randomness source and caches them to get good speed. See crypto:rand_seed_alg/1. OTP-14864 Application(s): crypto Diffie-Hellman key functions are re-written with the EVP_PKEY api. Full runtime dependencies of crypto-4.3: erts-9.0, kernel-5.3, stdlib-3.4 --------------------------------------------------------------------- --- debugger-4.2.5 -------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14957 Application(s): debugger Related Id(s): PR-1741 Fix a bug where calling a fun inside a binary would crash the Debugger. Full runtime dependencies of debugger-4.2.5: compiler-5.0, erts-9.0, kernel-5.3, stdlib-3.4, wx-1.2 --------------------------------------------------------------------- --- dialyzer-3.3 ---------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14439 Application(s): compiler, dialyzer, erts, stdlib *** POTENTIAL INCOMPATIBILITY *** Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories. escript, erlc, dialyzer and typer no longer load an .erlang at all. OTP-14493 Application(s): dialyzer Related Id(s): PR-1434 Dialyzer can no longer read BEAM files created with OTP 19 or earlier. OTP-14937 Application(s): dialyzer Related Id(s): PR-1719 Speed up the computation of MD5 sums. OTP-14970 Application(s): dialyzer Related Id(s): PR-1722 Fix a situation where Dialyzer unnecessarily discarded contract information, resulting in missed warnings. OTP-14982 Application(s): dialyzer Related Id(s): OTP-14970, PR-1722 The (not recommended) option -Woverspecs is somewhat refined, and generates warnings in a few more cases. OTP-15079 Application(s): dialyzer Related Id(s): ERL-593 Do not emit warnings for fun expressions residing in code that cannot be run. This is consistent with how Dialyzer treats other code that cannot be run. Full runtime dependencies of dialyzer-3.3: compiler-7.0, erts-9.0, hipe-3.16.1, kernel-5.3, stdlib-3.4, syntax_tools-2.0, wx-1.2 --------------------------------------------------------------------- --- diameter-2.1.5 -------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-15045 Application(s): diameter Fix documentation typos. Full runtime dependencies of diameter-2.1.5: erts-10.0, kernel-3.2, ssl-9.0, stdlib-2.4 --------------------------------------------------------------------- --- edoc-0.9.3 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-15117 Application(s): edoc Types and function specifications including the map() type are pretty-printed correctly. --- Improvements and New Features --- OTP-15036 Application(s): asn1, edoc, eldap, syntax_tools Update to use the new string api instead of the old. Full runtime dependencies of edoc-0.9.3: erts-6.0, inets-5.10, kernel-3.0, stdlib-2.5, syntax_tools-1.6.14, xmerl-1.3.7 --------------------------------------------------------------------- --- eldap-1.2.4 ----------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-15036 Application(s): asn1, edoc, eldap, syntax_tools Update to use the new string api instead of the old. Full runtime dependencies of eldap-1.2.4: asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-2.0 --------------------------------------------------------------------- --- erl_docgen-0.8 -------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14979 Application(s): erl_docgen, otp Add a hoverable element to the titles in the html documentation with a link to github where the documentation can be edited. Make the anchors in the html User's Guide and system documentation use the title of the sections instead of a generated id. Full runtime dependencies of erl_docgen-0.8: edoc-0.7.13, erts-9.0, stdlib-3.4, xmerl-1.3.7 --------------------------------------------------------------------- --- erl_interface-3.10.3 -------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-15033 Application(s): erl_interface Fix bug where calling erl_init on certain platforms could result in a buffer overflow bug. OTP-15105 Application(s): erl_interface Related Id(s): ERL-629 Fixed erl_call -m to not deallocate module source binary before it has been read. --- Improvements and New Features --- OTP-15114 Application(s): erl_interface Related Id(s): ERL-634, OTP-15072 The program erl_call calls erl_eval:eval_str/1 when it used to call lib:eval_str/1. This means that erl_call will fail when trying interact with an Erlang node running Erlang/OTP 20 or earlier. --------------------------------------------------------------------- --- erts-10.0 ------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14019 Application(s): erts, kernel, stdlib Related Id(s): ERL-550 The type specifications for file:posix/0 and inet:posix/0 have been updated according to which errors file and socket operations should be able to return. OTP-14537 Application(s): erts Related Id(s): PR1529 Fix error printout from run_erl and a bug that could cause unintended fds to be leaked into the started program. OTP-14543 Application(s): erts, kernel, stdlib Related Id(s): ERL-370 *** POTENTIAL INCOMPATIBILITY *** File operations used to accept filenames containing null characters (integer value zero). This caused the name to be truncated and in some cases arguments to primitive operations to be mixed up. Filenames containing null characters inside the filename are now *rejected* and will cause primitive file operations to fail. Also environment variable operations used to accept names and values of environment variables containing null characters (integer value zero). This caused operations to silently produce erroneous results. Environment variable names and values containing null characters inside the name or value are now *rejected* and will cause environment variable operations to fail. Primitive environment variable operations also used to accept the $= character in environment variable names causing various problems. $= characters in environment variable names are now also *rejected*. Also os:cmd/1 now reject null characters inside its command. erlang:open_port/2 will also reject null characters inside the port name from now on. OTP-14652 Application(s): erts Fix bugs related to the bookkeeping of microstate accounting states. OTP-14666 Application(s): erts, kernel *** POTENTIAL INCOMPATIBILITY *** os:putenv and os:getenv no longer access the process environment directly and instead work on a thread-safe emulation. The only observable difference is that it's *not* kept in sync with libc getenv(3) / putenv(3), so those who relied on that behavior in drivers or NIFs will need to add manual synchronization. On Windows this means that you can no longer resolve DLL dependencies by modifying the PATH just before loading the driver/NIF. To make this less of a problem, the emulator now adds the target DLL's folder to the DLL search path. OTP-14713 Application(s): erts Related Id(s): ERL-500 Corrected erlang:is_builtin(erlang, M, F) to return true for apply/2 and yield/0. OTP-14719 Application(s): erts Fixed a bug where the PATH environment variable wasn't updated correctly on a release downgrade, effectively keeping the PATH of the new release. OTP-14782 Application(s): erts Related Id(s): ERL-511 A receive optimization that avoids scanning the entire message queue when receiving a message containing a freshly created reference could in rare circumstances (involving recursive calls to the functions that does the receive) cause the receive to hang. This has been corrected. OTP-14909 Application(s): erts Related Id(s): PR-1692 Fix building of Erlang/OTP on platforms which have small data area with short addressing. For example the PowerPC/RTEMS platform. OTP-14931 Application(s): erts Fixed a crash when enif_make_binary is called with a binary produced by enif_inspect_binary in a different environment. OTP-14932 Application(s): erts Fixed a crash when enif_make_binary is called more than once with a binary that had previously been added to an enif_ioq. OTP-14943 Application(s): erts Related Id(s): ERL-576 The erl_child_setup program now ignores SIGTERM signals. OTP-14977 Application(s): erts Force 64-bit alignment on pre-allocators on architectures which needs it. OTP-14978 Application(s): erts Fixed a bug where dirty scheduler picked up non-dirty work. OTP-15001 Application(s): erts, kernel Calls to gen_tcp:send/2 on closed sockets now returns {error, closed} instead of {error,enotconn}. OTP-15008 Application(s): erts erlang:monotonic_time/1 failed with badarg when passing the perf_counter time unit as argument. OTP-15013 Application(s): erts Fix bug where rapid init:restart() calls would sometimes crash because a code load request leaked in between the restarts. OTP-15015 Application(s): erts Related Id(s): OTP-14890 Improve float_to_list(F, [{decimals,D}]) to closer conform with io_lib:format("~.*f", [D,F]). There are however, still cases when float_to_list does not produce the exact same result as io_lib:format, especially for large values F and/or many decimals D. OTP-15024 Application(s): erts Fixed a deadlock that would occur on certain allocators when a reallocation failed with +ramv enabled. OTP-15029 Application(s): erts Fix bug that made it impossible to use an erl_tracer as the seq_trace trace receiver. OTP-15032 Application(s): erts Fix bug where a large (> 1 GB) emulator generated error logger message would cause the emulator to crash. OTP-15062 Application(s): erts Related Id(s): ERL-615 The emulator will no longer crash when reading the file information of an ordinary file that has an NTFS reparse point, such as files stored in a OneDrive-mapped folder. OTP-15080 Application(s): erts Fixed bug in enif_binary_to_term which could cause memory corruption for immediate terms (atoms, small integers, pids, ports, empty lists). OTP-15085 Application(s): erts Fixed bug in erlang:system_profile/2 that could cause superfluous {profile,_,active,_,_} messages for terminating processes. OTP-15090 Application(s): erts On OSs with per thread CPU time support, change cpu_timestamp in erlang:trace/3 to use it instead of per process CPU time. This makes this option useable on such OSs when running multiple schedulers. OTP-15108 Application(s): erts Related Id(s): ERL-621 Fix segfault in abort_signal_task which could happen if a port terminated while there were outstanding port tasks that were not signals, for example a ready_input/ready_output event. OTP-15109 Application(s): erts Fixed bug in ets that could cause VM crash if process A terminates after fixating a table and process B deletes the table at "the same time". The table fixation could be done with ets:safe_fixtable or if process A terminates in the middle of a long running select or match call. OTP-15118 Application(s): erts, kernel *** POTENTIAL INCOMPATIBILITY *** Owner and group changes through file:write_file_info, file:change_owner, and file:change_group will no longer report success on permission errors. OTP-15119 Application(s): erts Related Id(s): PR-1826 Fix a bug error reporting from escripts on windows where the error message would get garbled. OTP-15125 Application(s): erts Fix segfault when a process is interally re-scheduled while being traced for in out events. This bug was introduced in erts-8.0 (OTP-19.0). --- Improvements and New Features --- OTP-11462 Application(s): erts It is now possible to open device files and FIFOs with file:open/2. OTP-11694 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** The erlang:system_flag(scheduler_wall_time,Bool) call is now reference counted and will be turned off if the (last) process that started the performance statistics dies. Thus it is no longer possible to start the statistics with rpc:call(Node, erlang, system_flag, [scheduler_wall_time, true]) since it will be turned off directly afterwards when the rpc process dies. OTP-13295 Application(s): erts, kernel, sasl, stdlib *** POTENTIAL INCOMPATIBILITY *** A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide. Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code. Notice the following potential incompatibilities: -- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger. In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger. -- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged. By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP. Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level. To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events. Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version. OTP-13760 Application(s): erts Related Id(s): PR-1592 gen_sctp:connect_init/4 or rather connect in inet_drv.c for SCTP has been fixed to not check the write file descriptor for writeability after a connect, since for SCTP (SOCK_SEQPACKET) that property does not seem to be any kind of indicator for when a connect has finished. This fixes connects that the OS returned as "in progress" that was misinterpreted by gen_sctp:connect_init as failed. OTP-14256 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** The file driver has been rewritten as a NIF, decreasing the latency of file operations. Notable incompatibilities are: -- The use_threads option for file:sendfile/5 no longer has any effect; we either use non-blocking sendfile(2) or fall back to file:read + gen_tcp:send. -- The file-specific DTrace probes have been removed. The same effect can be achieved with normal tracing together with the nif__entry/nif__return probes to track scheduling. OTP-14346 Application(s): erts The I/O polling functionality of erts has been re-written to better make use of the OSs polling mechanisms. This change means that erts will now always prefer to use a kernel-polling mechanism if possible. Also all of the I/O polling has been moved to dedicated threads instead of being placed in the scheduler loops. As a result of this, the erl options +K and +secio have been removed. It is still possible to disable kernel-poll, but it has to be done at compile time through the configure option --disable-kernel-poll. The new erl options +IOt and +IOp can be used to change how many IO poll threads and poll sets that erts should use. See their respective documentation for more details. OTP-14370 Application(s): erts *** HIGHLIGHT *** *** POTENTIAL INCOMPATIBILITY *** Truly asynchronous auto-connect. Earlier, when erlang:send was aimed toward an unconnected node, the function would not return until the connection setup had completed (or failed). Now the function returns directly after the message has been enqueued and the connection setup started. The same applies to all distributed operations that may trigger auto-connect, i.e. '!', send, link, monitor, monitor_node, exit/2 and group_leader. The interface for all these functions are unchanged as they do not return connection failures. The only exception is erlang:monitor where a *possible incompatibility* is introduced: An attempt to monitor a process on a primitive node (such as erl_interface or jinterface), where remote process monitoring is not implemented, will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node. OTP-14439 Application(s): compiler, dialyzer, erts, stdlib *** POTENTIAL INCOMPATIBILITY *** Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories. escript, erlc, dialyzer and typer no longer load an .erlang at all. OTP-14459 Application(s): erts, kernel *** HIGHLIGHT *** New functionality for implementation of alternative carriers for the Erlang distribution has been introduced. This mainly consists of support for usage of distribution controller processes (previously only ports could be used as distribution controllers). For more information see ERTS User's Guide ➜ How to implement an Alternative Carrier for the Erlang Distribution ➜ Distribution Module. OTP-14492 Application(s): erts Add support for the lcc compiler and in extension the Elbrus 2000 platform. OTP-14497 Application(s): compiler, erts *** HIGHLIGHT *** *** POTENTIAL INCOMPATIBILITY *** Support for "tuple calls" have been removed from the run-time system. Tuple calls was an undocumented and unsupported feature which allowed the module argument for an apply operation to be a tuple: Var = dict:new(), Var:size(). This "feature" frequently caused confusion, especially when such call failed. The stacktrace would point out functions that don't exist in the source code. For legacy code that need to use parameterized modules or tuple calls for some other reason, there is a new compiler option called tuple_calls. When this option is given, the compiler will generate extra code that emulates the old behavior for calls where the module is a variable. OTP-14502 Application(s): erts *** HIGHLIGHT *** Creation of small maps with literal keys has been optimized to be faster and potentially use less memory. The keys are combined into a literal key tuple which is put into the literal pool. The key tuple can be shared between many instances of maps having the same keys. OTP-14508 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** When an exception is thrown, include the arguments of the call in the stacktrace for BIFs band, bor, bsl, bsr, bxor, div, rem and the operators +, -, * and /. OTP-14518 Application(s): erts, otp *** HIGHLIGHT *** *** POTENTIAL INCOMPATIBILITY *** The non-smp emulators have been removed. This means that the configure options --disable-threads and --enable-plain-emulator have been removed and configure will now refuse to build Erlang/OTP on platforms without thread support. In order to achieve a similar setup as the non-smp emulator, it is possible to start Erlang/OTP with the +S 1 option. OTP-14575 Application(s): erts Modules that use floating point constants compiled with R15 or earlier will need to be re-compiled before they can be loaded. OTP-14589 Application(s): erts *** HIGHLIGHT *** Implementation of true asynchronous signaling between processes in order to improve scalability. Signals affected include exit, monitor, demonitor, monitor triggered, link, unlink, and group leader. OTP-14604 Application(s): erts Added a PGO (profile guided optimization) pass to the build step of erts. This can be disabled by passing --disable-pgo to configure. OTP-14610 Application(s): erts Related Id(s): PR-1480 Improved the performance of binary:split and binary:match. OTP-14613 Application(s): erts It is not longer possible to disable dirty schedulers when building erlang. OTP-14626 Application(s): compiler, erts *** HIGHLIGHT *** Loaded BEAM code in a 64-bit system requires less memory because of better packing of operands for instructions. These memory savings were achieved by major improvements to the beam_makeops scripts used when building the run time system and BEAM compiler. There is also new for documentation for beam_makeops that describes how new BEAM instructions and loader transformations can be implemented. The documentation is found in here in a source directory or git repository: erts/emulator/internal_doc/beam_makeops.md. An online version can be found here: https://github.com/erlang/otp/blob/master/erts/emulator/internal_doc/beam_makeops.md OTP-14637 Application(s): erts Related Id(s): ERL-327, PR-1524 file:read_file has been changed to read the content of files that report a size of 0 even when data can be read from them. An example of such a file is /proc/cpuinfo on Linux. OTP-14651 Application(s): erts It is no longer possible to disable the temp_alloc allocator. Disabling it caused serious performance degradations and was never what was wanted. OTP-14667 Application(s): erts The reduction cost of sending messages is now constant. It will no longer scale according to the length of the receiving process' message queue. OTP-14680 Application(s): erts Improved loading of modules with -on_load directive, to no longer block all schedulers when the load operation is completed. OTP-14682 Application(s): erts On platforms with real-time signals available, SIGRTMIN+1 is now used as the internal scheduler suspend signal instead of SIGUSR2. OTP-14683 Application(s): compiler, erts When the value returned from a 'catch' expression is ignored, no stacktrace will be built if an exception is caught. That will save time and produce less garbage. There are also some minor optimizations of 'try/catch' both in the compiler and run-time system. OTP-14687 Application(s): erts The guarantees and non-guarantees of erlang:get_stacktrace/0 are now documented. OTP-14692 Application(s): compiler, erts *** HIGHLIGHT *** There is a new syntax in 'try/catch' for retrieving the stacktrace without calling 'erlang:get_stacktrace/0'. See the reference manual for a description of the new syntax. The 'erlang:get_stacktrace/0' BIF is now deprecated. OTP-14780 Application(s): erts New 'used' option for binary_to_term/2 that will also return number of bytes actually read from the binary. This enables easy access to any extra data in the binary located directly after the returned term. OTP-14795 Application(s): erts Related Id(s): ERL-88 Added more statistics for erlang:system_info({allocator,A}) in the mbcs_pool section. OTP-14797 Application(s): erts Added enif_ioq_peek_head to retrieve Erlang terms from NIF IO queues without having to resort to copying. OTP-14830 Application(s): compiler, erts There is a new option 'makedep_side_effect' for the compiler and -MMD for 'erlc' that generates dependencies and continues to compile as normal. OTP-14884 Application(s): erts, stdlib Added ets:whereis/1 for retrieving the table identifier of a named table. OTP-14899 Application(s): erts, kernel *** HIGHLIGHT *** seq_trace labels may now be any erlang term. OTP-14901 Application(s): erts Optimized the common case of monitor followed by send to the same local process. The monitor signal is now delayed in order to be piggybacked with the sent message and thereby only get one lock operation on the message queue of the receiver. A delayed monitor signal is flushed if no send has been done at the latest when the process is scheduled out. OTP-14903 Application(s): erts, hipe Make hipe compiled code work on x86_64 (amd64) with OS security feature PIE, where executable code can be loaded into a random location. Old behavior, if hipe was enabled, was to disable PIE build options for the VM. OTP-14928 Application(s): erts *** HIGHLIGHT *** *** POTENTIAL INCOMPATIBILITY *** The number of driver async threads will now default to 1 as the standard drivers do not use them anymore. Users that changed this value to tweak the file driver should replace +A with +SDio since it now uses dirty IO schedulers instead of async threads. OTP-14934 Application(s): erts Related Id(s): PR-1708 Optimize == and /= for binaries with different sizes to be constant in time instead of proportional to the size of their common prefix. OTP-14948 Application(s): erts Refactorings making some internal process flags available for other usage. OTP-14951 Application(s): erts Removed need for HiPE to allocate native executable memory in low 2GB address space on x86_64. Command line option +MXscs is thereby obsolete and ignored. OTP-14954 Application(s): erts Added enif_make_map_from_arrays for creating a populated map, analogous to enif_make_list_from_array. OTP-14959 Application(s): erts Added configuration switches for busy-wait and wake up thresholds for dirty schedulers, and changing these settings for normal schedulers will no longer affect dirty schedulers. Refer to the documentation for details. The new switches are +sbwtdcpu, +sbwtdio, +swtdcpu, and +swtdio. The default busy wait threshold for dirty scheduler threads has also been lowered to short. OTP-14960 Application(s): erts The list of "taints" now also includes dynamic loaded drivers in addition to NIF libraries. Statically linked drivers and NIF libraries that are part of erts are not included. The "taints" are returned by system_info(taints) and printed in the header of erl_crash.dump files. OTP-14961 Application(s): erts, tools *** POTENTIAL INCOMPATIBILITY *** Added instrument:allocations and instrument:carriers for retrieving information about memory utilization and fragmentation. The old instrument interface has been removed, as have the related options +Mim and +Mis. OTP-14964 Application(s): erts Related Id(s): OTP-14589 *** POTENTIAL INCOMPATIBILITY *** The process suspend functionality used by the erlang:suspend_process/2 BIF has been reimplemented using the newly introduced true asynchronous signaling between processes. This mainly to reduce memory usage in the process control block of all processes, but also in order to simplify the implementation. WARNING: You can easily create deadlocks if processes suspends each other (directly or in circles). In ERTS versions prior to ERTS version 10.0, the runtime system prevented such deadlocks, but this prevention has now been removed due to performance reasons. Other ERTS internal functionality that used the previous process suspend functionality have also been reimplemented to use asynchronous signaling instead. OTP-14965 Application(s): erts Added the nifs option to ?MODULE:module_info/1 for listing a module's installed NIF functions. OTP-14966 Application(s): erts New implementation of erlang:process_info/[1,2]. In the general case when inspecting another process, the new implementation sends an asynchronous process-info request signal to the other process and waits for the result instead of locking the other process and reading the result directly. In some special cases where no conflicts occur, signal order wont be violated, and the amount of data requested is guaranteed to be small, the inspected process may be inspected directly. Appropriate amount of reductions are now also bumped when inspecting a process. OTP-14975 Application(s): erts Related Id(s): PR-1597 Removed process start time from crash dump in order to save memory in process control block. OTP-14976 Application(s): erts Optimize erlang:put/2 when updating existing key with a new immediate value (atom, small integer, pid, port). OTP-14986 Application(s): erts Related Id(s): PR-1745 *** POTENTIAL INCOMPATIBILITY *** erlang:process_info/1 has been changed to no longer include messages by default. Instead erlang:process_info/2 should be used. OTP-14987 Application(s): erts New erlang:system_info(ets_count) to get total number of ets tables existing at the local node. OTP-14994 Application(s): erts New NIF functions: enif_mutex_name, enif_cond_name, enif_rwlock_name, enif_thread_name, enif_vfprintf, enif_vsnprintf. OTP-15026 Application(s): erts When erlang:system_flag(backtrace_depth, 0) has been called, all exceptions will now contain the entry for *one* function (despite the zero). It used to be that a hand-made stack backtrace passed to erlang:raise/3 would be be truncated to an empty list. OTP-15031 Application(s): erts Fixed bug for named ets tables which could cause unexpected results from matchspec iteration functions (ets:select* and ets:match*) if the table was deleted and recreated with the same name during the iteration. The iteration could incorrectly continue through the recreated table. The expected correct behavior is now for the iteration call to fail with a badarg exception if the table is deleted before the iteration has completed. OTP-15037 Application(s): compiler, erts Related Id(s): PR-1784, PR-1802 *** HIGHLIGHT *** Two new guards BIFs operating on maps have been added: map_get/2 and is_map_key/2. They do the same as maps:get/2 and maps:is_key/2, respectively, except that they are allowed to be used in guards. OTP-15081 Application(s): erts Release run-queue lock while cleaning up terminated dirty process. OTP-15086 Application(s): erts, kernel Related Id(s): PR-1694 The callback module passed as -epmd_module to erl has been expanded to be able to do name and port resolving. Documentation has also been added in the erl_epmd reference manual and ERTS User's Guide How to Implement an Alternative Service Discovery for Erlang Distribution. Full runtime dependencies of erts-10.0: kernel-6.0, sasl-3.0.1, stdlib-3.5 --------------------------------------------------------------------- --- et-1.6.2 -------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14861 Application(s): et, eunit, mnesia, parsetools, reltool Calls to erlang:get_stacktrace() are removed. Full runtime dependencies of et-1.6.2: erts-9.0, kernel-5.3, runtime_tools-1.10, stdlib-3.4, wx-1.2 --------------------------------------------------------------------- --- eunit-2.3.6 ----------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14861 Application(s): et, eunit, mnesia, parsetools, reltool Calls to erlang:get_stacktrace() are removed. Full runtime dependencies of eunit-2.3.6: erts-9.0, kernel-5.3, stdlib-3.4 --------------------------------------------------------------------- --- ftp-1.0 --------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14113 Application(s): inets Split inets and create separate ftp and tftp apps. Full runtime dependencies of ftp-1.0: erts-7.0, kernel-6.0, stdlib-3.5 --------------------------------------------------------------------- --- hipe-3.18 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14785 Application(s): hipe Related Id(s): PR-1632 Optimize receive statements that are only waiting for messages containing a reference created before the receive. All messages that existed in the queue when the reference was created will be bypassed, as they cannot possibly contain the reference. This optimization has existed for vanilla BEAM since OTP R14. OTP-14900 Application(s): hipe Related Id(s): PR-1621, PR-1685 Add validation pass to hipe compiler to detect internal errors causing primop calls that may trigger an unsafe GC at run-time. The pass can be disabled with option no_verify_gcsafe. OTP-14903 Application(s): erts, hipe Make hipe compiled code work on x86_64 (amd64) with OS security feature PIE, where executable code can be loaded into a random location. Old behavior, if hipe was enabled, was to disable PIE build options for the VM. OTP-14941 Application(s): hipe Related Id(s): PR-1718 Inline more type test BIFs; is_number, is_bitstring, is_map. Full runtime dependencies of hipe-3.18: compiler-5.0, erts-9.3, kernel-5.3, stdlib-3.4, syntax_tools-1.6.14 --------------------------------------------------------------------- --- inets-7.0 ------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14726 Application(s): inets Fixed HTTP content injection bug in httpc (ERL-456). OTP-14729 Application(s): inets Fixed support for URI-references in HTTP 'Location' header (ERL-333). OTP-15006 Application(s): inets Fix broken 'Content-Type' handling in httpc (ERL-536). OTP-15021 Application(s): inets Fix handling of relative paths in the script_alias property of httpd (ERL-574). OTP-15025 Application(s): inets Fix httpd:reload_config/2 with path() as the first argument (ERL-578). OTP-15042 Application(s): inets Improved gracefulness. --- Improvements and New Features --- OTP-14113 Application(s): inets Split inets and create separate ftp and tftp apps. Full runtime dependencies of inets-7.0: erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, ssl-5.3.4, stdlib-3.5 --------------------------------------------------------------------- --- jinterface-1.9 -------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14844 Application(s): jinterface Add module package name for Java 9 --------------------------------------------------------------------- --- kernel-6.0 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-10551 Application(s): kernel Clarify the documentation of rpc:multicall/5. OTP-13133 Application(s): kernel Related Id(s): PR-1557 The DNS resolver when getting econnrefused from a server retained an invalid socket so look up towards the next server(s) also failed. OTP-13761 Application(s): kernel Related Id(s): ERL-503 *** POTENTIAL INCOMPATIBILITY *** No resolver backend returns V4Mapped IPv6 addresses any more. This was inconsistent before, some did, some did not. To facilitate working with such addresses a new function inet:ipv4_mapped_ipv6_address/1 has been added. OTP-14019 Application(s): erts, kernel, stdlib Related Id(s): ERL-550 The type specifications for file:posix/0 and inet:posix/0 have been updated according to which errors file and socket operations should be able to return. OTP-14501 Application(s): kernel Fix name resolving in IPv6 only environments when doing the initial distributed connection. OTP-14543 Application(s): erts, kernel, stdlib Related Id(s): ERL-370 *** POTENTIAL INCOMPATIBILITY *** File operations used to accept filenames containing null characters (integer value zero). This caused the name to be truncated and in some cases arguments to primitive operations to be mixed up. Filenames containing null characters inside the filename are now *rejected* and will cause primitive file operations to fail. Also environment variable operations used to accept names and values of environment variables containing null characters (integer value zero). This caused operations to silently produce erroneous results. Environment variable names and values containing null characters inside the name or value are now *rejected* and will cause environment variable operations to fail. Primitive environment variable operations also used to accept the $= character in environment variable names causing various problems. $= characters in environment variable names are now also *rejected*. Also os:cmd/1 now reject null characters inside its command. erlang:open_port/2 will also reject null characters inside the port name from now on. OTP-14666 Application(s): erts, kernel *** POTENTIAL INCOMPATIBILITY *** os:putenv and os:getenv no longer access the process environment directly and instead work on a thread-safe emulation. The only observable difference is that it's *not* kept in sync with libc getenv(3) / putenv(3), so those who relied on that behavior in drivers or NIFs will need to add manual synchronization. On Windows this means that you can no longer resolve DLL dependencies by modifying the PATH just before loading the driver/NIF. To make this less of a problem, the emulator now adds the target DLL's folder to the DLL search path. OTP-14681 Application(s): kernel Fixed connection tick toward primitive hidden nodes (erl_interface) that could cause faulty tick timeout in rare cases when payload data is sent to hidden node but not received. OTP-14991 Application(s): kernel Related Id(s): PR1705 Make group react immediately on an EXIT-signal from shell in e.g ssh. OTP-15001 Application(s): erts, kernel Calls to gen_tcp:send/2 on closed sockets now returns {error, closed} instead of {error,enotconn}. OTP-15071 Application(s): kernel *** POTENTIAL INCOMPATIBILITY *** The included_applications key are no longer duplicated as application environment variable. Earlier, the included applications could be read both with application:get[_all]_env(...) and application:get[_all]_key(...) functions. Now, it can only be read with application:get[_all]_key(...). OTP-15118 Application(s): erts, kernel *** POTENTIAL INCOMPATIBILITY *** Owner and group changes through file:write_file_info, file:change_owner, and file:change_group will no longer report success on permission errors. --- Improvements and New Features --- OTP-13295 Application(s): erts, kernel, sasl, stdlib *** POTENTIAL INCOMPATIBILITY *** A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide. Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code. Notice the following potential incompatibilities: -- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger. In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger. -- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged. By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP. Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level. To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events. Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version. OTP-13713 Application(s): kernel Related Id(s): PR-1645 The function inet:i/0 has been documented. OTP-14359 Application(s): kernel Related Id(s): PR-1816 Typespecs for netns and bind_to_device options have been added to gen_tcp, gen_udp and gen_sctp functions. OTP-14459 Application(s): erts, kernel *** HIGHLIGHT *** New functionality for implementation of alternative carriers for the Erlang distribution has been introduced. This mainly consists of support for usage of distribution controller processes (previously only ports could be used as distribution controllers). For more information see ERTS User's Guide ➜ How to implement an Alternative Carrier for the Erlang Distribution ➜ Distribution Module. OTP-14899 Application(s): erts, kernel *** HIGHLIGHT *** seq_trace labels may now be any erlang term. OTP-14969 Application(s): kernel, ssl Related Id(s): ERL-598, OTP-14465 The SSL distribution protocol -proto inet_tls has stopped setting the SSL option server_name_indication. New verify funs for client and server in inet_tls_dist has been added, not documented yet, that checks node name if present in peer certificate. Usage is still also yet to be documented. OTP-15009 Application(s): kernel Related Id(s): ERL-601 Changed timeout of gen_server calls to auth server from default 5 seconds to infinity. OTP-15086 Application(s): erts, kernel Related Id(s): PR-1694 The callback module passed as -epmd_module to erl has been expanded to be able to do name and port resolving. Documentation has also been added in the erl_epmd reference manual and ERTS User's Guide How to Implement an Alternative Service Discovery for Erlang Distribution. OTP-15137 Application(s): kernel Related Id(s): PR-1838 Included config file specified with relative path in sys.config are now first searched for relative to the directory of sys.config itself. If not found, it is also searched for relative to the current working directory. The latter is for backwards compatibility. Full runtime dependencies of kernel-6.0: erts-10.0, sasl-3.0, stdlib-3.5 --------------------------------------------------------------------- --- mnesia-4.15.4 --------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14861 Application(s): et, eunit, mnesia, parsetools, reltool Calls to erlang:get_stacktrace() are removed. Full runtime dependencies of mnesia-4.15.4: erts-9.0, kernel-5.3, stdlib-3.4 --------------------------------------------------------------------- --- observer-2.8 ---------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14993 Application(s): observer Related Id(s): PR-1666 Added possibility to garbage collect selected processes and fixed a crash when the saved config file contained bad data. --- Improvements and New Features --- OTP-14902 Application(s): common_test, observer, public_key, ssl Use uri_string module instead of http_uri. Full runtime dependencies of observer-2.8: erts-7.0, et-1.5, kernel-3.0, runtime_tools-1.8.14, stdlib-3.5, wx-1.2 --------------------------------------------------------------------- --- os_mon-2.4.5 ---------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14513 Application(s): os_mon Fix disksup to handle mount paths with spaces in them. Full runtime dependencies of os_mon-2.4.5: erts-6.0, kernel-3.0, mnesia-4.12, otp_mibs-1.0.9, sasl-2.4, snmp-4.25.1, stdlib-2.0 --------------------------------------------------------------------- --- otp_mibs-1.2 ---------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-15141 Application(s): otp_mibs The otp_mibs application has been deprecated and will be removed in a future release. Full runtime dependencies of otp_mibs-1.2: erts-6.0, kernel-3.0, mnesia-4.12, snmp-4.25.1, stdlib-2.0 --------------------------------------------------------------------- --- parsetools-2.1.7 ------------------------------------------------ --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14861 Application(s): et, eunit, mnesia, parsetools, reltool Calls to erlang:get_stacktrace() are removed. Full runtime dependencies of parsetools-2.1.7: erts-6.0, kernel-3.0, stdlib-2.5 --------------------------------------------------------------------- --- public_key-1.6 -------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14788 Application(s): public_key Related Id(s): OTP-14624 Update calls to the base64 module to conform to that module's type specifications. --- Improvements and New Features --- OTP-14902 Application(s): common_test, observer, public_key, ssl Use uri_string module instead of http_uri. OTP-14962 Application(s): public_key Related Id(s): ERL-542, OTP-15102 A new function - public_key:pkix_verify_hostname_match_fun/1 - returns a fun to be given as option match_fun to public_key:pkix_verify_hostname/3 or via ssl. The fun makes the verify hostname matching according to the specific rules for the protocol in the argument. Presently only https is supported. OTP-15093 Application(s): public_key Compleate PKCS-8 encoding support and enhance the decoding of 'PrivateKeyInfo' to conform to the rest of Erlang public_key API. OTP-15113 Application(s): public_key, ssh A new moduli file is generated. This file is used for the recommended diffie-hellman-group-exchange-sha256 key exchange algorithm in SSH. Full runtime dependencies of public_key-1.6: asn1-3.0, crypto-3.8, erts-6.0, kernel-3.0, stdlib-3.5 --------------------------------------------------------------------- --- reltool-0.7.6 --------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14861 Application(s): et, eunit, mnesia, parsetools, reltool Calls to erlang:get_stacktrace() are removed. Full runtime dependencies of reltool-0.7.6: erts-7.0, kernel-3.0, sasl-2.4, stdlib-3.4, tools-2.6.14, wx-1.2 --------------------------------------------------------------------- --- runtime_tools-1.13 ---------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14904 Application(s): runtime_tools New utility module scheduler which makes it easier to measure scheduler utilization. Full runtime dependencies of runtime_tools-1.13: erts-8.0, kernel-5.0, mnesia-4.12, stdlib-3.0 --------------------------------------------------------------------- --- sasl-3.2 -------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-13295 Application(s): erts, kernel, sasl, stdlib *** POTENTIAL INCOMPATIBILITY *** A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide. Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code. Notice the following potential incompatibilities: -- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger. In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger. -- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged. By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP. Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level. To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events. Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version. OTP-14469 Application(s): sasl *** POTENTIAL INCOMPATIBILITY *** The old and outdated "Status Inspection" tool (modules si and si_sasl_sup) is removed. OTP-14950 Application(s): sasl Related Id(s): PR-1560 When creating the release tar file, systools now includes sys.config.src if it exists in the $ROOT/releases// directory. This is to allow adjustments, e.g. resolving environment variables, after unpacking the release, but before installing it. This functionality requires a custom tool which uses sys.config.src as input and creates a correct sys.config file. Full runtime dependencies of sasl-3.2: erts-9.0, kernel-5.3, stdlib-3.4, tools-2.6.14 --------------------------------------------------------------------- --- ssh-4.7 --------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14955 Application(s): ssh If the daemon port listener is restarted, it could potentially fail with eaddrinuse if the timing is unlucky. It will now retry and exponentially back off the listener restart a few times before failing. OTP-15084 Application(s): ssh A channel callback module always got the module name as reason in a call to terminate. Now it will get the proper Reason, usually 'normal'. --- Improvements and New Features --- OTP-14851 Application(s): ssh *** POTENTIAL INCOMPATIBILITY *** The option exec has new option values defined to make it much more easy to implement an own exec server. An option called exec for daemons implementing the handling of 'exec' requests has existed a long time but has been undocumented. The old undocumented value - as well as its behavior - is kept for compatibility EXCEPT that error messages are changed and are sent as "stderror" text. OTP-14880 Application(s): ssh Updated ssh_connection:shell/2 documentation. OTP-14896 Application(s): ssh The experimental ssh_dbg module is completely re-written. Its purpose is to make tracing and debugging easier on deployed systems. OTP-14988 Application(s): ssh The SSH supervisor structure has been slightly changed. This makes stopping the ssh application considerably faster if there are open connections. This is important in for example restarts. OTP-15002 Application(s): ssh Related Id(s): OTP-15030 *** POTENTIAL INCOMPATIBILITY *** The type specifications in SSH are completly reworked and the following types are renamed: ssh:ssh_connection_ref() is changed to ssh:connection_ref(), ssh:ssh_daemon_ref() is changed to ssh:daemon_ref(), ssh:ssh_channel_id() is changed to ssh:channel_id(). OTP-15019 Application(s): ssh The internal timer handling in SSH is now based on the gen_statem timers. OTP-15028 Application(s): ssh Removed the undocumented and unused modules ssh_client_key.erl and ssh_server_key.erl. OTP-15030 Application(s): ssh Related Id(s): OTP-15002 The Reference Manual pages are partly updated. The ssh page is now generated from specs and types, is restructured and is partly rephrased. The ssh_channel, ssh_connection, ssh_client_key_api, ssh_server_key_api and ssh_sftp pages are updated with links, correct type names and some minor changes. OTP-15041 Application(s): ssh The behaviors ssh_channel and ssh_daemon_channel are renamed to ssh_client_channel and ssh_server_channel respectively. The old modules are kept for compatibility but should preferably be replaced when updating callback modules referring them. OTP-15051 Application(s): ssh New test suite for channels. OTP-15069 Application(s): ssh Related Id(s): ERL-617 The rekey_limit option could now set the max time as well as the previously max data amount. OTP-15082 Application(s): ssh Changed process exit supervision from links to monitors. OTP-15083 Application(s): ssh Better handling of misbehaving channel callback modules. OTP-15113 Application(s): public_key, ssh A new moduli file is generated. This file is used for the recommended diffie-hellman-group-exchange-sha256 key exchange algorithm in SSH. Full runtime dependencies of ssh-4.7: crypto-4.2, erts-6.0, kernel-3.0, public_key-1.5.2, stdlib-3.3 --------------------------------------------------------------------- --- ssl-9.0 --------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14974 Application(s): ssl Correct handling of ECDH suites. OTP-15050 Application(s): ssl Proper handling of clients that choose to send an empty answer to a certificate request --- Improvements and New Features --- OTP-14465 Application(s): ssl Distribution over SSL (inet_tls) has, to improve performance, been rewritten to not use intermediate processes and ports. OTP-14547 Application(s): ssl Add suport for ECDHE_PSK cipher suites OTP-14768 Application(s): ssl *** INCOMPATIBILITY with possibly *** For security reasons no longer support 3-DES cipher suites by default OTP-14769 Application(s): ssl *** INCOMPATIBILITY with possible *** For security reasons RSA-key exchange cipher suites are no longer supported by default OTP-14789 Application(s): ssl *** INCOMPATIBILITY with possibly *** The interoperability option to fallback to insecure renegotiation now has to be explicitly turned on. OTP-14824 Application(s): ssl *** POTENTIAL INCOMPATIBILITY *** Drop support for SSLv2 enabled clients. SSLv2 has been broken for decades and never supported by the Erlang SSL/TLS implementation. This option was by default disabled and enabling it has proved to sometimes break connections not using SSLv2 enabled clients. OTP-14882 Application(s): ssl *** INCOMPATIBILITY with possibly *** Remove CHACHA20_POLY1305 ciphers form default for now. We have discovered interoperability problems, ERL-538, that we believe needs to be solved in crypto. OTP-14888 Application(s): ssl Generalize DTLS packet multiplexing to make it easier to add future DTLS features and uses. OTP-14902 Application(s): common_test, observer, public_key, ssl Use uri_string module instead of http_uri. OTP-14969 Application(s): kernel, ssl Related Id(s): ERL-598, OTP-14465 The SSL distribution protocol -proto inet_tls has stopped setting the SSL option server_name_indication. New verify funs for client and server in inet_tls_dist has been added, not documented yet, that checks node name if present in peer certificate. Usage is still also yet to be documented. OTP-15056 Application(s): ssl Deprecate ssl:ssl_accept/[1,2,3] in favour of ssl:handshake/[1,2,3] OTP-15102 Application(s): ssl Related Id(s): ERL-542, OTP-14962 Customizes the hostname verification of the peer certificate, as different protocols that use TLS such as HTTP or LDAP may want to do it differently OTP-15106 Application(s): ssl Add utility function for converting erlang cipher suites to a string represenation (ERL-600). OTP-15142 Application(s): ssl *** HIGHLIGHT *** First version with support for DTLS Full runtime dependencies of ssl-9.0: crypto-4.2, erts-10.0, inets-5.10.7, kernel-6.0, public_key-1.5, stdlib-3.5 --------------------------------------------------------------------- --- stdlib-3.5 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-14015 Application(s): stdlib gen_statem improvements. When using an exception that is valid but not allowed in a state enter call, the reason has been changed from {bad_action_from_state_function,Action} to {bad_state_enter_action_from_state_function,Action}. Timer parsing has been improved. Many erroneous timeout tuples was not handled correctly. The documentation has been updated, in particular the User's Guide and the pointer to it from the Reference Manual is much more obvious. OTP-14019 Application(s): erts, kernel, stdlib Related Id(s): ERL-550 The type specifications for file:posix/0 and inet:posix/0 have been updated according to which errors file and socket operations should be able to return. OTP-14543 Application(s): erts, kernel, stdlib Related Id(s): ERL-370 *** POTENTIAL INCOMPATIBILITY *** File operations used to accept filenames containing null characters (integer value zero). This caused the name to be truncated and in some cases arguments to primitive operations to be mixed up. Filenames containing null characters inside the filename are now *rejected* and will cause primitive file operations to fail. Also environment variable operations used to accept names and values of environment variables containing null characters (integer value zero). This caused operations to silently produce erroneous results. Environment variable names and values containing null characters inside the name or value are now *rejected* and will cause environment variable operations to fail. Primitive environment variable operations also used to accept the $= character in environment variable names causing various problems. $= characters in environment variable names are now also *rejected*. Also os:cmd/1 now reject null characters inside its command. erlang:open_port/2 will also reject null characters inside the port name from now on. OTP-14958 Application(s): stdlib Related Id(s): PR-1735 Make io_lib:unscan_format/1 work with pad char and default precision. OTP-14971 Application(s): stdlib Related Id(s): PR-1743 The control sequence modifiers t and l can be used together in the same control sequence which makes it possible to have Unicode atoms and no detection of printable character lists at the same time. OTP-15035 Application(s): stdlib Related Id(s): ERL-613 Fix a bug in the Erlang code linter: the check of guard expressions no longer returns false if the map syntax is used. The bug affected the Erlang shell, the Debugger, and other modules evaluating abstract code. OTP-15049 Application(s): stdlib A sys debug fun of type {Fun,State} should not be possible to install twice. This was, however, possible if the current State was 'undefined', which was mistaken for non-existing fun. This has been corrected. OTP-15101 Application(s): stdlib Fix io:putchars/2 stacktrace rewriting at errors to point to a valid function. --- Improvements and New Features --- OTP-13019 Application(s): stdlib Related Id(s): PR-1490 The gen_server has gotten a new callback handle_continue/2 for check pointing the state. This is useful at least when implementing behaviours on top of gen_server and for some start up scenarios. OTP-13073 Application(s): stdlib Related Id(s): PR-1595 *** POTENTIAL INCOMPATIBILITY *** The semantics of timeout parameter {clean_timeout,infinity} to gen_statem:call/3 has been changed to use a proxy process for the call. With this change clean_timeout implicates a proxy process with no exceptions. This may be a hard to observe incompatibility: in the presence of network problems a late reply could arrive in the caller's message queue when catching errors. That will not happen after this correction. The semantics of timeout parameter infinity has not been changed. OTP-13295 Application(s): erts, kernel, sasl, stdlib *** POTENTIAL INCOMPATIBILITY *** A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide. Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code. Notice the following potential incompatibilities: -- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger. In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger. -- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged. By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP. Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level. To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events. Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version. OTP-13413 Application(s): stdlib Add functions calendar:system_time_to_local_time/2 and calendar:system_time_to_universal_time/2. OTP-13764 Application(s): stdlib Related Id(s): PR-1574 Functions rand:uniform_real/0 and rand:uniform_real_s/1 have been added. They produce uniformly distributed numbers in the range 0.0 =< X < 1.0 that are as close to random real numbers as Normalized IEEE 754 Double Precision allows. Because the random real number exactly 0.0 is infinitely improbable they will never return exactly 0.0. These properties are useful when you need to call for example math:log(X) or 1 / X on a random value X, since that will never fail with a number from these new functions. OTP-14012 Application(s): stdlib Added maps:iterator/0 and maps:next/1 to be used for iterating over the key-value associations in a map. OTP-14439 Application(s): compiler, dialyzer, erts, stdlib *** POTENTIAL INCOMPATIBILITY *** Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories. escript, erlc, dialyzer and typer no longer load an .erlang at all. OTP-14496 Application(s): stdlib Added new uri_string module to stdlib for handling URIs (RFC 3986). OTP-14503 Application(s): stdlib Update Unicode specification to version 10.0. OTP-14577 Application(s): stdlib *** POTENTIAL INCOMPATIBILITY *** filelib:wildcard() now allows characters with a special meaning to be escaped using backslashes. This is an incompatible change, but note that the use of backslashes in wildcards would already work differently on Windows and Unix. Existing calls to filelib:wildcard() needs to be updated. On Windows, directory separators must always be written as a slash. OTP-14586 Application(s): stdlib The supervisor now stores its child specifications in a map instead of a list. This causes a significant improvement when starting many children under a non-simple_one_for_one supervisor. OTP-14624 Application(s): stdlib Related Id(s): PR-1565 The base64 module is optimized. Note that the functions encode/1, decode/1, and mime_decode/1 fail unless called with an argument of the documented type. They used to accept any iodata(). OTP-14675 Application(s): stdlib Related Id(s): PR-102 Add function lists:search/2. OTP-14747 Application(s): stdlib uri_string module extended with functions for handling application/x-www-form-urlencoded query strings based on the HTML5 specification. OTP-14764 Application(s): stdlib Add functions calendar:rfc3339_to_system_time/1,2 and calendar:system_time_to_rfc3339/1,2. OTP-14826 Application(s): stdlib Related Id(s): 1540, PR The stack traces returned by the functions of the erl_eval module more accurately reflect where the exception occurred. OTP-14834 Application(s): stdlib Related Id(s): 1608, PR Add options atime, mtime, ctime, uid, and gid to the erl_tar:add/3,4 functions. OTP-14884 Application(s): erts, stdlib Added ets:whereis/1 for retrieving the table identifier of a named table. OTP-14910 Application(s): stdlib Improved URI normalization functions in the uri_string module. OTP-14983 Application(s): stdlib The new functions io_lib:fwrite/3 and io_lib:format/3 take a third argument, an option list. The only option is chars_limit, which is used for limiting the number of returned characters. The limit is soft, which means that the number of returned characters exceeds the limit with at most a smallish amount. If the limit is set, the functions format/3 and fwrite/3 try to distribute the number of characters evenly over the control sequences pPswW. Furthermore, the control sequences pPwP try to distribute the number of characters evenly over substructures. A modification of the control sequences pPwW is that even if there is no limit on the number of returned characters, all associations of a map are printed to the same depth. The aim is to give a more consistent output as the order of map keys is not defined. As before, if the depth is less than the number of associations of a map, the selection of associations to print is arbitrary. OTP-14996 Application(s): stdlib Related Id(s): ERL-557, PR-1703 Add functions ordsets:is_empty/1 and sets:is_empty/1. OTP-14998 Application(s): stdlib Improve performance of string:uppercase/1, string:lowercase/1 and string:casefold/1 when handling ASCII characters. OTP-15003 Application(s): compiler, stdlib External funs with literal values for module, name, and arity (e.g. erlang:abs/1) are now treated as literals. That means more efficient code that produces less garbage on the heap. OTP-15047 Application(s): stdlib sys:statistics(Pid,get) did not report 'out' messages from gen_server. This is now corrected. OTP-15048 Application(s): stdlib A sys debug function can now have the format {Id,Fun,State} in addition to the old {Fun,State}. This allows installing multiple instances of a debug fun. OTP-15072 Application(s): stdlib Related Id(s): 1786, OTP-15114, PR *** POTENTIAL INCOMPATIBILITY *** The lib module is removed: -- lib:error_message/2 is removed. -- lib:flush_receive/0 is removed. -- lib:nonl/1 is removed. -- lib:progname/0 is replaced by ct:get_progname/0. -- lib:send/2 is removed. -- lib:sendw/2 is removed. OTP-15078 Application(s): stdlib Function ets:delete_all_objects/1 now yields the scheduler thread for large tables that take significant time to clear. This to improve real time characteristics of other runnable processes. OTP-15103 Application(s): stdlib Related Id(s): ERL-607 *** POTENTIAL INCOMPATIBILITY *** In control sequences of the functions io:fwrite/2,3 and io_lib:fwrite/2,3 containing p or P, a field width of value 0 means that no line breaks are inserted. This is in contrast to the old behaviour, where 0 used to insert line breaks after every subterm. To insert line breaks after every subterm, a field width of value 1 can be used. Full runtime dependencies of stdlib-3.5: compiler-5.0, crypto-3.3, erts-10.0, kernel-6.0, sasl-3.0 --------------------------------------------------------------------- --- syntax_tools-2.1.5 ---------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-15098 Application(s): syntax_tools Related Id(s): ERIERL-177 Fix a bug regarding reverting map types. --- Improvements and New Features --- OTP-15036 Application(s): asn1, edoc, eldap, syntax_tools Update to use the new string api instead of the old. Full runtime dependencies of syntax_tools-2.1.5: compiler-7.0, erts-9.0, kernel-5.0, stdlib-3.4 --------------------------------------------------------------------- --- tftp-1.0 -------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14113 Application(s): inets Split inets and create separate ftp and tftp apps. Full runtime dependencies of tftp-1.0: kernel-6.0, stdlib-3.5 --------------------------------------------------------------------- --- tools-3.0 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-14961 Application(s): erts, tools *** POTENTIAL INCOMPATIBILITY *** Added instrument:allocations and instrument:carriers for retrieving information about memory utilization and fragmentation. The old instrument interface has been removed, as have the related options +Mim and +Mis. Full runtime dependencies of tools-3.0: compiler-5.0, erts-9.1, kernel-5.4, runtime_tools-1.8.14, stdlib-3.4 --------------------------------------------------------------------- --- wx-1.8.4 -------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-15027 Application(s): wx Changed implementation so wx can now be built towards wxWidgets-3.1.1. Full runtime dependencies of wx-1.8.4: erts-6.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- xmerl-1.3.17 ---------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-15039 Application(s): xmerl Fix typos in documentation. Full runtime dependencies of xmerl-1.3.17: erts-6.0, kernel-3.0, stdlib-2.5 --------------------------------------------------------------------- --------------------------------------------------------------------- ---------------------------------------------------------------------