Hello @DrBiscuits, we're using one issue report per unofficially supported game title, so I've gone ahead and transferred this issue report to https://github.com/ValveSoftware/Proton/issues/4450#issuecomment-4039923065.
proton experimentalx1 2026-03STEAM_COMPAT_DATA_PATHx1 2026-03STEAM_COMPAT_DATA_PATH=<ext4_path>/compatdata/<APPID>x1 2026-03
Compatibility Report
System Information
I confirm:
Symptoms
Game crashes immediately on launch. Steam briefly shows the game as running
(Play button changes to Stop) then returns to Play within a few seconds. No
game window appears.
The root cause is a regression in the kernel 6.18
ntfs3driver that breaksProton's
gamedrivecompatibility option when the Wine prefix (compatdata/)is stored on an NTFS partition. The following error appears in Steam's console
log:
Root cause: The
gamedriveoption causes Proton to manage adosdevices/s:symlink that maps the
S:drive letter to the game's Steam library. On NTFS,symlinks are stored as files with an
IntxLNKmagic header. In kernel 6.17and earlier,
ntfs3exposed these to userspace as proper Linux symlinks —os.path.islink()returnedTrueandos.readlink()worked correctly. Inkernel 6.18,
ntfs3exposes them as regular files, soos.path.islink()returns
Falseandos.readlink()raisesEINVAL.Proton's
setup_dir_drive()callsos.path.lexists()(which still returnsTrue) and then unconditionally callsos.readlink(), which now raisesEINVALand crashes the Proton process before the game starts.This only affects games that have
gamedrivein their Proton compat options(visible in
compatdata/<APPID>/config_info). Games without this flag nevercall
setup_game_dir_drive()and are unaffected.Reproduction
gamedrivein its compat options)to a Steam library on an NTFS partition mounted via the
ntfs3kernel driver.compatdata/<APPID>/) is also on the NTFSpartition (the default when the game library is on NTFS).
Workaround: Move the Wine prefix off the NTFS partition to a native Linux
filesystem and point Proton to it via the
STEAM_COMPAT_DATA_PATHlaunchoption:
Then set the game's Steam launch option to:
Suggested fix: In
setup_dir_drive(), catchEINVALfromos.readlink()and treat it the same as the file not existing (i.e. remove and recreate), or
check
os.path.islink()before callingos.readlink().