From 9cca0825bd191eadb5a9ad2625a1d368fe446b71 Mon Sep 17 00:00:00 2001 From: Razvan Deaconescu Date: Fri, 20 Dec 2024 23:55:18 +0200 Subject: [PATCH] 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 --- .../2024-12-21-unikraft-releases-v0.18.0.mdx | 156 ++++++++++++++++++ content/releases/v0.18.0.mdx | 86 ++++++++++ src/components/landing-hero.tsx | 6 +- 3 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 content/blog/2024-12-21-unikraft-releases-v0.18.0.mdx create mode 100644 content/releases/v0.18.0.mdx diff --git a/content/blog/2024-12-21-unikraft-releases-v0.18.0.mdx b/content/blog/2024-12-21-unikraft-releases-v0.18.0.mdx new file mode 100644 index 00000000..b3e7a055 --- /dev/null +++ b/content/blog/2024-12-21-unikraft-releases-v0.18.0.mdx @@ -0,0 +1,156 @@ +--- +title: "Unikraft releases v0.18.0 (Helene)" +description: | + This release contains features and improvements to Unikraft. +publishedDate: 2024-12-21 +authors: +- Michalis Pappas +- Ștefan Jumărea +- Răzvan Deaconescu +tags: +- release +- announcement +--- + +We are proud to announce the update version of Unikraft, v0.18.0. + +This release comes packed with features related to security, virtual filesystem and general application support. +It contains 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](https://github.com/unikraft/unikraft/compare/RELEASE-0.17.0...RELEASE-0.18.0). + +### Integrated Debug Support with GDB Stub + +_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). + +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. +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. +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). + +### Abstraction for Console Devices + +_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). + +The newly introduced `libukconsole` provides an abstraction layer for consoles. +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. +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. + +### Further improvements of libukrandom + +_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)._ + +This release continues on the improvents introduced in Unikraft v0.17 for cryptographically secure randomness. +`libukrandom` now includes a driver API, and the implementation of CPU-generated randomness has been reworked into conforming drivers. +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. + +In addition to the above, it is now possible to seed the CSPRNG via Unikraft's command-line, or through the device tree blob. + +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`. + +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). + +### Early Initialization Framework + +_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). + +`libukboot` introduces `earlytab`, a lightweight framework for early initialization. +This complements the existing `inittab`, with specific focus on the initialization of early devices and their dependencies. + +`libuklibparam` has been refactored to allow command-line parsing during early initialization. +This additionally fixes a limitation of the previous registration mechanism where all parameters had to be registered from a single file. +`libuklibparam` is assigned the highest (earliest) priority, to ensure that drivers and libraries in subsequent stages have access to Unikraft's command-line parameters. 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. This will be resolved once `libukprint` is introduced, as that library will provide a console buffer. + +Initialization of early devices have been migrated to `earlytab`. +Serial console drivers are updated to register with `earlytab` when early console support is enabled. +Similarly, drivers that provide secure randomness initialize `libukrandom` at early init, to fulfil the requirement of security-critical mechanisms for early randomness. + +Overall, the introduction of `earlytab` marks a significant step towards a unified and coordinated initialization process, which is a requirement for upcoming features. +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`. +Early adopters of this mechanism in this release are the UART and VGA console devices of KVM, and the hypervisor console of Xen. + +### Statistics for libuksched and libukfalloc + +_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). + +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. + +`libuksched` defines the set of statistics that a given scheduler implementation should provide. +Metrics include the number of schedules, yields, context switches to processes and the idle thread. The cooperative scheduler implementation, `libukschedcoop`, has been updated to export these metrics. + +Similarly, `libukfalloc` has been updated to define a set of per-instance as well as system-wide statistics. +The buddy implementation, `libukfallocbuddy`, is updated to export these statistics where needed. + +In both cases, statistics are provided via the `libukstore`. +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). + +### Known issues + +* [QEMU 9 doesn't boot C HTTP program on Ubuntu 22.04](https://github.com/unikraft/unikraft/issues/1557) +* [lib/ukallocbuddy: Boot error message for Nginx (QEMU, KVM, x86_64) ](https://github.com/unikraft/unikraft/issues/1505) +* [plat/kvm does not boot on Firecracker 0.10.0-dev on arm64](https://github.com/unikraft/unikraft/issues/1488) + +For a full list of issues see: https://github.com/unikraft/unikraft/issues + +### Catalog Update + +We updated the [application `catalog`](https://github.com/unikraft/catalog) with multiple application runtimes, including MariaDB, MongoDB, Java, Grafana, Zig. +The application catalog hosts application runtimes and examples running with Unikraft. +Generally, we use [KraftKit](https://github.com/unikraft/kraftkit) as the tool to build and run unikernel images for these applications. + +### `catalog-core` - A Catalog for Core Developers, Reviewers, Testers and Maintainers + +[`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. +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. + +`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. +Application and tooling developers and general users should use the [official `catalog` repository](https://github.com/unikraft/catalog). + +`catalog-core` current consists of an initial set of applications to be built and run using first principles tools. +It also contains scripts to automate the building, running and testing of applications, Unikraft core and libraries. + +### Community Activities + +#### OmniOpenCon 2024 + +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. + +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. + +OmniOpenCon 2024 also hosted an open source hackathon, with about 20 participants, with some working on Unikraft. + +#### Unikraft Summer Workshop 2024 + +[Unikraft Summer Workshop 2024 (*USW'24*)](https://unikraft.org/hackathons/usw24) is a **free and virtual** workshop held by members of the Unikraft community. +It focuses on cloud-native applications and on the unikernel technology that powers efficient and high performance cloud deployments. + +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. + +This year, we had 11 students that took part in the Unikraft Summer Workshop. +At the end of the three-week event, we organised a hackathon, were the students were able to contribute to the project. + +#### Vienna Unikraft Workshop + +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/). +The workshop took place as an in-person event, at `SBA Research`. +Members of the Unikraft community were there, as well as our hosts from `SBA Research`. + +We spent the first day getting people accustomed to the Unikraft project, following some guides in order to build, run and deploy cloud applications. + +The second day was focused on participants contributing to the projects, porting new applications, finding and fixing issues, etc. +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. + +#### GSoC 2024 + +As part of Google Summer of Code 2024, Unikraft had 5 projects approved. +We've had 16 application, out of which 5 were selected. + +The 5 projects are: + +* `Linux x86 Boot Protocol Support`, by [Mihnea Firoiu](https://github.com/Mihnea0Firoiu) +* `Synchronization Support in Internal Libraries`, by [Yang Hu](https://github.com/huyang531) +* `Supporting User-provided, Long-lived Environmental Variables for Unikraft Builds`, by [Ujjwal Mahar](https://github.com/UjjwalMahar) +* `Multiboot2 Support in Unikraft`, by [Maria Pană](https://github.com/mariapana) +* `UEFI Graphics Output Protocol Support in Unikraft`, by [Sriprad Potukuchi ](https://github.com/procub3r). + +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). diff --git a/content/releases/v0.18.0.mdx b/content/releases/v0.18.0.mdx new file mode 100644 index 00000000..a6cf59c7 --- /dev/null +++ b/content/releases/v0.18.0.mdx @@ -0,0 +1,86 @@ +--- +version: 0.18.0 +releaseDate: 2024-12-21 +codename: Helene +commit: 424eb3d920bfbe9ca0dc269750fba4a989ead184 +blogPost: /blog/2024-12-21-unikraft-releases-v0.18.0 +changelog: https://github.com/unikraft/unikraft/compare/RELEASE-0.17.0...RELEASE-0.18.0 +--- + +We are proud to announce the latest version update of Unikraft, v0.18! +This release comes with plenty of new features and updates. + +Here is the full updates list: + +### 🚀 New Features + +* `lib/vfscore`: Support embedded initrd with custom compiled-in fstabs ([#1540](https://github.com/unikraft/unikraft/pull/1540)) by @skuenzer +* `drivers/*`: Adopting serial driver configuration and making Xen x86_64 (PV) work again ([#1501](https://github.com/unikraft/unikraft/pull/1501)) by @skuenzer +* `libukrandom`: Introduce driver for CPU-generated entropy + misc. fixes ([#1496](https://github.com/unikraft/unikraft/pull/1496)) by @michpappas +* `lib/ukdebug`: Add GDB stub to Unikraft ([#1479](https://github.com/unikraft/unikraft/pull/1479)) by @thass0 +* `lib/uksched`: Export stats via `ukstore` ([#1477](https://github.com/unikraft/unikraft/pull/1477)) by @michpappas +* `lib/ukboot`: Introduce early init bootstage ([#1472](https://github.com/unikraft/unikraft/pull/1472)) by @michpappas +* `lib/uklibparam`: Refactor parameter registration ([#1471](https://github.com/unikraft/unikraft/pull/1471)) by @michpappas +* `lib/ukconsole`: Add generic console device interface ([#1464](https://github.com/unikraft/unikraft/pull/1464)) by @thass0 +* `support/qemu-guest`: Enable `RDRAND`, `RDSEED` for x86 TCG ([#1459](https://github.com/unikraft/unikraft/pull/1459)) by @skuenzer +* `lib/ukfalloc`: Export stats via `uk_store` ([#942](https://github.com/unikraft/unikraft/pull/942)) by @michpappas + +### 🐛 Bug Fixes & Improvements + +* `lib/syscall_shim`: Fix C++ build error with Clang ([#1559](https://github.com/unikraft/unikraft/pull/1559)) by @razvand +* `lib/vfscore`: Fix missing syscall declaration ([#1556](https://github.com/unikraft/unikraft/pull/1556)) by @andreittr +* `lib/ukrandom`: Improve boot and diagnostic messages ([#1554](https://github.com/unikraft/unikraft/pull/1554)) by @michpappas +* `lib/ukrandom`: Add `README.md` ([#1551](https://github.com/unikraft/unikraft/pull/1551)) by @michpappas +* `lib/ukschecoop`: Remove invalid assertion ([#1550](https://github.com/unikraft/unikraft/pull/1550)) by @michpappas +* `lib/posix-pipe`: Fix ref leak on pipe creation ([#1539](https://github.com/unikraft/unikraft/pull/1539)) by @andreittr +* `.github/workflows`: Wait once before checking ([#1538](https://github.com/unikraft/unikraft/pull/1538)) by @craciunoiuc +* `drivers/ukconsole/vga`: Add initial sanity check ([#1530](https://github.com/unikraft/unikraft/pull/1530)) by @florommel +* `lib/uklibparam`: Namespace symbols to avoid conflicts ([#1526](https://github.com/unikraft/unikraft/pull/1526)) by @michpappas +* `plat/xen`: Use `-lgcc` for Xen ARM64 builds with fp emulation ([#1525](https://github.com/unikraft/unikraft/pull/1525)) by @razvand +* `plat/xen`: Include `fp_arm64.c` in FPSIMD Xen ARM64 builds ([#1523](https://github.com/unikraft/unikraft/pull/1523)) by @razvand +* `plat/xen`: Fix implicit `int` cast build error ([#1518](https://github.com/unikraft/unikraft/pull/1518)) by @andreistan26 +* `drivers/xen`: Select `XEN_GNTTAB` as dependency when used ([#1517](https://github.com/unikraft/unikraft/pull/1517)) by @andreistan26 +* `.github/workflows`: Show message before starting catalog loop ([#1516](https://github.com/unikraft/unikraft/pull/1516)) by @craciunoiuc +* `plat/kvm`: Fix `Kconfig` dependency warning on Firecracker ([#1504](https://github.com/unikraft/unikraft/pull/1504)) by @michpappas +* `drivers/ukconsole/ns16550`: Fix `Kconfig` warnings on invalid `choice` ([#1503](https://github.com/unikraft/unikraft/pull/1503)) by @michpappas +* `include/uk/arch`: Define `bool` types for C++ compilers ([#1500](https://github.com/unikraft/unikraft/pull/1500)) by @StefanJum +* `libuklibparam`: Fix symbols not present after linkage ([#1499](https://github.com/unikraft/unikraft/pull/1499)) by @michpappas +* `plat/kvm`: Remove `|isr` flag to prevent build error ([#1497](https://github.com/unikraft/unikraft/pull/1497)) by @razvand +* `lib/ukdebug`: Add `README.md` to `ukdebug` ([#1492](https://github.com/unikraft/unikraft/pull/1492)) by @thass0 +* `plat/xen`: Fix Arm setup to work with new Xen console ([#1490](https://github.com/unikraft/unikraft/pull/1490)) by @thass0 +* `plat/kvm`: Enable VGA by default on QEMU x86_64 ([#1489](https://github.com/unikraft/unikraft/pull/1489)) by @michpappas +* `drivers/xen/console`: Update nolibc dependency ([#1487](https://github.com/unikraft/unikraft/pull/1487)) by @razvand +* `include/uk/arch`: Add kernel `__bool` type ([#1484](https://github.com/unikraft/unikraft/pull/1484)) by @thass0 +* `plat/xen`: Fix implicit conversion on return type ([#1482](https://github.com/unikraft/unikraft/pull/1482)) by @andreistan26 +* `plat/kvm/arm64`: Do not unmask `PSTATE.D` on IRQ entry ([#1481](https://github.com/unikraft/unikraft/pull/1481)) by @michpappas +* `.github/workflows`: Remove `jq` installation ([#1476](https://github.com/unikraft/unikraft/pull/1476)) by @nderjung +* `lib/nolibc`: Fix memory bug in `vfscanf` ([#1474](https://github.com/unikraft/unikraft/pull/1474)) by @thass0 +* `drivers/uktty`: Improve early initialization ([#1473](https://github.com/unikraft/unikraft/pull/1473)) by @michpappas +* Log calls to the `multiboot` and `mkefi` scripts ([#1469](https://github.com/unikraft/unikraft/pull/1469)) by @shym +* `.github`: Remove `CODEOWNERS` ([#1468](https://github.com/unikraft/unikraft/pull/1468)) by @mschlumpp +* Fix missing URL ([#1467](https://github.com/unikraft/unikraft/pull/1467)) by @yfenes +* `drivers/ukbus/pci`: Map PCI regions at runtime ([#1465](https://github.com/unikraft/unikraft/pull/1465)) by @michpappas +* `lib/vfscore`: Change `faccessat` with `AT_SYMLINK_NOFOLLOW` ([#1462](https://github.com/unikraft/unikraft/pull/1462)) by @robertZamfir601 +* `lib/vfscore`: Fix `renameat` function in vfscore ([#1460](https://github.com/unikraft/unikraft/pull/1460)) by @sebastianion +* `plat/common/x86`: Use `X86_VIDEO_MEM_START` for SIPI vector allocation ([#1457](https://github.com/unikraft/unikraft/pull/1457)) by @mogasergiu +* `lib/posix-{process, sysinfo}`: Take fdtab size from `posix-fdtab` instead of vfscore ([#1455](https://github.com/unikraft/unikraft/pull/1455)) by @andreittr +* `lib/nolibc`: Compile `string.c` with `-O3` ([#1454](https://github.com/unikraft/unikraft/pull/1454)) by @andreittr +* `include/uk/errptr`: Fix `NULL` being an error pointer ([#1453](https://github.com/unikraft/unikraft/pull/1453)) by @andreittr +* `build`: Use different progress flags based on the `wget` version ([#1442](https://github.com/unikraft/unikraft/pull/1442)) by @thass0 +* `libs/vfscore`: Fix `dirent64` warning ([#1372](https://github.com/unikraft/unikraft/pull/1372)) by @razvanrus2003 +* `[app-elfloader]`: Handle empty file size loadable segments ([#85](https://github.com/unikraft/app-elfloader/pull/85)) by @mogasergiu +* `[app-elfloader]`: .github/workflows: Introduce catalog tests ([#78](https://github.com/unikraft/app-elfloader/pull/78)) by @craciunoiuc +* `[lib-compiler-rt]`: .github/workflows: Introduce catalog tests ([#20](https://github.com/unikraft/lib-compiler-rt/pull/20)) by @craciunoiuc +* `[lib-libelf]`: .github/workflows: Introduce catalog tests ([#4](https://github.com/unikraft/lib-libelf/pull/4)) by @craciunoiuc +* `[lib-libuuid]`: .github/workflows: Introduce catalog tests ([#7](https://github.com/unikraft/lib-libuuid/pull/7)) by @craciunoiuc +* `[lib-lua]`: .github/workflows: Introduce catalog tests ([#10](https://github.com/unikraft/lib-lua/pull/10)) by @craciunoiuc +* `[lib-lwip]`: Fix #59, invalid pointer for dns addr in gcc14 ([#60](https://github.com/unikraft/lib-lwip/pull/60)) by @cluosh +* `[lib-lwip]`: .github/workflows: Introduce catalog tests ([#54](https://github.com/unikraft/lib-lwip/pull/54)) by @craciunoiuc +* `[lib-musl]`: .github/workflows: Introduce catalog tests ([#77](https://github.com/unikraft/lib-musl/pull/77)) by @craciunoiuc +* `[lib-nginx]`: .github/workflows: Introduce catalog tests ([#16](https://github.com/unikraft/lib-nginx/pull/16)) by @craciunoiuc +* `[lib-python3]`: .github/workflows: Introduce catalog tests ([#23](https://github.com/unikraft/lib-python3/pull/23)) by @craciunoiuc +* `[lib-redis]`: .github/workflows: Introduce catalog tests ([#13](https://github.com/unikraft/lib-redis/pull/13)) by @craciunoiuc +* `[lib-sqlite]`: .github/workflows: Introduce catalog tests ([#9](https://github.com/unikraft/lib-sqlite/pull/9)) by @craciunoiuc +* `[lib-zlib]`: .github/workflows: Introduce catalog tests ([#12](https://github.com/unikraft/lib-zlib/pull/12)) by @craciunoiuc + +A big thank you also to all those who helped in the [review process](unikraft.org/docs/contributing/review-process/): [Alexander Jung](https://github.com/nderjung), [Alex Apostolescu](https://github.com/Alex-deVis), [Andrei Stan](https://github.com/andreistan26), [Andrei Tatar](https://github.com/andreittr), [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Florin Postolache](https://github.com/flpostolache), [Teodor Țeugea](https://github.com/John-Ted), [Maria Pană](https://github.com/mariapana), [Maria Sfîrăială](https://github.com/mariasfiraiala), [Michalis Pappas](https://github.com/michpappas), [Mihnea Firoiu](https://github.com/Mihnea0Firoiu), [Oleksii Moisieiev](https://github.com/oleksiimoisieiev), [Radu Nichita](https://github.com/RaduNichita), [Răzvan Deaconescu](https://github.com/razvand), [Sergiu Moga](https://github.com/mogasergiu), [Simon Kuenzer](https://github.com/skuenzer), [Ștefan Jumărea](https://github.com/StefanJum), [Thassilo Schulze](https://github.com/thass0) diff --git a/src/components/landing-hero.tsx b/src/components/landing-hero.tsx index 44a795d4..8f80d3bd 100644 --- a/src/components/landing-hero.tsx +++ b/src/components/landing-hero.tsx @@ -245,11 +245,11 @@ export default function LandingHero() { }} > - v0.17.0 + v0.18.0 Latest Version - 2.4K+ + 2.8K+ GitHub Stars @@ -257,7 +257,7 @@ export default function LandingHero() { Contributors - 1.4K+ + 1.6K+ Discord Members