TheC64 X-Windows Mod
openSUSE Tumbleweed – Review of the week 2023/06
Dear Tumbleweed users and hackers,
7 days – 7 snapshots. No surprise there, is it? Tumbleweed keeps on delivering snapshots in predictable ways. Nevertheless, there was a small surprise to me this week: a new glibc version (2.37) was submitted. I already feared that this would be blocking staging for weeks to come. But wrong I was! Just 54 hours after the SR was created, the update found its way into openSUSE:Factory – and 24 hours later it’s available to the users to install after passing openQA. Of course, that’s not the only thing that happened though, it’s just the most recent thing that stunned me.
The 7 snapshots (0202, 0204…0209) brought you these changes:
- Mozilla Firefox 109.0.1
- Mozilla Thunderbird 102.7.1 & 102.7.2
- NetworkManager 1.40.12
- GStreamer 1.22.0
- openSSL 3 is now used by default – finally; openssl 1.1 (and 1.0) are still available in the repo
- KDE Gear 22.12.1
- PHP 8.1.15
- Linux kernel 6.1.10
- glibc 2.37
- memtest86+ 6.1.0
For the next week (and beyond) these things are in the pipeline:
- KDE Plasma 5.27
- Rust 1.67 (likely to wait for 1.67.1 to address Mesa build failures)
- Binutils 2.40
- Enabling of python311 modules (keeping python 3.10 as the default interpreter in the first step)
- Staging:H still tests ruby 3.2 as the new default (yast2-packager is the only failing package left)
- Staging:L holds some packages breaking others stuff taking more time, like gpg2, and ant
- Staging:Gcc7 tests the impact of using GCC 13 as the default compiler
Audacity, OpenSSL, systemd Update Tumbleweed
The past week has produced a few openSUSE Tumbleweed snapshots and automatic migrations kicked off for the first snapshot of February.
Some of the packages covered this week include updates for the GNU Compiler Collection, GStreamer, KDE Gear, those mentioned in the headline and several more.
Snapshot 20230208 provided the second update of ImageMagick listed in this post; the 7.1.0.61 version clarified some documentation and moved around the -set profile command-line interface handling. Various language translations were made with the 6.4.36 fetchmail update. An update of xwayland 22.1.8 fixed a second possible Out-of-band remote access OOB access. The backward compatibility package also fixed CVE-2023-0494, which could have allowed for local privilege elevation on systems where an X server runs privileged and remote code execution for SSH X forwarding sessions. The snapshot had several other package updates including hwdata 0.367, ncurses 6.4.20230128, texinfo 7.0.2, ceph and more.
The 20230207 snapshot brought an update of the network infrastructure package dnsmasq 2.89; the package fixed a bug that resulted in the corruption of the DNS cache internal data structures and logging of “cache internal error”. The changelog notes that “this has only been seen in one place in the wild, and it took considerable effort to even generate a test case to reproduce it, but there’s no way to be sure it won’t strike, and the effect is to break the cache badly.“ The policy analysis tools for SELinux, setools, updated to version 4.4.1 and updated the permission map. The package also has some code cleanup and replaced a deprecated function that was removed in NetworkX 3.0 version. An improved codec selection logic, better handling of latency, and an improved frame discard to avoid audio/video desynchronization was made with the webkit2gtk3 2.38.4 update. An update of kernel-firmware 20230125 and the Linux kernel-source 6.1.10 appeared to have several AMD additions and arm64 fixes respectively.
Audio software audacity updated to version 3.2.4 in snapshot 20230204. Audio can now be shared publicly on audio.com thanks to the upgrade. A new toolbar with cut/copy/paste buttons have also been added. KDE Gear 22.12.2 arrived in the rolling release soon after its announcement and file manager Dolphin fixed the size of directories if a subdirectory fails to open. A startup crash was fixed with the package’s Kalendar update. Video editor Kdenlive also fixed a crash and a screen split that did not save subclips. Georgian translations were made in the libstorage-ng 4.5.68 update and php8 8.1.15 had multiple fixes to including fixing a wrong comparison in block optimisation pass after an opcode update. The package also handles speed-optimized hash algorithm XXH3 better.
An update of the Mozilla Firefox browser to version 109.0.1 was made in snapshot 20230202. The update had some emoji character fixes. An update of NetworkManager 1.40.12 had a fix involving concurrent invocation of iptables in IPv4 shared mode. The library for configuring and customizing font access, fontconfig, updated to version 2.14.2. The package fixed a typo in descriptions, adjusted an indentation and added a rendering option.
An OpenSSL change from version 1.1.1s to 3.0.7 was made in the snapshot. The new version is set as the default and was a major project spanning a long period of time to make it available to users. The changes relaxes the crypto-policy requirement for regression tests and it removed some patches. OpenSSL 3.0 is a major release and various packages had to be adapted. The new version has tons of improvements. The build and installation procedure has changed significantly and many structures have been made opaque in the new version. More information is available in the migration guide.
Text editor vim 9.0.1270 had multiple fixes to include a few code that was indented more than necessary and a fix that now recognizes the NetworkManager connection. An update of GStreamer 1.22.0 and several of its plugins with the same version were updated in the snapshot. Some AV1 video codec improvements were made and a couple WebRTC supporting efforts were made. There is also new plugins for Amazon AWS storage and audio transcription services.
Snapshot 20230201 had a few packages updated like gcc13. The 13.0.1 plus version added support for new front-ends Rust and Modula-2. The GNU compiler also fixes a Go frontend to fix failed builds on s390x. The first snapshot of the month was significant as it kicks off automatic migrations with zypper dup pertaining to the i586 carve-out from Factory. Changing the repo could include a bunch of package downgrades as the rebuild counters are not synced across projects, according to notes from openSUSE’s last release engineering meeting. By the end of March, the expectation is that all users will have completed the migration; by then Tumbleweed will have disable build/publish of i586 packages, except for the roughly 1,800 packages identified in the Staging:O workflow of the Factory codebase.
The end-of-month snapshot, 20230131, provided the first update of ImageMagick with the 7.1.0.60 version. The image editor had only three commits, which were mostly cleaning up some code. The systemd 252.5 update introduced a preset to allow systemd user units for MicroOS users and added a transactional-update-notifier that allows for users of the distribution, which is optimized for cloud and container deployments, to have desktop notifications about transactional updates either succeeding or failing. Another package to update in the snapshot was xterm 378 and it improved some descriptions and several checks like one that improved a check for unsupported formatting characters.
Commodore 64 as a Modern Word Processor
Installing syslog-ng 4.0.1 on FreeBSD
Version 4.0.1 of syslog-ng was released a month ago. Unfortunately, the new release does not compile on FreeBSD. It was a temporary problem in the environment generating the source tgz. The next release is still almost a month away, but you can compile syslog-ng 4.0.1 yourself from my unofficial ports Makefile.
Learn how from my latest blog at https://www.syslog-ng.com/community/b/blog/posts/installing-syslog-ng-4-0-1-on-freebsd

syslog-ng logo
Building a unikernel that runs WebAssembly - part 1
Hackweek 22 took place last week. During this week all the SUSE employees are free to hack on whatever they want. This one of the perks of working at SUSE 😎.
This time my personal project has been about building a unikernel that runs WebAssembly.
I wanted this blog post to contain all the details about this journey. However I realized this would have been too much for a single post. I hence decided to split everything into smaller chunks. I’ll update this section to keep track of all the posts.
In the meantime, you can find the code of the POC here.
Why
There are multiple reasons why I did that, but I don’t want to repeat what I wrote inside of the project description. Learning and fun goals aside, I think there’s actually a good reason to mix unikernels and WebAssembly.
From the application developer POV, porting/writing an application to the unikernel is not an easy task. The application and all its dependencies have to support the target unikernel. Some patching might be required inside of the whole application stack to make it work.
From the unikernel maintainers POV, they have to invest quite some energies to ensure any kind of application can run in a seamless way on top of their platform. They don’t know which kind of system primitives the user applications will leverage, this makes everything harder.
On the other hand, when targeting a WebAssembly platform (think of Spin or Spiderlightning), the application has a clear set of capabilities that have to be provided by the WebAssembly runtime.
If you look at the Spiderlightning scenario, an application might be requiring
Key/Value store capabilities at runtime. However, how these capabilities are
implemented on the host side is not relevant to the application. That means
the same .wasm module can be run by a runtime that implements the K/V store
using Redis or using Azure Cosmos DB.
That would be totally transparent to the end user application.
You might see where I’m going with all that…
If we write a unikernel application that runs WebAssembly modules and supports a
set of Spiderlightning APIs, then the same Spiderlightning application could be
run both on top of the regular slight runtime and of this unikernel.
All of that without any additional work from the application developer. The Wasm module wouldn’t even realize that. The complexity would fall only on the unikernel developer who, whoever, would have a clear set of functionalities to implement (as opposed to “let’s try to make any kind of application work”).
How
Sometimes ago I stumbled over the RustyHermit project, this is a unikernel written in Rust. I decided to use it as the foundation to write my unikernel application.
Building a RustyHermit application is pretty straightforward. Their documentation, even though is a bit scattered, is good and their examples help a lot.
The cool thing is that RustyHermit is part of Rust nightly, which makes the whole developer experience great. It feels like writing a regular Rust application.
Obviously you cannot expect all kind of Rust crates to just work with RustyHermit. You will see how that influenced the development of the POC.
The next sections go over some of the major challenges I faced during the last week. I’ll share more details inside of the upcoming blog posts (see the disclaimer section at the top of the page).
The WebAssembly runtime
Unfortunately Wasmtime, my favorite WebAssembly runtime,
does not build on top of RustyHermit. Many of its dependencies expect libc
or other low level libraries to be around.
The same applies to wasmer.
I thought about using something like WebAssembly Micro Runtime (WAMR), but I preferred to stick with something written in Rust and have the “full RustyHermit experience”.
After some searching I found wasmi a pure Rust WebAssembly runtime. This works fine on top of RustyHermit, plus its design is inspired by the one of Wasmtime, which allowed me to reuse a lot of my previous knowledge.
WebAssembly Component Model
Spiderlightning leverages the WebAssembly Component Model proposal to offer capabilities to the WebAssembly guests and to allow the host to consume capabilities offered by the WebAssembly guest.
The communication between the host and the guest happens using types defined with the Wasm Interface Type.
To give some concrete examples, the demo I’m going to run leverages the WebAssembly Component Model in these ways:
- The guest asks the host to start a HTTP server. When doing that, the guest
informs the host about the HTTP routes that have to be registered, plus
the names of its internal handlers (the functions that have to be executed).
This is done by using the
http-servertypes. In this case it’s the guest that leverages capabilities offered by the host. - The host handles the incoming HTTP requests using the routing
information provided by the guest. The http handlers mentioned before are
functions exposes by the WebAssembly guest. The server is now consuming
capabilities offered by the guest. The communication is done using the
http-handlertypes. - Some of the http handlers defined by the guest are also interacting with
a Key/Value store. Also in this case the guest is leveraging a set of
capabilities offered by the host. These are defined using the
keyvaluetypes.
As you can see there are many WIT types involved. For each one of them we
need code both inside of the guest (a SDK basically) and on the host (the
code that implements the guest SDK).
This code can be scaffolded by a cli tool called wit-bindgen,
which generates host/guest code starting from a .wit file.
In this case I only had to implement the host side of these interfaces inside of the unikernel.
The code generated by wit-bindgen is doing low level operations using the
WebAssembly runtime. The code to be scaffolded depends on the programming language
and on the WebAssembly runtime used on the host side.
Obviously the wasmi WebAssembly runtime was not supported by wit-bindgen,
hence I had to extend wit-bindgen to handle it. The code can be found inside of
this fork, under the wasmi
branch.
With all of that in place, I scaffolded the host side of the Key/Value capability and I made a simple implementation of the host traits. The host code was just emitting some debug information. I was then able run the vanilla keyvalue-demo from the Spiderlightning project. 🥳
Summary
You made to the bottom of this long post, kudos! I think you deserve a prize for that, so here we go…
This is a recording of the unikernel application running the Spiderlightning http-server demo.

