Skip to content

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]

Latest

Choose a tag to compare

Consolidated 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-eanet2 remains the current release and the in-app catalog default. These wcp install into a new coexisting <version>-arm64ec-5 slot next to any eanet2 -4 layer — nothing is overwritten. Existing containers keep working; create a fresh container on the -5 layer 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

  • 🛡️ RtlIsEcCode bounds check (all layers) — Wine's arm64ec RtlIsEcCode had 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; RtlIsEcCode read past the bitmap, faulted inside ntdll, 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 returns FALSE, 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 registry Audio=directaudio; pulse/alsa remain the default. Verified compiled into every layer's winedirectaudio.so.
  • 📦 One wcp per layer — the build is 16 KB-page-aligned (unix loaders LOAD align 0x4000) and serves both 4 KB- and 16 KB-page devices, replacing the previous sdk28 / sdk35 pair. 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-5 next to eanet2's -4.
  • ♻️ Carried over from eanet2 — ws2_32 dual-stack DNS (AI_V4MAPPED / AI_ALL emulation) · nsiproxy default route (WINE_ANDROID_GATEWAY) · gdiplus span clamp (Wine 11 layers) · realized-font-handle cap 32768 · GE game-fix tiers · SD-card boot fix (noexec / force_anon) · drive-root copy fix · C.UTF-8 locale · WINEVMEMMAXSIZE cap · 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-fixesmaplestory · dai_xinput · eac · pso2 · assettocorsa · silence-starcitizen · vgsoh · WM_ACTIVATEAPP

ℹ️ GE dropped its battlenet workaround upstream in GE-Proton11-6, so this layer's game-fix set is the 11.0-5 tier minus battlenet. 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-fixesbattlenet · 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-fixesbattlenet · 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_driver unixlib 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-gameinput patch is intentionally omitted — our Valve Proton 10.0 base already ships dlls/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).