Our great sponsors
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
> Part of me thinks the solution to some of these trenchant apps is to make a FUSE pass through filesystem driver that has silent redirects.
LD-preload-open* can be used for this, but it has some potential problems: https://github.com/fritzw/ld-preload-open/tree/master#potent...
*: https://github.com/fritzw/ld-preload-open
For games, I think it's even worse on GNU/Linux systems, since most game developers mainly target Windows and sometimes completely ignore conventions for other platforms (possibly since some game engines have that "Build for Linux" button).
This also applies to game engines and their own conventions. For example Unity has Application::persistentDataPath[1], which uses $XDG_CONFIG_HOME (still a bit meh, since I wouldn't treat savefiles as "config", but at least some convention). However, some games tend to write those into Application::dataPath[1] (or even other random directories they see fit), which is supposed to be read-only and could possibly be outside of $HOME.
Fortunately the single one advantage of antivirus software out there seems to be that the above seems to break with some AV, so developers either tell their players to disable AV or they simply fix the issue. I made countless bug reports on this issue and so far it exclusively got fixed because of AV, so I'm using that as an argument for future reports.
While at least most of the Unity games I've packaged seem to adhere to these conventions, other games and game engines are a mixed bag and I've seen games dumping their stuff into $PWD to games writing to Windows paths (eg. /home/foo/SomeVendor\Somegame).
Patching these games is also very tedious, since some of them tend to get updates, so patching needs to be done in a way to be forward-compatible.
For example here is a patcher I wrote to get Factorio to adhere to XDG:
https://github.com/openlab-aux/vuizvui/blob/4690494feee20a62...
Here is an example for patching a Unity3d game that writes to Application::dataPath:
https://github.com/openlab-aux/vuizvui/blob/4690494feee20a62...
[1]: https://docs.unity3d.com/ScriptReference/Application-persist...
[2]: https://docs.unity3d.com/ScriptReference/Application-dataPat...
Definitely not elegant. https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-supp...
I rather have a kernel-level filesystem remapper.
Open since 2016! https://github.com/electron/electron/issues/8124
Regardagin cargo (and other tools), I've had some success with following suggestions from https://github.com/b3nj5m1n/xdg-ninja