GE-Proton 11.0-6 / 11.0-5 / 11.0-3 / 10.0-34 · Proton 11.0-1 / 11.0-2 / 10.0-4 — arm64ec bionic 20260907 (RtlIsEcCode bounds check · Denuvo unwind fix · DirectAudio 1.3.2 · single 4 KB + 16 KB-page wcp · EA fixes · font-handle cap 32768) [PRE-RELEASE]
LatestConsolidated arm64ec (bionic) build of all seven Proton / GE-Proton layers, rebuilt from the build-bionic-layers-20260906-eanet2 sources — all of the EA fixes have now landed on the seven proton_* parent branches, so this cut is built straight from those branches — plus one Wine ntdll fix: a bounds check in arm64ec RtlIsEcCode that stops the nested-exception loop the unwinder fell into on Denuvo-protected frames (Need for Speed Heat). Every layer is a single .wcp that runs on both 4 KB- and 16 KB-page devices. Proton 11.0-2 additionally ships an x86_64 build alongside arm64ec.
🧪 This is a pre-release.
build-bionic-layers-20260906-eanet2remains the current release and the in-app catalog default. These wcp install into a new coexisting<version>-arm64ec-5slot next to any eanet2-4layer — nothing is overwritten. Existing containers keep working; create a fresh container on the-5layer to test.Device-proven (4 KB-page device): Need for Speed Heat (Denuvo, EA-app era) reached gameplay on the GE-Proton 11.0-6 wcp from this build, on a fresh container, together with FEXCore nightly 2608+45. FEX 2608+229 has a separate regression that faults inside Denuvo's runtime, so use +45 for EA / Denuvo titles until the app pins it. The 16 KB-page boot of these wcp has not been tested yet — no 16 KB device was available.
What's new
- 🛡️
RtlIsEcCodebounds check (all layers) — Wine's arm64ecRtlIsEcCodehad no bounds check on the EC code bitmap. When the exception unwinder walked a frame without unwind info (Denuvo-protected code in NFS Heat) it produced a garbage pc;RtlIsEcCoderead past the bitmap, faulted insidentdll, and the nested access violation at the same pc repeated until the stack overflowed → black screen. Any pointer outside the 47-bit user address space now returnsFALSE, as Windows does. Applies to the arm64ec builds; the x86_64 build has no EC code path. - 🔊 DirectAudio v1.3.2 — adds opt-in microphone capture (
BANNER_AUDIO_DIRECT_MIC=1). Playback stays opt-in via registryAudio=directaudio; pulse/alsa remain the default. Verified compiled into every layer'swinedirectaudio.so. - 📦 One wcp per layer — the build is 16 KB-page-aligned (unix loaders
LOADalign0x4000) and serves both 4 KB- and 16 KB-page devices, replacing the previoussdk28/sdk35pair. Booting on a 4 KB device is device-proven; a 16 KB device boot is still untested. - 🔢 versionCode → 5 on every layer — new coexisting install slot
<version>-arm64ec-5next to eanet2's-4. - ♻️ Carried over from eanet2 — ws2_32 dual-stack DNS (
AI_V4MAPPED/AI_ALLemulation) · nsiproxy default route (WINE_ANDROID_GATEWAY) · gdiplus span clamp (Wine 11 layers) · realized-font-handle cap32768· GE game-fix tiers · SD-card boot fix (noexec/force_anon) · drive-root copy fix ·C.UTF-8locale ·WINEVMEMMAXSIZEcap · fast-yield gate · FEX-unixlib loader · XRandR / XRender.
Scope of the changes versus eanet2: PE-side ntdll.dll (dlls/ntdll/signal_arm64ec.c) on every layer, DirectAudio 1.3.1 → 1.3.2, and the single-wcp packaging / versionCode stamp. No FEX, DXVK or other PE changes.
Layers
GE-Proton 11.0-6 · arm64ec · Wine 11 · versionCode 5
| Base | GloriousEggroll GE-Proton11-6 game-fix tier on Valve Proton 11.0-1 (Wine 11.0-1) |
| Installs as | 11.0-6-arm64ec-5 |
| ntdll fix | RtlIsEcCode bounds check (Denuvo unwind loop) |
| EA fixes | ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp |
| DirectAudio | v1.3.2 (vendored source) — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1 |
| Assets | GE-proton-11.0-6-arm64ec.wcp (4 KB + 16 KB pages) |
Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build — -g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — maplestory · dai_xinput · eac · pso2 · assettocorsa · silence-starcitizen · vgsoh · WM_ACTIVATEAPP
ℹ️ GE dropped its
battlenetworkaround upstream in GE-Proton11-6, so this layer's game-fix set is the 11.0-5 tier minusbattlenet. This is the layer the NFS Heat / Denuvo fix was device-proven on.
GE-Proton 11.0-5 · arm64ec · Wine 11 · versionCode 5
| Base | GloriousEggroll GE-Proton11-5 game-fix tier on Valve Proton 11.0-1 (Wine 11.0-1) |
| Installs as | 11.0-5-arm64ec-5 |
| ntdll fix | RtlIsEcCode bounds check (Denuvo unwind loop) |
| EA fixes | ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp |
| DirectAudio | v1.3.2 (vendored source) — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1 |
| Assets | GE-proton-11.0-5-arm64ec.wcp (4 KB + 16 KB pages) |
Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build — -g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — battlenet · maplestory · dai_xinput · eac · pso2 · assettocorsa · silence-starcitizen · vgsoh · WM_ACTIVATEAPP
GE-Proton 11.0-3 · arm64ec · Wine 11 · versionCode 5
| Base | GloriousEggroll GE-Proton11-3 game-fix tier on Valve Proton 11.0-1 (Wine 11.0-1) |
| Installs as | 11.0-3-arm64ec-5 |
| ntdll fix | RtlIsEcCode bounds check (Denuvo unwind loop) |
| EA fixes | ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp |
| DirectAudio | v1.3.2 — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1 |
| Assets | GE-proton-11.0-3-arm64ec.wcp (4 KB + 16 KB pages) |
Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build — -g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — battlenet · maplestory · dai_xinput · eac · pso2 · assettocorsa · silence-starcitizen · vgsoh · WM_ACTIVATEAPP
Proton 11.0-1 · arm64ec · Wine 11 · versionCode 5
| Base | Stock Valve Proton 11.0-1 (Wine 11.0-1) — plain Proton, no GE game-fixes |
| Installs as | 11.0-1-arm64ec-5 |
| ntdll fix | RtlIsEcCode bounds check (Denuvo unwind loop) |
| EA fixes | ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp |
| DirectAudio | v1.3.2 — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1 |
| Assets | proton-11.0-1-arm64ec.wcp (4 KB + 16 KB pages) |
Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build — -g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — none (plain Proton)
Proton 11.0-2 · arm64ec + x86_64 · Wine 11 · versionCode 5
| Base | Stock Valve Proton 11.0-2 (Wine 11) — plain Proton, no GE game-fixes |
| Installs as | 11.0-2-arm64ec-5 · 11.0-2-x86_64-5 |
| ntdll fix | RtlIsEcCode bounds check (Denuvo unwind loop) — arm64ec build only; the x86_64 build has no EC code path |
| EA fixes | ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp (both architectures) |
| DirectAudio | v1.3.2 — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1 (both architectures) |
| Assets | arm64ec: proton-11.0-2-arm64ec.wcp (4 KB + 16 KB pages) · x86_64: proton-11.0-2-x86_64.wcp (4 KB-page build) |
Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build — -g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — none (plain Proton)
⚠️ The x86_64 wcp carries the same fixes, but Proton 11 under box64 currently does not render a window — use the arm64ec build, which is the proven runtime. The x86_64 asset is published for completeness / testing; it is the 4 KB-page (sdk28) build only.
Proton 10.0-4 · arm64ec · Wine 10 · versionCode 5
| Base | Stock Valve Proton 10.0-4 (Wine 10) — plain Proton, no GE game-fixes |
| Installs as | 10.0-4-arm64ec-5 |
| ntdll fix | RtlIsEcCode bounds check (Denuvo unwind loop) |
| EA fixes | ws2_32 dual-stack DNS · nsiproxy default route (Wine 10's gdiplus has no span assertion — no clamp needed) |
| DirectAudio | v1.3.2 Wine-10 ABI port — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1 |
| Assets | proton-10.0-4-arm64ec.wcp (4 KB + 16 KB pages) |
Android compatibility fixes — SD-card boot (force_anon, GameNative's original Wine-10 diff) · drive-root copy · C.UTF-8 locale (fixes authored against the Wine-10 tree)
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build — -g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — none (plain Proton)
ℹ️ The DirectAudio mainline is Wine-11-only (it drops the
midi_get_driverunixlib guard); this layer ships the Wine-10-guarded 1.3.2 build so the same feature set works on Wine 10.
GE-Proton 10.0-34 · arm64ec · Wine 10 · versionCode 5
| Base | Valve Proton 10.0-4 (Wine 10) with the GE-Proton10-34 game-fix tier layered on (GE's game-patch files only, not GE's Wine tree) |
| Installs as | 10.0-34-arm64ec-5 |
| ntdll fix | RtlIsEcCode bounds check (Denuvo unwind loop) |
| EA fixes | ws2_32 dual-stack DNS · nsiproxy default route (Wine 10's gdiplus has no span assertion — no clamp needed) |
| DirectAudio | v1.3.2 Wine-10 ABI port — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1 |
| Assets | GE-proton-10.0-34-arm64ec.wcp (4 KB + 16 KB pages) |
Android compatibility fixes — SD-card boot (force_anon, Wine-10 diff) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build — -g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes (10 — superset)
- GE-Proton10-34 tier:
assettocorsa·dai_xinput·eac·pso2·silence-starcitizen·vgsoh - plus our extras:
battlenet·maplestory-charprev·maplestory-stickykeys·WM_ACTIVATEAPP
ℹ️ GE-Proton10-34's
lemansultimate-gameinputpatch is intentionally omitted — our Valve Proton 10.0 base already shipsdlls/gameinput, so GE's stub is redundant/conflicting.
Installation
Each layer is a single .wcp — install the one matching your Proton / GE version. There is no longer an sdk28 / sdk35 choice: the same file serves 4 KB- and 16 KB-page devices (4 KB boot device-proven; 16 KB boot untested).
Proton 11.0-2 additionally offers an x86_64 wcp — but Proton 11 under box64 does not currently render a window, so use the arm64ec build unless you are specifically testing x86_64.
Create a fresh container on the new <version>-5 slot. Existing eanet2 (-4) and fontcap (-2) containers keep working unchanged. For EA / Denuvo titles pair the layer with FEXCore nightly 2608+45.
Built from: proton_11.6-GE feb93aa6 · proton_11.5-GE b0a5cf01 · proton_11.3-GE 8c15a108 · proton_11.0 20567cf9 · proton_11.0-2 38369113 · proton_10.34-GE cc0a705b · proton_10.0 e24b39e3 (CI runs 34086696510 · 34086700188 · 34086703097 · 34086705654 · 34086709491 · 34086637460 · 34086647762, all green).