NEWS

OTP 23 Release
Written by Kenneth, Wednesday, 13 May 2020

OTP 23

Erlang/OTP 23 is a new major release with new features, improvements as well as a few incompatibilities.

Potential Incompatibilities

  • SSL: * Support for SSL 3.0 is completely removed.
  • TLS 1.3 is added to the list of default supported versions.
  • erl_interface: Removed the deprecated parts of erl_interface (erl_interface.h and essentially all C functions with prefix erl_).
  • The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace. erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

Improvements and new features

  • ssh:
  • OpenSSH 6.5 introduced a new file representation of keys called openssh-key-v1. This is now supported with the exception of handling encrypted keys.
  • Algorithm configuration could now be done in a .config file. This is useful for example to enable an algorithm that is disabled by default without need to change the code.
  • SSL:
  • Support for the middlebox compatibility mode makes the TLS 1.3 handshake look more like a TLS 1.2 handshake and increases the chance of successfully establishing TLS 1.3 connections through legacy middleboxes.
  • Add support for key exchange with Edward curves and PSS-RSA padding in signature verification
  • The possibility to run Erlang distribution without relying on EPMD has been extended. To achieve this a couple of new options to the inet distribution has been added.
  • -dist_listen false Setup the distribution channel, but do not listen for incoming connection.
  • -erl_epmd_port Port Configure a default port that the built-in EPMD client should return.
  • A first EXPERIMENTAL socket backend to

gen_tcp and inet has been implemented. gen_udp and gen_sctp will follow. Putting {inet_backend, socket} as first option to listen() or connect() makes it easy to try this for existing code

  • A new module erpc in kernel which implements an enhanced subset of the operations provided by the rpc module. Enhanced in the sense that it makes it possible to distinguish between returned value, raised exceptions and other errors. erpc also has better performance and scalability than the original rpc implementation. This by utilizing the newly introduced spawn_request() BIF. Also the rpc module benefits from these improvements by utilizing erpc when possible.
  • Scalability and performance Improvements plus new functionality regarding distributed spawn operations.
  • In binary matching, the size of the segment to be matched is now allowed to be a guard expression (EEP-52)
  • When matching with maps the keys can now be guard expressions (EEP-52).
  • ssh: support for TCP/IP port forwarding, a.k.a tunnelling a.k.a as tcp-forward/direct-tcp is implemented. In the OpenSSH client, this corresponds to the options -L and -R.
  • Allow underscores in numeric literals to improve readability. Examples: 123_456_789, 16#1234_ABCD.
  • New functions in the shell for displaying documentation for Erlang modules, functions and types. The

functions are:

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

The embedded documentation is created as docchunks (EEP 48) when building the Erlang/OTP documentation.

  • kernel: The module pg with a new implementation of distributed named process groups is introduced. The old module pg2 is deprecated and scheduled for removal in OTP 24.
  • Our tool chain for building the Windows packages is upgraded with new C++ compiler, Java compiler, OpenSSL libraries and wxWidgets versions. We are now using WSL (the Linux Subsystem for Windows when building) which makes it easier to handle the build environment.

For more details see http://erlang.org/download/otp_src_23.0.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_23.0.exe http://erlang.org/download/otp_win64_23.0.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-11.0/doc The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp

Erlang OTP 23.0 Release Candidate 2
Written by , Thursday, 26 March 2020

OTP 23 Release Candidate 2

This is the second of three planned release candidates before the OTP 23 release. The intention with this release is to get feedback from our users. All feedback is welcome, even if it is only to say that it works for you.

Erlang/OTP 23 is a new major release with new features, improvements as well as a few incompatibilities.

Potential Incompatibilities

  • SSL: * Support for SSL 3.0 is completely removed.
  • TLS 1.3 is added to the list of default supported versions.
  • erl_interface: Removed the deprecated parts of erl_interface

(erl_interface.h and essentially all C functions with prefix erl_).

  • The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace.

erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

  • ...

Highlights (rc2)

  • ssh: * OpenSSH 6.5 introduced a new file representation of

keys called�openssh-key-v1. This is now supported with the exception of handling encrypted keys.

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

This is useful for example to enable an algorithm that is disabled by default without need to change the code.

  • ssl: * Support for the middlebox compatibility mode makes the TLS 1.3 handshake

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

  • Add support for key exchange with Edward curves and PSS-RSA padding in

signature verification

  • The possibility to run Erlang distribution without

relying on EPMD has been extended. To achieve this a couple of new options to the inet distribution has been added. * -dist_listen false Setup the distribution channel, but do not listen for incoming connection.

  • -erl_epmd_port Port Configure a default port that

the built-in EPMD client should return.

  • ...
  • A first EXPERIMENTAL socket backend to

gen_tcp and inet has been implemented. gen_udp and gen_sctp will follow. Putting {inet_backend, socket} as first option to listen() or connect() makes it easy to try this for existing code

