4 Upcoming Potential Incompatibilities
4.1
Introduction
This document lists planned upcoming potential incompatibilities in Erlang/OTP.
4.2
OTP 25
Distribution flags will become mandatory
In OTP 25, more distribution flags will become mandatory. That is, Erlang nodes will refuse to connect to nodes not implementing all of the mandatory distribution flags. If you implement the Erlang distribution protocol yourself, you will need to implement support for all mandatory distribution flags in order to communicate with Erlang nodes running OTP 25.
The following distribution flags will become mandatory in OTP 25:
- DFLAG_BIT_BINARIES
- Support for bitstrings.
- DFLAG_EXPORT_PTR_TAG
- Support for external funs (fun Module:Name/Arity).
- DFLAG_MAP_TAGS
- Support for maps.
- DFLAG_NEW_FLOATS
- Support for the new encoding of floats.
- DFLAG_FUN_TAGS
- Support for funs, but only in the new format (NEW_FUN_EXT) because DFLAG_NEW_FUN_TAGS is also mandatory.
4.3
OTP 26
The distribution flag DFLAG_V4_NC will become mandatory
As of OTP 26, the distribution flag DFLAG_V4_NC will become mandatory. If you implement the Erlang distribution protocol yourself, you will need to implement support for DFLAG_V4_NC in order to communicate with Erlang nodes running OTP 26.
The new link protocol will become mandatory
As of OTP 26, the new link protocol will become mandatory. That is, Erlang nodes will then refuse to connect to nodes not implementing the new link protocol. If you implement the Erlang distribution yourself, you are, however, encouraged to implement the new link protocol as soon as possible since the old protocol can cause links to enter an inconsistent state.
Atoms will be encoded as UTF-8 by default
As of OTP 26, the functions erlang:term_to_binary/1,2 and erlang:term_to_iovec/1,2 will encode all atoms as UTF-8 by default. The current default behavior is to encode atoms as Latin-1 if possible.
If you implement your own decoding of the Erlang external format you must either:
-
Make sure your implementation supports the UTF-8 encodings ATOM_UTF8_EXT and SMALL_ATOM_UTF8_EXT.
-
Call erlang:term_to_binary/2 or erlang:term_to_iovec/2 with option {minor_version,1} to force Latin-1 encoding. This is a more short-term solution as Latin-1 encoding may be phased out and removed in later OTP releases.