I hope you enjoyed the reading. Stay tuned for the next part of the journey. This will cover Rust async, Redis and some weird errors.
Syslog-ng 101, part 6: Destinations and log path
This is the sixth part of my syslog-ng tutorial. Last time, we learned about syslog-ng source definitions and how to check the syslog-ng version. Today, we learn about syslog-ng destinations and the log path. At the end of the session, we will also perform a quick syntax check.
You can watch the video on YouTube:
Or you can read the rest the tutorial as a blog at: https://www.syslog-ng.com/community/b/blog/posts/syslog-ng-101-part-6-destinations-and-log-path

syslog-ng logo
Hack Week 22: An Art Project
Back in 2012, I received a box of eight hundred openSUSE 12.1 promo DVDs, which I then set out to distribute to local Linux users’ groups, tech conferences, other SUSE crew in Australia, and so forth. I didn’t manage to shift all 800 DVDs at the time, and I recently rediscovered the remaining three hundred and eighty four while installing some new shelves. As openSUSE 12.1 went end of life in May 2013, it seemed likely the DVDs were now useless, but I couldn’t bring myself to toss them in landfill. Instead, given last week was Hack Week, I decided to use them for an art project. Here’s the end result:

Making that mosaic was extremely fiddly. It’s possibly the most annoying Hack Week project I’ve ever done, but I’m very happy with the outcome 
The backing is a piece of 900mm x 600mm x 6mm plywood, primed with some leftover kitchen and bathroom undercoat, then spray pained black. I’d forgotten how bad spray paint smells, but it makes for a nice finish. To get the Geeko shape, I took the official openSUSE logo, then turned it into an outline in Inkscape, saved that as a PNG, opened it in GIMP, and cut it into nine 300mm x 200mm pieces which I then printed on A4 paper, stuck together with tape, and cut out to make a stencil. Of course, the first time I did that, nothing quite lined up, so I had to reprint it but with “Ignore page margins” turned off and “Draw crop marks” turned on, then cut the pages down along the crop marks before sticking them together the second time. Then I placed the stencil on the backing, glued the eye down (that just had to be made from the centre of a DVD!) and started laying out cut up DVD shards.