Highlights (rc1)

  • A new module erpc in kernel which implements an enhanced subset of the operations provided by the rpc module. Enhanced in the sense that it makes it possible to distinguish between returned value, raised exceptions and other errors. erpc also has better performance and scalability than the original rpc implementation. This by utilizing the newly introduced spawn_request() BIF. Also the rpc module benefits from these improvements by utilizing erpc when possible.
  • Scalability and performance Improvements plus new functionality regarding distributed spawn operations.
  • In binary matching, the size of the segment to be matched is now allowed to be a guard expression (EEP-52)
  • When matching with maps the keys can now be guard expressions (EEP-52).
  • ssh: support for TCP/IP port forwarding, a.k.a tunneling a.k.a as tcp-forward/direct-tcp is implemented. In the OpenSSH client, this corresponds to the options -L and -R.
  • Allow underscores in numeric literals to improve readability. Examples: 123_456_78916#1234_ABCD.
  • New functions in the shell for displaying documentation for Erlang modules, functions and types. The

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

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

The embedded documentation is created as docchunks (EEP 48) when building the Erlang/OTP documentation.

  • kernel: The module pg with a new implementation of distributed named process groups is introduced. The old module pg2 is deprecated and scheduled for removal in OTP 24.
  • Our tool chain for building the Windows packages is upgraded with new C++ compiler, Java compiler, OpenSSL libraries and wxWidgets versions. We are now using WSL (the Linux Subsystem for Windows when building) which makes it easier to handle the build environment.
  • ...

For more details see http://erlang.org/download/otp_src_23.0-rc2.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_23.0-rc2.exe http://erlang.org/download/otp_win64_23.0-rc2.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-11.0-rc2/doc The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp

Erlang OTP 22.3 is released
Written by , Monday, 16 March 2020

Erlang/OTP 22.3 is the last planned patch package for the 22 major release with new features, improvements and bugfixes. Below follows some highlights.

Highlights

  • ssl/public_key: * Implementation of the key and initialization vector

update feature, and general hardening of TLS 1.3. There are cryptographic limits on the amount of plaintext which can be safely encrypted under a given set of keys. This change enforces those limits by triggering automatic key updates on TLS 1.3 connections.

  • Add support for TLS 1.3 Session Tickets (stateful and

stateless). This allows session resumption using keying material from a previous successful handshake.

  • Add support for key exchange with Edward curves and

PSS-RSA padding in signature verification.

  • erts: * A socket "registry" has been added making it possible to list current open sockets.
  • Add a "full featured" version of getifaddrs in the net module.
  • ssh: * The new functions ssh:set_sock_opts/2 and ssh:get_sock_opts/2 sets and reads option values for

the underlying TCP stream.

  • Changes to the internal api of the experimental ssh_dbg tool.
  • common_test: The ct_property_test has now a report function for

results of stateful testing.

  • stdlib: * Implement uri_string:resolve/{2,3} that can be used to

resolve a URI reference against a base URI.

  • In gen_statem it is now possible to change the callback

module for a running server. See gen_statem's documentation for�change_callback_module, push_callback_module, and�pop_callback_module.

For more details see http://erlang.org/download/otp_src_22.3.readme Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_22.3.exe http://erlang.org/download/otp_win64_22.3.exe Online documentation can be browsed here: http://erlang.org/doc/search/ The source tarball can be fetched here: http://erlang.org/download/otp_src_22.3.tar.gz The documentation can be fetched here: http://erlang.org/download/otp_doc_html_22.3.tar.gz The man pages can be fetched here: http://erlang.org/download/otp_doc_man_22.3.tar.gz The Erlang/OTP source can also be found at GitHub on the official Erlang repository: https://github.com/erlang/otp OTP-22.3

Thank you for all your contributions!

Erlang OTP 23.0 Release Candidate 1
Written by , Thursday, 27 February 2020

OTP 23 Release Candidate 1

This is the first of three planned release candidates before the OTP 23 release. The intention with this release is to get feedback from our users. All feedback is welcome, even if it is only to say that it works for you.

Erlang/OTP 23 is a new major release with new features, improvements as well as a few incompatibilities.

Potential Incompatibilities

  • SSL: * Support for SSL 3.0 is completely removed.
  • TLS 1.3 is added to the list of default supported versions.
  • erl_interface: Removed the deprecated parts of erl_interface

(erl_interface.h and essentially all C functions with prefix erl_).

  • The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace.

erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

  • ...

Highlights

  • A new module erpc in kernel which implements an enhanced subset of the operations provided by the rpc module. Enhanced in the sense that it makes it possible to distinguish between returned value, raised exceptions and other errors. erpc also has better performance and scalability than the original rpc implementation. This by utilizing the newly introduced spawn_request() BIF. Also the rpc module benefits from these improvements by utilizing erpc when possible.
  • Scalability and performance Improvements plus new functionality regarding distributed spawn operations.
  • In binary matching, the size of the segment to be matched is now allowed to be a guard expression (EEP-52)
  • When matching with maps the keys can now be guard expressions (EEP-52).
  • ssh: support for TCP/IP port forwarding, a.k.a tunneling a.k.a as tcp-forward/direct-tcp is implemented. In the OpenSSH client, this corresponds to the options -L and -R.
  • Allow underscores in numeric literals to improve readability. Examples: 123_456_789, 16#1234_ABCD.
  • New functions in the shell for displaying documentation for Erlang modules, functions and types. The

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

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

The embedded documentation is created as docchunks (EEP 48) when building the Erlang/OTP documentation.

  • kernel: The module pg with a new implementation of distributed named process groups is introduced. The old module pg2 is deprecated and scheduled for removal in OTP 24.
  • Our tool chain for building the Windows packages is upgraded with new C++ compiler, Java compiler, OpenSSL libraries and wxWidgets versions. We are now using WSL (the Linux Subsystem for Windows when building) which makes it easier to handle the build environment.
  • ...

For more details see http://erlang.org/download/otp_src_23.0-rc1.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_23.0-rc1.exe http://erlang.org/download/otp_win64_23.0-rc1.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-11.0-rc1/doc The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp

Erlang OTP 22.2 is released
Written by , Tuesday, 10 December 2019

 

Highlights

 

erts:

  • The Kernel application's User's Guide now contains a Logger Cookbook with common usage patterns.
  • Numerous improvements in the new socket and net modules

Standard libraries:

  • common_test: ct_property_test logging is improved
  • ssl: Correct handling of unordered chains so that it works as expected

Tools:

  • Emacs erlang-mode function that lets the user open the documentation for an Erlang/OTP function in an Emacs buffer has been improved. Users will be asked if they want the man pages downloaded if they are not present in the system.

 

For more details see erlang.org/download/otp_src_22.2.readme

Pre-built versions for Windows can be fetched here: erlang.org/download/otp_win32_22.2.exe erlang.org/download/otp_win64_22.2.exe

Online documentation can be browsed here: erlang.org/doc/search/

The source tarball can be fetched here: erlang.org/download/otp_src_22.2.tar.gz The documentation can be fetched here: erlang.org/download/otp_doc_html_22.2.tar.gz The man pages can be fetched here: erlang.org/download/otp_doc_man_22.2.tar.gz

The Erlang/OTP source can also be found at GitHub on the official Erlang repository:

https://github.com/erlang/otp

OTP-22.2

 

Thank you for all your contributions!

Erlang OTP 22.1 is released
Written by , Wednesday, 18 September 2019

Potential Incompatibilities

  • Mnesia: Transactions with sticky locks could with async_asym transactions be committed in the wrong order, since asym transactions are spawned on the remote nodes. To fix this bug the communication protocol between mnesia nodes had to be updated, thus mnesia will no longer be able to connect to nodes earlier than mnesia-4.14 ,first realeased in OTP-19.0.
  • Stdlib: Debugging of time-outs in gen_statem has been improved. Starting a time-out is now logged in sys:log and sys:trace. Running time-outs are visible in server crash logs, and with sys:get_status. Due to this system events {start_timer, Action, State} and {insert_timout, Event, State} have been added, which may surprise tools that rely on the format of these events. New features: The EventContent of a running time-out can be updated with {TimeoutType, update, NewEventContent}. Running time-outs can be cancelled with {TimeoutType, cancel} which is more readable than using Time = infinity.{rel, Name, Vsn, RelApps, Opts}.

Highlights

Compiler:

  • erlc can now automatically use a compile server to avoid starting an Erlang system for each file to be compiled in a multi-file project. See the documentation for how to enable it.

Standard libraries:

  • SSL: Basic support for TLS 1.3 Client for experimental use. For more information see the Standards Compliance chapter of the User's Guide.
  • crypto: The Message Authentication Codes (MAC) CMAC, HMAC and Poly1305 are unified into common functions in the New Crypto API. See the manual for CRYPTO. cipher_info/1 functions returns maps with information about the hash or cipher in the argument.

 

For more details see http://erlang.org/download/otp_src_22.1.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_22.1.exe http://erlang.org/download/otp_win64_22.1.exe

Online documentation can be browsed here: http://erlang.org/doc/search/

The source tarball can be fetched here: http://erlang.org/download/otp_src_22.1.tar.gz The documentation can be fetched here: http://erlang.org/download/otp_doc_html_22.1.tar.gz The man pages can be fetched here: http://erlang.org/download/otp_doc_man_22.1.tar.gz

The Erlang/OTP source can also be found at GitHub on the official Erlang repository:

https://github.com/erlang/otp

OTP-22.1

 

Thank you for all your contributions!

Erlang OTP 22.0 is released
Written by , Tuesday, 14 May 2019

OTP 22.0

Erlang/OTP 22 is a new major release with new features and improvements as well as incompatibilities.

For a deeper dive into the highlights of the OTP 22 release, you can read our blog here:

http://blog.erlang.org/OTP-22-Highlights/

Potential Incompatibilities

  • gen_* behaviours: If logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report.
  • reltool: A new element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}.
  • All external pids/ports/refs created by erlang:list_to_pid and similar functions now compare equal to any other pid/port/ref with same number from that node.
  • The old legacy erl_interface library is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library.
  • VxWorks is deprecated as of OTP 22 and will be removed in OTP 23.

New Features

