Skip to main content

the avatar of openSUSE Heroes

SSL cipher updates

Sometimes it's a good idea to follow best practices. This is what we did by following the recommendations for "general-purpose servers with a variety of clients, recommended for almost all systems" from https://ssl-config.mozilla.org/.

With this, our services accept only TLS 1.2 connections and the latest elliptic curve ciphers. If your client or browser does not support these settings, it's definitely time for you to consider an update.

While we are looking for TLS 1.3 support, the openssl version on our systems (running currently Leap 15.1) does not support it - yet. Once there is an update, we'll let you know.

the avatar of openSUSE Heroes
the avatar of openSUSE News

Tumbleweed Snapshots Rate Top-Notch, Get Krita, QEMU, Mesa Updates

There were 20 openSUSE Tumbleweed snapshots released in the month of November and the snapshots brought in a large amount of updated packages to include KDE Applications 19.08.3, Frameworks 5.64.0 Plasma 5.17.2 and 5.17.3, Linux kernel 5.3.9 and 5.3.11, Mozilla Firefox 70, libvirt 5.9.0 and more. During the month, even Java 12 OpenJDK was dropped from the distribution.

One of the more amazing aspects of Tumbleweed in November, 2020, is that the last 10 snapshots of the month all produced a constant level of stable rating and the last seven had rating of 99 out of 100, according to the Tumbleweed snapshot reviewer.

Closing out the month, there were two snapshots with version upgrades and one snapshot (20191127) that produced some minor changes to a couple Advanced Linux Sound Architecture (ALSA) packages.

The first Tumbleweed snapshot for December arrived with the 20191202 snapshot. Updated were also made to ALSA with the update of the 1.2.1.1 versions of alsa-plugins, alsa-utils and asla, which dropped 25 patches and fixed regressions for the UCM parser. GNOME had several package updates for gedit, evolution and more. The 3.34.2 version of gnome-software fixed a potential threading crash when using flatpak and had an upstream fix for fwupd. An updated version of ModemManager 1.12.0, which is a DBus-activated daemon that controls mobile broadband devices and connections, had a large amount of improvements and changes to include adding support for Mobile Station Based Assisted-GPS in addition to Mobile Station Assisted Assisted-GPS. Revision control tool mercurial 5.2 made some backwards compatibility changes and added some new feature extensions with its quarterly release. The update of perl 5.30.1 triggered an issue recorded on the snapshot reviewer because the newer version and patch that came in it is problematic for embedded Perl usage. Several other packages were updated in the snapshot to include qemu 4.1.93, re2 20191101, xen and xorg-x11-server. The one major version change in the snapshot was an update to terminal multiplexer tmux 3.0a; the major release that allows its users to easily switch between several programs in one terminal offers new features like added support for the SD (scroll down) escape sequence and for underscore colors.

There were several RubyGems packages updated in snapshot 20191128, but the digital paint application Krita had the most fixes. Krita 4.2.8.2 removed the CSV export filter that had not worked in a long time and fixed the crop tool that loses a constant ratio when the handles touched the canvas edge. The 2.22.0 tuned package, which is a daemon for monitoring and adaptive tuning of system devices, fixed a bug that makes use of the self defined profile_dir argument instead of libexecdir. November’’s update of the wireguard package, which is a free and open-source software application and communication protocol for point-to-point connections, added a syncconf command and changed the wg-quick tool to only touch net.ipv4 for v4 addresses.

The 3D Graphics Library Mesa 19.2.6 arrived in snapshot 20191126 and fixed builds on PowerPC and added some stability patches. The digital audio editor and recording application audacity 2.3.3 added several improvements like splitting the equalization effect into two Filter Curve and Graphic EQ effects; the package update also fixed some crashes and the software’s refusal to export some large (4GB) files. The bind 9.14.8, package, which provides a DNS server and client utilities, set a limit on the number of concurrently served pipelined TCP queries and added support for the GeoIP2 Application Programming Interface (API) from MaxMind. The Antivirus Toolkit clamav updated to version 0.102.1 and introduced a new configure option to statically link libjson-c with libclamav and added support for HTTPS. The exo 0.12.10 for the Xfce desktop fix typeahead search regression and firewalld 0.7.2 added 15 new service definitions and provided a new option FlushAllOnReload in firewalld.conf. Improved experimental support was made for building Node.js with Python3 in the nodejs 12.13.1 long-term-support package. Python-networkx 2.4 added support for Python 3.8 and home media solution rygel 0.38.3 were also updated in the snapshot.

In an email this week, Tumbleweed Release manager Dominique Leuenberger indicated that a build fail notification for the python-numba package in openSUSE Factory has not been addressed for the past four weeks and unless somebody steps up and submits fixes, the python-numba will be removed.

the avatar of FreeAptitude
a silhouette of a person's head and shoulders, used as a default avatar

Conferences

This year I haven’t done any drone-related travelling. The sponsorship deal fell through and Rotorama didn’t participate in DCL. I admit I haven’t been practicing as much as I would need to to do any better in the local races either.

So at least I got the world of FOSS to get out of the couch.

Berlin

Tobias organized yet another icon-related hackfest in Berlin earlier this year. This time we had some talented young developers help us out with the tooling. This effort to focus on the tools as well as the assets is continuing and we’ll have some more exciting news to share soon.

Hackfest Berlin 2019 from jimmac on Vimeo.

Thessaloniki

GUADEC continues bringing awesome southern locations, which a vitamin D deprived monkey from a rainy climate can’t appreciate enough. I have fallen back to my comfort zone and only given a short workflow/demo on icon design this year, mainly because Tobias has been giving great talks on focusing on design.

