Repository navigation
Make OTP 27 the minimum supported version and deprecate OTP 26 - #2462
Merged
Merged
Conversation
petermm
approved these changes
Nov 1, 2026
pguyot
reviewed
Nov 1, 2026
| # 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"] |
Collaborator
There was a problem hiding this comment.
Should we do 27/28/29 then?
| 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' }} |
petermm
approved these changes
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
force-pushed
the
bump-otp-min-version-to-27
branch
from
November 3, 2026 13:28
799e8b0 to
29da620
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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