Erts:

  • Support for Erlang Distribution protocol to split the payload of large messages into several fragments.
  • ETS option write_concurrency now also effects and improves scalability of ordered_set tables.
  • The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. Now it yields when called with long lists.
  • A new (still experimental) module socket is introduced. It is implemented as a NIF and the idea is that it shall be as "close as possible" to the OS level socket interface.
  • Added the NIF function enif_term_type, which helps avoid long sequences of enif_is_xyz by returning the type of the given term. This is especially helpful for NIFs that serialize terms, such as JSON encoders, where it can improve both performance and readability.

Compiler:

  • The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible. * The binary matching optimizations are now applicable in many more circumstances than before.
  • Type optimizations are now applied across local function calls, and will remove a lot more redundant type tests than before.
  • All compiler options that can be given in the source file can now be given in the option list on the command line for erlc.
  • In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are new BEAM instructions for binary matching that the HiPE native code compiler does not support. If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code.

Standard libraries:

  • Cover now uses the counters module instead of ets for updating counters. The new function cover:local_only/0 allows running Cover in a restricted but faster local-only mode. The increase in speed will vary depending on the type of code being cover-compiled, as an example the compiler test suite runs more than twice as fast with the new Cover.
  • A simple socket API is provided through the socket module. This is a low level API that does not replace gen_[tcp|udp|sctp]. It is intended to eventually replace the inet driver. It also provides a basic API that facilitates the implementation of other protocols than TCP, UDP and SCTP. Known issues are; No support for the Windows OS (currently), a small term leakage. This feature will be classed as experimental in OTP 22.
  • SSL: now uses the new logger API, including log levels and verbose debug logging.
  • SSL: Basic support for TLS 1.3 Server for experimental use.
  • crypto: The new hash_info/1 and cipher_info/1 functions returns maps with information about the hash or cipher in the argument.

 

For more details see http://erlang.org/download/otp_src_22.0.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_22.0.exe http://erlang.org/download/otp_win64_22.0.exe

Online documentation can be browsed here: http://erlang.org/doc/search/

The Erlang/OTP source can also be found at GitHub on the official Erlang repository:

https://github.com/erlang/otp

OTP-22.0

 

Thank you for all your contributions!

Erlang OTP 22.0-rc2 is available for testing!
Written by , Wednesday, 27 March 2019

OTP 22 Release Candidate 2

This is the second of three planned release candidates before the OTP 22 release.

The intention with this release is to get feedback from our users. All feedback is welcome, even if it is only to say that it works for you, as it lets us know that the release candidate got some testing.

Erlang/OTP 22 is a new major release with new features and improvements as well as incompatibilities.

Potential Incompatibilities

  • gen_* behaviours: If logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report.
  • reltool: A new element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}.
  • All external pids/ports/refs created by erlang:list_to_pid and similar functions now compare equal to any other pid/port/ref with same number from that node.
  • The old legacy erl_interface library is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library.
  • VxWorks is deprecated as of OTP 22 and will be removed in OTP 23.

Additional highlights in release candidate 2

  • A simple socket API is provided through the socket module. This is a low level API that does not replace gen_[tcp|udp|sctp]. It is intended to eventually replace the inet driver. It also provides a basic API that facilitates the implementation of other protocols than TCP, UDP and SCTP. Known issues are; No support for the Windows OS (currently), a small term leakage. This feature will be classed as experimental in OTP 22.
  • ssl: Basic support for TLS 1.3 Server for experimental use.
  • In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are new BEAM instructions for binary matching that the HiPE native code compiler does not support. If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code.
  • erts: Added the NIF function enif_term_type, which helps avoid long sequences of enif_is_xyz by returning the type of the given term. This is especially helpful for NIFs that serialize terms, such as JSON encoders, where it can improve both performance and readability.
  • crypto: The new hash_info/1 and cipher_info/1 functions returns maps with information about the hash or cipher in the argument.

Highlights in release candidate 1

Erts:

  • Support for Erlang Distribution protocol to split the payload of large signals into several fragments.
  • ETS option write_concurrency now also effects and improves scalability of ordered_set tables.
  • The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. Now it yields when called with long lists.
  • A new (still experimental) module socket is introduced. It is implemented as a NIF and the idea is that it shall be as "close as possible" to the OS level socket interface.

Compiler:

  • The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible. * The binary matching optimizations are now applicable in many more circumstances than before.
  • Type optimizations are now applied across local function calls, and will remove a lot more redundant type tests than before.
  • All compiler options that can be given in the source file can now be given in the option list on the command line for erlc.

Standard libraries:

  • Cover now uses the counters module instead of ets for updating counters. The new function cover:local_only/0 allows running Cover in a restricted but faster local-only mode. The increase in speed will vary depending on the type of code being cover-compiled, as an example the compiler test suite runs more than twice as fast with the new Cover.
  • SSL now uses the new logger API, including log levels and verbose debug logging.

For more details see http://erlang.org/download/otp_src_22.0-rc2.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_22.0-rc2.exe http://erlang.org/download/otp_win64_22.0-rc2.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-11.0-rc2/doc

The Erlang/OTP source can also be found at GitHub on the official Erlang repository:

https://github.com/erlang/otp

OTP-22.0-rc2

 

Thank you for all your contributions!

