Skip to content

Make OTP 27 the minimum supported version and deprecate OTP 26 - #2462

Merged
bettio merged 4 commits into
atomvm:release-0.7from
bettio:bump-otp-min-version-to-27
Nov 3, 2026
Merged

bettio merged 4 commits into
atomvm:release-0.7from
bettio:bump-otp-min-version-to-27

Conversation

@bettio

@bettio bettio commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

OTP 27 made the no_init_yregs, no_make_fun3, r22 and r23 compiler
options obsolete, and they were the only way for OTP 26 to emit
allocate_zero, kill and make_fun2, which are removed. BEAM files
compiled by OTP 26 with default options keep working, so OTP 26 is
still tested in CI by two jobs (Linux with Elixir 1.17 and the BEAM
test run). The other OTP 26 jobs are removed, and the compiler and
macOS matrices now test OTP 27, 28 and 29.

These changes are made under both the "Apache 2.0" and the "GNU Lesser General
Public License 2.1 or later" license terms (dual license).

SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later

@bettio
bettio changed the base branch from main to release-0.7 November 1, 2026 17:46
Comment thread .github/workflows/build-and-test.yaml Outdated
# We only test several OTP versions with default compilers for supported OSes (gcc 11, gcc 13, clang 14, clang 18)
cc: ["gcc-11", "gcc-13", "clang-14", "clang-18"]
otp: ["26", "27", "28"]
otp: ["27", "28"]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we do 27/28/29 then?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

with:
otp-version: ${{ matrix.otp }}
rebar3-version: ${{ fromJSON('{"26":"3.25.1","27":"3.25.1","28":"3.26"}')[matrix.otp] || '3' }}
rebar3-version: ${{ fromJSON('{"27":"3.25.1","28":"3.26"}')[matrix.otp] || '3' }}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we do 27/28/29?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

@bettio bettio changed the title Make OTP 27 the minimum supported version and deprecate OTP 26. Make OTP 27 the minimum supported version and deprecate OTP 26 Nov 2, 2026
OTP 27 made the no_init_yregs, no_make_fun3, r22 and r23 compiler
options obsolete. They were the only way an OTP 26 compiler could emit
allocate_zero, kill (init) and make_fun2: with default options OTP 26
already emits init_yregs and make_fun3, like newer releases. Remove the
three opcodes, which no supported compiler produces anymore.

BEAM files compiled by OTP 26 with default options keep loading, so
OTP 26 becomes deprecated rather than unsupported. Support for the
legacy options was already incomplete: no_init_yregs also emits
allocate_heap_zero, which was removed with the OTP 26 bump.

test_make_fun2 and test_allocate_zero only existed to make OTP 26 emit
the removed opcodes. Without those options they would only duplicate
the make_fun3 and init_yregs coverage of the rest of the test suite.

Signed-off-by: Davide Bettio <davide@uninstall.it>
OTP 26 is deprecated, so testing it with every compiler and on every
macOS runner no longer pays off. Keep one Linux build with Elixir 1.17,
the oldest tested Elixir, and the OTP 26 BEAM run, so changes that
break OTP 26 are still caught.

Every compiler, runner and Elixir version used by the removed jobs is
still tested with OTP 27.

Signed-off-by: Davide Bettio <davide@uninstall.it>
Keep OTP 26 listed as deprecated but still tested. The README range
was also stale: it still mentioned OTP 21 and claimed OTP 29 was only
supported on main.

Signed-off-by: Davide Bettio <davide@uninstall.it>
OTP 29 gets rebar3 3.27.0, the version the OTP 29 JIT job already
uses.

Signed-off-by: Davide Bettio <davide@uninstall.it>
@bettio
bettio force-pushed the bump-otp-min-version-to-27 branch from 799e8b0 to 29da620 Compare November 3, 2026 13:28
@bettio
bettio merged commit 4e6fb72 into atomvm:release-0.7 Nov 3, 2026
215 of 219 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants