Skip to content

Commit cabb18f

Browse files
razvandnderjung
authored andcommitted
release: Add blog post and notes for release 0.18.0
Add blog post, notes and support files for release 0.18.0 (Helene). Signed-off-by: Razvan Deaconescu <[email protected]>
1 parent 314cc92 commit cabb18f

File tree

3 files changed

+248
-3
lines changed

3 files changed

+248
-3
lines changed
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
---
2+
title: "Unikraft releases v0.18.0 (Helene)"
3+
description: |
4+
This release contains features and improvements to Unikraft.
5+
publishedDate: 2024-12-21
6+
authors:
7+
- Michalis Pappas
8+
- Ștefan Jumărea
9+
- Răzvan Deaconescu
10+
tags:
11+
- release
12+
- announcement
13+
---
14+
15+
We are proud to announce a new version of Unikraft: `v0.18.0`.
16+
17+
This release comes packed with features related to security, virtual filesystem and general application support.
18+
It contains plenty of fixes that improve the stability and application support of Unikraft.
19+
20+
In this blog post, we present the new features available in Unikraft.
21+
For a full breakdown, please check out the [changelog](https://github.com/unikraft/unikraft/compare/RELEASE-0.17.0...RELEASE-0.18.0).
22+
23+
### Integrated Debug Support with GDB Stub
24+
25+
_This feature was championed by [Thassilo Schulze](https://github.com/thass0) with great support from [Michalis Pappas](https://github.com/michpappas) and [Simon Kuenzer](https://github.com/skuenzer).
26+
27+
Unikraft `v0.18` introduces native support for GDB, allowing developers to debug applications and system-level code seamlessly, even on Virtual Machine Monitors (VMMs) and hypervisors that don't offer built-in debug facilities.
28+
Debugger support is provided by an implementation of a GDB stub within `libukdebug`, which enables direct communication with a GDB client over a serial connection.
29+
For more information on enabling and confguring the GDB stub see [libukdebug's README.md](https://github.com/unikraft/unikraft/blob/staging/lib/ukdebug/README.md).
30+
31+
### Abstraction for Console Devices
32+
33+
_This feature was championed by [Thassilo Schulze](https://github.com/thass0) with great support from [Michalis Pappas](https://github.com/michpappas) and [Simon Kuenzer](https://github.com/skuenzer).
34+
35+
The newly introduced `libukconsole` provides an abstraction layer for consoles.
36+
The implementation of `COM` for `x86_64` has been merged with the `ns16550` driver, and all console drivers have been updated to implement the `ukconsole` driver API.
37+
This is a long anticipated feature that allows efficient management of console devices, and enables the addition of new features, with the GDB stub being the first one to utilize this subsystem.
38+
39+
### Further improvements of libukrandom
40+
41+
_This feature was championed by [Michalis Pappas](https://github.com/michpappas) with great support from [Alex Apostolescu](https://github.com/Alex-deVis), [Maria Pana](https://github.com/mariapana), [Simon Kuenzer](https://github.com/skuenzer), and [Stefan Jumarea](https://github.com/StefanJum)._
42+
43+
This release continues on the improvents introduced in Unikraft `v0.17` for cryptographically secure randomness.
44+
`libukrandom` now includes a driver API, and the implementation of CPU-generated randomness has been reworked into conforming drivers.
45+
For more flexibility, the driver API introduces fallback operations: On x86_64, `RDSEED` can now fall back to `RDRAND`, addressing common issues faced by users running on legacy machines without `RDSEED` support, or those using TCG emulation on older versions of QEMU.
46+
47+
In addition to the above, it is now possible to seed the CSPRNG via Unikraft's command-line, or through the device tree blob.
48+
49+
Finally, the CSPRNG has been updated to now use 20 rounds (ChaCha20), and an implementation of the test vectors of [RFC8439](https://datatracker.ietf.org/doc/html/rfc8439) is available to execute via `libuktest`.
50+
51+
For more info see the new documentation at [drivers/ukrandom/lcpu](https://github.com/unikraft/unikraft/tree/staging/drivers/ukrandom/lcpu/README.md) and [lib/ukrandom](https://github.com/unikraft/unikraft/tree/staging/lib/ukrandom/README.md).
52+
53+
### Early Initialization Framework
54+
55+
_This feature was championed by [Michalis Pappas](https://github.com/michpappas) with great support from [Andrei Stan](https://github.com/andreistan26), [Oleksii Moisieiev](https://github.com/oleksiimoisieiev), [Sergiu Moga](https://github.com/mogasergiu), and [Simon Kuenzer](https://github.com/skuenzer).
56+
57+
`libukboot` introduces `earlytab`, a lightweight framework for early initialization.
58+
This complements the existing `inittab`, with specific focus on the initialization of early devices and their dependencies.
59+
60+
`libuklibparam` has been refactored to allow command-line parsing during early initialization.
61+
This additionally fixes a limitation of the previous registration mechanism where all parameters had to be registered from a single file.
62+
`libuklibparam` is assigned the highest (earliest) priority, to ensure that drivers and libraries in subsequent stages have access to Unikraft's command-line parameters.
63+
Notice that for the time being this has the side-effect of information printed by `libuklibparam` to be lost, as `earlycon` is registered to a later priority.
64+
This will be resolved once `libukprint` is introduced, as that library will provide a console buffer.
65+
66+
Initialization of early devices have been migrated to `earlytab`.
67+
Serial console drivers are updated to register with `earlytab` when early console support is enabled.
68+
Similarly, drivers that provide secure randomness initialize `libukrandom` at early init, to fulfil the requirement of security-critical mechanisms for early randomness.
69+
70+
Overall, the introduction of `earlytab` marks a significant step towards a unified and coordinated initialization process, which is a requirement for upcoming features.
71+
Most notably, `earlytab` will eventually replace the intermediate jump from boot code to platform-specific initialization, with platforms being able to register initialization calls directly with `earlytab`.
72+
Early adopters of this mechanism in this release are the UART and VGA console devices of KVM, and the hypervisor console of Xen.
73+
74+
### Statistics for libuksched and libukfalloc
75+
76+
_This feature was championed by [Michalis Pappas](https://github.com/michpappas)_ with great support from [Cezar Craciunoiu](https://github.com/craciunoiuc), [Florin Postolache](https://github.com/flpostolache), and [Simon Kuenzer](https://github.com/skuenzer).
77+
78+
Following previous work on `libuknetdev`, this release comes with updates on`libusched` and `libukfalloc` to export statistics that provide insight on the performance and overall behavior of the system.
79+
80+
`libuksched` defines the set of statistics that a given scheduler implementation should provide.
81+
Metrics include the number of schedules, yields, context switches to processes and the idle thread.
82+
The cooperative scheduler implementation, `libukschedcoop`, has been updated to export these metrics.
83+
84+
Similarly, `libukfalloc` has been updated to define a set of per-instance as well as system-wide statistics.
85+
The buddy implementation, `libukfallocbuddy`, is updated to export these statistics where needed.
86+
87+
In both cases, statistics are provided via the `libukstore`.
88+
For For a general descriptions on how to access the exported stats, see the documentation of `libukstore` at [lib/ukstore/README.md](https://github.com/unikraft/unikraft/blob/staging/lib/ukstore/README.md).
89+
90+
### Known issues
91+
92+
* [QEMU 9 doesn't boot C HTTP program on Ubuntu `22.04`](https://github.com/unikraft/unikraft/issues/1557)
93+
* [lib/ukallocbuddy: Boot error message for Nginx (QEMU, KVM, x86_64)](https://github.com/unikraft/unikraft/issues/1505)
94+
* [plat/kvm does not boot on Firecracker `0.10.0-dev` on arm64](https://github.com/unikraft/unikraft/issues/1488)
95+
96+
For a full list of issues see: https://github.com/unikraft/unikraft/issues
97+
98+
### Catalog Update
99+
100+
We updated the [application `catalog`](https://github.com/unikraft/catalog) with multiple application runtimes, including MariaDB, MongoDB, Java, Grafana, Zig.
101+
The application catalog hosts application runtimes and examples running with Unikraft.
102+
Generally, we use [KraftKit](https://github.com/unikraft/kraftkit) as the tool to build and run unikernel images for these applications.
103+
104+
### `catalog-core` - A Catalog for Core Developers, Reviewers, Testers and Maintainers
105+
106+
[`catalog-core`](https://github.com/unikraft/catalog-core) is a catalog of Unikraft applications that are set up, configured, built and run using first principles tools: Make, GCC, Clang, KConfig, QEMU, Firecracker, Xen; that is, not using KraftKit.
107+
Each directory belongs to a given application and it typically consists of source code, `Makefile`, `Makefile.uk`, filesystem and a `README.md` file with instructions.
108+
109+
`catalog-core` is targeted towards Unikraft core developers (i.e. developers of the [`unikraft` core repository](https://github.com/unikraft/unikraft) or [library repositories](https://github.com/search?q=topic%3Alibrary+org%3Aunikraft&type=Repositories)), maintainers, testers and those who want to learn about the internals of Unikraft.
110+
Application and tooling developers and general users should use the [official `catalog` repository](https://github.com/unikraft/catalog).
111+
112+
`catalog-core` current consists of an initial set of applications to be built and run using first principles tools.
113+
It also contains scripts to automate the building, running and testing of applications, Unikraft core and libraries.
114+
115+
### Community Activities
116+
117+
#### OmniOpenCon 2024
118+
119+
As part of [OmniOpenCon 2024](https://omniopencon.org/), we organised a workshop, where the participants took some first steps into building and running an application using Unikraft.
120+
121+
We also had a talk beforehand, `Efficient, Effective and Fun Computing with Unikernels`, demonstrating how easy it is to build, package, run and deploy common applications with Unikraft, focusing on two primary areas: cloud computing and embedded development.
122+
123+
OmniOpenCon 2024 also hosted an open source hackathon, with about 20 participants, with some working on Unikraft.
124+
125+
#### Unikraft Summer Workshop 2024
126+
127+
[Unikraft Summer Workshop 2024 (_USW'24_](https://unikraft.org/hackathons/usw24) is a **free and virtual** workshop held by members of the Unikraft community.
128+
It focuses on cloud-native applications and on the unikernel technology that powers efficient and high performance cloud deployments.
129+
130+
The three-week event holds a number of starter tutorials and workshops on how to configure, build, run, deploy and debug cloud applications using Unikraft.
131+
132+
This year, we had 11 students that took part in the Unikraft Summer Workshop.
133+
At the end of the three-week event, we organised a hackathon, were the students were able to contribute to the project.
134+
135+
#### Vienna Unikraft Workshop
136+
137+
On December 708, 2024, we organised the [Vienna Unikraft Workshop](https://unikraft.org/hackathons/2024-12-vienna), together with [SBA Research](https://www.sba-research.org/).
138+
The workshop took place as an in-person event, at `SBA Research`.
139+
Members of the Unikraft community were there, as well as our hosts from `SBA Research`.
140+
141+
We spent the first day getting people accustomed to the Unikraft project, following some guides in order to build, run and deploy cloud applications.
142+
143+
The second day was focused on participants contributing to the projects, porting new applications, finding and fixing issues, etc.
144+
During this, [`Tor`](https://github.com/unikraft/catalog/pull/146) and [`Zero MQ`](https://github.com/unikraft/catalog/pull/147) were ported, and several other issues were found and fixed.
145+
146+
#### GSoC 2024
147+
148+
As part of Google Summer of Code 2024, Unikraft had 5 projects approved.
149+
We've had 16 application, out of which 5 were selected.
150+
151+
The 5 projects are:
152+
153+
* "Linux x86 Boot Protocol Support", by [Mihnea Firoiu](https://github.com/Mihnea0Firoiu)
154+
* "Synchronization Support in Internal Libraries", by [Yang Hu](https://github.com/huyang531)
155+
* "Supporting User-provided, Long-lived Environmental Variables for Unikraft Builds", by [Ujjwal Mahar](https://github.com/UjjwalMahar)
156+
* "Multiboot2 Support in Unikraft", by [Maria Pană](https://github.com/mariapana)
157+
* "UEFI Graphics Output Protocol Support in Unikraft", by [Sriprad Potukuchi](https://github.com/procub3r).
158+
159+
All the participants described their work in detail in multiple blog posts that you can find on the [Unikraft blog page](https://unikraft.org/blog).

0 commit comments

Comments
 (0)