I still have a video to finish editing, but it ended up more of a personal one so I’m not sure I’ll publicize it that much.

the Hague

And we’re closing the year with another design hackfest. Big shout out to Hans de Goede and Carlos Garnacho for organizing a shell hackfest in the Netherlands, and mainly allow some designers crash the party to revive our efforts in attacking some of the downsides of the current overview design. The facilities of Revspace allowed us to meet face to face, mind map on the whiteboard, iterate on some prototypes and move forward considerably compared to the usual cycle spanning months.

a silhouette of a person's head and shoulders, used as a default avatar

Skia branch merged to master

So, the branch implementing VCL drawing based on the  Skia graphics library has been merged in.
All(?) the necessary info about how to enable it etc. are in this mail, but there are things that better fit a blog post than a mail, and in this case that's going to be a table and a picture showing how well it may perform. Note that these results are from running visualbackendtest, which is not really a benchmark, so these numbers should be taken with a grain of salt. It's just a test that draws a gradient, several big polygons (each circle is actually 720 lines) and short text.
And LibreOffice of course does many more things than just paint on the screen. And it's not just about performance of drawing (some of these e.g. do not double-buffer, which makes things like alpha blending complicated and slow). And for some of these we could discuss the complicated reasons for why the numbers are what they are. But still, some of the numbers are interesting:
Render method FPS
Linux gen (X11) 86
Linux gtk3 70-90
Linux OpenGL 45
Linux Skia Vulkan (GPU) 65-90
Linux Skia raster (CPU) 5
Windows GDI 64
Windows OpenGL 40-60
Windows Skia Vulkan (GPU) 175-185
Windows Skia raster (CPU) 75-85


the avatar of Nathan Wolf

Broken Headband on Bluetooth Headphones | Repair Instead of Replace

I purchased a medium of the road Bluedio headset that I have been using in both Bluetooth and wired modes. It’s pretty decent and they fit my head well. Unfortunately, my Magilla Guerrilla handling of it I snapped the headband. I didn’t think I was being rough with it but I do have a track … Continue reading Broken Headband on Bluetooth Headphones | Repair Instead of Replace

the avatar of Federico Mena-Quintero

Moving gnome-shell's styles to Rust

Gnome-shell uses CSS processing code that dates from HippoCanvas, a CSS-aware canvas from around 2006. It uses libcroco to parse CSS, and implements selector matching by hand in C.

This code is getting rather dated, and libcroco is unmaintained.

I've been reading the code for StTheme and StThemeNode, and it looks very feasible to port it gradually to Rust, by using the same crates that librsvg uses, and eventually removing libcroco altogether: gnome-shell is the last module that uses libcroco in distro packages.

Strategy

StTheme and StThemeNode use libcroco to load CSS stylesheets and keep them in memory. The values of individual properties are just tokenized and kept around as a linked list of CRTerm; this struct represents a single token.

Later, the drawing code uses functions like st_theme_node_lookup_color(node, "property_name") or st_theme_node_lookup_length() to query the various properties that it needs. It is then that the type of each property gets determined: prior to that step, property values are just tokenized, not parsed into usable values.

I am going to start by porting the individual parsers to Rust, similar to what Paolo and I did for librsvg. It turns out that there's some code we can share.

So far I have the parser for colors implemented in Rust. This removes a little bunch of code from the C parsers, and replaces it with a little Rust code, since the cssparser crate can already parse CSS colors with alpha with no extra work — libcroco didn't support alpha.

As a bonus, this supports hsl() colors in addition to rgb() ones out of the box!

After all the parsers are done, the next step would be to convert the representation of complete stylesheets into pure Rust code.

What can we expect?

A well-maintained CSS stack. Firefox and Servo both use the crates in question, so librsvg and gnome-shell should get maintenance of a robust CSS stack "for free", for the foreseeable future.

Speed. Caveat: I have no profile data for gnome-shell yet, so I don't know how much time it spends doing CSS parsing and cascading, but it looks like the Rust version has a good chance of being more efficient.

The selectors crate has some very interesting optimizations from Mozilla Servo, and it is also now used in Firefox. It supports doing selector matching using Bloom filters, and can also avoid re-cascading child nodes if a change to a parent would not cause its children to change.

All the parsing is done with zero-copy parsers thanks to Rust's string slices; without so many malloc() calls in the parsing code path, the parsing stage should really fly.

More CSS features. The selectors crate can do matching on basically all kinds of selectors as defined by recent CSS specs; one just has to provide the correct hooks into the calling code's representation of the DOM tree. The kind of matching that StTheme can do is somewhat limited; the rustification should make it match much more closely to what people expect from CSS engines in web browsers.

A well-defined model of property inheritance. StThemeNode's model for CSS property inheritance is a bit ad-hoc and inconsistent. I haven't quite tested it, but from looking at the code, it seems that not all properties get inherited in the same way. I hope to move it to something closer to what librsvg already does, which should make it match people's expectations from the web.

In the meantime

I have a merge request ready to simply move the libcroco source code directly inside gnome-shell's source tree. This should let distros remove their libcroco package as soon as possible. That MR does not require Rust yet.

My playground is here:

This does not compile yet! I'll plug things together tomorrow.

(Oh, yes, the project to redo Firefox's CSS stack in Rust used to be called Stylo. I'm calling this Stylish, as in Styles for the Shell.)

the avatar of Nathan Wolf

the avatar of Nathan Wolf