This document contains a list of potential incompatibilities
between Erlang 5.7/OTP R12A and Erl 5.6.5/OTP R12B-5,
and is an extract from the release notes for the respective applications.

1 compiler

The undocumented, unsupported, and deprecated guard BIF
is_constant/1 has been removed.
*** INCOMPATIBILITY with R12B ***
Own Id: OTP-7673

The short-circuit operators andalso and
orelse no longer guarantees that their second
argument is either true or false. As a
consequence, andalso/orelse are now
tail-recursive.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7748

The compiler will refuse to a compile file where the
module name in the file differs from the output file
name.
When compiling using erlc, the current working
directory will no be included in the code path (unless
explicitly added using "-pa .").
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7793

If a module contains an exported function with the
same name as an auto-imported BIF (such as
length/1), any calls to the BIF must have an
explicit erlang: prefix, or there will be a
compilation error (such calls would only generate a
warning in previous releases).
(The reason for the change is to avoid breaking code
in a future major release, R14 or R15, in which we plan
to make calls without a module prefix always call the
local function in the same module even if there is an
auto-imported BIF with the same name.)
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7873

2 Erts

Support for Unicode is implemented as described in
EEP10. Formatting and reading of unicode data both from
terminals and files is supported by the io and io_lib
modules. Files can be opened in modes with automatic
translation to and from different unicode formats. The
module 'unicode' contains functions for conversion
between external and internal unicode formats and the re
module has support for unicode data. There is also
language syntax for specifying string and character data
beyond the ISO-latin-1 range.
The interactive shell will support input and output of
unicode characters when the terminal and operating system
supports it.
Please see the EEP and the io/io_lib manual pages as
well as the stdlib users guide for details.I/O-protocol incompatibilities:
The io_protocol between io_Server and client is
updated to handle protocol data in unicode formats. The
updated protocol is now documented. The specification
resides in the stdlib users manual, which is a
new part of the manual.io module incompatibilities:
The io:put_chars, io:get_chars and io:get_line all
handle and return unicode data. In the case where
binaries can be provided (as to io:put_chars), they shall
be encoded in UTF-8. When binaries are returned (as by
io:get_line/get_chars when the io_server is set in
binary mode) the returned data is also
always encoded as UTF-8. The file module however
still returns byte-oriented data, why file:read can be
used instead of io:get_chars to read binary data in
ISO-latin-1.io_lib module incompatibilities:
io_lib:format can, given new format directives (i.e
"~ts" and "~tc"), return lists containing integers larger
than 255.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7648 Aux Id: OTP-7580 OTP-7514 OTP-7494
OTP-7443 OTP-7181 EEP10 EEP11

The undocumented, unsupported, and deprecated guard BIF
is_constant/1 has been removed.
*** INCOMPATIBILITY with R12B ***
Own Id: OTP-7673

The short-circuit operators andalso and
orelse no longer guarantees that their second
argument is either true or false. As a
consequence, andalso/orelse are now
tail-recursive.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7748

The compiler will refuse to a compile file where the
module name in the file differs from the output file
name.
When compiling using erlc, the current working
directory will no be included in the code path (unless
explicitly added using "-pa .").
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7793

The escape sequences \x and \{ have been
assigned new interpretations (they used to return the
ASCII code for x and { respectively). One
or more octal characters inside curly brackets after a
leading backslash is from now on an alternative to the
existing syntax \NNN, but can also be used for
codes greater than 255. In a similar fashion, one or more
hexadecimal characters can be put inside curly brackets
after a leading \x. Furthermore, the escape
sequences \xH and \xHH, where N is a
hexadecimal character, can be used for codes less than
256.
NOTE: These new escape sequences are still considered
experimental and may be changed in the R13B release.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7855

3 Inets

[httpc] - The inets http client will now use persistent
connections without pipelining as default and if a
pipeline timeout is set it will pipeline the requests on
the persistent connections.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7463

4 Jinterface

A number of fixes and improvements from the ErlIDE group;
Vlad Dumitrescu and Jakob Cederlund: JDK 1.5 is now a
minimal requirement for building Jinterface. New method:
OtpEpmd.lookupNames. OtpErlangList is now iterable.
Non-proper lists are now allowed - you have to test if a
list is proper or not. Non-proper lists can also be
created. New methods: isProper, getHead, getTail and
getNthTail. The get tail methods creates a sublist object
that re-uses the original list. OtpErlangPid is now
Comparable. Empty atoms can now be constructed, a missing
feature pointed out by Sebastien Boisgerault on
erlang-questions.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7832

5 Kernel

6 SSH

Ssh timeouts will now behave as expected i.e. defaults to
infinity. Only the user of the ssh application can know of
a reasonable timeout value for their application.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7807

Added the message {ssh_channel_up, ChannelId,
ConnectionManager} that shall be handled by the channel
callback handle_msg/2. This makes the function
handle_msg/2 a mandatory function for ssh channels
implementations which it was not in ssh-1.1.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7828

7 STDLIB

The functions lists:seq/1,2 return the empty
list in a few cases when they used to generate an
exception, for example lists:seq(1, 0). See
lists(3) for details. (Thanks to Richard O'Keefe.)
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7230

Support for Unicode is implemented as described in
EEP10. Formatting and reading of unicode data both from
terminals and files is supported by the io and io_lib
modules. Files can be opened in modes with automatic
translation to and from different unicode formats. The
module 'unicode' contains functions for conversion
between external and internal unicode formats and the re
module has support for unicode data. There is also
language syntax for specifying string and character data
beyond the ISO-latin-1 range.
The interactive shell will support input and output of
unicode characters when the terminal and operating system
supports it.
Please see the EEP and the io/io_lib manual pages as
well as the stdlib users guide for details.I/O-protocol incompatibilities:
The io_protocol between io_Server and client is
updated to handle protocol data in unicode formats. The
updated protocol is now documented. The specification
resides in the stdlib users manual, which is a
new part of the manual.io module incompatibilities:
The io:put_chars, io:get_chars and io:get_line all
handle and return unicode data. In the case where
binaries can be provided (as to io:put_chars), they shall
be encoded in UTF-8. When binaries are returned (as by
io:get_line/get_chars when the io_server is set in
binary mode) the returned data is also
always encoded as UTF-8. The file module however
still returns byte-oriented data, why file:read can be
used instead of io:get_chars to read binary data in
ISO-latin-1.io_lib module incompatibilities:
io_lib:format can, given new format directives (i.e
"~ts" and "~tc"), return lists containing integers larger
than 255.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7648 Aux Id: OTP-7580 OTP-7514 OTP-7494
OTP-7443 OTP-7181 EEP10 EEP11

filelib:fold_files/5 now uses the re module
instead of the regexp module for regular
expression matching. In practice, this change will not be
a problem for most regular expressions used for
filelib:fold_files/5. (The major difference in
regular expression is that parenthesis and curly brackets
is treated as literal characters by regexp but as
special characters by re; fortunately, those
characters are rarely used in filenames.)
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7819

digraph:new(Type) will now cause a badarg
exception if Type is not a valid type. Similarly,
digraph_utils:subgraph/2,3 will now cause a
badarg if the arguments are invalid. (Those
functions used to return error tuples if something was
wrong.)
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7824

The argument passed to random:uniform/1 must
now be an integer (as stated in the documentation). In
previous releases, a floating point number was also
allowed.
*** POTENTIAL INCOMPATIBILITY ***
Own Id: OTP-7827