diff --git a/bin/system-info.c b/bin/system-info.c
index 0127ad20a41cbdb786abecf94d2756e68b75e071..e4a7bce3316bbd5be3b5baa781e46bdf4bd0cf08 100644
--- a/bin/system-info.c
+++ b/bin/system-info.c
@@ -388,12 +388,17 @@ print_libraries_details (JsonBuilder *builder,
   json_builder_begin_object (builder);
   for (GList *l = libraries; l != NULL; l = l->next)
     {
-      if (verbose || srt_library_get_issues (l->data) != SRT_LIBRARY_ISSUES_NONE)
+      const char *name = srt_library_get_requested_name (l->data);
+      const char *soname = srt_library_get_real_soname (l->data);
+
+      if (verbose ||
+          srt_library_get_issues (l->data) != SRT_LIBRARY_ISSUES_NONE ||
+          g_strcmp0 (name, soname) != 0)
         {
           const char *messages;
           const char * const *missing_symbols;
           const char * const *misversioned_symbols;
-          json_builder_set_member_name (builder, srt_library_get_soname (l->data));
+          json_builder_set_member_name (builder, name);
           json_builder_begin_object (builder);
 
           messages = srt_library_get_messages (l->data);
@@ -404,6 +409,9 @@ print_libraries_details (JsonBuilder *builder,
               json_builder_add_string_value (builder, messages);
             }
 
+          json_builder_set_member_name (builder, "soname");
+          json_builder_add_string_value (builder, soname);
+
           json_builder_set_member_name (builder, "path");
           json_builder_add_string_value (builder, srt_library_get_absolute_path (l->data));
 
diff --git a/bin/system-info.md b/bin/system-info.md
index b921f4b18df9d55562ef4d8b21b43f939b2a792e..b71411d93b9ca55ead3cbe8225d69b754b5b70fb 100644
--- a/bin/system-info.md
+++ b/bin/system-info.md
@@ -376,6 +376,11 @@ keys:
         **path**
         :   The absolute path to the library.
 
+        **soname**
+        :   The real SONAME of the library, which might be different from
+            the name that was requested if it is a compatibility alias,
+            or **null** if it could not be determined.
+
         **issues**
         :   Problems with the library, as arrays of the same strings
             described in **library-issues-summary** above.
diff --git a/steam-runtime-tools/library-internal.h b/steam-runtime-tools/library-internal.h
index aff1658ec9232182706332aec5ece5b2ed2a5fe1..218d741e8b393908cd242c97158536dcfa11f3a9 100644
--- a/steam-runtime-tools/library-internal.h
+++ b/steam-runtime-tools/library-internal.h
@@ -34,17 +34,17 @@
  * _srt_library_new:
  * @multiarch_tuple: A multiarch tuple like %SRT_ABI_I386,
  *  representing an ABI
- * @absolute_path: (nullable) Absolute path of @soname
- * @soname: A SONAME like libz.so.1
+ * @absolute_path: (nullable) Absolute path of @requested_name
+ * @requested_name: A SONAME like libz.so.1
  * @issues: Problems found when loading a @multiarch_tuple copy
- *  of @soname
+ *  of @requested_name
  * @missing_symbols: (nullable) (array zero-terminated=1) (element-type utf8):
- *  Symbols we expected to find in @soname but did not
+ *  Symbols we expected to find in @requested_name but did not
  * @misversioned_symbols: (nullable) (array zero-terminated=1) (element-type utf8):
- *  Symbols we expected to find in @soname but were available with a different
- *  version
+ *  Symbols we expected to find in @requested_name but were available with a
+ *  different version
  * @dependencies: (nullable) (array zero-terminated=1) (element-type utf8):
- *  Dependencies of @soname
+ *  Dependencies of @requested_name
  * @exit_status: exit status of helper, or -1 if it did not exit normally
  * @terminating_signal: signal that terminated the helper, or 0
  *
@@ -55,12 +55,13 @@
  */
 static inline SrtLibrary *_srt_library_new (const char *multiarch_tuple,
                                             const char *absolute_path,
-                                            const char *soname,
+                                            const char *requested_name,
                                             SrtLibraryIssues issues,
                                             const char *messages,
                                             const char * const *missing_symbols,
                                             const char * const *misversioned_symbols,
                                             const char * const *dependencies,
+                                            const char *real_soname,
                                             int exit_status,
                                             int terminating_signal);
 
@@ -68,17 +69,18 @@ static inline SrtLibrary *_srt_library_new (const char *multiarch_tuple,
 static inline SrtLibrary *
 _srt_library_new (const char *multiarch_tuple,
                   const char *absolute_path,
-                  const char *soname,
+                  const char *requested_name,
                   SrtLibraryIssues issues,
                   const char *messages,
                   const char * const *missing_symbols,
                   const char * const *misversioned_symbols,
                   const char * const *dependencies,
+                  const char *real_soname,
                   int exit_status,
                   int terminating_signal)
 {
   g_return_val_if_fail (multiarch_tuple != NULL, NULL);
-  g_return_val_if_fail (soname != NULL, NULL);
+  g_return_val_if_fail (requested_name != NULL, NULL);
   return g_object_new (SRT_TYPE_LIBRARY,
                        "absolute-path", absolute_path,
                        "dependencies", dependencies,
@@ -86,9 +88,10 @@ _srt_library_new (const char *multiarch_tuple,
                        "messages", messages,
                        "missing-symbols", missing_symbols,
                        "multiarch-tuple", multiarch_tuple,
-                       "soname", soname,
                        "misversioned-symbols", misversioned_symbols,
                        "exit-status", exit_status,
+                       "real-soname", real_soname,
+                       "requested-name", requested_name,
                        "terminating-signal", terminating_signal,
                        NULL);
 }
@@ -96,7 +99,7 @@ _srt_library_new (const char *multiarch_tuple,
 
 G_GNUC_INTERNAL
 SrtLibraryIssues _srt_check_library_presence (const char *helpers_path,
-                                              const char *soname,
+                                              const char *requested_name,
                                               const char *multiarch,
                                               const char *symbols_path,
                                               const char * const *hidden_deps,
diff --git a/steam-runtime-tools/library.c b/steam-runtime-tools/library.c
index ebbdfd014d2bdd1830c45b9a30f42b23ad14c028..8a522713e939220c825d19f62da32431218a7e76 100644
--- a/steam-runtime-tools/library.c
+++ b/steam-runtime-tools/library.c
@@ -51,7 +51,7 @@ struct _SrtLibrary
   GObject parent;
   gchar *absolute_path;
   gchar *messages;
-  gchar *soname;
+  gchar *requested_name;
   GStrv dependencies;
   GStrv missing_symbols;
   GStrv misversioned_symbols;
@@ -59,6 +59,7 @@ struct _SrtLibrary
   SrtLibraryIssues issues;
   int exit_status;
   int terminating_signal;
+  gchar *real_soname;
 };
 
 struct _SrtLibraryClass
@@ -66,7 +67,6 @@ struct _SrtLibraryClass
   /*< private >*/
   GObjectClass parent_class;
 };
-
 enum {
   PROP_0,
   PROP_ABSOLUTE_PATH,
@@ -76,6 +76,8 @@ enum {
   PROP_MISSING_SYMBOLS,
   PROP_MULTIARCH_TUPLE,
   PROP_SONAME,
+  PROP_REAL_SONAME,
+  PROP_REQUESTED_NAME,
   PROP_MISVERSIONED_SYMBOLS,
   PROP_EXIT_STATUS,
   PROP_TERMINATING_SIGNAL,
@@ -123,8 +125,13 @@ srt_library_get_property (GObject *object,
         g_value_set_static_string (value, g_quark_to_string (self->multiarch_tuple));
         break;
 
-      case PROP_SONAME:
-        g_value_set_string (value, self->soname);
+      case PROP_REAL_SONAME:
+        g_value_set_string (value, self->real_soname);
+        break;
+
+      case PROP_REQUESTED_NAME:
+      case PROP_SONAME:   /* deprecated alias */
+        g_value_set_string (value, self->requested_name);
         break;
 
       case PROP_MISVERSIONED_SYMBOLS:
@@ -208,10 +215,25 @@ srt_library_set_property (GObject *object,
         self->multiarch_tuple = g_quark_from_string (g_value_get_string (value));
         break;
 
-      case PROP_SONAME:
+      case PROP_REQUESTED_NAME:
+      case PROP_SONAME:   /* deprecated alias */
+        tmp = g_value_get_string (value);
+
+        /* We have to ignore NULL, because the deprecated soname
+         * property will be explicitly set to NULL during construction,
+         * even if the non-deprecated requested-name property is also set. */
+        if (tmp != NULL)
+          {
+            /* Construct-only, mutually exclusive */
+            g_return_if_fail (self->requested_name == NULL);
+            self->requested_name = g_strdup (tmp);
+          }
+        break;
+
+      case PROP_REAL_SONAME:
         /* Construct-only */
-        g_return_if_fail (self->soname == NULL);
-        self->soname = g_value_dup_string (value);
+        g_return_if_fail (self->real_soname == NULL);
+        self->real_soname = g_value_dup_string (value);
         break;
 
       case PROP_MISVERSIONED_SYMBOLS:
@@ -245,7 +267,8 @@ srt_library_finalize (GObject *object)
 
   g_free (self->absolute_path);
   g_free (self->messages);
-  g_free (self->soname);
+  g_free (self->requested_name);
+  g_free (self->real_soname);
   g_strfreev (self->dependencies);
   g_strfreev (self->missing_symbols);
   g_strfreev (self->misversioned_symbols);
@@ -304,9 +327,21 @@ srt_library_class_init (SrtLibraryClass *cls)
                          NULL,
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS);
+  properties[PROP_REQUESTED_NAME] =
+    g_param_spec_string ("requested-name", "Requested name",
+                         "The name that was loaded, for example libz.so.1",
+                         NULL,
+                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+                         G_PARAM_STATIC_STRINGS);
   properties[PROP_SONAME] =
-    g_param_spec_string ("soname", "SONAME",
-                         "The name of this library, for example libz.so.1",
+    g_param_spec_string ("soname", "Requested SONAME",
+                         "Deprecated alias for requested-name",
+                         NULL,
+                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+                         G_PARAM_STATIC_STRINGS | G_PARAM_DEPRECATED);
+  properties[PROP_REAL_SONAME] =
+    g_param_spec_string ("real-soname", "Real SONAME",
+                         "ELF DT_SONAME found when loading the library",
                          NULL,
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS);
@@ -370,20 +405,55 @@ srt_library_get_messages (SrtLibrary *self)
   return self->messages;
 }
 
+/**
+ * srt_library_get_requested_name:
+ * @self: a library
+ *
+ * Return the name that was requested to be loaded when checking @self.
+ *
+ * Returns: A string like `libz.so.1`, which is valid as long as @self
+ *  is not destroyed.
+ */
+const char *
+srt_library_get_requested_name (SrtLibrary *self)
+{
+  g_return_val_if_fail (SRT_IS_LIBRARY (self), NULL);
+  return self->requested_name;
+}
+
 /**
  * srt_library_get_soname:
  * @self: a library
  *
- * Return the SONAME (machine-readable runtime name) of @self.
+ * Deprecated alias for srt_library_get_requested_name().
+ * See also srt_library_get_real_soname(), which might be what you
+ * thought this did.
  *
  * Returns: A string like `libz.so.1`, which is valid as long as @self
  *  is not destroyed.
  */
 const char *
 srt_library_get_soname (SrtLibrary *self)
+{
+  return srt_library_get_requested_name (self);
+}
+
+/**
+ * srt_library_get_real_soname:
+ * @self: a library
+ *
+ * Return the ELF `DT_SONAME` found by parsing the loaded library.
+ * This is often the same as srt_library_get_requested_name(),
+ * but can differ when compatibility aliases are involved.
+ *
+ * Returns: A string like `libz.so.1`, which is valid as long as @self
+ *  is not destroyed, or %NULL if the SONAME could not be determined.
+ */
+const char *
+srt_library_get_real_soname (SrtLibrary *self)
 {
   g_return_val_if_fail (SRT_IS_LIBRARY (self), NULL);
-  return self->soname;
+  return self->real_soname;
 }
 
 /**
@@ -509,18 +579,19 @@ srt_library_get_misversioned_symbols (SrtLibrary *self)
 
 /**
  * srt_check_library_presence:
- * @soname: (type filename): The `SONAME` of a shared library, for example `libjpeg.so.62`
+ * @requested_name: (type filename): The `SONAME` or absolute or relative
+ *  path of a shared library, for example `libjpeg.so.62`
  * @multiarch: A multiarch tuple like %SRT_ABI_I386, representing an ABI.
  * @symbols_path: (nullable) (type filename): The filename of a file listing
  *  symbols, or %NULL if we do not know which symbols the library is meant to
  *  contain.
  * @symbols_format: The format of @symbols_path.
  * @more_details_out: (out) (optional) (transfer full): Used to return an
- *  #SrtLibrary object representing the shared library provided by @soname.
- *  Free with `g_object_unref()`.
+ *  #SrtLibrary object representing the shared library provided
+ *  by @requested_name. Free with `g_object_unref()`.
  *
- * Attempt to load @soname into a helper subprocess, and check whether it conforms
- * to the ABI provided in `symbols_path`.
+ * Attempt to load @requested_name into a helper subprocess, and check whether
+ * it conforms to the ABI provided in `symbols_path`.
  *
  * If @symbols_format is %SRT_LIBRARY_SYMBOLS_FORMAT_PLAIN, @symbols_path must
  * list one symbol per line, in the format `jpeg_input_complete@LIBJPEG_6.2`
@@ -529,26 +600,26 @@ srt_library_get_misversioned_symbols (SrtLibrary *self)
  *
  * If @symbols_format is %SRT_LIBRARY_SYMBOLS_FORMAT_DEB_SYMBOLS, @symbols_path
  * must be in deb-symbols(5) format. It may list symbols for more SONAMEs than
- * just @soname; if so, they are ignored.
+ * just @requested_name; if so, they are ignored.
  *
  * Returns: A bitfield containing problems, or %SRT_LIBRARY_ISSUES_NONE
  *  if no problems were found.
  */
 SrtLibraryIssues
-srt_check_library_presence (const char *soname,
+srt_check_library_presence (const char *requested_name,
                             const char *multiarch,
                             const char *symbols_path,
                             SrtLibrarySymbolsFormat symbols_format,
                             SrtLibrary **more_details_out)
 {
-  return _srt_check_library_presence (NULL, soname, multiarch,
+  return _srt_check_library_presence (NULL, requested_name, multiarch,
                                       symbols_path, NULL, NULL,
                                       symbols_format, more_details_out);
 }
 
 SrtLibraryIssues
 _srt_check_library_presence (const char *helpers_path,
-                             const char *soname,
+                             const char *requested_name,
                              const char *multiarch,
                              const char *symbols_path,
                              const char * const *hidden_deps,
@@ -560,6 +631,7 @@ _srt_check_library_presence (const char *helpers_path,
   gchar *output = NULL;
   gchar *child_stderr = NULL;
   gchar *absolute_path = NULL;
+  gchar *real_soname = NULL;
   int wait_status = -1;
   int exit_status = -1;
   int terminating_signal = 0;
@@ -580,7 +652,7 @@ _srt_check_library_presence (const char *helpers_path,
   SrtHelperFlags flags = SRT_HELPER_FLAGS_TIME_OUT;
   GString *log_args = NULL;
 
-  g_return_val_if_fail (soname != NULL, SRT_LIBRARY_ISSUES_UNKNOWN);
+  g_return_val_if_fail (requested_name != NULL, SRT_LIBRARY_ISSUES_UNKNOWN);
   g_return_val_if_fail (multiarch != NULL, SRT_LIBRARY_ISSUES_UNKNOWN);
   g_return_val_if_fail (more_details_out == NULL || *more_details_out == NULL,
                         SRT_LIBRARY_ISSUES_UNKNOWN);
@@ -612,19 +684,20 @@ _srt_check_library_presence (const char *helpers_path,
       g_string_append (log_args, g_ptr_array_index (argv, i));
     }
 
-  g_debug ("Checking library %s integrity with %s ", soname, log_args->str);
+  g_debug ("Checking library %s integrity with %s ", requested_name,
+           log_args->str);
   g_string_free (log_args, TRUE);
 
   switch (symbols_format)
     {
       case SRT_LIBRARY_SYMBOLS_FORMAT_PLAIN:
-        g_ptr_array_add (argv, g_strdup (soname));
+        g_ptr_array_add (argv, g_strdup (requested_name));
         g_ptr_array_add (argv, g_strdup (symbols_path));
         break;
 
       case SRT_LIBRARY_SYMBOLS_FORMAT_DEB_SYMBOLS:
         g_ptr_array_add (argv, g_strdup ("--deb-symbols"));
-        g_ptr_array_add (argv, g_strdup (soname));
+        g_ptr_array_add (argv, g_strdup (requested_name));
         g_ptr_array_add (argv, g_strdup (symbols_path));
         break;
 
@@ -697,16 +770,20 @@ _srt_check_library_presence (const char *helpers_path,
 
   node = json_parser_get_root (parser);
   json = json_node_get_object (node);
-  if (!json_object_has_member (json, soname))
+  if (!json_object_has_member (json, requested_name))
     {
-      g_debug ("The helper output is missing the expected soname %s", soname);
+      g_debug ("The helper output is missing the expected SONAME %s",
+               requested_name);
       issues |= SRT_LIBRARY_ISSUES_CANNOT_LOAD;
       goto out;
     }
-  json = json_object_get_object_member (json, soname);
+  json = json_object_get_object_member (json, requested_name);
 
   absolute_path = g_strdup (json_object_get_string_member (json, "path"));
 
+  if (json_object_has_member (json, "SONAME"))
+    real_soname = g_strdup (json_object_get_string_member (json, "SONAME"));
+
   if (json_object_has_member (json, "missing_symbols"))
     missing_array = json_object_get_array_member (json, "missing_symbols");
   if (missing_array != NULL)
@@ -755,12 +832,13 @@ out:
   if (more_details_out != NULL)
     *more_details_out = _srt_library_new (multiarch,
                                           absolute_path,
-                                          soname,
+                                          requested_name,
                                           issues,
                                           child_stderr,
                                           (const char **) missing_symbols,
                                           (const char **) misversioned_symbols,
                                           (const char **) dependencies,
+                                          real_soname,
                                           exit_status,
                                           terminating_signal);
 
@@ -775,6 +853,7 @@ out:
   g_free (absolute_path);
   g_free (child_stderr);
   g_free (output);
+  g_free (real_soname);
   g_free (filtered_preload);
   g_clear_error (&error);
   return issues;
diff --git a/steam-runtime-tools/library.h b/steam-runtime-tools/library.h
index a4f727f9987709b0c4cc41ec06863766b19882cc..0c01230e16e7dd6b70fd4b255cc22e969f6e6f3f 100644
--- a/steam-runtime-tools/library.h
+++ b/steam-runtime-tools/library.h
@@ -92,7 +92,9 @@ typedef enum
   SRT_LIBRARY_SYMBOLS_FORMAT_DEB_SYMBOLS
 } SrtLibrarySymbolsFormat;
 
+const char *srt_library_get_requested_name (SrtLibrary *self);
 const char *srt_library_get_absolute_path (SrtLibrary *self);
+G_DEPRECATED_FOR(srt_library_get_requested_name)
 const char *srt_library_get_soname (SrtLibrary *self);
 const char *srt_library_get_messages (SrtLibrary *self);
 const char *srt_library_get_multiarch_tuple (SrtLibrary *self);
@@ -100,7 +102,8 @@ SrtLibraryIssues srt_library_get_issues (SrtLibrary *self);
 const char * const *srt_library_get_missing_symbols (SrtLibrary *self);
 const char * const *srt_library_get_misversioned_symbols (SrtLibrary *self);
 const char * const *srt_library_get_dependencies (SrtLibrary *self);
-SrtLibraryIssues srt_check_library_presence (const char *soname,
+const char *srt_library_get_real_soname (SrtLibrary *self);
+SrtLibraryIssues srt_check_library_presence (const char *requested_name,
                                              const char *multiarch,
                                              const char *symbols_path,
                                              SrtLibrarySymbolsFormat symbols_format,
diff --git a/steam-runtime-tools/system-info.c b/steam-runtime-tools/system-info.c
index 3cb0a97ac5dc1e512e704bbecbbed3aeb67ceb6e..fdfb25bddf32651623b4b875d3885e48ce31e3f6 100644
--- a/steam-runtime-tools/system-info.c
+++ b/steam-runtime-tools/system-info.c
@@ -826,7 +826,8 @@ srt_system_info_can_write_to_uinput (SrtSystemInfo *self)
 static gint
 library_compare (SrtLibrary *a, SrtLibrary *b)
 {
-  return g_strcmp0 (srt_library_get_soname (a), srt_library_get_soname (b));
+  return g_strcmp0 (srt_library_get_requested_name (a),
+                    srt_library_get_requested_name (b));
 }
 
 static gint
@@ -1486,13 +1487,14 @@ srt_system_info_check_libraries (SrtSystemInfo *self,
  * srt_system_info_check_library:
  * @self: The #SrtSystemInfo object to use.
  * @multiarch_tuple: A multiarch tuple like %SRT_ABI_I386, representing an ABI.
- * @soname: (type filename): The `SONAME` of a shared library, for example `libjpeg.so.62`.
+ * @requested_name: (type filename): The `SONAME` of a shared library, for
+ *  example `libjpeg.so.62`.
  * @more_details_out: (out) (optional) (transfer full): Used to return an
- *  #SrtLibrary object representing the shared library provided by @soname.
- *  Free with `g_object_unref()`.
+ *  #SrtLibrary object representing the shared library provided
+ *  by @requested_name. Free with `g_object_unref()`.
  *
- * Check if @soname is available in the running system and whether it conforms
- * to the `deb-symbols(5)` files `*.symbols` in the @multiarch
+ * Check if @requested_name is available in the running system and whether
+ * it conforms to the `deb-symbols(5)` files `*.symbols` in the @multiarch
  * subdirectory of #SrtSystemInfo:expectations.
  *
  * Returns: A bitfield containing problems, or %SRT_LIBRARY_ISSUES_NONE
@@ -1501,7 +1503,7 @@ srt_system_info_check_libraries (SrtSystemInfo *self,
 SrtLibraryIssues
 srt_system_info_check_library (SrtSystemInfo *self,
                                const gchar *multiarch_tuple,
-                               const gchar *soname,
+                               const gchar *requested_name,
                                SrtLibrary **more_details_out)
 {
   Abi *abi = NULL;
@@ -1520,7 +1522,7 @@ srt_system_info_check_library (SrtSystemInfo *self,
 
   g_return_val_if_fail (SRT_IS_SYSTEM_INFO (self), SRT_LIBRARY_ISSUES_UNKNOWN);
   g_return_val_if_fail (multiarch_tuple != NULL, SRT_LIBRARY_ISSUES_UNKNOWN);
-  g_return_val_if_fail (soname != NULL, SRT_LIBRARY_ISSUES_UNKNOWN);
+  g_return_val_if_fail (requested_name != NULL, SRT_LIBRARY_ISSUES_UNKNOWN);
   g_return_val_if_fail (more_details_out == NULL || *more_details_out == NULL,
                         SRT_LIBRARY_ISSUES_UNKNOWN);
 
@@ -1530,7 +1532,7 @@ srt_system_info_check_library (SrtSystemInfo *self,
     return SRT_LIBRARY_ISSUES_CANNOT_LOAD;
 
   /* If we have the result already in cache, we return it */
-  library = g_hash_table_lookup (abi->cached_results, soname);
+  library = g_hash_table_lookup (abi->cached_results, requested_name);
   if (library != NULL)
     {
       if (more_details_out != NULL)
@@ -1584,9 +1586,9 @@ srt_system_info_check_library (SrtSystemInfo *self,
               /* This line introduces a new SONAME, which might
                 * be the one we are interested in. */
               char *soname_found = g_strdup (strsep (&pointer_into_line, " \t"));
-              if (g_strcmp0 (soname_found, soname) == 0)
+              if (g_strcmp0 (soname_found, requested_name) == 0)
                 {
-                  gchar **hidden_deps = g_hash_table_lookup (self->cached_hidden_deps, soname);
+                  gchar **hidden_deps = g_hash_table_lookup (self->cached_hidden_deps, requested_name);
                   issues = _srt_check_library_presence (self->helpers_path,
                                                         soname_found,
                                                         multiarch_tuple,
@@ -1614,14 +1616,14 @@ srt_system_info_check_library (SrtSystemInfo *self,
   /* The SONAME's symbols file is not available.
    * We do instead a simple absence/presence check. */
   issues = _srt_check_library_presence (self->helpers_path,
-                                        soname,
+                                        requested_name,
                                         multiarch_tuple,
                                         NULL,
                                         NULL,
                                         NULL,
                                         SRT_LIBRARY_SYMBOLS_FORMAT_DEB_SYMBOLS,
                                         &library);
-  g_hash_table_insert (abi->cached_results, g_strdup (soname), library);
+  g_hash_table_insert (abi->cached_results, g_strdup (requested_name), library);
   abi->cached_combined_issues |= issues;
   if (more_details_out != NULL)
     *more_details_out = g_object_ref (library);
diff --git a/tests/library.c b/tests/library.c
index bd743bc5024cb06752b5543ed6e5489f8971640a..64142ee6ab33adc08c9bb9008df31961382c1238 100644
--- a/tests/library.c
+++ b/tests/library.c
@@ -72,7 +72,9 @@ test_object (Fixture *f,
   SrtLibraryIssues issues;
   gchar *messages;
   gchar *tuple;
-  gchar *soname;
+  gchar *requested_name;
+  gchar *compat_soname;
+  gchar *real_soname;
   gchar *absolute_path;
   GStrv missing_mutable;
   GStrv misversioned_mutable;
@@ -89,6 +91,7 @@ test_object (Fixture *f,
                               NULL,
                               NULL,
                               NULL,
+                              "libz_special.so.1",
                               0,
                               0);
   g_assert_cmpint (srt_library_get_issues (library), ==,
@@ -96,8 +99,14 @@ test_object (Fixture *f,
   g_assert_cmpstr (srt_library_get_messages (library), ==, NULL);
   g_assert_cmpstr (srt_library_get_multiarch_tuple (library), ==,
                    "arm-linux-gnueabihf");
-  g_assert_cmpstr (srt_library_get_soname (library), ==,
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==,
                    "libz.so.1");
+  G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+  g_assert_cmpstr (srt_library_get_soname (library), ==,
+                   srt_library_get_requested_name (library));
+  G_GNUC_END_IGNORE_DEPRECATIONS
+  g_assert_cmpstr (srt_library_get_real_soname (library), ==,
+                   "libz_special.so.1");
   g_assert_cmpstr (srt_library_get_absolute_path (library), ==,
                    "/usr/lib/libz.so.1");
   missing = srt_library_get_missing_symbols (library);
@@ -112,17 +121,21 @@ test_object (Fixture *f,
   g_object_get (library,
                 "messages", &messages,
                 "multiarch-tuple", &tuple,
-                "soname", &soname,
+                "requested-name", &requested_name,
+                "real-soname", &real_soname,
                 "absolute-path", &absolute_path,
                 "missing-symbols", &missing_mutable,
                 "misversioned-symbols", &misversioned_mutable,
                 "dependencies", &dependencies_mutable,
                 "issues", &issues,
+                "soname", &compat_soname,
                 NULL);
   g_assert_cmpint (issues, ==, SRT_LIBRARY_ISSUES_NONE);
   g_assert_cmpstr (messages, ==, NULL);
   g_assert_cmpstr (tuple, ==, "arm-linux-gnueabihf");
-  g_assert_cmpstr (soname, ==, "libz.so.1");
+  g_assert_cmpstr (requested_name, ==, "libz.so.1");
+  g_assert_cmpstr (compat_soname, ==, requested_name);
+  g_assert_cmpstr (real_soname, ==, "libz_special.so.1");
   g_assert_cmpstr (absolute_path, ==, "/usr/lib/libz.so.1");
   g_assert_nonnull (missing_mutable);
   g_assert_cmpstr (missing_mutable[0], ==, NULL);
@@ -132,7 +145,9 @@ test_object (Fixture *f,
   g_assert_cmpstr (dependencies_mutable[0], ==, NULL);
   g_free (messages);
   g_free (tuple);
-  g_free (soname);
+  g_free (requested_name);
+  g_free (compat_soname);
+  g_free (real_soname);
   g_free (absolute_path);
   g_strfreev (missing_mutable);
   g_strfreev (misversioned_mutable);
@@ -148,6 +163,7 @@ test_object (Fixture *f,
                               one_missing,
                               one_misversioned,
                               two_deps,
+                              NULL,
                               0,
                               0);
   g_assert_cmpint (srt_library_get_issues (library) &
@@ -158,8 +174,9 @@ test_object (Fixture *f,
                    "ld.so: libjpeg.so.62: nope\n");
   g_assert_cmpstr (srt_library_get_multiarch_tuple (library), ==,
                    "s390x-linux-gnu");
-  g_assert_cmpstr (srt_library_get_soname (library), ==,
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==,
                    "libjpeg.so.62");
+  g_assert_cmpstr (srt_library_get_real_soname (library), ==, NULL);
   g_assert_cmpstr (srt_library_get_absolute_path (library), ==,
                    "/usr/lib/libjpeg.so.62");
   missing = srt_library_get_missing_symbols (library);
@@ -178,7 +195,8 @@ test_object (Fixture *f,
   g_object_get (library,
                 "messages", &messages,
                 "multiarch-tuple", &tuple,
-                "soname", &soname,
+                "requested-name", &requested_name,
+                "real-soname", &real_soname,
                 "absolute-path", &absolute_path,
                 "missing-symbols", &missing_mutable,
                 "misversioned-symbols", &misversioned_mutable,
@@ -189,7 +207,8 @@ test_object (Fixture *f,
   g_assert_cmpint (issues & SRT_LIBRARY_ISSUES_MISVERSIONED_SYMBOLS, !=, 0);
   g_assert_cmpstr (messages, ==, "ld.so: libjpeg.so.62: nope\n");
   g_assert_cmpstr (tuple, ==, "s390x-linux-gnu");
-  g_assert_cmpstr (soname, ==, "libjpeg.so.62");
+  g_assert_cmpstr (requested_name, ==, "libjpeg.so.62");
+  g_assert_cmpstr (real_soname, ==, NULL);
   g_assert_cmpstr (absolute_path, ==, "/usr/lib/libjpeg.so.62");
   g_assert_nonnull (missing_mutable);
   g_assert_cmpstr (missing_mutable[0], ==, one_missing[0]);
@@ -203,7 +222,8 @@ test_object (Fixture *f,
   g_assert_cmpstr (dependencies_mutable[2], ==, NULL);
   g_free (messages);
   g_free (tuple);
-  g_free (soname);
+  g_free (real_soname);
+  g_free (requested_name);
   g_free (absolute_path);
   g_strfreev (missing_mutable);
   g_strfreev (misversioned_mutable);
diff --git a/tests/system-info.c b/tests/system-info.c
index dd2e4a0847d89e56132b2abc3b024f921a51b7f3..127a708e58ac85fc5c301e4a94f3c8b1417faf89 100644
--- a/tests/system-info.c
+++ b/tests/system-info.c
@@ -178,7 +178,7 @@ check_libraries_result (GList *libraries)
    * which one it should be. */
   library = l->data;
   g_assert_nonnull (library);
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libgio-2.0.so.0");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libgio-2.0.so.0");
   missing_symbols = srt_library_get_missing_symbols (library);
   g_assert_nonnull (missing_symbols);
   g_assert_cmpstr (missing_symbols[0], ==, NULL);
@@ -208,7 +208,7 @@ check_libraries_result (GList *libraries)
   l = g_list_next (l);
   library = l->data;
   g_assert_nonnull (library);
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libglib-2.0.so.0");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libglib-2.0.so.0");
   missing_symbols = srt_library_get_missing_symbols (library);
   g_assert_nonnull (missing_symbols);
   g_assert_cmpstr (missing_symbols[0], ==, NULL);
@@ -238,7 +238,7 @@ check_libraries_result (GList *libraries)
   l = g_list_next (l);
   library = l->data;
   g_assert_nonnull (library);
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libtheoraenc.so.1");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libtheoraenc.so.1");
   missing_symbols = srt_library_get_missing_symbols (library);
   g_assert_nonnull (missing_symbols);
   g_assert_cmpstr (missing_symbols[0], ==, NULL);
@@ -268,7 +268,7 @@ check_libraries_result (GList *libraries)
   l = g_list_next (l);
   library = l->data;
   g_assert_nonnull (library);
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libz.so.1");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libz.so.1");
   missing_symbols = srt_library_get_missing_symbols (library);
   g_assert_nonnull (missing_symbols);
   g_assert_cmpstr (missing_symbols[0], ==, NULL);
@@ -383,7 +383,7 @@ check_library_result (SrtLibrary *library)
   const char * const *dependencies;
   gboolean seen_libc;
 
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libz.so.1");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libz.so.1");
 
   missing_symbols = srt_library_get_missing_symbols (library);
   g_assert_nonnull (missing_symbols);
@@ -463,7 +463,7 @@ check_library_libz_missing_sym_result (SrtLibrary *library)
   gboolean seen_libc;
 
   g_assert_nonnull (library);
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libz.so.1");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libz.so.1");
   g_debug ("path to libz.so.1 is %s", srt_library_get_absolute_path (library));
   g_assert_true (srt_library_get_absolute_path (library)[0] == '/');
   g_assert_true (g_file_test (srt_library_get_absolute_path (library), G_FILE_TEST_EXISTS));
@@ -513,7 +513,7 @@ check_missing_libraries_result (GList *libraries)
    * which one it should be. */
   library = l->data;
   g_assert_nonnull (library);
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libgio-MISSING-2.0.so.0");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libgio-MISSING-2.0.so.0");
   g_assert_cmpstr (srt_library_get_absolute_path (library), ==, NULL);
 
   g_assert_cmpint (srt_library_get_issues (library), ==, SRT_LIBRARY_ISSUES_CANNOT_LOAD);
@@ -534,7 +534,7 @@ check_missing_libraries_result (GList *libraries)
   l = g_list_next (l);
   library = l->data;
   g_assert_nonnull (library);
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libglib-2.0.so.0");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libglib-2.0.so.0");
   g_debug ("path to libglib-2.0.so.0 is %s", srt_library_get_absolute_path (library));
   g_assert_true (srt_library_get_absolute_path (library)[0] == '/');
   g_assert_true (g_file_test (srt_library_get_absolute_path (library), G_FILE_TEST_EXISTS));
@@ -612,7 +612,7 @@ check_library_missing_lib_result (SrtLibrary *library)
   const char * const *dependencies;
 
   g_assert_nonnull (library);
-  g_assert_cmpstr (srt_library_get_soname (library), ==, "libMISSING.so.62");
+  g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libMISSING.so.62");
   g_assert_cmpstr (srt_library_get_absolute_path (library), ==, NULL);
 
   missing_symbols = srt_library_get_missing_symbols (library);