[erlang-questions] Breaking backwards compatibility in Release 17.0-rc2

Loïc Hoguin <>
Fri Feb 28 22:46:03 CET 2014


On 02/28/2014 06:10 PM, Andrew Thompson wrote:
> What about simply having one major release where both are valid, then
> one release where it is deprecated and then after that remove it.  For
> projects which support the 'last two major versions', which seems to be
> the sanest way, that would allow them to migrate.

In theory it is a great solution. In practice it is meaningless, as it 
is not safe from errors from the OTP team. Unexpected incompatibilities 
or simply bugs may be (and are) introduced in any release.

The OTP team is already trying to avoid breaking things when possible 
(utf-8), but sometimes this is not possible (-callback), perhaps because 
it couldn't be planned long enough, and sometimes they unexpectedly 
introduce bugs (SSL ciphers).

There is no good solution, things will always break as long as they're 
evolving.

Taking care of these errors is not much extra work either, because if 
you are saying you support R15B+, then you better test your project 
using all these supported releases one by one (throw in maint and master 
too, it helps seeing issues coming and prevent OTP from breaking your 
project as you can provide feedback or act upon it long before release).

I am using this small script, personally: 
https://github.com/extend/cowboy/blob/master/all.sh

In less than 10 minutes I know what works and what breaks across all 
supported versions. If I made the mistake of using binary_to_integer/1, 
then I see it immediately. If something changed in master and breaks my 
code, then I see it immediately too. (There still are some tests failing 
due to the utf-8 change, I haven't pushed the "fix" yet, for example.)

If I were to have a specific branch for a version of Erlang then I would 
just have to do a small modification to that script. When I add Windows 
support then same deal. I will probably end up with a 100-lines script 
to run tests across all supported platforms and versions, plus a 
20-lines script per R<X>B branch to convert the master code to code that 
works on that specific version of Erlang.

It's very manageable, and not only will I know for sure the code works 
fine on all versions, but I will also be able to deal with issues that 
may arise in OTP and either provide feedback quickly or fix it in my 
source in time for release.

As this is something that I am now doing across many of my projects, 
this is definitely something that may land in erlang.mk in the future.

-- 
Loïc Hoguin
http://ninenines.eu



More information about the erlang-questions mailing list