Welcome to This Week in Solus, Install #47. It’s been a real extraordinary week for us, rolling out updated GNOME and gstreamer stacks, LLVM and systemd upgrades, improvements to linux-steam-integration, and more! So let’s get started.
With the release of the GNOME 3.26.1 stack last week, Bryan and I planned out our OMG Weekendtoberfest, deciding to upgrade both our GNOME stack as well as gstreamer. The idea behind this was to reduce the amount of rebuilds that would need to occur, since most applications would need to be rebuilt as a result of glib2, libsoup, GTK3, etc. upgrades anyways.
Spreadsheet Simulator 2017
In total, roughly 400 packages were either upgraded or rebuilt across those two stack upgrades. Part of the GNOME stack upgrade also enabled us the opportunity to patch GNOME Control Center to integrate well into Solus, such as ensuring “Check for update” functionality that is exposed will open up the Solus Software Center. Mutter was patched to resolve an issue that would cause desktops using it (Budgie Desktop and GNOME Shell in our case) to crash if a maximized window was closed. Furthermore, we’re testing a patch for Mutter to hopefully reduce CPU usage when we’re using NVIDIA drivers.
Time was spent on improving the state of Tracker and tracker-miners during the stack upgrade as well. Tracker has been updated to the 2.x series, with the current release being 2.0.1. tracker-miners uses our stateless XDG autostart directory and has been extensively enabled to support a plethora of audio, video, and multimedia formats.
gstreamer was updated to the latest of the 1.12 series, 1.12.3. 1.12.3 is primarily a bug fix release, however going from 1.10.x to 1.12 means a multitude of new features for Solus users, such as:
msdkplugin for Intel’s Media SDK for hardware-accelerated video encoding and decoding on Intel graphics.
matroskamuxhas acquired support for muxing G722 audio.
As part of this OMG Weekendtoberfest, we upgraded our Meson and synced ypkg with some changes and fixes we had in git, specifically:
We upgraded our mozjs as well as moved towards completely deprecating previous versions. There is still more work to be done on that front, but we’re really happy with the progress that has been made so far.
An unexpected part of this stack upgrade was in fact systemd, which had originally been slated to be upgraded at some later point, indicated on our Meta Post-Release blues task. However as a result of some additional dependencies in the GNOME 3.26 stack, Ikey spent Sunday evening bringing our systemd up to the latest (which is 235, at the time of the event and of this publication), as well as ensuring a smooth transition with libgudev now being a separate library.
We look forward to evaluating all the new features and functionality in the newer systemd releases, such as Dynamic Users, in the future!
You would think that two stack upgrades and systemd would be enough for us, but why stop there? On Monday, Ikey upgraded our LLVM to 5.0.0.
More polish and touches on the GNOME stack and various GNOME or GTK applications were made, such as:
Our GNOME desktop branding was updated to show basic file type information in Nautilus' list view, as well as experimenting with enabling the Create Link (symbolic links) out-of-the-box.
Linux Steam Integration has seen 3 releases this week and features a new “liblsi-intercept”, which controls the dynamic linking for Steam binaries, resolving some long-standing issues such as crashes on start, broken fullscreen views, and ensures that the Steam client uses OS-provided libraries. liblsi-intercept also provides a whitelist to allow Steam to continue to load its own private libraries and our intercept behavior is controlled on a process-name basis.
What does this mean? Well it means the Steam client is now using more system libraries, such as SDL, which fixes crashes as well as fullscreen issues when watching a game trailer in the store.
Our liblsi-intercept also includes a fallback “vendor offendor” mode, ensuring certain vendored libraries are blacklisted, which ensures many games, including Black Mesa, will work correctly on the open source drivers. This matters for distributions using the new C++ ABI and games shipping the old C++ ABI as a vendored lib.
It resolves the typical issue seen in Steam on open source drivers:
libGL error: unable to load driver: i965_dri.so libGL error: driver pointer missing libGL error: failed to load driver: i965 libGL error: unable to load driver: i965_dri.so libGL error: driver pointer missing libGL error: failed to load driver: i965 libGL error: unable to load driver: swrast_dri.so libGL error: failed to load driver: swrast
Solus users currently have a git-based Linux Steam Integration, that features further improvements to liblsi-intercept. For starters, we ensure use of vendor-provided libGL, libGLES*, libGLU, and libGLEW. During testing with DiRT Rally, it was discovered that it had shipped with altered sonames of its libraries and linked to those, ensuring they never match the system versions. This however will lead to a mixed SDL2 stack for those disabling the Steam runtime, and in turn forces older builds of SDL to be used. To combat this, we intercept soname requests during early linking based on a simple pattern, and if they don’t match the expected target name, we’ll rewrite the request in place to force the linker to look for the real soname. In combination with the existing lsi_blacklist_vendor function, this ensures that a game looking for
libSDL2-2.0.5.so will correctly load the system’s own
We have taught liblsi-intercept to rewrite dlopen requests for XNA. This means that Mono games such as Stardew Valley, which previous loaded paths locally using
dlopen(), are now detected and and we attempt to rewrite those to meet system paths, forcing
dlopen() to resolve to system SDL, openAL, etc.
Lastly, liblsi-intercept now has rewrite rules for ABI-stable SDL2 components (SDL2_TTF, etc) and we’ll also now blacklist any attempts at loading vendored security-critical libraries, such as OpenSSL or curl.
Driverless printing is now supported under Solus, meaning if you have a driverless printer (AirPrint, IPP Everywhere, etc.), it’ll just show up in the printer list (assuming you’ve rebooted since upgrading on stable). No need to add or configure it!
Alongside all the above mentioned improvements and upgrades, a staggering amount of packages have been updated. We certainly won’t go over the entire list, but here’s a few that might stand out!