Towards Stable Rust UEFI Firmware
While Tianocore EDKII still dominates the UEFI development world, there has been continuous effort to enable Rust for firmware development. But so far the tools involved have not been stabilised. We now started an effort to remedy this and get stable Rust support for UEFI targets.
Meson with MSVC on GitHub Actions
The Meson Build System provides support for running on Microsoft Windows, including support for Microsoft Visual Studio C++. GitHub Actions provides public access to CI machines running Microsoft Windows. But trying to tie both together is not as straightforward as it sounds.
Locating D-Bus Resource Leaks
With dbus-broker we have introduced the resource-accounting of bus1 into the D-Bus world. We believe it greatly improves and strengthens the resource distribution of the D-Bus messages bus, and we have already found a handful of resource leaks that way. However, it can be a daunting task to solve resource exhaustion bugs, so I decided to describe the steps we took to resolve a recent resource-leak in the openQA package.
Inside Specs: ELF Segments and Sections
The ELF data format divides object files into segments and sections, which has for long caused confusion. Both terms segment and section can be used interchangeably in almost all cases in the English language ([1], [2]). What is often overlooked is that the ELF specification explicitely meant both to mean almost the same. They merely provide two views of the same data, but use different terms to allow referring to them more easily.
Fair Resource Distribution Algorithm v1
Imagine a finite resource that you want to distribute amongst peers in a fair
manner. If you know the number of peers to be n
, the problem becomes
trivial and you can assign every peer 1/n
-th of the total. This way
every peer gets the same amount, while no part of the resource stays unused.
But what if the number of peers is only known retrospectively? That is, how
many resources do you grant a peer if you do not know whether there are more
peers or not? How do you define “fairness”? And how do you make sure as little
of the resource as possible stays unused?
Goodbye Gnu-EFI!
The recommended way to link UEFI applications on linux was until now through GNU-EFI, a toolchain provided by the GNU Project that bridges from the ELF world into COFF/PE32+. But why don’t we compile directly to native UEFI? A short dive into the past of GNU Toolchains, its remnants, and a surprisingly simple way out.
Exec in VM
Almost everyone these days relies on continuous integration. And it seems, once you got accustomed to it, you never want to work without it again. Unfortunately, most CI systems lack cross-architecture capabilities. As a systems engineer with lots of C projects, I was desperately looking for a solution to run my tests on little-endian, big-endian, 32bit, and 64bit machines. So far, without any luck. Hence, I patched together qemu, docker, fedora, and some bash scripts to get a tool that allows me to execute scripts from the command-line in a VM ad-hoc.
Cross-Bootstrap Fedora
I recently had to assemble linux distribution images to be run in containers and
virtual machines. While most package managers provide tools to bootstrap an
entire distribution into a target directory (e.g., debootstrap
, dnf
--installroot
, zypper
, pacstrap
, …), I needed to do that for foreign
architectures. Fortunately, Fedora got me covered!
Rethinking the D-Bus Message Bus
Later this year, on November 21, 2017, D-Bus will see its 15th birthday. An impressive age, only shy of the KDE and GNOME projects, whose collaboration inspired the creation of this independent IPC system. While still relied upon by the most recent KDE and GNOME releases, D-Bus is not free of criticism. Despite its age and mighty advocates, it never gained traction outside of its origins. On the contrary, it has long been criticized as bloated, over-engineered, and orphaned. Though, when looking into those claims, you’re often left with unsubstantiated ranting about the environment D-Bus is used in. If you rather want a glimpse into the deeper issues, the best place to look is the D-Bus bug-tracker, including the assessments of the D-Bus developers themselves. The bugs range from uncontrolled memory usage, over silent dropping of messages, to dead-locks by design, unsolved for up to 7 years. Looking closer, most of them simply cannot be solved without breaking guarantees long given by dbus-daemon(1), the reference implementation. Hence, workarounds have been put in place to keep them under control.
Moved Blog!
The Ponyhof blog was moved over from wordpress to here. Lets see how this will work out!