The syslog-ng Insider 2023-10: contribute; parallelize; compatibility;
The October syslog-ng newsletter is now on-line:
- Why contribute to syslog-ng upstream?
- Accelerating single TCP connections in syslog-ng: parallelize()
- Backward compatibility in syslog-ng by using the version number in syslog-ng.conf
It is available at https://www.syslog-ng.com/community/b/blog/posts/the-syslog-ng-insider-2023-10-contribute-parallelize-compatibility

syslog-ng logo
Leap Micro 5.5 availability and Leap Micro 5.3 EOL
A new version of the modern lightweight host operating system Leap Micro 5.5 is now available. All documents including Release notes from SLE Micro 5.5 documentation space are also applicable for Leap Micro, as Leap Micro is essentially a rebranded SLE Micro.
It’s important to mention that this also means that Leap Micro 5.3 is now End of Life (EOL). Users of Leap Micro 5.3 are strongly advised to consider upgrading to either the Leap Micro 5.4 or 5.5 release. This ensures access to the latest features, security enhancements, and ongoing support.
One of the standout features of Leap Micro 5.5 is its SELinux enhancements. Security-Enhanced Linux (SELinux) has received a significant boost. It brings podman-docker and hyper-v support for AArch64 for a more robust and secure computing experience for users.
Leap Micro 5.5 has podman 4.4 which introduces podman quadlets. If you haven’t tried quadlets yet, please make sure to check our Nextcloud deployment using quadlets. We also ship podman-docker, which is a podman wrapper that can be used together with docker-compose, or at least once the fix for Bug #1215926 is released for SLE and Leap Micro.
Cockpit 298 container management interface noticeably matured, as I’m finally able to use Cockpit to manage all of my home workloads.

