Nuvola 4.15 Released

Nuvola 4.15 was released. It brings the 28th streaming service (Jamendo), officially supports OpenSUSE, uses client-side window decorations by default (can be changed), fixes a few memory leaks and continues the quest to improve the quality of the entire codebase.

Jiří Janoušek
Nuvola News
7 min readDec 28, 2018

--

To install Nuvola, follow installation instructions at the Nuvola Apps Repository. To update Nuvola, run flatpak update --system && flatpak update --user in terminal (as a regular user, not root/sudo) or use a package manager which supports Flatpak (e.g., a recent GNOME Software application with the Flatpak plugin).

Update December 30th: Repository PGP key needs to be updated on your system

Chances are that you see this error when running flatpak update from a comman line: error: GPG signatures found, but none are in trusted keyring. The error is a bit cryptic and doesn’t tell the real issue. Anyway, the GPG key used to sign Nuvola Flatpaks Repository needs to be updated on your machine. I apologize for the inconvenience. It should not happen again.

The update of a PGP key consists of a few easy steps. If you have any troubles, add a comment to the issue in our bug tracker and I’ll help you.

  • Open a terminal emulator and run the command flatpak remote-list to discover the name of Nuvola Flatpak Repository “remote”. It should be “nuvola” as in the example below but it may differ.
flatpak remote-list 
Name Options
flathub system
gnome-nightly system
nuvola system
org.gnome.Builder-origin system,no-enumerate
  • Then you can update the PGP key. Replace “nuvola” with the real remote name from the previous step and run these two commands:
wget https://dl.tiliado.eu/flatpak/tiliado-flatpaks.gpgflatpak remote-modify \
--gpg-verify --gpg-import=tiliado-flatpaks.gpg "nuvola"
  • Now you can update Nuvola Flatpaks with flatpak update.

What’s New for Users

New streaming service: Jamendo

Maintainer: Jiří Janoušek • Flatpak packageSource code

Nuvola 4.14 adds Jamendo as the 28th supported streaming service.

In the rise of more permissive models and movements such as Open Source and the FreeCulture Movement, new ideas on how to digitally share creative works came to life. Creative Commons brought an alternative to the automatic “all-rights reserved” copyright, eventually leading a small group of people in Luxembourg to found in 2004 the pioneering website Jamendo.com, the first platform to legally share music for free from any creator under Creative Commons licenses.

Jamendo is all about connecting musicians and music lovers from all over the world. Our goal is to bring together a worldwide community of independent music, creating experience and value around it.

On Jamendo Music, you can enjoy a wide catalog of more than 500,000 tracks shared by 40,000 artists from over 150 countries all over the world. You can stream all the music for free, download it and support the artist: become a music explorer and be a part of a great discovery experience!

Source: About Jamendo

Installation instructions for OpenSUSE

Although you could install and use the flatpaks of Nuvola in OpenSUSE for a long time, there were no official installation instructions and no official support. This has changed and Nuvola is now officially supported in OpenSUSE too [GitHub ticket]. Feedback is welcome!

You can browse and install Nuvola apps with KDE Discover in OpenSUSE KDE Plasma Workstation.

During testing, I’ve found two bugs that spoil the Flatpak user experience in OpenSUSE:

I was quite surprised that KDE Discover lists apps from all flatpak repository branches [GitHub ticket]. GNOME Software shows only the default branch (stable), but KDE Discover also offers experimental and unstable branches which are not supposed to be installed by users unless I need help with debugging. I removed AppStream metadata for the non-stable branches, so they shouldn’t show up in any software manager anymore.

Client-side decorations are now default

During testing Nuvola with KDE Plasma desktop environment, I noticed thick white borders around the Nuvola main window, which are quite ugly [GitHub ticket].

Thick white borders if client-side window decorations are disabled.

Client-side window decorations don’t suffer from this theming inconsistency issues and are now used by default for that reason. However, you can still change window decorations or theme in Appearance preferences as you wish. The goal is to provide a beautiful default appearance, not to prevent you from customization.

Client-side window decorations don’t suffer from theming inconsistency issues and are used by default for that reason.

NPR One release 1.2

Maintainer: Jiří Janoušek • Flatpak packageSource code

Changes since version 1.1:

  • The filter of external addresses, which are opened in the user’s default web browser, was adjusted to allow NPR One login pages inside Nuvola [GitHub ticket]. Thanks to Evan D for reporting the issue.

