We are excited to announce the update version of Unikraft, v0.15.0.
This release is the result of constant testing, debugging, fixing and improvements during the past couple of months. It comes packed with plenty of fixes that improve the stability and application support of Unikraft.
In this blog post, we present the new features available in Unikraft. For a full breakdown, please check out the changelog.
Existing applications have been updated to build and run out of the box for a plethora of configurations: using KraftKit, using Make, using QEMU, using Firecracker, on ARM, on x86. All combinations have been tested and document. Ready-to-use scripts have been employed.
Each application repository uses a
defconfigs/ directory consisting of default configuration files.
Also, each application uses a
scripts/ directory for ready-to-use scripts.
kraft.yaml configuration file has been updated for KraftKit use.
README.md contains detailed information on setting up, configuring, building and running applications with Unikraft.
Applications, together with examples, are to be collected into a singular app catalog repository. This is planned for the next release.
Python support has been improved by the introduction of Pillow support, together with new ported libraries with Unikraft. Selecting Pillow for Python will add its files to the Python rootfs build.
Other fixes to Python libraries, together with fixes to the Unikraft core, result in an all over stable Python suppport.
Unikraft aims to support multiple external library versions.
Our goal is for external libraries to be easily upgradable or maintainable across their versions.
Our approach is the introduction of
Library.uk file for all libraries.
The file needs to be parsable by machines and humans alike.
This new file represents the first step towards proper versioning support of external microlibrary in Unikraft. The file itself acts as mechanism for holding metadata-only values about the microlibrary. This metadata is designed to be compatible with GNU Make whilst simultaneously being human-readable and readable by programs that are not GNU Make (e.g. tools such as KraftKit).
An important feature of this file is the inclusion of microlibrary versions. In a later step, once relevant integrations have been made to Unikraft's core build system and to relevant tools such as KraftKit, the user will be able to see and select from different versions of the microlibrary.
The relevant metadata is absorbed from both
Config.uk, but also includes new information such as SPDX License identifier.
Part of the "Platform Re-architecting" project, the feature removes all interrupt-related code from
plat/, and moves it into
drivers/ukintctlr, as needed.
Both new and existing functionality is collected under
libukintctlr into a single, newly introduced
uk_intctlr API. Among others, that also includes unified interrupt handling.
The changes are summarized as:
drivers/ukintctlrsubsystem into a new driver
xPICand implement the
MAX_IRQare defined by the individual drivers.
To minimize the scope of this work, changes to the implementation has been limited to the smallest possible.
Part of the "Platform Re-architecting" project, the feature adds a drivers subsystem to Unikraft.
Drivers are placed under the top-level
menuconfig drivers appear at a top-level section called "Device Drivers".
There is currently no external drivers support.
That is due to additional changes required to support the
As part of this work, several drivers have been ported:
drivers/ukintctlr/, and the API for the interrupt controller into
drivers/filesystem, but an exception was made, to keep them altogether.
Both binary-compatibility and native mode applications and libraries have been added to Unikraft repositories. With the increasing maturity and stability of Unikraft, applications and libraries are now easier to port (i.e. to build) and then to run.
New libraries have been ported natively and new dynamic PIE ELFs have been ported in binary-compatibility mode.
Note that applications, together with examples, are to be collected into a singular app catalog repository. This is planned for the next release.
Firecracker networking support is now upstream. It allows running of images such as Nginx or Redis, that require networking, to work with Firecracker.
Support for Firecracker networking equates to support for modern virtio support on Unikraft (as an alternative to legacy virtio support).
The feature provides the changes required to pass virtio-mmio devices via the command line.
A newly introduced config parameter controls compatibility with Linux. Specifically, when
VIRTIO_MMIO_LINUX_COMPAT_CMDLINE is selected, the MMIO driver is configured to accept devices in the Linux format, ie:
virtio_mmio.device = <size>@<base>:<irq>[:<id>]
If this option is not enabled, use the default libukparam format for this library, ie:
libvirtio_mmio.device = <size>@<base>:<irq>[:<id>]
This is useful for VMMs like Firecracker, that automatically inject device descriptors the command line.
To additionally support
x86_64, various components are updated to make fdt-based discovery optional.
These are the platform bus,
virtio-mmio, and PCI ECAM.
Initial macOS support had been part of release 0.14. The current release improves the build system and general support scripts for macOS support. Given user feedback, we made updates to better serve those who aim to build applications on macOS. Note that running applications, particulary on Apple Sillicon Mac systems, can only happen with an emulated version (TCG) of QEMU.
This feature PR introduces the build system parameter
E= which expects a colon separated list of suffixes that are matched against any library path that the build system is including.
This mechanism is intended to be used for replacing internal libraries.
For example, to replace
uksched, the replacing library (that has to match configuration name(s) and APIs) needs to be included with
L= while at the same time, the Unikraft-internal library has to be excluded with
make L=/path/to/external-uksched E=lib/uksched
This further increases the configurability of Unikraft, by allowing not only the exclusion of external libraries, but also internal ones.
Binary-compatibility mode has been targeted at x86_64. There is now initial support for ARM64 binary compatibility. This allows for binary ARM64 ELFs to be started by Unikraft, via the ELF Loader app.
Support is still incomplete, with several system calls not working properly, causing applications to crash. It is a target for improvement in the next release.
In collaboration with University POLITEHNICA of Bucharest, University of Aveiro, Grupo de Linux da Universidade de Aveiro (GLUA) and Associação Nacional para o Software Livre (ANSOL) we organized the Aveiro Unikraft Hackathon, on Friday and Saturday, September 15-16, 2023, as part of Festa do Software Livre 2023.
The hackathon took place as an in-person event at DETI - Departamento de Electrónica, Telecomunicações e Informática in University of Aveiro.
It was a good time to get the feeling of Unikraft updates from the previous release (0.14.0 - Prometheus) and the improved application support (and macOS support). The hackathon resulted in multiple issues and pull requests being submitted. Most issues dealt with KraftKit, macOS and ARM64 support. While most pull request were fixes to the Unikraft core and contributions to the binary compatible application catalog.
The hackathon took place as an in-person event at Room 2020, Fred Kaiser Building, Point Grey Campus and online, on Discord, on the
With more than 40 participants and more than 60 contributions, this was one of our most successful hackathons. We had a very exciting crowd who worked on mostly application compatibility items. It was our first time in North America and, as such, we were able to do larger scale testing on macOS systems.
The soon-to-be traditional Unikraft Romania Gathering took place on October 5-8, 2023, in Romania, in Bucharest and Bușteni. It was an awesome event, where 30+ members of the Unikraft community were able to work together, socialize and discuss about the project.
Apart from hikes, barbecues, dinners and other social events, we used the entire day of Friday, October 6, 2023, for a hackathon with all members of the community. In the hackathon we worked on application compatibility, 0.15 release items, KraftKit, plat re-architecting, documentation. Having everyone in the same place allowed us to more quickly sync and work on technical items.
Looking forward for our next gathering in 2024.
As part of Hacktoberfest 2023 we organized a Unikraft Hackathon on Saturday, October 21, 2023. Newcomers got their first taste of Unikraft and were able to complete plenty of work items:
The hackathon took place in hybrid format, both online, on Discord, and in person, at University POLITEHNICA of Bucharaest. As Unikraft matures and stabilizes, it becomes easier for newcomers to jump in, use it and cotribute to it.
Looking forward for other Unikraft Hacktoberfests!
Feel free to ask questions, report issues, and meet new people.