Bug 508718

Summary: libKF6BreezeIcons.so is not reproducible
Product: [Plasma] Breeze Reporter: Arnout Engelen <kde>
Component: IconsAssignee: visual-design
Status: RESOLVED FIXED    
Severity: normal CC: christoph, kainz.a, m, nate
Priority: NOR    
Version First Reported In: 6.4.4   
Target Milestone: ---   
Platform: NixOS   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Arnout Engelen 2025-08-25 15:06:04 UTC
SUMMARY

When building breeze-icons from source twice, libKF6BreezeIcons.so is not always bit-by-bit identical. This is an attractive property because it allows more easy verification of build artifacts, for more details see https://reproducible-builds.org .

STEPS TO REPRODUCE
1. Build breeze-icons
2. store libKF6BreezeIcons.so
3. Build breeze-icons cleanly again

OBSERVED RESULT

libKF6BreezeIcons.so is different, specifically https://reproducible.nixos.org/diffoscope/breeze-icons-adaa24fbf467/

EXPECTED RESULT

libKF6BreezeIcons.so is identical

ADDITIONAL INFORMATION

This started being nondeterministic somewhere between 6.2.0 and 6.3.0, but also confirmed on 6.14.0 and 6.17.0

It seems perhaps resources are embedded in a nondeterministic order
Comment 1 Bug Janitor Service 2025-08-25 15:33:40 UTC
Thank you for the bug report!

However Plasma 6.3.0 no longer receives updates or maintenance from KDE; active versions are 6.4 or newer. Please upgrade to an active version as soon as your distribution makes it available to you. Plasma is a fast-moving project, and bugs in one version are often fixed in the next one.

If you need help with Plasma 6.3.0, please contact your distribution, who bears the responsibility of providing help for older releases that are no longer receiving updates from KDE.

If you can reproduce the issue after upgrading to an active version, feel free to re-open this bug report.
Comment 2 Arnout Engelen 2025-08-25 16:03:29 UTC
Reopening with an updated 'Version First Reported In' to avoid the bot from closing it.

As said I confirmed the issue is still there on versions 6.14.0 and 6.17.0, but those are not in the tag lists it seems.
Comment 3 Arnout Engelen 2025-08-26 10:36:46 UTC
I wonder if this might be due to the use of the unsorted QDirIterator (as opposed to e.g. QDir::entryList) in qrcAlias.cpp. That does seem to have received significant changes between 6.2.0 and 6.3.0.
Comment 4 Christoph Cullmann 2025-08-27 11:07:49 UTC
Can you try if sorted iterators fix it?
Comment 5 Christoph Cullmann 2025-08-27 21:52:44 UTC
Ok, reading the docs one can not tell it to sort. We could collect the output and just sort that before writing the qrc.
Comment 6 Arnout Engelen 2025-08-30 10:57:48 UTC
That seems reasonable, https://invent.kde.org/frameworks/breeze-icons/-/merge_requests/496
Comment 7 Christoph Cullmann 2025-08-30 15:21:44 UTC
Git commit 0c7550acd879d2cfa70a36ac093b7aceb18ae0a6 by Christoph Cullmann, on behalf of Arnout Engelen.
Committed on 30/08/2025 at 15:21.
Pushed by cullmann into branch 'master'.

Sort generated qrc

For reproducible builds (https://reproducible-builds.org)

Sadly I don't have a particularly strong reproducer for this problem, but testing manually with disorderfs and inspecting the results \_suggests\_ this does the trick.

M  +16   -10   src/tools/qrcAlias.cpp

https://invent.kde.org/frameworks/breeze-icons/-/commit/0c7550acd879d2cfa70a36ac093b7aceb18ae0a6