Other changes

  • A broken detection of the presence of Nvidia GL drivers was fixed [GitHub ticket]. Thanks to Artem Hluvchynskyi for reporting this issue.
  • A memory corruption, which was silent unless special run-time memory checks of GNU C library were enabled, was fixed [GitHub ticket]. Thanks to Frederic Crozat for reporting the issue. The memory checks are now enabled during the development of Nuvola to avoid similar bugs in future [GitHub ticket].
  • The filter of external addresses was adjusted to allow Google Sign-In pages used by Jamendo.
  • Various memory leaks and invalid memory access issues were fixed in an ongoing effort to improve the quality of Nuvola & Diorite codebase. More details are provided in the Under the hood section below.

What’s New for Script Maintainers

  • Nuvola SDK commands new-projectand convert-projectnew-project, update modification time of files with zero modification time, which were typically copied from within Nuvola ADK [GitHub ticket]. They might pose problems to some software, e.g. Unison file synchronizer.
  • Nuvola SDK command check-project detects files with zero modification times. [GitHub ticket]

What’s New for Packagers

  • New release: NPR One 1.2 [Source code]: The filter of external addresses was adjusted to allow NPR One login pages. [GitHub ticket]
  • New script: Jamendo [Source code].
  • Diorite & Nuvola Runtime: New dependency: gee-0.8 >= 0.20.1.
  • Diorite & Nuvola Runtime: Build errors with Valac 0.43.x were addressed.
  • Diorite: The code style checker Valalint is run by default unless--no-vala-lint is passed.
  • Diorite & Nuvola Runtime: A few memory leaks and memory corruption issues were fixed.

Under the hood

The effort to improve documentation, unit tests and the quality of Diorite & Nuvola Runtime codebase continues.

  • Improved documentation, test cases and refactoring: VariantUtils, Arrays.from_2d_uint8, String.unmask.
  • Runtime memory checks of GNU C library are enabled (via MALLOC_CHECK_ and MALLOC_PERTURB_ environment variables) during development to detect some memory corruption and use-after-free errors [GitHub ticket]. See also Diagnosing Memory Heap Corruption in glibc with MALLOC_CHECK_, MALLOC_CHECK_ and MALLOC_PERTURB_, MALLOC_PERTURB_ helps find real bugs.
  • Unit tests of Diorite are also run with Valgrind (a tool to find memory leaks, invalid memory access, etc.), which revealed a few memory leaks (see below). Before that, I needed to investigate why Valgrind was not working properly inside a Flatpak sandbox and I then reached the upstream with a solution [Freedesktop SDK ticket].
  • I also found out that Valac generates code that doesn’t free memory properly for an out parameter from varargs. I reached upstream [Vala ticket] and helped with the testing of proposed fix (to be released in Valac 0.44.0).
  • Valgrind helped me to discover that some GLib data structures may cause a memory leak in Vala, so I started replacing them with data structures from Gee collections library. The tricky methods are GLib.HashTable.take, GLib.List.remove, GLib.SList.remove, GLib.List.delete_link, GLib.SList.delete_link. I still need to investigate the issue further and report it upstream.
  • Another leak may occur in methods with “out” parameters and inner GLib.Errors [example].

Nuvola Contributes to Good Angel Foundation

Jiri Janousek, the core developer of Nuvola Apps project, is glad to contribute a part of the project’s revenue to the Good Angel foundation. This way, he can regularly help families with children, which face financial distress as a result of severe illness. Even small monetary donations can help these families overcome a tough period.

Nuvola contributes to Good Angel Foundation.

Thank You for Your Support

At the time of writing, the awesome people listed below and a few others are Nuvola Patrons, who support the development of Nuvola Apps Runtime. Thank you all!

Christian Dannie Storgaard, José Antonio Rey, Ryan Wagner, Simon Law, Bart Libert, Chris Beeley, Andrew Azores, Bryan Wyatt, Balázs, Denton Davenport, Ben MacLeod, Duco van Amstel, David Wiczer, Andrew Allen, Nathan Warkentin, Chuck Talk.

If you are a Nuvola Patron, but your name is not listed, you have to enable the “Show my name and a link to my external profile page in a list of Patrons.” option in your profile settings. Obviously, it is not enabled by default to protect the privacy of our patrons.

--

--

Jiří Janoušek
Nuvola News

Software engineer, GNU/Linux lover, European citizen.