On 6/27/26 3:45 PM, Jonathan Wiltshire wrote:
On Sat, Jun 27, 2026 at 12:46:44PM -0500, Mario Limonciello wrote:


On 6/27/26 8:04 AM, Adrian Bunk wrote:
On Sat, Jun 27, 2026 at 07:49:12AM -0500, Mario Limonciello wrote:
...
So unfortunately I think this does mean a need for a rebuild and some
testing of of gnome-software, plasma-discover, and gnome-firmware to do the
upgrade.

They likely need fixes for building:
https://salsa.debian.org/qt-kde-team/kde/plasma-discover/-/commit/afca7536787af4d0f58d3aa22a9962c2265b58d5
https://salsa.debian.org/gnome-team/gnome-software/-/commit/bdfe5c691a1c3302cf61da0781b290c67f88ba6b
https://salsa.debian.org/gnome-team/gnome-firmware/-/commit/851182b25b8bd4f79d849337fa4b8cf11b47178d

cu
Adrian

Thanks Adrian for finding those.

I've got gnome-firmware building successfully, I'll attach the debdiff.

will follow up with the others later when I get them working.

Oh, I had a completely dim moment and forgot the old symbols file is
removed completely - just skimmed the new one and got confused. Sorry.

Please coordinate with affected maintainers to get things ready, and
ideally affected packages would get a versioned build-dep now which will
make things easier later. I'll get the two other libraries sorted out.

Keep me posted.

Thanks,



OK - I've got gnome-software and plasma-discover building too. Attached are the debdiffs.

Do you suggest filing a bug with all 3 packages and requesting maintainers to ack doing an NMU for their packages referencing this bug?
diff -Nru gnome-software-43.5/debian/changelog 
gnome-software-43.5/debian/changelog
--- gnome-software-43.5/debian/changelog        2023-06-16 05:33:47.000000000 
-0500
+++ gnome-software-43.5/debian/changelog        2026-06-27 13:02:08.000000000 
-0500
@@ -1,3 +1,11 @@
+gnome-software (43.5-1~deb12u2) bookworm; urgency=medium
+
+  * Add patch for fwupd 2.0 compat.
+  * d/control:
+    - b/d on newer libfwupd
+
+ -- Mario Limonciello <[email protected]>  Sat, 27 Jun 2026 13:02:08 -0500
+
 gnome-software (43.5-1~deb12u1) bookworm; urgency=medium
 
   * Team upload
diff -Nru gnome-software-43.5/debian/control gnome-software-43.5/debian/control
--- gnome-software-43.5/debian/control  2023-06-16 05:33:47.000000000 -0500
+++ gnome-software-43.5/debian/control  2026-06-27 13:02:08.000000000 -0500
@@ -16,7 +16,7 @@
                libadwaita-1-dev (>= 1.0.1),
                libappstream-dev (>= 0.14.0),
                libflatpak-dev (>= 1.14.0) [amd64 arm64 armel armhf i386 mipsel 
mips64el ppc64el s390x hppa powerpc ppc64 riscv64 x32],
-               libfwupd-dev (>= 1.5.6) [linux-any],
+               libfwupd-dev (>= 2.0.20) [linux-any],
                libglib2.0-dev (>= 2.70.0),
                libglib-testing-0-dev,
                libgtk-4-dev (>= 4.6),
diff -Nru gnome-software-43.5/debian/control.in 
gnome-software-43.5/debian/control.in
--- gnome-software-43.5/debian/control.in       2023-06-16 05:33:47.000000000 
-0500
+++ gnome-software-43.5/debian/control.in       2026-06-27 13:02:08.000000000 
-0500
@@ -12,7 +12,7 @@
                libadwaita-1-dev (>= 1.0.1),
                libappstream-dev (>= 0.14.0),
                libflatpak-dev (>= 1.14.0) [amd64 arm64 armel armhf i386 mipsel 
mips64el ppc64el s390x hppa powerpc ppc64 riscv64 x32],
-               libfwupd-dev (>= 1.5.6) [linux-any],
+               libfwupd-dev (>= 2.0.20) [linux-any],
                libglib2.0-dev (>= 2.70.0),
                libglib-testing-0-dev,
                libgtk-4-dev (>= 4.6),
diff -Nru gnome-software-43.5/debian/patches/remove-old-api.patch 
gnome-software-43.5/debian/patches/remove-old-api.patch
--- gnome-software-43.5/debian/patches/remove-old-api.patch     1969-12-31 
18:00:00.000000000 -0600
+++ gnome-software-43.5/debian/patches/remove-old-api.patch     2026-06-27 
13:02:08.000000000 -0500
@@ -0,0 +1,126 @@
+From: Mario Limonciello <[email protected]>
+Date: Jun, 27 2026 18:08:22 -0500
+Subject: [PATCH] Remove old fwupd API
+
+Index: gnome-software-43.5/plugins/fwupd/gs-fwupd-app.c
+===================================================================
+--- gnome-software-43.5.orig/plugins/fwupd/gs-fwupd-app.c
++++ gnome-software-43.5/plugins/fwupd/gs-fwupd-app.c
+@@ -62,11 +62,6 @@ gs_fwupd_app_set_from_device (GsApp *app
+       if (fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_UPDATABLE))
+               gs_app_set_state (app, GS_APP_STATE_UPDATABLE_LIVE);
+ 
+-      /* only can be applied in systemd-offline */
+-      if (fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_ONLY_OFFLINE))
+-              gs_app_set_metadata (app, "fwupd::OnlyOffline", "");
+-
+-
+       /* reboot required to apply update */
+       if (fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_NEEDS_REBOOT))
+               gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+@@ -106,9 +101,9 @@ gs_fwupd_app_set_from_device (GsApp *app
+       }
+       if (fwupd_device_get_created (dev) != 0)
+               gs_app_set_install_date (app, fwupd_device_get_created (dev));
+-      if (fwupd_device_get_description (dev) != NULL) {
++      if (fwupd_device_get_summary (dev) != NULL) {
+               g_autofree gchar *tmp = NULL;
+-              tmp = as_markup_convert_simple (fwupd_device_get_description 
(dev), NULL);
++              tmp = as_markup_convert_simple (fwupd_device_get_summary (dev), 
NULL);
+               if (tmp != NULL)
+                       gs_app_set_description (app, GS_APP_QUALITY_NORMAL, 
tmp);
+       }
+Index: gnome-software-43.5/plugins/fwupd/gs-plugin-fwupd.c
+===================================================================
+--- gnome-software-43.5.orig/plugins/fwupd/gs-plugin-fwupd.c
++++ gnome-software-43.5/plugins/fwupd/gs-plugin-fwupd.c
+@@ -403,7 +403,7 @@ gs_plugin_fwupd_new_app_from_device_raw
+       gs_app_set_version (app, fwupd_device_get_version (device));
+       gs_app_set_name (app, GS_APP_QUALITY_LOWEST, fwupd_device_get_name 
(device));
+       gs_app_set_summary (app, GS_APP_QUALITY_LOWEST, 
fwupd_device_get_summary (device));
+-      gs_app_set_description (app, GS_APP_QUALITY_LOWEST, 
fwupd_device_get_description (device));
++      gs_app_set_description (app, GS_APP_QUALITY_LOWEST, 
fwupd_device_get_summary (device));
+       gs_app_set_origin (app, fwupd_device_get_vendor (device));
+       gs_fwupd_app_set_device_id (app, fwupd_device_get_id (device));
+       gs_app_set_management_plugin (app, plugin);
+@@ -790,7 +790,7 @@ get_remotes_cb (GObject      *source_obj
+       for (guint i = 0; i < remotes->len; i++) {
+               FwupdRemote *remote = g_ptr_array_index (remotes, i);
+ 
+-              if (!fwupd_remote_get_enabled (remote))
++              if (!fwupd_remote_has_flag (remote, FWUPD_REMOTE_FLAG_ENABLED))
+                       continue;
+               if (fwupd_remote_get_kind (remote) != 
FWUPD_REMOTE_KIND_DOWNLOAD)
+                       continue;
+@@ -798,7 +798,8 @@ get_remotes_cb (GObject      *source_obj
+                       continue;
+ 
+               data->n_operations_pending++;
+-              fwupd_client_refresh_remote_async (client, remote, cancellable,
++              fwupd_client_refresh_remote_async (client, remote, 
FWUPD_CLIENT_DOWNLOAD_FLAG_NONE,
++                                                 cancellable,
+                                                  refresh_remote_cb, 
g_object_ref (task));
+       }
+ 
+@@ -901,10 +902,6 @@ gs_plugin_fwupd_install (GsPluginFwupd
+       /* set the last object */
+       g_set_object (&self->app_current, app);
+ 
+-      /* only offline supported */
+-      if (gs_app_get_metadata_item (app, "fwupd::OnlyOffline") != NULL)
+-              install_flags |= FWUPD_INSTALL_FLAG_OFFLINE;
+-
+       gs_app_set_state (app, GS_APP_STATE_INSTALLING);
+       if (!fwupd_client_install (self->client, device_id,
+                                  filename, install_flags,
+@@ -931,20 +928,21 @@ gs_plugin_fwupd_install (GsPluginFwupd
+                * in a too-new-to-depend-on fwupd version */
+               g_debug ("failed to find device after install: %s", 
error_local->message);
+       } else {
+-              if (fwupd_device_get_update_message (dev) != NULL) {
++              FwupdRelease *release = fwupd_device_get_release_default (dev);
++              if (release != NULL && fwupd_release_get_update_message 
(release) != NULL) {
+                       g_autoptr(AsScreenshot) ss = as_screenshot_new ();
+ 
+                       /* image is optional */
+-                      if (fwupd_device_get_update_image (dev) != NULL) {
++                      if (fwupd_release_get_update_image (release) != NULL) {
+                               g_autoptr(AsImage) im = as_image_new ();
+                               as_image_set_kind (im, AS_IMAGE_KIND_SOURCE);
+-                              as_image_set_url (im, 
fwupd_device_get_update_image (dev));
++                              as_image_set_url (im, 
fwupd_release_get_update_image (release));
+                               as_screenshot_add_image (ss, im);
+                       }
+ 
+                       /* caption is required */
+                       as_screenshot_set_kind (ss, AS_SCREENSHOT_KIND_DEFAULT);
+-                      as_screenshot_set_caption (ss, 
fwupd_device_get_update_message (dev), NULL);
++                      as_screenshot_set_caption (ss, 
fwupd_release_get_update_message (release), NULL);
+                       gs_app_set_action_screenshot (app, ss);
+ 
+                       /* require the dialog */
+@@ -1224,7 +1222,7 @@ gs_plugin_add_sources (GsPlugin *plugin,
+               app = gs_app_new (id);
+               gs_app_set_kind (app, AS_COMPONENT_KIND_REPOSITORY);
+               gs_app_set_scope (app, AS_COMPONENT_SCOPE_SYSTEM);
+-              gs_app_set_state (app, fwupd_remote_get_enabled (remote) ?
++              gs_app_set_state (app, fwupd_remote_has_flag (remote, 
FWUPD_REMOTE_FLAG_ENABLED) ?
+                                 GS_APP_STATE_INSTALLED : 
GS_APP_STATE_AVAILABLE);
+               gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+               gs_app_set_name (app, GS_APP_QUALITY_LOWEST,
+@@ -1285,11 +1283,13 @@ gs_plugin_fwupd_enable_repository_get_re
+       for (guint i = 0; i < remotes->len; i++) {
+               FwupdRemote *remote = g_ptr_array_index (remotes, i);
+               if (g_strcmp0 (remote_id, fwupd_remote_get_id (remote)) == 0) {
+-                      if (fwupd_remote_get_enabled (remote) &&
++                      if (fwupd_remote_has_flag (remote, 
FWUPD_REMOTE_FLAG_ENABLED) &&
+                           fwupd_remote_get_kind (remote) != 
FWUPD_REMOTE_KIND_LOCAL &&
+                           !remote_cache_is_expired (remote, cache_age)) {
+                               GCancellable *cancellable = 
g_task_get_cancellable (task);
+-                              fwupd_client_refresh_remote_async 
(self->client, remote, cancellable,
++                              fwupd_client_refresh_remote_async 
(self->client, remote,
++                                                                 
FWUPD_CLIENT_DOWNLOAD_FLAG_NONE,
++                                                                 cancellable,
+                                                                  
gs_plugin_fwupd_enable_repository_remote_refresh_ready_cb,
+                                                                  
g_steal_pointer (&task));
+                               return;
diff -Nru gnome-software-43.5/debian/patches/series 
gnome-software-43.5/debian/patches/series
--- gnome-software-43.5/debian/patches/series   2023-06-16 05:33:47.000000000 
-0500
+++ gnome-software-43.5/debian/patches/series   2026-06-27 13:02:08.000000000 
-0500
@@ -1 +1,2 @@
 01_details-Use-custom-icon-for-verified-developers.patch
+remove-old-api.patch
diff -Nru plasma-discover-5.27.5/debian/changelog 
plasma-discover-5.27.5/debian/changelog
--- plasma-discover-5.27.5/debian/changelog     2023-05-27 11:23:42.000000000 
-0500
+++ plasma-discover-5.27.5/debian/changelog     2026-06-27 13:29:28.000000000 
-0500
@@ -1,3 +1,11 @@
+plasma-discover (5.27.5-2+deb12u1) bookworm; urgency=medium
+
+  * Backport patch for fwupd 2.0 compat
+  * d/control:
+    - b-d on newer libfwupd
+
+ -- Mario Limonciello <[email protected]>  Sat, 27 Jun 2026 13:29:28 -0500
+
 plasma-discover (5.27.5-2) unstable; urgency=medium
 
   * Release to unstable.
diff -Nru plasma-discover-5.27.5/debian/control 
plasma-discover-5.27.5/debian/control
--- plasma-discover-5.27.5/debian/control       2023-05-14 17:24:52.000000000 
-0500
+++ plasma-discover-5.27.5/debian/control       2026-06-27 13:29:28.000000000 
-0500
@@ -16,7 +16,7 @@
                libcurl4-gnutls-dev,
                libdebconf-kde-dev (>= 1.0.0),
                libflatpak-dev (>= 0.11.8~) [linux-any],
-               libfwupd-dev (>= 1.5.0~) [linux-any],
+               libfwupd-dev (>= 2.0.20) [linux-any],
                libkf5archive-dev (>= 5.102.0~),
                libkf5attica-dev (>= 5.23~),
                libkf5config-dev (>= 5.102.0~),
diff -Nru plasma-discover-5.27.5/debian/patches/fwupd-2.0-compatibility-fixes 
plasma-discover-5.27.5/debian/patches/fwupd-2.0-compatibility-fixes
--- plasma-discover-5.27.5/debian/patches/fwupd-2.0-compatibility-fixes 
1969-12-31 18:00:00.000000000 -0600
+++ plasma-discover-5.27.5/debian/patches/fwupd-2.0-compatibility-fixes 
2026-06-27 13:29:28.000000000 -0500
@@ -0,0 +1,137 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <[email protected]>
+Date: Sat, 27 Jun 2026 19:03 -0500
+Subject: [PATCH] Fix compilation against fwupd 2.0 API
+
+
+---
+Fix fwupd 2.0 API compatibility
+--- a/libdiscover/backends/FwupdBackend/FwupdBackend.cpp
++++ b/libdiscover/backends/FwupdBackend/FwupdBackend.cpp
+@@ -198,7 +198,8 @@
+         return nullptr;
+     }
+ 
+-    const QUrl update_uri(QString::fromUtf8(fwupd_release_get_uri(release)));
++    GPtrArray *locations = fwupd_release_get_locations(release);
++    const QUrl update_uri(locations && locations->len > 0 ? 
QString::fromUtf8((const gchar *)g_ptr_array_index(locations, 0)) : QString());
+     if (!update_uri.isValid()) {
+         qWarning() << "Fwupd Error: No Update URI available for" << 
app->name() << "[" << app->id() << "]";
+         return nullptr;
+@@ -323,13 +324,13 @@
+ {
+     for (uint i = 0; remotes && i < remotes->len; i++) {
+         FwupdRemote *remote = (FwupdRemote *)g_ptr_array_index(remotes, i);
+-        if (!fwupd_remote_get_enabled(remote))
++        if (!fwupd_remote_has_flag(remote, FWUPD_REMOTE_FLAG_ENABLED))
+             continue;
+ 
+         if (fwupd_remote_get_kind(remote) == FWUPD_REMOTE_KIND_LOCAL)
+             continue;
+ 
+-        fwupd_client_refresh_remote_async(client, remote, m_cancellable, 
fwupd_client_refresh_remote_cb, this);
++        fwupd_client_refresh_remote_async(client, remote, 
FWUPD_CLIENT_DOWNLOAD_FLAG_NONE, m_cancellable, fwupd_client_refresh_remote_cb, 
this);
+     }
+ }
+ 
+--- a/libdiscover/backends/FwupdBackend/FwupdResource.cpp
++++ b/libdiscover/backends/FwupdBackend/FwupdResource.cpp
+@@ -161,13 +161,15 @@
+     m_description = 
QString::fromUtf8((fwupd_release_get_description(release)));
+     m_homepage = QUrl(QString::fromUtf8(fwupd_release_get_homepage(release)));
+     m_license = QString::fromUtf8(fwupd_release_get_license(release));
+-    m_updateURI = QString::fromUtf8(fwupd_release_get_uri(release));
++    GPtrArray *locations = fwupd_release_get_locations(release);
++    if (locations != nullptr && locations->len > 0) {
++        m_updateURI = QString::fromUtf8((const gchar 
*)g_ptr_array_index(locations, 0));
++    }
+ }
+ 
+ void FwupdResource::setDeviceDetails(FwupdDevice *dev)
+ {
+     m_isLiveUpdatable = fwupd_device_has_flag(dev, 
FWUPD_DEVICE_FLAG_UPDATABLE);
+-    m_isOnlyOffline = fwupd_device_has_flag(dev, 
FWUPD_DEVICE_FLAG_ONLY_OFFLINE);
+     m_needsReboot = fwupd_device_has_flag(dev, 
FWUPD_DEVICE_FLAG_NEEDS_REBOOT);
+ 
+     if (fwupd_device_get_name(dev)) {
+@@ -182,7 +184,6 @@
+     m_vendor = QString::fromUtf8(fwupd_device_get_vendor(dev));
+     m_releaseDate = 
QDateTime::fromSecsSinceEpoch(fwupd_device_get_created(dev)).date();
+     m_availableVersion = QString::fromUtf8(fwupd_device_get_version(dev));
+-    m_description = QString::fromUtf8((fwupd_device_get_description(dev)));
+ 
+     if (fwupd_device_get_icons(dev)->len >= 1)
+         m_iconName = QString::fromUtf8((const gchar 
*)g_ptr_array_index(fwupd_device_get_icons(dev), 0)); // Check whether given 
icon exists or not!
+--- a/libdiscover/backends/FwupdBackend/FwupdResource.h
++++ b/libdiscover/backends/FwupdBackend/FwupdResource.h
+@@ -102,11 +102,6 @@
+         return m_isDeviceLocked;
+     }
+ 
+-    bool isOnlyOffline() const
+-    {
+-        return m_isOnlyOffline;
+-    }
+-
+     bool isLiveUpdatable() const
+     {
+         return m_isLiveUpdatable;
+@@ -146,7 +141,6 @@
+ 
+     QString m_updateURI;
+     bool m_isDeviceLocked = false; // True if device is locked!
+-    bool m_isOnlyOffline = false; // True if only offline updates
+     bool m_isLiveUpdatable = false; // True if device is live updatable
+     bool m_needsReboot = false; // True if device needs Reboot
+     QString m_origin;
+--- a/libdiscover/backends/FwupdBackend/FwupdSourcesBackend.cpp
++++ b/libdiscover/backends/FwupdBackend/FwupdSourcesBackend.cpp
+@@ -34,7 +34,7 @@
+         case Qt::CheckStateRole: {
+             if (value == Qt::Checked) {
+                 m_backend->m_currentItem = item;
+-                if (fwupd_remote_get_approval_required(remote)) {
++                if (fwupd_remote_has_flag(remote, 
FWUPD_REMOTE_FLAG_APPROVAL_REQUIRED)) {
+                     QString eulaText = i18n("The remote %1 require that you 
accept their license:\n %2",
+                                             
QString::fromUtf8(fwupd_remote_get_title(remote)),
+                                             
QString::fromUtf8(fwupd_remote_get_agreement(remote)));
+@@ -88,7 +88,7 @@
+         it->setData(id, AbstractSourcesBackend::IdRole);
+         
it->setData(QVariant(QString::fromUtf8(fwupd_remote_get_title(remote))), 
Qt::ToolTipRole);
+         it->setCheckable(true);
+-        it->setCheckState(fwupd_remote_get_enabled(remote) ? Qt::Checked : 
Qt::Unchecked);
++        it->setCheckState(fwupd_remote_has_flag(remote, 
FWUPD_REMOTE_FLAG_ENABLED) ? Qt::Checked : Qt::Unchecked);
+         m_sources->appendRow(it);
+     }
+ }
+@@ -121,7 +121,7 @@
+ {
+     FwupdRemote *remote =
+         fwupd_client_get_remote_by_id(backend->client, 
m_currentItem->data(AbstractSourcesBackend::IdRole).toString().toUtf8().constData(),
 nullptr, nullptr);
+-    m_currentItem->setCheckState(fwupd_remote_get_enabled(remote) ? 
Qt::Checked : Qt::Unchecked);
++    m_currentItem->setCheckState(fwupd_remote_has_flag(remote, 
FWUPD_REMOTE_FLAG_ENABLED) ? Qt::Checked : Qt::Unchecked);
+ 
+     m_currentItem = nullptr;
+ }
+--- a/libdiscover/backends/FwupdBackend/FwupdTransaction.cpp
++++ b/libdiscover/backends/FwupdBackend/FwupdTransaction.cpp
+@@ -82,10 +82,6 @@
+     FwupdInstallFlags install_flags = FWUPD_INSTALL_FLAG_NONE;
+     g_autoptr(GError) error = nullptr;
+ 
+-    /* only offline supported */
+-    if (m_app->isOnlyOffline())
+-        install_flags = static_cast<FwupdInstallFlags>(install_flags | 
FWUPD_INSTALL_FLAG_OFFLINE);
+-
+     if (!fwupd_client_install(m_backend->client, 
m_app->deviceId().toUtf8().constData(), file.toUtf8().constData(), 
install_flags, nullptr, &error)) {
+         m_backend->handleError(error);
+         setStatus(DoneWithErrorStatus);
+@@ -110,7 +106,7 @@
+ 
+ void FwupdTransaction::finishTransaction()
+ {
+-    AbstractResource::State newState;
++    AbstractResource::State newState = AbstractResource::None;
+     switch (role()) {
+     case InstallRole:
+     case ChangeAddonsRole:
diff -Nru plasma-discover-5.27.5/debian/patches/series 
plasma-discover-5.27.5/debian/patches/series
--- plasma-discover-5.27.5/debian/patches/series        1969-12-31 
18:00:00.000000000 -0600
+++ plasma-discover-5.27.5/debian/patches/series        2026-06-27 
13:29:28.000000000 -0500
@@ -0,0 +1 @@
+fwupd-2.0-compatibility-fixes

Reply via email to