Erlang OTP 21.3 is released
Written by , Wednesday, 13 March 2019

OTP 21.3

Erlang/OTP 21.3 is the third service release for version 21 release with, improvements as well as a few features!

Highlights

Kernel:

  • The standard logger handler, logger_std_h, now has a new internal feature for log rotation. For full information see the documentation.

SSL:

  • The Reason part of the error return from the functions connect and handshake has a better and documented format. This is a potential incompatibility. See the documentation.
  • Refactoring of state handling has improved the TLS application data throughput and reduced CPU overhead
  • Code optimizations has reduced CPU load for encryption/decryption, especially for Erlang's distribution protocol over TLS
  • Now supports active N

Erl_interface:

  • Support for plugin of a user supplied socket implementation has been added.

OTP:

  • The HTML reference documentation now shows the OTP version where modules and functions were first introduced.
  • Versions of OTP older than R13B04 is not shown in the reference documentation

For a full list of details see: http://erlang.org/download/otp_src_21.3.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_21.3.exe http://erlang.org/download/otp_win64_21.3.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-10.3/doc

The Erlang/OTP source can also be found at GitHub on the official Erlang repository, Here: OTP-21.2

Please report any new issues via Erlang/OTPs public issue tracker https://bugs.erlang.org We want to thank all of those who sent us patches, suggestions and bugreports! Thank you! The Erlang/OTP Team at Ericsson

Erlang OTP 22.0-rc1 is available for testing!
Written by , Wednesday, 13 February 2019

OTP 22 Release Candidate 1

This is the first of three planned release candidates before the OTP 22 release.

The intention with this release is to get feedback from our users. All feedback is welcome, even if it is only to say that it works for you, as it lets us know that the release candidate got some testing.

Erlang/OTP 22 is a new major release with new features and improvements as well as incompatibilities.

Potential Incompatibilities

  • gen_* behaviours: If logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report.
  • New element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}.
  • All external pids/ports/refs created by erlang:list_to_pid and similar functions now compare equal to any other pid/port/ref with same number from that node.
  • The old legacy erl_interface library is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library.
  • VxWorks is deprecated as of OTP 22 and will be removed in OTP 23.

Known problems

Native code generation does not work for all modules due to new BEAM instructions not supported by HiPE the native compiler. However, dialyzer's automatic compilation to native code still works. Building OTP with the configure option enable-native-libs will not work in this release candidate.

Highlights

Erts:

  • Support for Erlang Distribution protocol to split the payload of large signals into several fragments.
  • ETS option write_concurrency now also effects and improves scalability of ordered_set tables.
  • The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. Now it yields when called with long lists.
  • A new (still experimental) module socket is introduced. It is implemented as a NIF and the idea is that it shall be as "close as possible" to the OS level socket interface.

Compiler:

  • The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible. * The binary matching optimizations are now applicable in many more circumstances than before.
  • Type optimizations are now applied across local function calls, and will remove a lot more redundant type tests than before.
  • All compiler options that can be given in the source file can now be given in the option list on the command line for erlc.

Standard libraries:

  • Cover now uses the counters module instead of ets for updating counters. The new function cover:local_only/0 allows running Cover in a restricted but faster local-only mode. The increase in speed will vary depending on the type of code being cover-compiled, as an example the compiler test suite runs more than twice as fast with the new Cover.
  • SSL now uses the new logger API, including log levels and verbose debug logging.

For more details see http://erlang.org/download/otp_src_22.0-rc1.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_22.0-rc1.exe http://erlang.org/download/otp_win64_22.0-rc1.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-11.0-rc1/doc

The Erlang/OTP source can also be found at GitHub on the official Erlang repository:

https://github.com/erlang/otp

OTP-22.0-rc1

 

Thank you for all your contributions!

 

Erlang OTP 21.2 is released
Written by , Wednesday, 12 December 2018

OTP 21.2

Erlang/OTP 21.2 is the second service release for the 21st major release with, improvements as well as a few features!

 

Highlights

SSH:

  • Public key methods: ssh-ed25519 and ssh-ed448 added. Requires OpenSSL 1.1.1 or later as cryptolib under the OTP application

SSL:

  • ssl now uses active n internally to boost performance. Old active once behaviour can be restored by setting a application variable.

ERTS, Kernel:

  • New counters and atomics modules supplies access to highly efficient operations on mutable fixed word sized variables.
  • New module persistent_term!. Lookups are in constant time! No copying the terms!
  • New pollset made to handle sockets that use {active, true} or {active, N}. Polled by a normal scheduler!
  • No more ONESHOT mechanism overhead on fds! Only on Linux and BSD

For a full list of details see: http://erlang.org/download/otp_src_21.2.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_21.2.exe http://erlang.org/download/otp_win64_21.2.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-10.2/doc

The Erlang/OTP source can also be found at GitHub on the official Erlang repository, Here: OTP-21.2

Please report any new issues via Erlang/OTPs public issue tracker https://bugs.erlang.org We want to thank all of those who sent us patches, suggestions and bugreports! Thank you! The Erlang/OTP Team at Ericsson

Erlang OTP 21.1 is released
Written by , Wednesday, 26 September 2018

