Skip to content

Conversation

@shimies
Copy link

@shimies shimies commented Dec 15, 2025

Issue

On my arm64 linux (Debian Bookworm [releases]), the prebuilt binary from the GitHub Releases no longer works starting with versions 3.16.0 / 3.16.1.
This appears to be caused by a glibc version incompatibility: the arm64 binary is linked against relatively new glibc, which is actually newer than one provided by Debian Bookworm.
This PR fixes it by downgrading the runner OS for arm64 build to be ubuntu-22.04 which actually aligns with the runner OS for amd64 build.

Confirming glibc version incompatibility on my workstation

Inspecting the binary shows that it requires glibc >= 2.38:

$ nm -D bin/lua-language-server | perl -ne 'print "$1\n" if /@(GLIBC_[0-9.]+)/' | sort | uniq
GLIBC_2.17
GLIBC_2.25
GLIBC_2.29
GLIBC_2.32
GLIBC_2.33
GLIBC_2.34
GLIBC_2.36
GLIBC_2.38

However, Debian Bookworm ships with glibc of version 2.36:

$ ldd --version | grep GLIBC
ldd (Debian GLIBC 2.36-9+deb12u13) 2.36

Environment

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Root cause

The required glibc version is determined by the toolchain provided by the OS used to build the binary. From the GitHub Actions workflow, the arm64 build runs on ubuntu-24.04, while the amd64 build uses ubuntu-22.04. Since ubuntu-24.04 probably ships with a newer toolchain, the resulting arm64 binary depends on a newer glibc.

Relevant workflow snippet:

matrix:
include:
- { os: ubuntu-22.04, target: linux, platform: linux-x64 }
- { os: ubuntu-24.04-arm, target: linux, platform: linux-arm64 }

Point of discussion

  • Is there a specific reason the build OS differs between architectures (ubuntu-22.04 for amd64 vs ubuntu-24.04 for arm64)?
  • Probably since the release binaries are intended to be broadly usable, would it make sense to use a more conservative build environment for arm64 as well, incorporating this fix?

Testing

Actions' artifacts from forked repo of mine shows that the required glibc version is now 2.34 which is same required version as amd64.

Checking glibc versions the binary is linked against
$ nm -D bin/lua-language-server | perl -ne 'print "$1\n" if /@(GLIBC_[0-9.]+)/' | sort | uniq
GLIBC_2.17
GLIBC_2.29
GLIBC_2.32
GLIBC_2.33
GLIBC_2.34

@gemini-code-assist
Copy link

Note

Gemini is unable to generate a summary for this pull request due to the file types involved not being currently supported.

@CppCXY
Copy link
Member

CppCXY commented Dec 16, 2025

GitHub is constantly upgrading available system versions and deprecating older ones. What will we do in a few years when 22.04 is deprecated? Actually, I think a better approach is to introduce zigbuilder into the luals project.

@shimies
Copy link
Author

shimies commented Dec 16, 2025

@CppCXY thank you for the suggestion and the work at #3316. Not sure if it is fully tested, but as it appears to be working (is at least linked against lower version of glibc), I can close this pull-req.

Another possibility might be that, if the concern is only GitHub deprecating the runners or discontinuing their availability, we could use latest runner and specify the custom container image such as ubuntu:22.04 so that the build runs against it. The image will likely to be available and maintained longer than the GH runners.

@CppCXY CppCXY closed this Dec 16, 2025
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.

2 participants