Performing substitutions during post-patch breaks tools such as mkpatches,
making it very difficult to regenerate correct patches after making changes,
and often leading to substituted string replacements being committed.
Potential Incompatibilities
- All Corba applications are now moved from the OTP repository
- A new Corba repository will be created https://github.com/erlang
- New applications ftp and tftp, moved from inets
- ssl no longer supports 3_DES cipher suites or RSA-key exchange
cipher suites by default
- Erlang:monitor on a primitive node (erl_interface, jinterface, etc)
will no longer fail with badarg exception. Instead a monitor will be
created, but it will only supervise the connection to the node.
Erts:
- Enhanced IO scalability
- Support for usage of distribution controller processes for
alternative transports, routing etc
- compact instructions on 64bit systems for code below 4GB 20% less
memory for loaded code
- Rewrite of the efile-driver with NIFs and "Dirty schedulers"
resulting in faster file operations
- non-smp VM removed
- link and monitor optimized for scalability
- os:getenv/putenv now work on thread-safe emulation. No longer in
sync with libc getenv(3). Manual synchronization will be needed.
Compiler:
- Misc compiler optimizations including contributions from the Elixir
team resulting in 10% improvements in benchmarks
- "Tuple calls" have been removed from the run-time system.
- Code such as f({ok, Val}) -> {ok, Val} is now automatically
rewritten to f({ok, Val} = Tuple) -> Tuple. this reduces code size,
execution time, and removed GC pressure.
- More information in stacktrace from a number of operators
- erlang:get_stacktrace/0 deprecated to be replaced with try ... catch
C:R:Stacktrace -> ...
- Creation of small maps with literal keys optimized.
- A new predefined macro OTP_RELEASE and preprocessor directives -if
and -elif
Security:
- DTLS is now supported in the SSL application
- Enhanced support for distribution over TLS
- "unsecure" ciphers removed from defaults in SSL and SSH.
- A new option value defined to facilitate implementing exec servers.
Old option kept for compatibility, but now gives errors on stderror.
Standard libraries:
- New API for logging, logger
- New uri_string module for parsing URIs according to "The standard"
- New function lists:search(list,fun/1) -> {ok, Value} | false
- Changed default behaviour of .erlang loading. escript, erlc,
dialyzer and typer no longer load an .erlang at all.
ssl:
- Added new API functions to facilitate cipher suite
handling
erts, observer:
- More crash dump info such as: process binary virtual
heap stats, full info for process causing out-of-mem
during GC, more port related info, and dirty scheduler
info.
inets:
- Add support for unix domain sockets in the http client.
Some highlights:
crypto, ssl:
- The crypto API is extended to use private/public keys
stored in an Engine for sign/verify or encrypt/decrypt
operations.
- The ssl application provides an API to use this new
engine concept in TLS.
ssh:
- SSH can now fetch the host key from the private keys
stored in an Engine. See the crypto application for
details about Engines.
ssl:
- A new command line option -ssl_dist_optfile has been
added to facilitate specifying the many options needed
when using SSL as the distribution protocol.
stdlib:
- Improve performance of the new string functionality
when handling ASCII characters.
Full release notes:
http://www.erlang.org/download/otp_src_20.2.readme
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).
- 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.
- 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.
- 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.
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
- 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.
- 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
Some highlights for 19.3:
- crypto, ssh: The implementation of the key exchange algorithms
diffie-hellman-group-exchange-sha* are optimized, up to a factor of 11
for the slowest ( = biggest and safest) group size.
- dialyzer: The peak memory consumption is reduced. Analyzing modules
with binary construction with huge strings is now much faster.
- erts: A received SIGTERM signal to beam will generate a 'stop' message
to the init process and terminate the Erlang VM nicely. This is
equivalent to calling init:stop/0.
- kernel: The functions in the 'file' module that take a list of paths
(e.g. file:path_consult/2) will now continue to search in the path if
the path contains something that is not a directory.
- public_key: New function pkix_verify_hostname/2,3 Implements
certificate hostname checking. See the manual and RFC 6125.
- public_key, ssh: The ssh host key fingerprint generation now also
takes a list of algorithms and returns a list of corresponding
fingerprints. See public_key:ssh_hostkey_fingerprint/2 and the option
silently_accept_hosts in ssh:connect.
- ssl: Move PEM cache to a dedicated process, to avoid making the SSL
manager process a bottleneck. This improves scalability of TLS
connections.
- stdlib: filename:safe_relative_path/1 to sanitize a relative path has
been added.
Full release notes:
http://erlang.org/download/otp_src_19.3.readme
Erlang/OTP 19.2 is the second service release for the 19 major release.
The service release contains mostly bug fixes and characteristics
improvements.
Some highlights for 19.2
* STDLIB: The new behaviour gen_statem has been improved with 3 new
features: the possibility to use old style non-proxy timeouts
for gen_statem:call/2,3, state entry code, and state
timeouts. These are backwards compatible. Minor code and
documentation improvements has been performed including a
borderline semantics correction of timeout zero handling.
* SSL: Experimental version of DTLS. It is runnable but not complete
and cannot be considered reliable for production usage. To use
DTLS add the option {protocol, dtls} to ssl:connect and ssl:listen.
* SSH: Extended the option silently_accept_hosts for ssh:connect to
make it possible for the client to check the SSH host key
fingerprint string. Se the reference manual for SSH.
* ~40 contributions since the previous service release OTP 19.1
You can find the README and the full listing of changes for this
service release at
http://www.erlang.org/download/otp_src_19.2.readme
Some highlights of the release are:
- erts: Improved dirty scheduler support. A purge of a module will
- not have to wait for completion of all ongoing dirty NIF calls.
- erts: Improved accuracy of timeouts on MacOS X.
- kernel: Add net_kernel:setopts/2 and net_kernel:getopts/2 to
- control options for distribution sockets in runtime.
- asn1: Compiling multiple ASN.1 modules in the same directory with
- parallel make (make -j) should now be safe.
- httpd: support for PUT and DELETE in mod_esi
- ~30 contributions since 19.0
You can find the Release Notes with more detailed info at
http://www.erlang.org/download/otp_src_19.1.readme
- compiler, stdlib:
- New preprocessor macros ?FUNCTION_NAME, ?FUNCTION_ARITY
- New preprocessor directives -error(Term) and -warning(Term) to
cause a compilation error or warning, respectively.
- gen_statem a new state machine behavior
- mnesia_ext: plugin of external storage solutions to mnesia
- crypto: uses EVP interface in OpenSSL resulting in generally
better performance and support for HW acceleration
- ssh: performance improvements, uses the new gen_statem behavior
- ssl: enhanced error log messages
- dialyzer: the support for maps is very much extended both the
type specification syntax and the type analysis.
- erts:
- erlang:open_port(spawn, ...) 3-5 times faster
- tracing, extensive improvements (scalability, speed, match
specifications on send/receive, support for lttng, ...)
- dirty schedulers improved
- per process configurable handling of message_queue
- fast loading of multiple modules
- max_heap_size process flag
- erts/kernel: Experimental support for Unix Domain Sockets
Full changelog:
http://erlang.org/download/otp_src_19.0.readme
Some highlights of the release are:
- New statistics info about runnable and active processes & ports.
- Time warp improvements: dbg:p/2 and erlang:trace/3 with
monotonic_timestamp | strict_monotonic_timestamp.
- Introduced a validation callback for heart.
- The module overload in sasl has been deprecated.
- ~90 contributions since 18.2
Full release notes:
http://erlang.org/download/otp_src_18.3.readme
erlang 18.2.1
Due to a bug in the handling of paths on windows none of the following
would work with paths containing a space:
- ct_run
- dialyzer
- erlc
- escript
- typer
This also contains a fix for HiPE enabled emulator for FreeBSD.
erlang 18.2
- ssl: Add configurable upper limit for session cache.
- erts: Add function enif_getenv to read OS environment variables in
a portable way from NIFs.
- kernel: Add {line_delim, byte()} option to inet:setopts/2 and
decode_packet/3
- ssh: The 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384' and
'ecdsa-sha2-nistp521' signature algorithms for ssh are implemented.
See RFC 5656.
- ssh: The ssh:daemon option dh_gex_groups is extended to read a user
provided ssh moduli file with generator-modulus pairs. The file is
in openssh format.
- Thanks to 41 different contributors!
Some highlights of the release are:
- ssl: Add possibility to downgrade an SSL/TLS connection to a tcp
connection, and give back the socket control to a user process.
- ssh: The following new key exchange algorithms are implemented:
'ecdh-sha2-nistp256', 'ecdh-sha2-nistp384', 'ecdh-sha2-nistp521',
'diffie-hellman-group14-sha1', 'diffie-hellman-group-exchange-sha1'
and 'diffie-hellman-group-exchange-sha256'. This raises the
security level considerably.
- kernel,stdlib,sasl: A mechanism for limiting the amount of text
that the built-in error logger events will produce has been
introduced. It is useful for limiting both the size of log files
and the CPU time used to produce them.
Full release notes:
http://www.erlang.org/download/otp_src_18.1.readme
- Starting from 18.0 Erlang/OTP is released under the APL 2.0
- erts: The time functionality has been extended. This includes a new API
for time, as well as "time warp" modes which alters the behavior when
system time changes. You are strongly encouraged to use the new API
instead of the old API based on erlang:now/0. erlang:now/0 has been
deprecated since it is a scalability bottleneck.
- erts: Beside the API changes and time warp modes a lot of scalability
and performance improvements regarding time management has been made
- erts: The previously introduced "eager check I/O" feature is now enabled
by default.
- erts/compiler: enhanced support for maps. Big maps new uses a HAMT
(Hash Array Mapped Trie) representation internally which makes them more
efficient. There is now also support for variables as map keys.
- dialyzer: The -dialyzer() attribute can be used for suppressing warnings
in a module by specifying functions or warning options.
- ssl: Remove default support for SSL-3.0 and added padding check
for TLS-1.0 due to the Poodle vulnerability.
- ssl: Remove default support for RC4 cipher suites, as they are consider
too weak.
- stdlib: Allow maps for supervisor flags and child specs
- stdlib: New functions in ets:
- take/2. Works the same as ets:delete/2 but
also returns the deleted object(s).
- ets:update_counter/4 with a default object as
argument
Full changelog:
http://www.erlang.org/download/otp_src_18.0.readme
erlang-17.5
================================
Highlights:
- ERTS: Added command line argument option for setting the initial size
of process dictionaries.
- Diameter: configurable incoming_max len and string_decode for diameter
messages
- Bugfixes and minor small features in applications such as compiler,
common_test, crypto, debugger, eldap, erts, hipe, inets, ssh, ssl,...
Full changelog:
http://www.erlang.org/download/otp_src_17.5.readme
erlang-17.4
================================
Highlights:
- eldap: Nearly all TCP options are possible to give in the eldap:open/2 call.
- ssh: Added API functions ptty_alloc/3 and ptty_alloc/4, to allocate
a pseudo tty.
- ssl: Handle servers that may send an empty SNI extension to the client.
Full changelog:
http://www.erlang.org/download/otp_src_17.4.readme
erlang-17.3
================================
Highlights:
- erts: Introduced enif_schedule_nif() which allows a long running NIF
to be broken into separate NIF invocations without the help of a wrapper
function written in Erlang
- common_test: Experimental support for running Quickcheck and PropEr tests
from common_test suites is added. Examples of usage in the suites for
the ssh and inets applications
- Bugfixes and minor new features in applications such as asn1, erts, kernel,
stdlib, diameter, ssh, mnesia, ssl, jinterface
Full changelog:
http://www.erlang.org/download/otp_src_17.3.readme
erlang-17.1
================================
Highlights:
- crypto: Add aes_cfb8 cypher to crypto:block_encrypt and block_decrypt.
- diameter: Add result code counters for CEA, DWA, and DPA.
- erts: The following built in functions in the erlang and binary modules
now bump an appropriate amount of reductions and yield when
out of reductions:
binary_to_list/1, binary_to_list/3, bitstring_to_list/1,
list_to_binary/1, iolist_to_binary/1, list_to_bitstring/1,
binary:list_to_bin/1
- hipe: Handle Maps instructions get_map_elements, put_map_assoc,
put_map_exact in the HiPE native code compiler.
- mnesia: The time for inserting locks for a transaction with large
number of locks is reduced significantly.
- ssh: Option max_sessions added to ssh:daemon/{2,3}.
- stdlib: Add maps:get/3 to maps module. The function will return the
supplied default value if the key does not exist in the map.
Full changelog:
http://www.erlang.org/download/otp_src_17.1.readme
erlang-17.0
================================
Highlights:
- Erlang/OTP has been ported to the realtime operating system OSE.
- Maps, a new dictionary data type (experimental)
- A more natural mapping from ASN.1 OCTET STRING and BIT STRING to
Erlang types, and other ASN.1 improvements and optimizations
- The {active, N} socket option for TCP, UDP, and SCTP
- A new (optional) scheduler utilization balancing mechanism
- Migration of memory carriers has been enabled by default on all
ERTS internal memory allocators
- Increased garbage collection tenure rate
- Experimental "dirty schedulers" functionality
- Funs can now be given names
- Miscellaneous unicode support enhancements
- A new version scheme for OTP its applications has been introduced
Full changelog:
http://www.erlang.org/download/otp_src_17.0.readme
erlang 16.1.3.1 (R16B03-1)
================================
Highlights:
- The ODBC application was missing in the prebuilt Windows installers
- 3 corrections in the SSL application:
- Add missing validation of the server_name_indication option and test
for its explicit use.
- Elliptic curve selection in server mode now properly selects a curve
suggested by the client, if possible.
- The server did not indicate support for secure renegotiation during
TLS extension handling.
- In the syntax tools application a bug was introduced which broke
reverting of local funs. This is now corrected (thanks to Anthony Ramine)
- wx - Solved a problem which caused the debugger to crash when closing
a window. Fixed static linking on Mac.
- xmerl - Fixed a problem in the SAX-parser when the header of
the next document was appearing in the buffer when using
the xmerl_sax_parser:stream/2 function.
Full changelog:
http://www.erlang.org/download/otp_src_R16B03-1.readme
erlang-16.1.3 (R16B03)
================================
Highlights:
- A new memory allocation feature called "super carrier" has been introduced.
It can for example be used for pre-allocation of all memory that the
runtime system should be able to use. It is enabled by passing the +MMscs
(size in MB) command line argument. For more information see
the documentation of the +MMsco, +MMscrfsd, +MMscrpm, +MMscs, +MMusac, and,
+Mlpm command line arguments in the erts_alloc(3) documentation.
- The ldap client eldap now supports the start_tls operation. This upgrades
an existing tcp connection to encryption using tls,
see eldap:start_tls/2 and /3.
- The ftp client (inets application) now supports ftp over tls (ftps).
Full changelog:
http://www.erlang.org/download/otp_src_R16B03.readme
Do it for all packages that
* mention perl, or
* have a directory name starting with p5-*, or
* depend on a package starting with p5-
like last time, for 5.18, where this didn't lead to complaints.
Let me know if you have any this time.