OTP 21.1

Erlang/OTP 21.1 is the first service release for the 21st major release with improvements as well as a few new features!

 

Highlights

SSH:

  • The cipher 'chacha20-poly1305@openssh.com' is now supported if OpenSSL 1.1.1 or higher is used as cryptolib.
  • The key exchange methods 'curve25519-sha256@libssh.org', 'curve25519-sha256' and 'curve448-sha512' are implemented. They all depends on that OpenSSL 1.1.1 or higher used as cryptolib.

Crypto:

  • Typing in crypto and public_key applications are reworked and corrected.
  • New chapter on Algorithm details in the User's guide

ERTS, Kernel:

  • The socket options recvtos, recvttl, recvtclass and pktoptions have been implemented in the socket modules. Se documentation in gen_tcp, gen_udp and inet modules for more info!

For more details see: http://erlang.org/download/otp_src_21.1.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_21.1.exe http://erlang.org/download/otp_win64_21.1.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-10.1/doc

The Erlang/OTP source can also be found at GitHub on the official Erlang repository, Here: OTP-21.1

Please report any new issues via Erlang/OTPs public issue tracker https://bugs.erlang.org We want to thank all of those who sent us patches, suggestions and bugreports! Thank you! The Erlang/OTP Team at Ericsson

Erlang/OTP 20.1 is released
Written by , Wednesday, 27 September 2017

Erlang/OTP 20.1 is the first service release for the 20 major release. The service release contains mostly bug fixes and characteristics improvements but also some new features.

Some highlights for 20.1

  • crypto, public_key: Extend crypto and public_key functions sign and verify with:
  • support for RSASSA-PS padding for signatures and for

saltlength setting

  • X9.31 RSA padding.
  • sha, sha224, sha256, sha384, and sha512 for dss

signatures as mentioned in NIST SP 800-57 Part 1.

  • ripemd160 to be used for rsa signatures.
  • A new tuple in crypto:supports/0 reports supported MAC

algorithms.

  • diameter:
  • Add service option decode_format to allow incoming messages to be decoded into maps

instead of records.

  • Decode performance has been improved.
  • Add service/transport option avp_dictionaries to give better support for dictionaries only defining AVPs.
  • erts: Upgraded the ERTS internal PCRE library from version 8.40 to version 8.41.
  • erts, kernel, tools: Profiling with lock counting can now be fully toggled at runtime in

the lock counting emulator (-emu_type lcnt). Everything is enabled by default to match the old behavior, but specific categories can be toggled at will with minimal runtime overhead when disabled. Refer to the documentation on�lcnt:rt_mask/1 for details.

lcnt:collect and�lcnt:clear will no longer block all other threads in the runtime system. This makes it possible to run the lock counting under heavier load.

  • erts: The�zlib module has been refactored and all its operations will now yield appropriately,

allowing them to be used freely in concurrent applications.

  • erts, tools: Add�erlang:iolist_to_iovec/1, which converts an

iolist() to an�erlang:iovec(), which is suitable for use with�enif_inspect_iovec().

  • erts: Add new nif API functions for managing an I/O Queue.

The added functions are:�enif_ioq_create(),�enif_ioq_destroy(),�enif_ioq_enq_binary(), enif_ioq_enqv(),�enif_ioq_deq(),�enif_ioq_peek(),�enif_inspect_iovec(),�enif_free_iovec()

  • observer/crashdump_viewer:
  • Reading of crash dumps with many binaries is optimized.
  • A progress bar is shown when the detail view for a process is opened.
  • The cdv script now sets ERL_CRASH_DUMP_SECONDS=0 to

avoid generating a new crash dump from the node running the Crashdump Viewer.

  • observer:

Add system statistics and limits to frontpage in observer.

  • public_key, ssl**:

Improved error propagation and reports

  • ssh: A new option�modify_algorithms is implemented. It

enables specifying changes on the default algorithms list. See the reference manual and the SSH User's Guide chapter "Configuring algorithms in SSH".

  • tools/xref: The predefined Xref analysis locals_not_used now understands

the�-on_load() attribute and does not report unused functions.

  • tools/fprof: When sampling multiple processes and analyzing

with totals set to true, the output now sums together all caller and callee entries which concerns the same function. Previous behaviour was to report each contributing entry separately.

You can find the README and the full listing of changes for this service release at

http://www.erlang.org/download/otp_src_20.1.readme

The source distribution and binary distributions for Windows can be downloaded from

http://www.erlang.org/download/otp_src_20.1.tar.gz http://www.erlang.org/download/otp_win32_20.1.exe http://www.erlang.org/download/otp_win64_20.1.exe

Note: To unpack the TAR archive you need a GNU TAR compatible program.

For installation instructions please consult the README file that is part of the distribution.

The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp with tag OTP-20.1

The on-line documentation can be found at: http://www.erlang.org/doc/ You can also download the complete HTML documentation or the Unix manual files

http://www.erlang.org/download/otp_doc_html_20.1.tar.gz http://www.erlang.org/download/otp_doc_man_20.1.tar.gz

Please report any new issues via Erlang/OTPs public issue tracker

