Yeah, thanks for the excellent linux support!
I'm a little worried about the libX11 etc. dependencies. They are no problem now, but in a few years this might be considered deprecated and we need some ugly XWayland compat layer
to play factorio and can't get rid of good old X. As I understand it, factorio uses allegro for drawing and other low-level stuff.
Would it be difficult for devs
to provide factorio as a dynamically linked (against allegro) binary, getting rid of all direct dependencies on libX*? That way, in case a wayland-supporting allegro library emerges in the distant future, we could still use factorio and have it communicate with the display manager natively. Of course, keep the user-friendly statically linked binary as the "main" download. Or maybe the allegro .so can be included and dynamically linked against in the main tarball, which would still allow users
to replace that .so with some future wayland-enabled allegro lib.
Of course, allegro might be considered deprecated by the time wayland hits mainstream distros. This is the big big issue with Linux software, APIs are just too unstable everywhere so that makes it difficult
to keep up even for open-source projects where everyone could adapt the code
to new APIs. I still think it's easier
to adapt the (then possibly deprecated) liballegro interfaces
to some new technology than it is
to create a libX11 shim that uses wayland behind the curtain (basically what XWayland is supposed
to do AFAIK, but then we can't get rid of X). Basically, the simpler the API the factorio binary links against dynamically, the easier it should be
to keep supporting it. And libX11 is.. well, a mess.
For example, these are the dependencies of Cities in Motion (1) and as you can see, no libX* depends, just SDL2 (which already supports wayland and Ubuntu Mir AFAIK). In this case, the libSDL2 so file is shipped with the game in a "lib" directory, and as you can see they added that lib directory as an RPATH so the dynamic loader will load the library from there. It's almost as user-friendly and failsafe as statically linking (unless someone removes the lib/ directory for whatever reason), AFAICT the main difference being that we can swap the library with some modified self-compiled blob if we want
to, which is great.
Code: Select all
0x00000001 (NEEDED) Shared library: [libGL.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libSDL2-2.0.so.0]
0x00000001 (NEEDED) Shared library: [libz.so.1]
0x00000001 (NEEDED) Shared library: [libfmodex-4.36.21.so]
0x00000001 (NEEDED) Shared library: [libsteam_api.so]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000f (RPATH) Library rpath: [$ORIGIN/lib]