:::info
To generate the feature list:
```bash
gh pr list -s closed -L 100 --search "is:pr is:closed closed:>2024-12-21" --json author,title,number --template '{{range .}}{{ printf "* %s (#%v) by @%s\n" .title .number .author.login }}{{end}}'
```
To generate the list of reviewers:
```bash
git --no-pager log --format="* %(trailers:key=Reviewed-by,valueonly,separator=%x2C )" --abbrev-commit HEAD...RELEASE-0.18 | sed 's/, /\n* /g' | sort -u
```
:::
:::danger
before submitting, please search the document for "TODO", "commit"
:::
[toc]
## GitHub Release Note
We are proud to announce the latest version of Unikraft, v0.19!
This release comes with plenty of new features and updates.
⚠️ Be aware of the following potentially breaking changes:
The config options of `libposix-process` have been updated as follows:
* `CONFIG_LIBPOSIX_PROCESS_PIDS` and `CONFIG_LIBPOSIX_PROCESS_CLONE` are merged into a single option, `CONFIG_LIBPOSIX_PROCESS_MULTITHREADING`.
* `CONFIG_LIBPOSIX_PROCESS_VFORK` is replaced by `CONFIG_LIBPOSIX_PROCESS_MULTIPROCESS`.
* `CONFIG_LIBPOSIX_PROCESS_INIT_PIDS` is deprecated, and its functionality is enabled by default.
Here is the full updates list:
### 🚀 New Features
* `lib/posix-process`: POSIX signals ([#1248](https://github.com/unikraft/unikraft/pull/1248)) by @michpappas
* `lib/posix-process`: Add `vfork` & `execve` ([#1386](https://github.com/unikraft/unikraft/pull/1386)) by @michpappas
* `[app-elfloader]`: Introduce ELF `binfmt` loader ([#79](https://github.com/unikraft/app-elfloader/pull/79)) by @michpappas
* `lib/posix-process`: Supplementary changes for multiprocess ([#1627](https://github.com/unikraft/unikraft/pull/1627)) by @michpappas
* `[app-elfloader]`: Supplementary changes for multiprocess ([#90](https://github.com/unikraft/app-elfloader/pull/90)) by @michpappas
* `lib/posix-process`: `exit()` and `wait()` ([#1630](https://github.com/unikraft/unikraft/pull/1630)) by @michpappas
* `drivers/ukps2`: Add Firecracker shutdown driver and some minor `Kconfig` fixups ([#1265](https://github.com/unikraft/unikraft/pull/1265)) by @mogasergiu
* `lib/posix-process`: Graceful shutdown ([#1633](https://github.com/unikraft/unikraft/pull/1633)) by @michpappas
* `[app-elfloader]`: POSIX process graceful shutdown ([#92](https://github.com/unikraft/app-elfloader/pull/92)) by @michpappas
* `lib/posix-fdio`: Add internal implementations of `futime(n)s` ([#1575](https://github.com/unikraft/unikraft/pull/1575)) by @andreittr
* `lib/{ukfile, posix-socket, posix-unixsocket}`: Add support for explicitly polled files & sockets ([#1446](https://github.com/unikraft/unikraft/pull/1446)) by @andreittr
* `lib/posix-fdtab`: Support independent (per-process) fdtabs ([#1278](https://github.com/unikraft/unikraft/pull/1278)) by @andreittr
* `lib/posix-fd`: Named open file descriptions ([#1592](https://github.com/unikraft/unikraft/pull/1592)) by @andreittr
### 🐛 Bug Fixes & Improvements
* `lib/posix-process`: Add `README.md` ([#1644](https://github.com/unikraft/unikraft/pull/1644)) by @michpappas
* `lib/posix-process`: Make multiprocess config select `execve` ([#1642](https://github.com/unikraft/unikraft/pull/1642)) by @mogasergiu
* `lib/posix-process/arch/arm64`: Save/restore `lr`/`fp` on clone asm stub ([#1641](https://github.com/unikraft/unikraft/pull/1641)) by @mogasergiu
* `lib/posix-process`: Terminate underlying thread only if added to sched ([#1640](https://github.com/unikraft/unikraft/pull/1640)) by @mogasergiu
* `lib/posix-process`: Make `rt_sigtimedwait` stub block ([#1639](https://github.com/unikraft/unikraft/pull/1639)) by @michpappas
* `lib/ukvmem`: Return `ENOMEM` for invalid addresses ([#1638](https://github.com/unikraft/unikraft/pull/1638)) by @mogasergiu
* `lib/ukrandom`: Validate `getrandom` input & rm assert ([#1637](https://github.com/unikraft/unikraft/pull/1637)) by @andreittr
* `lib/vfscore`: Fix write const path in `automount` ([#1636](https://github.com/unikraft/unikraft/pull/1636)) by @andreittr
* `lib/syscall_shim/arch/x86`: Properly fetch `curr_fp` in execenv entry ([#1635](https://github.com/unikraft/unikraft/pull/1635)) by @mogasergiu
* `plat/xen`: Add initrd support for arm64 ([#1634](https://github.com/unikraft/unikraft/pull/1634)) by @andreistan26
* `lib/posix-process/signal`: Add stub for `CLONE_SIGHAND` ([#1628](https://github.com/unikraft/unikraft/pull/1628)) by @michpappas
* `lib/posix-process/signals`: Fix conditional for sigsetops ([#1626](https://github.com/unikraft/unikraft/pull/1626)) by @michpappas
* `libposix-process`: Create PID1 from thread passed via init ([#1620](https://github.com/unikraft/unikraft/pull/1620)) by @michpappas
* `lib/posix-process`: Add `signalfd`/`signalfd4` support ([#1619](https://github.com/unikraft/unikraft/pull/1619)) by @mogasergiu
* `lib/posix-process`: Define `libc` wrappers for `clone`/`vfork` ([#1618](https://github.com/unikraft/unikraft/pull/1618)) by @mogasergiu
* `lib/posix-fdtab`: Fix exec handler & ref leak on fdtab clone ([#1617](https://github.com/unikraft/unikraft/pull/1617)) by @andreittr
* `lib/posix-pipe`: Add pipe stat support ([#1603](https://github.com/unikraft/unikraft/pull/1603)) by @andreittr
* `lib/posix-fd`: Move heap-allocated open file descriptions out of fdtab ([#1602](https://github.com/unikraft/unikraft/pull/1602)) by @andreittr
* `lib/syscall_shim`: Use global scope inline asm for execenv prologue ([#1598](https://github.com/unikraft/unikraft/pull/1598)) by @mogasergiu
* `lib/posix-unixsocket`: Fix `NULL` crash on `accept4()` ([#1593](https://github.com/unikraft/unikraft/pull/1593)) by @andreittr
* `lib/vfscore`: Use `uk_syscall_do` for syscall delegation ([#1591](https://github.com/unikraft/unikraft/pull/1591)) by @mogasergiu
* `lib/ukcpio`: Add `syscall_shim` dep and use `uk_syscall_do` ([#1590](https://github.com/unikraft/unikraft/pull/1590)) by @mogasergiu
* `lib/ramfs`: Use kernel internal `clock_gettime` variant ([#1587](https://github.com/unikraft/unikraft/pull/1587)) by @mogasergiu
* `lib/vfscore`: Use kernel internal `clock_gettime` variant ([#1586](https://github.com/unikraft/unikraft/pull/1586)) by @mogasergiu
* `lib/posix-process`: Define kernel internal `exit_group` ([#1585](https://github.com/unikraft/unikraft/pull/1585)) by @mogasergiu
* `lib/posix-process`: Define kernel internal resource limit syscalls ([#1584](https://github.com/unikraft/unikraft/pull/1584)) by @mogasergiu
* `lib/posix-process`: Define kernel internal `gettid`/`getppid`/`getpid` ([#1583](https://github.com/unikraft/unikraft/pull/1583)) by @mogasergiu
* `lib/posix-fdio`: Adopt remaining file syscalls from vfscore ([#1581](https://github.com/unikraft/unikraft/pull/1581)) by @andreittr
* `lib/ukfile`: API: Change file offset and iovec length to `size_t` ([#1580](https://github.com/unikraft/unikraft/pull/1580)) by @andreittr
* `lib/ukfile`: Add try acquire operation ([#1579](https://github.com/unikraft/unikraft/pull/1579)) by @andreittr
* `lib/posix-fdio`: Fix wrong computation of `dev_t` ([#1578](https://github.com/unikraft/unikraft/pull/1578)) by @andreittr
* `lib/syscall_shim`: Autogenerate `uk_syscall_*` symbols at build time ([#1577](https://github.com/unikraft/unikraft/pull/1577)) by @mogasergiu
* `lib/posix-fd`: Move open file descriptions into own lib ([#1574](https://github.com/unikraft/unikraft/pull/1574)) by @andreittr
* `lib/ukvmem`: Use correct stack guard size macro for tests ([#1573](https://github.com/unikraft/unikraft/pull/1573)) by @mogasergiu
* `lib/posix-timerfd`: Output correct `old_value` on set ([#1568](https://github.com/unikraft/unikraft/pull/1568)) by @andreittr
* `lib/posix-timerfd`: Fix counter on subsequent reads ([#1567](https://github.com/unikraft/unikraft/pull/1567)) by @andreittr
* `lib/posix-timerfd`: Validate `settime()` argument ([#1566](https://github.com/unikraft/unikraft/pull/1566)) by @andreittr
* `plat/kvm`: Select `HAVE_IBMPC` only on x86_64 ([#1565](https://github.com/unikraft/unikraft/pull/1565)) by @shym
* `lib/syscall-shim`: Do not dereference optional `clone()` parameters ([#1564](https://github.com/unikraft/unikraft/pull/1564)) by @michpappas
* `lib/posix-*`: Remove hard dependency on posix-fdtab ([#1437](https://github.com/unikraft/unikraft/pull/1437)) by @andreittr
* `lib/syscall_shim`: Introduce syscall enter/exit routines tables ([#1277](https://github.com/unikraft/unikraft/pull/1277)) by @mogasergiu
* `lib/nolibc`: Update Musl-imported headers for signals ([#1244](https://github.com/unikraft/unikraft/pull/1244)) by @michpappas
* `[app-elfloader]`: Silence unused argument warnings for /etc/hostname ([#93](https://github.com/unikraft/app-elfloader/pull/93)) by @andreittr
* `[app-elfloader]`: Check return value of `uk_random_bytes()` ([#91](https://github.com/unikraft/app-elfloader/pull/91)) by @michpappas
* `[app-elfloader]`: Config.uk: Imply stdio file descriptors ([#87](https://github.com/unikraft/app-elfloader/pull/87)) by @andreittr
* `[app-elfloader]`: Remove `uk_syscall_` symbols from `exportsyms.uk` ([#86](https://github.com/unikraft/app-elfloader/pull/86)) by @mogasergiu
* `[lib-libelf]`: Use Unikraft-provided `__offsetof` instead of own ([#5](https://github.com/unikraft/lib-elf/pull/5)) by @andreittr
* `[lib-lwip]`: `init.c`: Remove no-op term function ([#62](https://github.com/unikraft/lib-musl/pull/62)) by @andreittr
* `[lib-lwip]`: `sockets.c`: Use `size_t` for `iovec` length ([#61](https://github.com/unikraft/lib-musl/pull/61)) by @andreittr
* `[lib-lwip]`: `socket.c`: Update to `posix-socket` poll setup API ([#58](https://github.com/unikraft/lib-musl/pull/58)) by @andreittr
* `[lib-musl]`: `arch/arm64`: Save/restore link register on `clone` asm stub ([#89](https://github.com/unikraft/lib-musl/pull/89)) by @mogasergiu
* `[lib-musl]`: Adapt to updated libposix-process config options ([#87](https://github.com/unikraft/lib-musl/pull/87)) by @michpappas
* `[lib-musl]`: Replace `clone`/`vfork` assembly wrappers with our own ([#86](https://github.com/unikraft/lib-musl/pull/86)) by @mogasergiu
* `[lib-musl]`: `Config.uk`: Add posix-tty as dependency to stdio ([#85](https://github.com/unikraft/lib-musl/pull/85)) by @andreittr
* `[lib-musl]`: `Makefile.uk.musl.signal`: Fix arm64 architecture test ([#83](https://github.com/unikraft/lib-musl/pull/83)) by @shym
A big thank you also to all those who helped in the [review process](unikraft.org/docs/contributing/review-process/): [Andrei Tatar](https://github.com/andreittr), [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Teodor Țeugea](https://github.com/John-Ted), [Oleksii Moisieiev](https://github.com/oleksiimoisieiev), [Răzvan Deaconescu](https://github.com/razvand), [Sergiu Moga](https://github.com/mogasergiu), [Ștefan Jumărea](https://github.com/StefanJum)
---
For more information, check out [the accompanying blog post](https://unikraft.org/blog/2025-05-23-unikraft-releases-v0.19) or [view the full changelog](https://github.com/unikraft/unikraft/compare/RELEASE-0.18.0...RELEASE-0.19.0).
---
## Twitter
Unikraft v0.19 is here! 🚀
Check out the blog post for details on the latest changes: https://unikraft.org/blog/2025-05-23-unikraft-releases-v0.19.0
---
## LinkedIn
Unikraft v0.19 is here! 🚀
It add plenty of fixes to improve application support, including features related to the long-awaited multiprocess support, vfscore and shutdown 💯
Check out the blog post for details on the latest changes (https://unikraft.org/blog/2025-05-23-unikraft-releases-v0.19.0) and join us on GitHub (https://github.com/unikraft/) and on Discord (https://bit.ly/UnikraftDiscord).
---
## Blog Post
We are proud to announce the latest release of Unikraft, v0.19.0.
This release comes packed with features related to POSIX compliance 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.18.0...RELEASE-0.19.0).
### POSIX Signals
Signals provide processes with asynchronous communication, lifecycle management, and error handling capabilities.
The implementation introduced in this release is minimal yet powerful, and provides a critical component for multiprocess support.
### Binary Formats
Inspired from [Linux modular binfmt design](https://docs.kernel.org/admin-guide/binfmt-misc.html), we introduce [`lib/ukbinfmt`](https://github.com/unikraft/unikraft/tree/staging/lib/ukbinfmt).
This library provides a minimal framework that delegates the loading and execution of binary objects to specialized components.
The ELF handler is available in [`app-elfloader`](https://github.com/unikraft/app-elfloader).
### Multiprocess Support
Beginning from v0.19.0, Unikraft incorporates multiprocess capabilities.
The implementation is based on `vfork()` and `clone()` with `CLONE_VFORK | CLONE_VM`, which are neatly abstracted by libc's `posix_spawn()`.
In addition to process lifetime management facilities, multiprocess support introduces optional `/sbin/init` logic for applications that may need it, in the form of an `init` process that takes care to (1) spawn the application process (2) foster orphaned processes (3) reap its children (4) coordinate process termination during shutdown.
For more details see the [technical blog post](https://unikraft.org/blog/2025-05-15-multiprocess) on the topic, as well as the [README.md](https://github.com/unikraft/unikraft/tree/staging/lib/posix-process#readme) of `libposix-process`.
### Graceful Shutdown
For the requirements of multiprocess and especially with stateful applications in mind, v0.19.0 introduces graceful shutdown.
When triggered, the `init` process signals the application process to give it the opportunity to gracefully terminate itself and its children before shutting down the system.
Once again, for more info refer to the [README.md](https://github.com/unikraft/unikraft/tree/staging/lib/posix-process#readme) of `libposix-process`.
### Open File Descriptions
As part of the rework of the VFS layer, open file descriptions are now a first-class core library: [`posix-fd`](https://github.com/unikraft/unikraft/tree/staging/lib/posix-fd).
Previously this functionality had been split between `ukfile`, which provided definitions, and `posix-fdtab`, which handled lifetime management (creation, reference counting, destruction).
This arrangement proved limiting, especially in light of multiprocess support.
As such, everything to do with POSIX open file descriptions, including lifetime management, is now part of `posix-fd`.
This enables core libraries to arbitrarily create and consume open file descriptions without keeping the (otherwise userspace-facing) fdtab in the loop, enabling greater flexibility in the upcoming new VFS stack.
A neat first feature of the newly-independent `posix-fd` are named open files: optional arbitrary labels attached to open file descriptions at creation time.
### Known Issues
- [Compilation fails with GCC 15](https://github.com/unikraft/unikraft/issues/1643); workaround: `export UK_CFLAGS="-std=gnu17"`
- [Compilation fails with GCC 14 for `lib-libcxx`](https://github.com/unikraft/lib-libcxx/issues/36)
### Community Activities
#### Part of the Community and Development Lab
The [Community and Development Lab (CDL)](https://cdl.rosedu.org/) is a program helping participants make their first steps in open source development.
With the help of instructors and mentors, participants contribute to open source projects, review contributions, document projects, participate in community discussions, build infrastructure for collaborative projects, automate development workflows, and much more.
Unikraft was part of both CDL autumn 2024 (October-December 2024) and CDL spring 2025 (March-May 2025).
A total of 18 participants were mentees for Unikraft, making contributions to the [`catalog-core`](https://github.com/unikraft/catalog-core) and [`catalog`](https://github.com/unikraft/catalog) repositories and to the [`kraftkit`](https://github.com/unikraft/kraftkit) and [`governance`](https://github.com/unikraft/governance) repositories.
CDL is part of our commitment to open source and facilitate the entry of newcomers.
#### Unikraft Summer Workshop 2025
[Unikraft Summer Workshop 2025 (*USW'25*)](https://unikraft.org/hackathons/usw25) 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 and debug applications using Unikraft.
There will be 6 sessions taking place in the first two weeks (between June 23 and July 4, 2025).
Each session takes place for 3 hours, in the 4pm-7pm CEST interval, in English.
Sessions will consist of talks and demos delivered by members of the Unikraft community, followed by practical tutorials that you will work on with support and supervision.
Sessions take place on [Unikraft's Discord server](https://bit.ly/UnikraftDiscord).
Topics include building unikernels, benchmarking, debugging, porting applications, virtualization and platform specifics.
The 6 sessions will focus on the internals of Unikraft: the build system, native configuration options, application porting.
The two weeks with sessions will be followed by a week of working on the final project.
You will work on the project in teams of 2-3 people.
We will have support sessions online to help with the project.
On Saturday, 12 July 2025, 9am-5pm CEST, we will have the final hackathon, that consists of adding final touches to the project.
The hackathon will take place in hybrid format, in person, at [POLITEHNICA Bucharest](https://upb.ro/en/), and, online, [Unikraft's Discord server](https://bit.ly/UnikraftDiscord).
Participants will receive a participation diploma.
The first three teams will get special prizes.
All hackathon in-person participants will get a Unikraft T-shirt.
#### GSoC'25 Projects
Unikraft will be part of [Google Summer of Code](https://summerofcode.withgoogle.com/programs/2025/organizations/unikraft) 🤩
[5 projects](https://unikraft.org/blog/2025-05-22-unikraft-gsoc25) are currently under way in the Unikraft community:
The 5 applicants, and their projects are:
**[Prasoon Kumar](https://github.com/prasoon054/) from [Indian Institute of Technology Bombay](https://www.iitb.ac.in/) in Mumbai, India**
* Project: Expanding the Unikraft Software Support Ecosystem
* Mentors: [Răzvan Vîrtan](https://github.com/razvanvirtan), [Răzvan Deaconescu](https://github.com/razvand)
**[Ashirvad Mohanty](https://github.com/ThestralWarrior) from [Odisha University of Technology and Research](https://outr.ac.in/) in Bhubaneswar, India**
* Project: Fine-Tuning Unikraft’s Performance
* Mentors: [Hugo Lefeuvre](https://github.com/hlef), [Ștefan Jumărea](https://github.com/StefanJum)
**[Abolfazl Soltani](https://github.com/SalarSamani) from [Vrije Universiteit Amsterdam](https://vu.nl/nl) in Amsterdam, The Netherlands**
* Project: Update Newlib and Pthread-embedded Libraries
* Mentors: [Ștefan Jumărea](https://github.com/StefanJum), [Cezar Crăciunoiu](https://github.com/craciunoiuc)
**[Shashank Srivastava](https://github.com/shank250) from [GL Bajaj Institute of Technology and Management](https://www.glbimr.ac.in/) in Greater Noida, India**
* Project: Testing Framework for Unikraft Builds
* Mentors: [Răzvan Deaconescu](https://github.com/razvand), [Răzvan Vîrtan](https://github.com/razvanvirtan)
**[Abhinav Kumar](https://github.com/abhinavkumar1203) from [Netaji Subhash University of Technology](http://nsut.ac.in/en/home) in Delhi, India**
* Project: Updating Unikraft Application Libraries
* Mentors: [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Răzvan Deaconescu](https://github.com/razvand)
Congratulations Prasoon, Ashirvad, Abolfazl, Shashank, Abhinav! 🥳