https://bugs.erlang.org

We want to thank all of those who sent us patches, suggestions and bug reports!

Thank you!

The Erlang/OTP Team at Ericsson

Erlang/OTP 20.0 is released
Written by , Wednesday, 21 June 2017

Erlang/OTP 20.0 is a new major release with new features, quite a few (characteristics) improvements, as well as a few incompatibilities.

There are only minor changes compared to the second release candidate, some of them listed below:

  • ERTS: * erlang:term_to_binary/1 changed the encoding of all atoms from ATOM_EXT to ATOM_UTF8_EXT and SMALL_ATOM_UTF8_EXT. This is now changed so that only atoms actually containing unicode characters are encoded with the UTF8 tags while other atoms are encoded ATOM_EXT just as before.

Here are some of the most important news in OTP 20:

Potential Incompatibilities

  • ERTS:
  • The non SMP Erlang VM is deprecated and not built by default
  • Remove deprecated erlang:hash/2
  • erlang:statistics/1 with scheduler_wall_time now also includes info about dirty CPU schedulers.
  • The new purge strategy introduced in OTP 19.1 is mandatory and slightly incompatible for processes holding funs

see erlang:check_process_code/3.

  • The NIF library reload is not supported anymore.
  • Atoms can now contain arbitrary unicode characters which means that the DFLAG_UTF8_ATOMS capability in the distribution protocol must be supported if an OTP 20 node should accept the connection with another node or library. Third party libraries which uses the distribution protocol need to be updated with this.
  • Asn1: Deprecated module and functions removed (asn1rt, asn1ct:encode/3 and decode/3)
  • Ssh: client only option in a call to start a daemon will now fail

Highlights

Erts:

  • Dirty schedulers enabled and supported on VM with SMP support.
  • support for “dirty” BIFs and “dirty” GC.
  • erlang:garbage_collect/2 for control of minor or major GC
  • Erlang literals are no longer copied when sending messages.
  • Improved performance for large ETS tables, >256 entries (except ordered_set)
  • erlang:system_info/1 atom_count and atom_limit
  • Reduced memory pressure by converting sub-binaries to heap-binaries during GC
  • enif_select, map an external event to message
  • Improvements of timers internally in the VM resulting in reduced memory consumption and more efficient administration for timers

Compiler:

  • Code generation for complicated guards is improved.
  • Warnings for repeated identical map keys. #{'a'=>1, 'b'=>2, 'a'=>3} will warn for the repeated key a.
  • By default there is now a warning when export_all is used. Can be disabled
  • Pattern matching for maps is optimized
  • New option deterministic to omit path to source + options info the BEAM file.
  • Atoms may now contain arbitrary unicode characters.
  • compile:file/2 has an option to include extra chunks in the BEAM file.

Misc other applications

  • Significantly updated string module with unicode support and many new functions
  • crypto now supports OpenSSL 1.1
  • Unnamed ets tables optimized
  • gen_fsm is deprecated and replaced by gen_statem
  • A new event manager to handle a subset of OS signals in Erlang
  • Optimized sets add_element, del_element and union
  • Added rand:jump/0-1
  • When a gen_server crashes, the stacktrace for the client will be printed to facilitate debugging.
  • take/2 has been added to dict, orddict, and gb_trees.
  • take_any/2 has been added to gb_trees
  • erl_tar support for long path names and new file formats
  • asn1: the new maps option changes the representation of SEQUENCE to be maps instead of records
  • A TLS client will by default call public_key:pkix_verify_hostname/2 to verify the hostname
  • ssl: DTLS documented in the API, experimental
  • ssh: improving security, removing and adding algorithms
  • New math:fmod/2

For more details see http://erlang.org/download/otp_src_20.0.readme

The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp with tag OTP-20.0

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_20.0.exe http://erlang.org/download/otp_win64_20.0.exe

On line documentation can be browsed here: www.erlang.org/doc/

Thanks to all contributors.

Erlang/OTP 20.0-rc2 is available for testing
Written by , Wednesday, 31 May 2017

OTP 20 Release Candidate 2

This is the second of two release candidates before the OTP 20 release. The intention with this release is that you as users try it and give us feedback if something does not work as expected. Could be a bug, an unexpected incompatibility, a significant change of characteristics in negative direction, etc.

There are only minor changes compared to the first release candidate, some of them listed below:

  • erts: ./configure --enable-lock-counter will enable building of an additional emulator that has support for

lock counting. (The option previously existed, but would turn on lock counting in the default emulator being built.) To start the lock-counting emulator, use erl -emu_type lcnt.

  • kernel: Added the process_flag message_queue_data = off_heap to the code_server process in order to

improve characteristics during code upgrade, which can generate a huge amount of messages.

Here are some of the most important news in OTP 20 (same as in RC1):

Potential Incompatibilities

  • ERTS:
  • The non SMP Erlang VM is deprecated and not built by default
  • Remove deprecated erlang:hash/2
  • erlang:statistics/1 with scheduler_wall_time now also includes info about dirty CPU schedulers.
  • The new purge strategy introduced in OTP 19.1 is mandatory and slightly incompatible for processes holding funs

