#1106511 nhlomann-json3-dev packaging strategy to preserve ABI

#1106511#5
Date:
2025-05-25 10:26:21 UTC
From:
To:
Package: nlohmann-json3-dev
Version: 3.12.0
Severity: important

Dear Gianfranco and Hubert,

nlohmann-json3-dev 3.12 is breaking xeus ABI in a way that cannot be fixed
because nlohmann-json3-dev hardcode the version in type names which
appear as function argument of C++ symbols in the library.

Since upstream is unwilling to address the ABI problem, see
<https://github.com/jupyter-xeus/xeus/issues/381>, I offer the following path
forward.

For each upstream version $VER of nlohmann-json a new source package
"nlohmann-json$VER" and a new binary "nlohmann-json$VER-dev" is added to Debian.

When Xeus upstream bump the ABI, we also move xeus to the latest nlohmann-json$VER-dev
version so older ones can be removed from Debian.

I would suggest you start by uploading nlohmann-json3.12.0
and reuploading 3.11.3 as nlohmann-json3-dev version 3.12.0_really_3.11.3
to allow xeus to build correctly with the right ABI.

Cheers,

#1106511#10
Date:
2025-06-02 18:49:12 UTC
From:
To:
reassign 1106446 nlohmann-json3-dev
reassign 1106447 nlohmann-json3-dev
reassign 1106448 nlohmann-json3-dev
quit

Dear Gianfranco and Hubert,

I am reassigning the FTBFS to nlohmann-json3-dev.
The FTBFS need to be fixed by a new version of nlohmann-json3-dev
that restore the ABI, not by breaking the ABI of the Xeus packages, see #1106511.

At this point of the freeze there is no purpose uploading new xeus packages to
bump the Xeus ABI.

Thanks for your understanding,

Cheers,

#1106511#15
Date:
2025-09-02 19:36:13 UTC
From:
To:
Hi,

I'm just adding my two cents here because I happened to come across this
issue.
nlohmann-json3 upstream messed up their ABI versioning: by encoding the
*API* version in the inline namespace, they effectively do an *ABI* bump
with each release, because the exported symbol names will always change.

The correct approach would have been an independently versioned inline
namespace that gets bumped exactly like you would bump a library SONAME.
It would be nice if upstram could be convinced of a more reasonable
versioning scheme for their ABI namespace. Failing that, this probably
as good a solution as it gets.


Cheers
Timo