Public bug reported:

("Unity" here refers to the video game engine at https://unity3d.com/ and not 
Ubuntu's Unity project.)

There is a bug in SDL2 that causes Unity-based games to fail in certain
configurations. The basic idea is that Unity is statically linked to
SDL, and then a plugin also links dynamically to SDL, and the
dynamically loaded version accidentally resolves an important symbol to
the address in the statically linked version, causing chaos.

You can see this happen in the game Firewatch (
https://store.steampowered.com/app/383870/Firewatch/ ).

This bug will trigger if the game dynamically loads an SDL2 version >
2.0.5. Steam ships their own copy of SDL in their "steam runtime," but
will favor a system-installed version if available, which means that
Ubuntu is probably having this problem for users that have the libsdl2
package installed since release 17.10, which is the first to ship SDL
2.0.6.  Debian Stretch is still on 2.0.5 and probably not triggering
this bug quite yet.

The upstream fix is simple, and should apply cleanly to any SDL version
that is 2.0.3 or later.

https://hg.libsdl.org/SDL/rev/7babfecee045

I _think_ all Unity titles are x86-64 binaries, so this doesn't affect
every architecture, but the SDL2 patch is correct for any target worth
pushing an update for.

This fix will be in SDL 2.0.9, but we don't have a timetable for that
release yet, so I thought it might be worth encouraging distros to apply
that one patch to their current SDL2 packages in the meantime, to make
sure Firewatch and other games work out of the box.

Steps to Reproduce:
1. Install x86-64 Ubuntu 17.10 or later
2. Install Ubuntu's libsdl2 package.
3. Install Steam ( https://store.steampowered.com/ or maybe a distro-specific 
package )
3. Install Firewatch via Steam (if you need a copy, we can supply it)
4. Launch Firewatch

Actual Results:  
Game launches, possibly makes an OpenGL window without rendering anything into 
it, and then either crashes or hangs indefinitely. Be prepared to kill the 
process if necessary.

Expected Results:  
Game launches and gets to its main menu.

One can also bypass this bug with the environment variable
SDL_DYNAMIC_API=/path/to/where/ubuntu/installed/libSDL2-2.0.so.0, but
we'd encourage you to just update the SDL package with the patch.

Thanks for your time!

--ryan.

** Affects: libsdl2 (Ubuntu)
     Importance: Undecided
         Status: New

** Patch added: "The upstream patch, attached here for completeness."
   
https://bugs.launchpad.net/bugs/1772471/+attachment/5142493/+files/SDL2-dynapi-symbol-resolution-fix.diff

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1772471

Title:
  Bug in SDL2 blocks Unity-based games

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libsdl2/+bug/1772471/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to