Is it possible to connect two Erlang nodes running different versions of OTP?

I’ve read thru the Erlang documentation for Distributed Erlang but haven’t had any luck finding my answer. I don’t know if inet_tcp_dist will simply refuse to connect to a node from a different OTP version, or if it has its own protocol version that increments at a different cadence than OTP releases. Ditto for other distribution protocols, like inet_tls_dist.

If the built in distribution protocols do not support connecting nodes across versions, I would imagine it’s possible to develop a custom carrier that supported it, right? As long as you accept that you’ll have to find a way to translate any incompatible semantics between versions.

Support, Compatibility, Deprecations, and Removal states:

Erlang Distribution - Erlang nodes can communicate across at least two preceding and two subsequent releases.

should be fine if you are in the supported version range.

4 Likes

Try Distribution Protocol — erts v15.2.3 instead. I couldn’t find any general statement of supported version ranges during a quick scan of that, but in general I’d expect a two major version difference to be supported.

3 Likes

Thank you both of you! This is a helpful resource.

I’d just point point that you can communicate with two previous major releases at max, but not by default. You need to set +R emulator flag properly. E.g. if you’re running OTP27 and want to communicate with OTP25/26/27, you need to set +R 25 when starting a node.

It is not needed to set that flag, the Erlang distribution will automatically figure out how to talk to older released. That flag was added roughly 20 years ago and I don’t think it has had any purpose for atleast 12 years. I’ll see if we can remove it alltogether to remove any confusion.

7 Likes

That’s nice. The docs says that “The distribution mechanism is not backward compatible by default.” so we need to at least remove that from the docs, but removing the flag entirely would be the best option.

PR with removal: erts: Remove +R from documentation by garazdawi · Pull Request #9608 · erlang/otp · GitHub

3 Likes