Language Selection

English French German Italian Portuguese Spanish

Programming Leftovers

Filed under

  • CMake Bitrot

    CMake is a (meta-)buildsystem that handles finding-dependencies and building-things. It’s been around for many years, and has been in use by the KDE community for 14 years. In that time, CMake itself has changed quite a bit: there’s “legacy CMake”, version 2.8, and “modern CMake” which is roughly everything after version 3.0. But even within the 3.0 series there is a slow shift in language and tooling. This means that for released software, the CMake buildsystem “bitrots”, to some extent. I’ll give some examples revealed by the CMake 3.20 release.


    Up-to-date software with current releases tends to have fewer issues – even when a change unexpectedly introduces build failures, we can count on the Open Source community to contribute fixes. So GNOME evolution-data-server had fixes in upstream git before I even noticed (and I spotted them only after I’d independently writted roughly-the-same-patch).

    Ancient MySQL releases, on the other hand, need new patches. This can be a somewhat frustrating rabbit hole of building old stuff for no other purpose than fixing the old stuff you don’t use anyway.

    Patches all end up in the FreeBSD ports collection git tree. Search for “CMake 3.20” for the kind of things that needed updating.

  • Enrique Ocaña González: GStreamer WebKit debugging by instrumenting source code (1/3)

    This is the continuation of the GStreamer WebKit debugging tricks post series. In the next three posts, I’ll focus on what we can get by doing some little changes to the source code for debugging purposes (known as “instrumenting”), but before, you might want to check the previous posts of the series:


    The gobject-list project, written by Thibault Saunier, is a simple LD_PRELOAD library for tracking the lifetime of GObjects. When loaded into an application, it prints a list of living GObjects on exiting the application (unless the application crashes), and also prints reference count data when it changes. SIGUSR1 or SIGUSR2 can be sent to the application to trigger printing of more information.

  • Qt Roadmap for 2021

    With Qt 6.1 soon to be released, it is time to take a look at what the year 2021 has to offer for Qt users. In this post, I’ll go through the Qt framework plans and then talk a bit about tools and other items we are currently developing. As always, there are so many different things in the works that it is not possible to fully explain everything in a single post, but I’ll try to provide a good overview.

  • The Qt Company Publishes 2021 Roadmap - Phoronix

    With Qt 6.1 being released next month, The Qt Company has published their 2021 road-map outlining some of their plans for the remainder of the calendar year.

    As previously noted, with the upcoming Qt 6.1 release there are some libraries now ported to Qt 6 like Qt Virtual Keyboard, Qt Lottie, Qt State Machines, and more. Meanwhile with Qt 6.2 due out this autumn they expect to have many more libraries/add-ons ported from Qt5 to Qt6. Among the libraries expected to be ready for Qt 6.2 are the Bluetooth, Multimedia, Quick Dialogs, Remote Objects, Sensors, SerialBus, SerialPort, WebChannel, WebEngine, WebSockets, WebView, NFS, and others.

  • The MIR C interpreter and Just-in-Time (JIT) compiler

    For the past two years I’ve worked on a project implementing a universal lightweight Just-in-Time (JIT) compiler known as MIR. The cornerstone of the project is a machine-independent medium-level intermediate representation (MIR).

    A big part of the project consists of code that compiles C source code into MIR. Because MIR can be interpreted and just-in-timed, I easily extended this C-to-MIR compiler into a C interpreter and JIT compiler.

    I have previously written about other parts of the MIR project (see MIR: A lightweight JIT compiler project, but I never wrote in detail about the C-to-MIR compiler, C interpreter, or JIT. In this article, I would like to correct these omissions.


    Also, I want to extend the C language in the future to mark program points where the C-to-MIR compiler should profile the code and generate speculative and de-optimized code depending on the execution profile. For example, the C code implementing the CRuby virtual machine’s plus bytecode for integers checks the operand types. It also checks that the plus method for integers was not redefined, that there is no overflow, that it doesn’t need to use multi-precision numbers, and so on. All these checks would be the marked program points I am talking about.

    It is hard to implement such extensions for GCC or Clang, get approval to include them into GCC or Clang repositories, or support them on the side.

    So I decided to write my own C-to-MIR compiler first. It should implement standard C11 without rarely used optional standard features such as variable arrays, complex numbers, and atomic data.

    The major implementation goal was simplicity, not compilation speed. This makes studying the code easier for other people and reduces the effort required to maintain it.

  • Josef Strzibny: Improving IRB experience with a custom .irbrc

    Ruby’s IRB is a lovely interactive console. By leveraging a custom .irbrc configuration file, we can make the experience even better.

    The .irbrc file is nothing else than a Ruby file that gets evaluated whenever we start the console with irb or rails c. We can place it in a home directory (~/.irbrc) or in the project directory (to scope it per project). But only one of these files will take effect, and the global one has precedence.

  • Using Rust to Write Safe and Correct Linux Kernel Drivers

    As part of the Rust for Linux project, aimed to make it possible to use Rust for Linux driver development, the Android team at Google is working on evaluating the benefits that using Rust would bring.

    Rust for Linux was announced by Miguel Ojeda approximately one year ago on LKML, the Linux Kernel Mailing List, as an attempt to bring a second language to Linux kernel development by extending the Linux build system. Specifically, the project seeks to enable the use of Rust to write drivers and other "leaf" kernel modules, but not for the kernel core or the major kernel subsystems.

  • The Rust Programming Language Blog: Announcing Rustup 1.24.0

    The rustup working group is happy to announce the release of rustup version 1.24.0. Rustup is the recommended tool to install Rust, a programming language that is empowering everyone to build reliable and efficient software.


    Rustup's component unpacker has been changed to have a smaller memory footprint when unpacking large components. This should permit users of memory-constrained systems such as some Raspberry Pi systems to install newer Rust toolchains which contain particularly large files.

  • Peter Czanik: Sending alerts to Discord and others from syslog-ng using Apprise: blocks and Python templates

    A returning question I get is: “I see, that you can send alerts from syslog-ng to Slack and Telegram, but do you happen to support XYZ?” Replace XYZ with Discord and countless others. So, last week I showed you how to send alerts to Discord using the http() destination of syslog-ng and introduced you to Apprise, a notification library for Python.

    From this blog, you can learn how to make your syslog-ng destination developed in Python more flexible using templates, and how to make it easier to use with using blocks. We use the Apprise notification library again. On the feature side, the Python code is a lot closer to being production ready. It has most features a user would want to use. Still, it is rather just an inspiration, not something production ready, as among others, it is missing error handling and reporting.

  • gfldex: The absence of a riddle

    Raku riddles have become popular. By chance, I came across a riddle generated by Rakudo — an emergent riddle so to speak.

  • Shadow over Fedora 34 as maintainer of Java packages quits with some choice words for Red Hat and Eclipse

    Fedora 34, a feature-packed new release of Red Hat's leading edge Linux distribution, was released today, though the main Java package maintainer has quit, urging "affected maintainers to drop dependencies on Java."

    Fedora 34 is used by Red Hat to try out new features that are likely to end up in first CentOS Stream and then Red Hat Enterprise Linux (RHEL), the commercial offering.


    Spoiling the celebrations, Fedora's main Java package maintainer Fabio Valentini said yesterday: "I can no longer in good conscience be the primary maintainer of (most) Java packages in Fedora."

    It is worse than that; in a post entitled "The Death of Java (packages)" he said "new versions and even security issues have been piling up for months," that "Java package maintainers from Red Hat have been exceptionally unhelpful, and have not substantially contributed to Java packages in Fedora in years," that the Eclipse Java-based IDE (the packages for which are maintained by someone else) is a "dumpster fire" and that "I see no way for the situation to improve."

    Valentini decided to orphan "all Java packages I am the main admin of" adding that "since this is the majority of remaining Java software in Fedora … I expect a decent amount of dependent packages will be affected." His solution is to "urge affected maintainers to drop dependencies on Java, if at all possible."

More in Tux Machines

digiKam 7.7.0 is released

After three months of active maintenance and another bug triage, the digiKam team is proud to present version 7.7.0 of its open source digital photo manager. See below the list of most important features coming with this release. Read more

Dilution and Misuse of the "Linux" Brand

Samsung, Red Hat to Work on Linux Drivers for Future Tech

The metaverse is expected to uproot system design as we know it, and Samsung is one of many hardware vendors re-imagining data center infrastructure in preparation for a parallel 3D world. Samsung is working on new memory technologies that provide faster bandwidth inside hardware for data to travel between CPUs, storage and other computing resources. The company also announced it was partnering with Red Hat to ensure these technologies have Linux compatibility. Read more

today's howtos

  • How to install go1.19beta on Ubuntu 22.04 – NextGenTips

    In this tutorial, we are going to explore how to install go on Ubuntu 22.04 Golang is an open-source programming language that is easy to learn and use. It is built-in concurrency and has a robust standard library. It is reliable, builds fast, and efficient software that scales fast. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel-type systems enable flexible and modular program constructions. Go compiles quickly to machine code and has the convenience of garbage collection and the power of run-time reflection. In this guide, we are going to learn how to install golang 1.19beta on Ubuntu 22.04. Go 1.19beta1 is not yet released. There is so much work in progress with all the documentation.

  • molecule test: failed to connect to bus in systemd container - openQA bites

    Ansible Molecule is a project to help you test your ansible roles. I’m using molecule for automatically testing the ansible roles of geekoops.

  • How To Install MongoDB on AlmaLinux 9 - idroot

    In this tutorial, we will show you how to install MongoDB on AlmaLinux 9. For those of you who didn’t know, MongoDB is a high-performance, highly scalable document-oriented NoSQL database. Unlike in SQL databases where data is stored in rows and columns inside tables, in MongoDB, data is structured in JSON-like format inside records which are referred to as documents. The open-source attribute of MongoDB as a database software makes it an ideal candidate for almost any database-related project. This article assumes you have at least basic knowledge of Linux, know how to use the shell, and most importantly, you host your site on your own VPS. The installation is quite simple and assumes you are running in the root account, if not you may need to add ‘sudo‘ to the commands to get root privileges. I will show you the step-by-step installation of the MongoDB NoSQL database on AlmaLinux 9. You can follow the same instructions for CentOS and Rocky Linux.

  • An introduction (and how-to) to Plugin Loader for the Steam Deck. - Invidious
  • Self-host a Ghost Blog With Traefik

    Ghost is a very popular open-source content management system. Started as an alternative to WordPress and it went on to become an alternative to Substack by focusing on membership and newsletter. The creators of Ghost offer managed Pro hosting but it may not fit everyone's budget. Alternatively, you can self-host it on your own cloud servers. On Linux handbook, we already have a guide on deploying Ghost with Docker in a reverse proxy setup. Instead of Ngnix reverse proxy, you can also use another software called Traefik with Docker. It is a popular open-source cloud-native application proxy, API Gateway, Edge-router, and more. I use Traefik to secure my websites using an SSL certificate obtained from Let's Encrypt. Once deployed, Traefik can automatically manage your certificates and their renewals. In this tutorial, I'll share the necessary steps for deploying a Ghost blog with Docker and Traefik.