Package: release.debian.org
Severity: normal
X-Debbugs-Cc: [email protected], 
[email protected]
Control: affects -1 + src:sdl2-compat
User: [email protected]
Usertags: transition

SDL upstream is in the process of phasing out "classic" src:libsdl2 (an 
independent library), replacing it with src:sdl2-compat (a compatibility 
shim which dlopens libsdl3 and uses it to implement the SDL 2 API/ABI).  
This is very similar to the transition from src:libsdl1.2 to 
src:sdl12-compat that we did in trixie 
(https://bugs.debian.org/1039911). Faster-moving distributions like Arch 
and Fedora have already made this switch, and I think it's time for 
Debian to do the same.

This is a "soft" transition with no SONAME bump: the new library is 
intended to be fully API- and ABI-compatible with the old (same SONAME, 
same pkg-config module name, same CLI interface to the legacy 
sdl2-config script, different implementation internally), so it's more 
like an unusually intrusive minor-version release. After approving the 
transition, the release team will hopefully not need to take any further 
action.

src:sdl2-compat in experimental already implements the proposed design.

I intend to keep src:libsdl2 in the archive, at least initially: that 
way, users who encounter a regression can install the libsdl2-classic 
package and force its use via environment variables as documented in 
<https://salsa.debian.org/sdl-team/sdl2-compat/-/blob/debian/snapshots/debian/README.Debian?ref_type=heads>.
  
It should probably be removed before forky+1, or perhaps before forky if 
the transition goes particularly well.

Risks
=====

I did a mass-rebuild, partly on debusine and partly locally or on 
porterboxes. All 3 FTBFS bugs found (test failures) have been fixed by 
improvements to the affected packages. I've also tested an assortment of 
SDL 2 games (and SDL 1.2 games via sdl12-compat), and asked -devel and 
the games team to help with testing (back in September 2025) with no 
regressions reported as a result.

As with the SDL 1.2 transition, it isn't really feasible for me to test 
every SDL 2 game myself, and I generally haven't been testing non-game 
applications that use SDL (many of which are emulators requiring ROMs 
that I don't have, or specialized music apps that I don't know how to 
use).

Known regressions are listed here, and at the time of writing have all 
been fixed: 
<https://bugs.debian.org/cgi-bin/[email protected];tag=regression>

The API/ABI is the same, but there are various subtle behaviour changes 
between libsdl2 and sdl2-compat that could break games' expectations 
(especially if they are relying on behaviours that were never intended 
to be guaranteed), either as a result of intentional changes or as a 
result of SDL bugs. The ones I know about are:

* "Classic" SDL 2 defaults to X11, via Xwayland if necessary.
  sdl2-compat defaults to native Wayland if a sufficiently capable
  compositor is detected. This will break games that blindly assume
  that Unix implies X11, and could also expose Wayland-related bugs that
  were previously hidden, such as <https://bugs.debian.org/1124335>. The
  correct fix for a game that assumes X11 is to make the game tell SDL
  "use only X11", but for proprietary games or games that are otherwise
  hard to modify, sdl2-compat has a "quirks" table that can automatically
  force X11 based on the name of the executable.

* libsdl3 has a Vulkan backend for the rendering API, which sdl2-compat
  will use if appropriate. It is unlikely to be perfectly bug-for-bug
  compatible with the OpenGL or software backends. If necessary,
  sdl2-compat's quirks table can be used to work around this.

* sdl2-compat has slightly different behaviour around paletted
  (256-colour) windows and textures, which caused a regression for the
  autopkgtest and build-time tests of the SDL 1.2 Perl binding. I worked
  around this in sdl12-compat for now, but when we switch to sdl2-compat
  we'll want to do a coordinated upload of sdl12-compat reverting that
  workaround.

The only autopkgtest regression listed in 
https://qa.debian.org/excuses.php?experimental=1&package=sdl2-compat is 
for yuzu on arm64, but yuzu isn't in testing (*because* it's broken on 
arm64, in fact) so this shouldn't prevent transition.

    smcv

Reply via email to