Repository navigation
Document that the pinned .NET 11 preview SDK cannot run on Bionic-only hosts #1226
Description
What would you like to see in the repo docs? The pinned .NET 11 preview SDK cannot be installed on a Bionic-only host, and I could not find that written down anywhere. Raising it because I hit it hard while trying to build this repo on a phone, and the failure mode is misleading.
The constraint
global.json pins:
{ "sdk": { "version": "11.0.100-preview.3.26207.106", "rollForward": "latestMajor" } }The official SDK tarballs and dotnet-install.sh are glibc binaries. On a host whose loader is Bionic they install cleanly and then do not run.
What I verified on an aarch64 Termux/Android host
| Check | Result |
|---|---|
dotnet-install.sh --version 11.0.100-preview.3.26207.106 |
"Installation finished successfully" |
./.dotnet/dotnet --version |
cannot execute: required file not found |
| ELF interpreter the muxer requests | /lib/ld-linux-aarch64.so.1 (glibc) |
glibc libc.so.6 on the device |
none |
| System loader on the device | /system/bin/linker64 (Bionic) |
dotnet-sdk-10.0 from the distro |
works — it is a Bionic build |
So the install succeeds and the failure only appears on first run, which reads like a corrupt download rather than an ABI mismatch.
What does not help
patchelf-ing the muxer to the Bionic loader. The glibc runtime itself is absent, so there is nothing to point at.rollForwardinglobal.json. That selects SDK versions, not the ABI.- Installing a different SDK version.
dotnet-sdk-10.0runs and buildsnet10.0, but it does not satisfy thisglobal.json, so the repo still will not build.
Environments that do work
- GitHub Codespaces / Actions —
actions/setup-dotnet@v5withglobal-json-file: global.json. This is what CI uses and it is the green path. - Docker —
mcr.microsoft.com/dotnet/sdk:11.0-previewis glibc-based and resolves the pinned preview. - WSL 2 — real glibc userspace, the preview runs.
- Any glibc Linux, x64 or arm64, real or VM.
For a phone, the route that worked for me was a glibc guest under PRoot (Ubuntu 24.04, glibc 2.39), which needs three settings because PRoot blocks .NET's default virtual-address reservation:
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 # no libicu in a minimal rootfs
export DOTNET_GCHeapHardLimit=134217728 # 128 MiB hard GC limit
ulimit -v 8388608 # cap virtual memory at 8 GiBWithout them the runtime aborts with GC: Reserving 274877906944 bytes ... failed / 0x8007000E.
The suggestion
Not a new docs/ file — @AbhitejJohn pointed out on #1036 that platform notes belong in the README or contributing docs. My instinct is a short subsection in CONTRIBUTING.md under development setup, because the reader who hits this is a contributor trying to build, not someone reading the README. Something like a "supported build environments" note plus the one-line fact that the pinned preview is glibc-only.
Happy to send a small PR against main for whatever shape you prefer, and I am happy to drop the PRoot detail entirely if it is too niche for a shared doc — the useful part is really just "the pinned SDK is glibc-only; use Codespaces, Docker, WSL 2 or a glibc VM".
Activity