I initially tried cutting the DVDs with tin snips, which is easy on the hands, but had a tendency to sometimes warp the DVD pieces and/or cause them to delaminate, so I reverted to a large pair of scissors which was more effort but ultimately less problematic.
After placing the pieces that made up the head, tail, feet and spine, and deciding I was happy with how they looked, I glued each piece down with superglue. Think: carefully pick up DVD shard without moving too many other shards, turn over, dab on a few tiny globs of superglue, lower into place, press for a few seconds, move to next piece. Do not get any superglue on your fingers, or you’ll risk sticking your fingers together and/or make a gluey mess on the shiny visible side of the DVD shards.
It was another three sessions of layout-then-glue-down to fill in the body. I think I stuck my fingers together about six, or eight, or maybe twenty times. Also, despite my best efforts to get superglue absolutely nowhere near the stencil at all, when I removed the stencil, it had stuck to the backing in several places. I managed to scrape/cut that off with a combination of fingernails, tweezers, and the very sharp knife in my SLE 12 commemorative Leatherman tool, then touched up the remaining white bits with a fine point black Sharpie.

Judging from the leftover DVD centre pieces, this mosaic used about 12 DVDs in all, which isn’t very many considering my initial stash. I had a few other ideas for the remainder, mostly involving hanging them up somehow, which I messed around with earlier on while waiting for the paint to dry on the plywood.
One (failed) idea was to use a cutting wheel on my Dremel tool to slice half way through a few DVDs, then slot them into each other to make a hanging thingy that would spin in the wind. I was unable to make a smooth/straight enough cut for this to work, and superglue doesn’t bridge gaps. You can maybe get an idea of what I was aiming at from this photo:

My wife had an idea for a better way to do this, which is to take a piece of dowel, cut slots in the sides, and glue DVD halves into the slots using Araldite (that’s an epoxy resin, in case you didn’t grow up with that brand name). I didn’t get around to trying this, but I reckon she’s onto something. Next time I’m at the hardware store, I’ll try to remember to pick up some suitably sized dowel.
I did make one somewhat simpler hanging thingy, which I call “Geeko’s Tail (Uncurled)”. It’s just DVDs superglued together on the flat, hanging from fishing line, but I think it’s kinda cool:

Also, I’ve discovered that Officeworks has an e-waste recycling program, so any DVDs I don’t use in future projects needn’t go to landfill.
Update 2023-02-20: For photos of the mosaic, plus wallpapers made from the photos, see https://github.com/tserong/hackweek22
Post-mortem: Failing email deliveries on 6th February, 2023
Novo forum em portugues de openSUSE
Olá Geekos.
Estamos animados com o nosso novo fórum em português. Esperamos ter a sua ajuda para construir uma comunidade envolvente no nosso idioma e para a nossa querida distribuição Linux, o openSUSE.
O fórum em português está disponível em: https://forums.opensuse.org/c/portugues-portuguese/130
Com este novo canal, queremos unir a comunidade portuguesa de usuários do openSUSE e melhorar o apoio aos nossos usuários. Crie uma conta e comece fazer perguntas ou ajudar a responder dúvidas de outras pessoas.
Esse novo meio de comunicação é um complemento aos canais do Telegram e Matrix, e ainda continuaremos com o suporte nos diversos meios. O fórum oferece algumas vantagens em relação às mensagens instantâneas, como, por exemplo, uma melhor ferramenta de busca e armazenamento a longo termo.
Esperamos que o fórum cresça e melhore gradativamente com a sua ajuda.
Divirta-se!
#English
Hello Geekos.
We are excited to bring you our new Portuguese forum. We look forward to build, with your help, an engaging community in our language for our beloved Linux distribution, openSUSE.
The Portuguese forum is available at: https://forums.opensuse.org/c/portugues-portuguese/130
With this new place, we want to unite the Portuguese openSUSE community and continue to provide mutual support to our users. Do not hesitate to create an account, ask questions and help other users.
This new communication channel complements our Telegram and Matrix channels, and we will continue to provide support on each platform. The forum offers a few advantages compared to instant messaging, such as a better search mechanism and better long-term data retention.
We hope that the Portuguese forum will gradually grow and improve with your help.
Have a lot of fun!