Users new to ImmutableOS space (systems with read-only /root) are advised to read transactional update guide. Users can also use Toolbox to install additional software without a need to reboot into a new snapshot, this comes especially handy for debugging where the reboot is not an option.
We’ve made a short YouTube playlist with a few tutorials on how to put Leap Micro to practical use at home.
Wayland Display Server on openSUSE Tumbleweed in 2023
Innovation Marathon Hack Week Set for November
Hack Week 23 is set to blaze a trail of innovation this November.
This annual tradition started in 2007, this annual tradition, which somehow made up the difference for the number of the event to now, mirrors the year; it brings together SUSE employees, openSUSE contributors and open-source developers and enthusiasts from around the globe together for a week of uninterrupted experimentation and boundary-pushing.
This year’s Hack Week is scheduled from Nov. 6 to 10 and participants are gearing up to harness their collective creativity to innovate, contribute and expand the open-source landscape.
SUSE employees step out of their regular roles to embark on a week-long journey of collaboration, innovation and socialization. This year’s Hack Week promises to be a dynamic convergence of talent, expertise, and passion, as hackers collaborate across teams and continents to push boundaries of technology.
Hack Week is more than just a coding marathon; it’s a testament to SUSE’s commitment to nurturing open-source collaboration across the globe. Participants bring a diverse set of skills, knowledge, passion and perspectives to build and develop something new; this fosters an environment where creative ideas flourish and solutions take shape.
Past Hack Weeks having produced groundbreaking advancements and disruptive innovations. A few to mention are openQA, Aeon (formally known as MicroOS’ GNOME Desktop) and Weblate, which is used by openSUSE for translations.
While the global open-source community eagerly anticipates the commencement of Hack Week 23, individuals are already gearing up by compiling lists of projects they intend to undertake or contribute to.
Stay tuned to SUSE’s official communications channels and social media platforms for updates, announcements, and a front-row seat to the action as Hack Week 23 takes center stage this November.
How to indicate device compatibility for your app in MetaInfo data
At the moment I am hard at work putting together the final bits for the AppStream 1.0 release (hopefully to be released this month). The new release comes with many new new features, an improved developer API and removal of most deprecated things (so it carefully breaks compatibility with very old data and the previous C API). One of the tasks for the upcoming 1.0 release was #481 asking about a formal way to distinguish Linux phone applications from desktop applications.
AppStream infamously does not support any “is-for-phone” label for software components, instead the decision whether something is compatible with a device is based the the device’s capabilities and the component’s requirements. This allows for truly adaptive applications to describe their requirements correctly, and does not lock us into “form factors” going into the future, as there are many and the feature range between a phone, a tablet and a tiny laptop is quite fluid.
Of course the “match to current device capabilities” check does not work if you are a website ranking phone compatibility. It also does not really work if you are a developer and want to know which devices your component / application will actually be considered compatible with. One goal for AppStream 1.0 is to have its library provide more complete building blocks to software centers. Instead of just a “here’s the data, interpret it according to the specification” API, libappstream now interprets the specification for the application and provides API to handle most common operations – like checking device compatibility. For developers, AppStream also now implements a few “virtual chassis configurations”, to roughly gauge which configurations a component may be compatible with.
To test the new code, I ran it against the large Debian and Flatpak repositories to check which applications are considered compatible with what chassis/device type already. The result was fairly disastrous, with many applications not specifying compatibility correctly (many do, but it’s by far not the norm!). Which brings me to the actual topic of this blog post: Very few seem to really know how to mark an application compatible with certain screen sizes and inputs! This is most certainly a matter of incomplete guides and good templates, so maybe this post can help with that a bit:
The ultimate cheat-sheet to mark your app “chassis-type” compatible
As a quick reminder, compatibility is indicated using AppStream’s relations system: A requires relation indicates that the system will not run at all or will run terribly if the requirement is not met. If the requirement is not met, it should not be installable on a system. A recommends relation means that it would be advantageous to have the recommended items, but it’s not essential to run the application (it may run with a degraded experience without the recommended things though). And a supports relation means a given interface/device/control/etc. is supported by this application, but the application may work completely fine without it.
I have a desktop-only application
A desktop-only application is characterized by needing a larger screen to fit the application, and requiring a physical keyboard and accurate mouse input. This type is assumed by default if no capabilities are set for an application, but it’s better to be explicit. This is the metadata you need:
<component type="desktop-application">
<id>org.example.desktopapp</id>
<name>DesktopApp</name>
[...]
<requires>
<display_length>768</display_length>
<control>keyboard</control>
<control>pointing</control>
</requires>
[...]
</component>
With this requires relation, you require a small-desktop sized screen (at least 768 device-independent pixels (dp) on its smallest edge) and require a keyboard and mouse to be present / connectable. Of course, if your application needs more minimum space, adjust the requirement accordingly. Note that if the requirement is not met, your application may not be offered for installation.
Note: Device-independent / logical pixels
One logical pixel (= device independent pixel) roughly corresponds to the visual angle of one pixel on a device with a pixel density of 96 dpi (for historical X11 reasons) and a distance from the observer of about 52 cm, making the physical pixel about 0.26 mm in size. When using logical pixels as unit, they might not always map to exact physical lengths as their exact size is defined by the device providing the display. They do however accurately depict the maximum amount of pixels that can be drawn in the depicted direction on the device’s display space. AppStream always uses logical pixels when measuring lengths in pixels.
I have an application that works on mobile and on desktop / an adaptive app
Adaptive applications have fewer hard requirements, but a wide range of support for controls and screen sizes. For example, they support touch input, unlike desktop apps. An example MetaInfo snippet for these kind of apps may look like this:
<component type="desktop-application">
<id>org.example.adaptive_app</id>
<name>AdaptiveApp</name>
[...]
<requires>
<display_length>360</display_length>
</requires>
<supports>
<control>keyboard</control>
<control>pointing</control>
<control>touch</control>
</supports>
[...]
</component>
Unlike the pure desktop application, this adaptive application requires a much smaller lowest display edge length, and also supports touch input, in addition to keyboard and mouse/touchpad precision input.
I have a pure phone/table app
Making an application a pure phone application is tricky: We need to mark it as compatible with phones only, while not completely preventing its installation on non-phone devices (even though its UI is horrible, you may want to test the app, and software centers may allow its installation when requested explicitly even if they don’t show it by default). This is how to achieve that result:
<component type="desktop-application">
<id>org.example.phoneapp</id>
<name>PhoneApp</name>
[...]
<requires>
<display_length>360</display_length>
</requires>
<recommends>
<display_length compare="lt">1280</display_length>
<control>touch</control>
</recommends>
[...]
</component>
We require a phone-sized display minimum edge size (adjust to a value that is fit for your app!), but then also recommend the screen to have a smaller edge size than a larger tablet/laptop, while also recommending touch input and not listing any support for keyboard and mouse.
Please note that this blog post is of course not a comprehensive guide, so if you want to dive deeper into what you can do with requires/recommends/suggests/supports, you may want to have a look at the relations tags described in the AppStream specification.
Validation
It is still easy to make mistakes with the system requirements metadata, which is why AppStream 1.0 will provide more commands to check MetaInfo files for system compatibility. Current pre-1.0 AppStream versions already have an is-satisfied command to check if the application is compatible with the currently running operating system:
:~$ appstreamcli is-satisfied ./org.example.adaptive_app.metainfo.xml Relation check for: */*/*/org.example.adaptive_app/* Requirements: • Unable to check display size: Can not read information without GUI toolkit access. Recommendations: • No recommended items are set for this software. Supported: ✔ Physical keyboard found. ✔ Pointing device (e.g. a mouse or touchpad) found. • This software supports touch input.
In addition to this command, AppStream 1.0 will introduce a new one as well: check-syscompat. This command will check the component against libappstream’s mock system configurations that define a “most common” (whatever that is at the time) configuration for a respective chassis type.
If you pass the --details flag, you can even get an explanation why the component was considered or not considered for a specific chassis type:
:~$ appstreamcli check-syscompat --details ./org.example.phoneapp.metainfo.xml Chassis compatibility check for: */*/*/org.example.phoneapp/* Desktop: ✘ Incompatible • recommends: This software recommends a display with its shortest edge being << 1280 px in size, but the display of this device has 1280 px. • recommends: This software recommends a touch input device. Laptop: ✘ Incompatible • recommends: This software recommends a display with its shortest edge being << 1280 px in size, but the display of this device has 1280 px. • recommends: This software recommends a touch input device. Server: ✘ Incompatible • requires: This software needs a display for graphical content. • recommends: This software needs a display for graphical content. • recommends: This software recommends a touch input device. Tablet: ✔ Compatible (100%) Handset: ✔ Compatible (100%)
I hope this is helpful for people. Happy metadata writing! 😀
Post-mortem: Service Degradation for Pages with Comments
DisplayLink Video on openSUSE Tumbleweed
DisplayLink on openSUSE Tumbleweed
openSUSE Tumbleweed – Review of the weeks 2023/39 & 40
Dear Tumbleweed users and hackers,
My punishment for taking Fridays off is having to write a weekly review that spans again over two weeks. I know, many of you rely on those reviews to know what is coming their way and doing this only bi-weekly is definitively now what I am striving for. After all, you deserve to be informed about the things happening in Tumbleweed. During the last two weeks, we have published 9 snapshots (0921, 0922, 0925, 0926, 0927, 0929, 1001, 1003, and 1005 – with the latest one being still being hot – and important in plus.
The most relevant changes in these snapshots are:
- Linux kernel 6.5.4
- Poppler 23.09.0
- dbus 1.14.10
- Node.JS 20.7.0
- XWayland 23.2.1
- UDisks 2.10.0
- LibreOffice 7.6.1.2
- Mesa 23.1.8, 23.2.0, and 23.2.1
- GPG 2.4.0
- Mozilla Firefox 118.0.1
- GStreamer 1.22.6
- openSSL 3.1.3
- systemd 254.5
- glibc CVE-2023-4911, aka Looney Tunables
- Samba 4.19.0
The glibc fix is part of Snapshot 1005, but due to its importance and reach was already published in the Tumbleweed update channel yesterday evening.
The staging projects are currently testing these changes:
- binutils 2.41
- Linux kernel 6.5.6
- Shadow 4.14.1
- zypper 1.14.65 / libzypp 17.31.21: changes around transfiletrigger handlers; openQA seems not yet happy with the result
- LibreOffice 7.6.2
Simplify GPU Application Development with HMM on Leap
Recently, NVIDIA has introduced Heterogeneous Memory Management (HMM)
in its open source kernel drivers
which simplifies GPU Application Development
with CUDA.
It unifies system memory access across CPUs and GPUs and removes the
need to copy memory content between CPU and GPU memory.
It extends Unified Memory to cover both system allocated memory as well
as memory allocated by cudaMallocManaged().
You may ask, "how do I make this work on my Leap system?" If you are a Leap 15.5 user, the open driver is already available to you. Therefore, if you have an NVIDIA chipset with a GPU System Processor (GSP), ie. Turing or later, we have you covered. Here is how:
Installation on openSUSE Leap 15.5
The simplest way to accomplish this is to login as root and run the following commands in your shell:
zypper ar https://developer.download.nvidia.com/compute/cuda/repos/opensuse15/x86_64/cuda-opensuse15.repo
zypper --gpg-auto-import-keys refresh
zypper -n install -y --auto-agree-with-licenses --no-recommends nvidia-open-gfxG05-kmp-default cuda
This will add the NVIDIA CUDA repository and install CUDA with the kernel
modules required.
Do you require signed drivers to support secure boot or deploy in a public
cloud environment? In this case, instead of the above, execute:
zypper ar https://developer.download.nvidia.com/compute/cuda/repos/opensuse15/x86_64/cuda-opensuse15.repo
zypper ar https://download.nvidia.com/opensuse/leap/15.5/ NVIDIA-drivers
zypper --gpg-auto-import-keys refresh
zypper -n in -y --auto-agree-with-licenses --no-recommends nvidia-open-driver-G06-signed-kmp-default nvidia-drivers-minimal-G06 cuda
This makes use of the NVIDIA open driver package shipped and signed by
SUSE - like the rest of your kernel. This eliminates the need to enroll
a MOK as well an extra build stage when the kernel drivers are installed
or updated. Thus it helps to reduce the size of the cloud image by
removing the need for extra build tools.
To use these kernel drivers, it installs a set of user space driver
packages which are not yet available in the CUDA software repository.
Preparations
For chipsets with a display engine (i.e. which have display outputs), the open driver
support is still considered alpha. Therefore, you may have to add or uncomment
the following option in /etc/modprobe.d/50-nvidia-default.conf:
options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
Once these steps have been performed, you may either reboot the system or run
modprobe nvidia
as root to load all required kernel modules.
Testing the Installation
To check if HMM is available and enabled, query the 'Addressing Mode' property:
nvidia-smi -q | grep Addressing
Addressing Mode : HMM
If you see above output, HMM is available on your system.
Compile HMM Sample Code
NVIDIA discusses some code examples for HMM in its blog
post.
The examples can be found here on GitHub. If you
would like to try out the examples, here are some hints on building and running them.
Some these need a newer gcc than the stock version shipped with Leap 15,
which you can install with:
zypper in gcc12-c++
In order to compile the examples, the PATH environment variable needs to be extended to
point to the CUDA binaries:
export PATH=/usr/local/cuda/bin/:${PATH}
You may now compile the examples under the path src using the following commands:
nvcc -std=c++20 -ccbin=/usr/bin/g++-12 atomic_flag.cpp -o atomic_flag
nvcc -std=c++20 -ccbin=/usr/bin/g++-12 file_after.cpp -o file_after
nvcc -std=c++20 -ccbin=/usr/bin/g++-12 file_before.cpp -o file_before
nvcc -std=c++20 -ccbin=/usr/bin/g++-12 ticket_lock.cpp -o ticket_lock
'weather_app' Example
For this example application, the system gcc compiler is sufficient. Only $PATH has to be
set to
export PATH=/usr/local/cuda/bin/:${PATH}
Now, build the binary weather_app by running
make
The blog by NVIDIA describes how to obtain the data required to run the app. If you're unable to download the ~1.3 TB of data, you may also use the random data generator from this PR on GitHub. The random data app can be compiled with
g++ create_random_data.cpp -o create_random_data -O2 -Wall
The application has no command line parameters, and the start and end year for the random data has to be set in the source code itself.
NOTE
If your graphic card doesn't have sufficient VRAM to run the original sample code, you may
scale down the data size by reducing the input_grid_height and input_grid_width parameters
in both create_random_data.cpp and weather_app.cu.
To do a sample run:
mkdir binary_1hr_all
./weather_app
./weather_app 1981 1982 binary_1hr_all/
NOTE
The Makefile doesn't compile CUDA kernels for the Turing GPUs and also has a faulty error message handling. You might want check out https://github.com/NVIDIA/HMM_sample_code/pull/2 which fixes this issues.
Summary
- The NVIDIA open driver provides HMM (Heterogeneous Memory Management) which extends the simplicity of the CUDA Unified Memory programming model even further on supported chipsets 1 by including system allocated memory.
- HMM is available for openSUSE Leap 15.5.
- The open driver allows for pre-built kernel drivers signed by SUSE.
- This greatly simplifies the installation in a secure boot environment.
- It streamlines the installation in public cloud environments by eliminating an extra build stage and reducing the size of the final image.
- We have demonstrated how to install and test HMM on Leap 15.5.
-
Turing and later ↩