see erlang:check_process_code/3.

  • The NIF library reload is not supported anymore.
  • Asn1: Deprecated module and functions removed (asn1rt, asn1ct:encode/3 and decode/3)
  • Ssh: client only option in a call to start a daemon will now fail

Highlights

Erts:

  • Dirty schedulers enabled and supported on VM with SMP support.
  • support for “dirty” BIFs and “dirty” GC.
  • erlang:garbage_collect/2 for control of minor or major GC
  • Erlang literals are no longer copied when sending messages.
  • Improved performance for large ETS tables, >256 entries (except ordered_set)
  • erlang:system_info/1 atom_count and atom_limit
  • Reduced memory pressure by converting sub-binaries to heap-binaries during GC
  • enif_select, map an external event to message

Compiler:

  • Code generation for complicated guards is improved.
  • Warnings for repeated identical map keys. #{'a'=>1, 'b'=>2, 'a'=>3} will warn for the repeated key a.
  • By default there is now a warning when export_all is used. Can be disabled
  • Pattern matching for maps is optimized
  • New option deterministic to omit path to source + options info the BEAM file.
  • Atoms may now contain arbitrary unicode characters.
  • compile:file/2 has an option to include extra chunks in the BEAM file.

Misc other applications

  • Unnamed ets tables optimized
  • A new event manager to handle a subset of OS signals in Erlang
  • Optimized sets add_element, del_element and union
  • Added rand:jump/0-1
  • When a gen_server crashes, the stacktrace for the client will be printed to facilitate debugging.
  • take/2 has been added to dict, orddict, and gb_trees.
  • take_any/2 has been added to gb_trees
  • Significantly updated string module with unicode support
  • erl_tar support for long path names and new file formats
  • Dtls: Documented API, experimental
  • SSH: improving security, removing and adding algorithms
  • New math:fmod/2

For more details see http://erlang.org/download/otp_src_20.0-rc2.readme

Per built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_20.0-rc2.exe http://erlang.org/download/otp_win64_20.0-rc2.exe

On line documentation can be browsed here: www.erlang.org/documentation/doc-9.0-rc2/doc/

Thanks to all contributors.

Erlang/OTP 20.0-rc1 is available for testing
Written by , Friday, 5 May 2017

OTP 20 Release Candidate 1

This is the first of two release candidates before the OTP 20 release in June 2017.

The intention with this release is that you as users try it and give us feedback if something does not work as expected. Could be a bug, an unexpected incompatibility, a significant change of characteristics in negative direction, etc.

Erlang/OTP 20.0 is a new major release with new features, quite a few (characteristics) improvements, as well as a few incompatibilities.  

Here are some of the most important news:

Potential Incompatibilities

  • ERTS:
  • The non SMP Erlang VM is deprecated and not built by default
  • Remove deprecated erlang:hash/2
  • erlang:statistics/1 with scheduler_wall_time now also includes info about dirty CPU schedulers.
  • The new purge strategy introduced in OTP 19.1 is mandatory and slightly incompatible for processes holding funs

see erlang:check_process_code/3.

  • The NIF library reload is not supported anymore.
  • Asn1: Deprecated module and functions removed (asn1rt, asn1ct:encode/3 and decode/3)
  • Ssh: client only option in a call to start a daemon will now fail

Highlights

Erts:

  • Dirty schedulers enabled and supported on VM with SMP support.
  • support for “dirty” BIFs and “dirty” GC.
  • erlang:garbage_collect/2 for control of minor or major GC
  • Erlang literals are no longer copied when sending messages.
  • Improved performance for large ETS tables, >256 entries (except ordered_set)
  • erlang:system_info/1 atom_count and atom_limit
  • Reduced memory pressure by converting sub-binaries to heap-binaries during GC
  • enif_select, map an external event to message

Compiler:

  • Code generation for complicated guards is improved.
  • Warnings for repeated identical map keys. #{'a'=>1, 'b'=>2, 'a'=>3} will warn for the repeated key a.
  • By default there is now a warning when export_all is used. Can be disabled
  • Pattern matching for maps is optimized
  • New option deterministic to omit path to source + options info the BEAM file.
  • Atoms may now contain arbitrary unicode characters.
  • compile:file/2 has an option to include extra chunks in the BEAM file.

Misc other applications

  • Unnamed ets tables optimized
  • A new event manager to handle a subset of OS signals in Erlang
  • Optimized sets add_element, del_element and union
  • Added rand:jump/0-1
  • When a gen_server crashes, the stacktrace for the client will be printed to facilitate debugging.
  • take/2 has been added to dict, orddict, and gb_trees.
  • take_any/2 has been added to gb_trees
  • Significantly updated string module with unicode support
  • erl_tar support for long path names and new file formats
  • Dtls: Documented API, experimental
  • SSH: improving security, removing and adding algorithms
  • New math:fmod/2

For more details see http://erlang.org/download/otp_src_20.0-rc1.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_20.0-rc1.exe http://erlang.org/download/otp_win64_20.0-rc1.exe

On line documentation can be browsed here: www.erlang.org/documentation/doc-9.0-rc1/doc/

Thanks to all contributors.