|
| 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