---
# System prepended metadata

title: Release Post - v0.15.0 (Pandora)

---



:::info
To generate the feature list:

```bash
gh pr list -s closed -L 100 --search "is:pr is:closed closed:>2023-08-19" --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.14.0 | sed 's/, /\n* /g' | sort -u
```
:::

:::danger
before submitting, please search the document for "TODO", "commit"
:::

:::info
Candidate text for the release note:

https://github.com/unikraft/unikraft/issues?q=label%3Arelease-note+is%3Aclosed+milestone%3A%22v0.14.1+%28Prometheus%29%22
:::

[toc]

## GitHub Release Note

We are proud to announce the latest version update of Unikraft, v0.15.0!
This release brings important new features and further improvements and stabilizing to the previous release (0.14.0 - Prometheus).
It adds new features, a healthy number of fixes and it enhances application support.

Here is the full updates list:

### 🚀 New Features

* Improved application documentation and support scripts
  * `[app-click]`: Add configuration files and run scripts ([#5](https://github.com/unikraft/app-click/pull/5) by [@StefanJum](https:/github.com/StefanJum)
  * `[app-click]`: Port app-click to use musl ([#4](https://github.com/unikraft/app-click/pull/4) by [@MekalBoy](https:/github.com/MekalBoy)
  * `[app-duktape]`: Update setup for developer-centric scripts ([#10](https://github.com/unikraft/app-duktape/pull/10) by [@razvand](https:/github.com/razvand)
  * `[app-duktape]`: Add Musl support ([#9](https://github.com/unikraft/app-duktape/pull/9) by [@razvand](https:/github.com/razvand)
  * `[app-duktape]`: Added Makefile and Makefile.uk to duktape, including the necessary li… ([#7](https://github.com/unikraft/app-duktape/pull/7) by [@justin9939](https:/github.com/justin9939)
  * `[app-duktape]`: lib/duktape: port to musl addresses: [#3 (#6](https://github.com/unikraft/app-duktape/pull/3 (#6) by [@JoachimBose](https:/github.com/JoachimBose)
  * `[app-helloworld-cpp]`: `README.md`: Use correct Firecracker JSON file name ([#22](https://github.com/unikraft/app-helloworld-cpp/pull/22) by [@razvand](https:/github.com/razvand)
  * `[app-helloworld-cpp]`: Stefan jum/add dev content ([#21](https://github.com/unikraft/app-helloworld-cpp/pull/21) by [@StefanJum](https:/github.com/StefanJum)
  * `[app-helloworld-cpp]`: Add KraftKit configuration file for KraftCloud ([#20](https://github.com/unikraft/app-helloworld-cpp/pull/20) by [@razvand](https:/github.com/razvand)
  * `[app-helloworld-cpp]`: `kraft.yaml`: Fix contents ([#19](https://github.com/unikraft/app-helloworld-cpp/pull/19) by [@razvand](https:/github.com/razvand)
  * `[app-helloworld-go]`: Add networking support for Go applications ([#11](https://github.com/unikraft/app-helloworld-go/pull/11) by [@razvand](https:/github.com/razvand)
  * `[app-helloworld-go]`: Add KraftKit configuration file for KraftCloud ([#10](https://github.com/unikraft/app-helloworld-go/pull/10) by [@razvand](https:/github.com/razvand)
  * `[app-helloworld]`: Makefile: Remove lwip ([#30](https://github.com/unikraft/app-helloworld/pull/30) by [@razvand](https:/github.com/razvand)
  * `[app-helloworld]`: Makefile: Remove lwip ([#29](https://github.com/unikraft/app-helloworld/pull/29) by [@razvand](https:/github.com/razvand)
  * `[app-helloworld]`: Testlib fxdiv ([#28](https://github.com/unikraft/app-helloworld/pull/28) by [@SumairShergill](https:/github.com/SumairShergill)
  * `[app-helloworld]`: lib/update/test: added library ([#27](https://github.com/unikraft/app-helloworld/pull/27) by [@SumairShergill](https:/github.com/SumairShergill)
  * `[app-helloworld]`: lib-intx upadate v0.10.0 ([#26](https://github.com/unikraft/app-helloworld/pull/26) by [@ZackYe42](https:/github.com/ZackYe42)
  * `[app-helloworld]`: Stefan jum/add dev content ([#25](https://github.com/unikraft/app-helloworld/pull/25) by [@StefanJum](https:/github.com/StefanJum)
  * `[app-helloworld]`: Add KraftKit configuration file for KraftCloud ([#23](https://github.com/unikraft/app-helloworld/pull/23) by [@razvand](https:/github.com/razvand)
  * `[app-httpreply]`: README.md: Update documentation ([#20](https://github.com/unikraft/app-httpreply/pull/20) by [@razvand](https:/github.com/razvand)
  * `[app-httpreply]`: Stefan jum/add dev content ([#19](https://github.com/unikraft/app-httpreply/pull/19) by [@StefanJum](https:/github.com/StefanJum)
  * `[app-httpreply]`: Add KraftKit configuration file for KraftCloud ([#18](https://github.com/unikraft/app-httpreply/pull/18) by [@razvand](https:/github.com/razvand)
  * `[app-lua]`: Stefan jum/add dev content ([#12](https://github.com/unikraft/app-lua/pull/12) by [@StefanJum](https:/github.com/StefanJum)
  * `[app-lua]`: Add KraftKit configuration file for KraftCloud ([#11](https://github.com/unikraft/app-lua/pull/11) by [@razvand](https:/github.com/razvand)
  * `[app-lua]`: Makefile: Port app-lua to use musl ([#6](https://github.com/unikraft/app-lua/pull/6) by [@panagiotiskon](https:/github.com/panagiotiskon)
  * `[app-nginx]`: README.md: Fix repeating words ([#22](https://github.com/unikraft/app-nginx/pull/22) by [@Mihnea0Firoiu](https:/github.com/Mihnea0Firoiu)
  * `[app-nginx]`: README.md: Update README ([#20](https://github.com/unikraft/app-nginx/pull/20) by [@razvand](https:/github.com/razvand)
  * `[app-nginx]`: Stefan jum/add dev content ([#17](https://github.com/unikraft/app-nginx/pull/17) by [@StefanJum](https:/github.com/StefanJum)
  * `[app-nginx]`: Add KraftKit configuration file for KraftCloud ([#16](https://github.com/unikraft/app-nginx/pull/16) by [@razvand](https:/github.com/razvand)
  * `[app-python3]`: README.md: Fix typo ([#24](https://github.com/unikraft/app-python3/pull/24) by [@gabrielpitic](https:/github.com/gabrielpitic)
  * `[app-python3]`: README.md: Update kraft run command ([#23](https://github.com/unikraft/app-python3/pull/23) by [@SorinAlexB](https:/github.com/SorinAlexB)
  * `[app-python3]`: Update setup for developer-centric scripts ([#21](https://github.com/unikraft/app-python3/pull/21) by [@razvand](https:/github.com/razvand)
  * `[app-python3]`: `kraft.cloud.yaml`: Add networking support ([#20](https://github.com/unikraft/app-python3/pull/20) by [@razvand](https:/github.com/razvand)
  * `[app-python3]`: Simplify root filesystem ([#19](https://github.com/unikraft/app-python3/pull/19) by [@razvand](https:/github.com/razvand)
  * `[app-python3]`: Add KraftKit configuration file for KraftCloud ([#18](https://github.com/unikraft/app-python3/pull/18) by [@razvand](https:/github.com/razvand)
  * `[app-python3]`: kraft.yaml: Update libraries order ([#14](https://github.com/unikraft/app-python3/pull/14) by [@StefanJum](https:/github.com/StefanJum)
  * `[app-redis]`: Update Redis app directory ([#20](https://github.com/unikraft/app-redis/pull/20) by [@razvand](https:/github.com/razvand)
  * `[app-redis]`: Add kraft.cloud.yaml ([#19](https://github.com/unikraft/app-redis/pull/19) by [@razvand](https:/github.com/razvand)
  * `[app-run-app-elfloader]`: Add new applications and use `fs1` as 9p index ([#18](https://github.com/unikraft/app-run-app-elfloader/pull/18) by [@razvand](https:/github.com/razvand)
  * `[app-run-app-elfloader]`: Update prebuilt images to Unikraft 0.14 ([#17](https://github.com/unikraft/app-run-app-elfloader/pull/17) by [@razvand](https:/github.com/razvand)
  * `[app-run-app-elfloader]`: [run.sh] Let user use custom QEMU arguments ([#11](https://github.com/unikraft/app-run-app-elfloader/pull/11) by [@costinsin](https:/github.com/costinsin)
  * `[app-sqlite]`: Stefan jum/add dev content ([#13](https://github.com/unikraft/app-sqlite/pull/13) by [@StefanJum](https:/github.com/StefanJum)
  * `[app-sqlite]`: Add KraftKit configuration file for KraftCloud ([#12](https://github.com/unikraft/app-sqlite/pull/12) by [@razvand](https:/github.com/razvand)
  * `[app-testing]`: Introduce generate.py script ([#4](https://github.com/unikraft/app-testing/pull/4) by [@razvand](https:/github.com/razvand)
  * `[app-wamr]`: Update setup for developer-centric scripts ([#7](https://github.com/unikraft/app-wamr/pull/7) by [@razvand](https:/github.com/razvand)
  * `[app-wamr]`: Update README.md ([#6](https://github.com/unikraft/app-wamr/pull/6) by [@chococandy63](https:/github.com/chococandy63)
  * `[app-wamr]`: add makefile, makefile.uk ([#4](https://github.com/unikraft/app-wamr/pull/4) by [@akouk](https:/github.com/akouk)
  * `[run-app-elfloader]`: Add new applications and use `fs1` as 9p index ([#18](https://github.com/unikraft/run-app-elfloader/pull/18) by [@razvand](https:/github.com/razvand)
  * `[run-app-elfloader]`: Update prebuilt images to Unikraft 0.14 ([#17](https://github.com/unikraft/run-app-elfloader/pull/17) by [@razvand](https:/github.com/razvand)
  * `[run-app-elfloader]`: [run.sh] Let user use custom QEMU arguments ([#11](https://github.com/unikraft/run-app-elfloader/pull/11) by [@costinsin](https:/github.com/costinsin)
  * `[lib-click]`: Update lib click to the latest Unikraft version ([#7](https://github.com/unikraft/lib-click/pull/7) by [@StefanJum](https:/github.com/StefanJum)
  * `[lib-wamr]`: `patches`: Remove patch `0005`: `main` adaptation ([#9](https://github.com/unikraft/lib-wamr/pull/9) by [@razvand](https:/github.com/razvand)
  * `[lib-wamr]`: base to pbase ([#2](https://github.com/unikraft/lib-wamr/pull/2) by [@akouk](https:/github.com/akouk)
* Improved Python support
  * `[lib-python-numpy]`: Makefile.uk: Fix internal build include paths ([#2](https://github.com/unikraft/lib-python-numpy/pull/2) by [@andreittr](https:/github.com/andreittr)
  * `[lib-python-pillow]`: Port upstream Pillow 10.0.0 ([#1](https://github.com/unikraft/lib-python-pillow/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-python3]`: Add support for the Pillow extension ([#22](https://github.com/unikraft/lib-python3/pull/22) by [@andreittr](https:/github.com/andreittr)
  * `[lib-python3]`: Makefile.uk: Supress warnings ([#21](https://github.com/unikraft/lib-python3/pull/21) by [@andreittr](https:/github.com/andreittr)
  * `[lib-python3]`: Enable the `mmap` stdlib module ([#20](https://github.com/unikraft/lib-python3/pull/20) by [@andreittr](https:/github.com/andreittr)
  * `[lib-python3]`: Makefile.uk: Fix generated header include path ([#19](https://github.com/unikraft/lib-python3/pull/19) by [@andreittr](https:/github.com/andreittr)
  * `[lib-python3]`: patches: Fix ctypes import error ([#18](https://github.com/unikraft/lib-python3/pull/18) by [@andreittr](https:/github.com/andreittr)
  * `[lib-python3]`: Introduce Library.uk ([#14](https://github.com/unikraft/lib-python3/pull/14) by [@nderjung](https:/github.com/nderjung)
* Extended application support
  * `[dynamic-apps]`: Add sed pre-built binary ([#103](https://github.com/unikraft/dynamic-apps/pull/103) by [@gabrielpitic](https:/github.com/gabrielpitic)
  * `[dynamic-apps]`: Add awk PIE build ([#102](https://github.com/unikraft/dynamic-apps/pull/102) by [@andreistan26](https:/github.com/andreistan26)
  * `[dynamic-apps]`: README.md: Fix "dyamic" typo ([#101](https://github.com/unikraft/dynamic-apps/pull/101) by [@SorinAlexB](https:/github.com/SorinAlexB)
  * `[dynamic-apps]`: Add tar pre-built binary ([#100](https://github.com/unikraft/dynamic-apps/pull/100) by [@gabrielpitic](https:/github.com/gabrielpitic)
  * `[dynamic-apps]`: lang/go: Update libraries for helloworld ([#99](https://github.com/unikraft/dynamic-apps/pull/99) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: nginx: Ingore generated files ([#98](https://github.com/unikraft/dynamic-apps/pull/98) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: gzip: Use input.txt as input file ([#97](https://github.com/unikraft/dynamic-apps/pull/97) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: `extract.sh`: Simplify script ([#96](https://github.com/unikraft/dynamic-apps/pull/96) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: openssl: Update binary and libraries ([#95](https://github.com/unikraft/dynamic-apps/pull/95) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: `bzip2`: Use `input.txt` as input file ([#94](https://github.com/unikraft/dynamic-apps/pull/94) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: lang/go: Rename client-server to client_server ([#93](https://github.com/unikraft/dynamic-apps/pull/93) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: Add Python helloworld ([#92](https://github.com/unikraft/dynamic-apps/pull/92) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: imagemagick: Remove duplicate libraries ([#91](https://github.com/unikraft/dynamic-apps/pull/91) by [@StefanJum](https:/github.com/StefanJum)
  * `[dynamic-apps]`: Add curl into dynamic apps ([#86](https://github.com/unikraft/dynamic-apps/pull/86) by [@cozkul](https:/github.com/cozkul)
  * `[dynamic-apps]`: added wget to dynamic-apps ([#83](https://github.com/unikraft/dynamic-apps/pull/83) by [@sinamhdv](https:/github.com/sinamhdv)
  * `[dynamic-apps]`: Add du linux app ([#82](https://github.com/unikraft/dynamic-apps/pull/82) by [@hadisinaee](https:/github.com/hadisinaee)
  * `[dynamic-apps]`: app/linux: add md5sum ([#81](https://github.com/unikraft/dynamic-apps/pull/81) by [@Moh3nsalehi](https:/github.com/Moh3nsalehi)
  * `[dynamic-apps]`: add blackjack example for c++ ([#78](https://github.com/unikraft/dynamic-apps/pull/78) by [@br-zhou](https:/github.com/br-zhou)
  * `[dynamic-apps]`: adding unzip to dynamic-apps ([#74](https://github.com/unikraft/dynamic-apps/pull/74) by [@Moh3nsalehi](https:/github.com/Moh3nsalehi)
  * `[dynamic-apps]`: adding netcat to dynamic apps ([#73](https://github.com/unikraft/dynamic-apps/pull/73) by [@hadisinaee](https:/github.com/hadisinaee)
  * `[dynamic-apps]`: Grep: Add grep dynamic executable ([#71](https://github.com/unikraft/dynamic-apps/pull/71) by [@chococandy63](https:/github.com/chococandy63)
  * `[dynamic-apps]`: imagemagick: Add magick command ([#70](https://github.com/unikraft/dynamic-apps/pull/70) by [@TiagoRG](https:/github.com/TiagoRG)
  * `[dynamic-apps]`: imagemagick: convert command ([#69](https://github.com/unikraft/dynamic-apps/pull/69) by [@GuilhermeVieiraDev](https:/github.com/GuilhermeVieiraDev)
  * `[dynamic-apps]`: `lang`: Add Linux pre-built Python interpreter ([#68](https://github.com/unikraft/dynamic-apps/pull/68) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: `lang/python`: Add HTTP server program         ([#67](https://github.com/unikraft/dynamic-apps/pull/67) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: `lang/go`: Add simple HTTP program ([#66](https://github.com/unikraft/dynamic-apps/pull/66) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: `lang/c++`: Add simple HTTP program ([#65](https://github.com/unikraft/dynamic-apps/pull/65) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: `lang/c`: Add simple HTTP program ([#64](https://github.com/unikraft/dynamic-apps/pull/64) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: Add busybox 1.36.1 ([#63](https://github.com/unikraft/dynamic-apps/pull/63) by [@StefanJum](https:/github.com/StefanJum)
  * `[dynamic-apps]`: `lang/rust`: Introduce simple HTTP server ([#62](https://github.com/unikraft/dynamic-apps/pull/62) by [@razvand](https:/github.com/razvand)
  * `[dynamic-apps]`: Add nats-server application build from source ([#58](https://github.com/unikraft/dynamic-apps/pull/58) by [@SHOREQU69](https:/github.com/SHOREQU69)
  * `[dynamic-apps]`: Add GnuPG dynamic application built from source ([#57](https://github.com/unikraft/dynamic-apps/pull/57) by [@andreistan26](https:/github.com/andreistan26)
  * `[dynamic-apps]`: Add ffmpeg-source ([#55](https://github.com/unikraft/dynamic-apps/pull/55) by [@razvang0307](https:/github.com/razvang0307)
  * `[dynamic-apps]`: Add GnuPG 2.4.3 ([#52](https://github.com/unikraft/dynamic-apps/pull/52) by [@mtimaN](https:/github.com/mtimaN)
  * `[dynamic-apps]`: Add ffmpeg 5.1.2 ([#49](https://github.com/unikraft/dynamic-apps/pull/49) by [@timmmyeo](https:/github.com/timmmyeo)
  * `[dynamic-apps]`: Add busybox 1.36.1 ([#17](https://github.com/unikraft/dynamic-apps/pull/17) by [@i-Pear](https:/github.com/i-Pear)
  * `[dynamic-apps]`: Add perl 5.36 ([#14](https://github.com/unikraft/dynamic-apps/pull/14) by [@LucaSeri](https:/github.com/LucaSeri)
  * `[dynamic-apps]`: Add NodeJS 18.15.0 ([#10](https://github.com/unikraft/dynamic-apps/pull/10) by [@maniatro111](https:/github.com/maniatro111)
  * `[app-elfloader]`: Add lang/c/http_server to run.yaml ([#60](https://github.com/unikraft/app-elfloader/pull/60) by [@ALEX11BR](https:/github.com/ALEX11BR)
  * `[app-elfloader]`: Add du to run.yaml ([#59](https://github.com/unikraft/app-elfloader/pull/59) by [@valudimi](https:/github.com/valudimi)
  * `[app-elfloader]`: Add GnuPG to run.yaml ([#58](https://github.com/unikraft/app-elfloader/pull/58) by [@ALEX11BR](https:/github.com/ALEX11BR)
  * `[app-elfloader]`: Add du to run.yaml ([#56](https://github.com/unikraft/app-elfloader/pull/56) by [@valudimi](https:/github.com/valudimi)
  * `[app-elfloader]`: Add gzip to run.yaml ([#55](https://github.com/unikraft/app-elfloader/pull/55) by [@ALEX11BR](https:/github.com/ALEX11BR)
  * `[app-elfloader]`: Make VDSO creation work for cross-compilation and Darwin ([#54](https://github.com/unikraft/app-elfloader/pull/54) by [@skuenzer](https:/github.com/skuenzer)
  * `[app-elfloader]`: Update scripts ([#53](https://github.com/unikraft/app-elfloader/pull/53) by [@razvand](https:/github.com/razvand)
  * `[app-elfloader]`: Added support for openssl to run.yaml ([#52](https://github.com/unikraft/app-elfloader/pull/52) by [@sinamhdv](https:/github.com/sinamhdv)
  * `[app-elfloader]`: Added curl config into run.yaml ([#42](https://github.com/unikraft/app-elfloader/pull/42) by [@cozkul](https:/github.com/cozkul)
  * `[app-elfloader]`: Added support for running echo by modifying run.yaml ([#41](https://github.com/unikraft/app-elfloader/pull/41) by [@JackieHam](https:/github.com/JackieHam)
  * `[app-elfloader]`: Made changes to run.yaml file to support running bzip2 application ([#39](https://github.com/unikraft/app-elfloader/pull/39) by [@JackieHam](https:/github.com/JackieHam)
  * `[app-elfloader]`: Add ls to run.yaml ([#37](https://github.com/unikraft/app-elfloader/pull/37) by [@willgao23](https:/github.com/willgao23)
  * `[app-elfloader]`: Add node and gnupg to run.yaml ([#33](https://github.com/unikraft/app-elfloader/pull/33) by [@SorenEricMent](https:/github.com/SorenEricMent)
  * `[app-elfloader]`: scripts: Add support for running http_server-cpp ([#32](https://github.com/unikraft/app-elfloader/pull/32) by [@chococandy63](https:/github.com/chococandy63)
  * `[app-elfloader]`: scripts: Add support for running helloworld-cpp ([#31](https://github.com/unikraft/app-elfloader/pull/31) by [@willgao23](https:/github.com/willgao23)
  * `[app-elfloader]`: Add sqlite3 to run.yaml ([#30](https://github.com/unikraft/app-elfloader/pull/30) by [@SorenEricMent](https:/github.com/SorenEricMent)
  * `[app-elfloader]`: `mmap` each ELF segment if `CONFIG_LIBPOSIXMMAP` is enabled ([#28](https://github.com/unikraft/app-elfloader/pull/28) by [@mogasergiu](https:/github.com/mogasergiu)
  * `[app-elfloader]`: Add developer-centric contents ([#27](https://github.com/unikraft/app-elfloader/pull/27) by [@razvand](https:/github.com/razvand)
  * `[app-elfloader]`: Add KraftKit configuration files ([#26](https://github.com/unikraft/app-elfloader/pull/26) by [@razvand](https:/github.com/razvand)
  * `[lib-cairo]`: Port upstream Cairo 1.17.8 ([#1](https://github.com/unikraft/lib-cairo/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-fribidi]`: Port upstream Fribidi 1.0.13 ([#1](https://github.com/unikraft/lib-fribidi/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-giflib]`: Port upstream GIFLIB 5.2.1 ([#1](https://github.com/unikraft/lib-giflib/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-harfbuzz]`: Port upstream HarfBuzz 8.1.1 ([#1](https://github.com/unikraft/lib-harfbuzz/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-libdeflate]`: Port upstream libdeflate 1.18 ([#1](https://github.com/unikraft/lib-libdeflate/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-libtiff]`: Port upstream libtiff 4.5.1 ([#3](https://github.com/unikraft/lib-libtiff/pull/3) by [@andreittr](https:/github.com/andreittr)
  * `[lib-libwebp]`: Port upstream libwebp 1.3.1 ([#1](https://github.com/unikraft/lib-libwebp/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-littlecms]`: Port upstream LittleCMS 2.15 ([#1](https://github.com/unikraft/lib-littlecms/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-openjpeg]`: Port upstream OpenJPEG 2.5.0 ([#3](https://github.com/unikraft/lib-openjpeg/pull/3) by [@andreittr](https:/github.com/andreittr)
  * `[lib-pixman]`: Port upstream pixman 0.42.2 ([#1](https://github.com/unikraft/lib-pixman/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-python-pillow]`: Port upstream Pillow 10.0.0 ([#1](https://github.com/unikraft/lib-python-pillow/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-raqm]`: Port upstream Raqm 0.10.1 ([#1](https://github.com/unikraft/lib-raqm/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-xz]`: Port upstream xz 5.4.4 ([#1](https://github.com/unikraft/lib-xz/pull/1) by [@andreittr](https:/github.com/andreittr)
  * `[lib-zstd]`: Port upstream zstd 1.5.5 ([#1](https://github.com/unikraft/lib-zstd/pull/1) by [@andreittr](https:/github.com/andreittr)
* Steps towards library versioning (`Library.uk`)
  * `[lib-axtls]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-axtls/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-boost]`: Introduce Library.uk ([#8](https://github.com/unikraft/lib-boost/pull/8) by [@nderjung](https:/github.com/nderjung)
  * `[lib-bzip2]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-bzip2/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-c-ares]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-c-ares/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-click]`: Introduce Library.uk ([#5](https://github.com/unikraft/lib-click/pull/5) by [@nderjung](https:/github.com/nderjung)
  * `[lib-compiler-rt]`: Introduce Library.uk ([#15](https://github.com/unikraft/lib-compiler-rt/pull/15) by [@nderjung](https:/github.com/nderjung)
  * `[lib-dafny]`: Introduce Library.uk ([#1](https://github.com/unikraft/lib-dafny/pull/1) by [@nderjung](https:/github.com/nderjung)
  * `[lib-dnnl]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-dnnl/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-duktape]`: Introduce Library.uk ([#3](https://github.com/unikraft/lib-duktape/pull/3) by [@nderjung](https:/github.com/nderjung)
  * `[lib-eigen]`: Introduce Library.uk ([#4](https://github.com/unikraft/lib-eigen/pull/4) by [@nderjung](https:/github.com/nderjung)
  * `[lib-farmhash]`: Introduce Library.uk ([#1](https://github.com/unikraft/lib-farmhash/pull/1) by [@nderjung](https:/github.com/nderjung)
  * `[lib-fft2d]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-fft2d/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-flatbuffers]`: Introduce Library.uk ([#1](https://github.com/unikraft/lib-flatbuffers/pull/1) by [@nderjung](https:/github.com/nderjung)
  * `[lib-gcc]`: Introduce Library.uk ([#4](https://github.com/unikraft/lib-gcc/pull/4) by [@nderjung](https:/github.com/nderjung)
  * `[lib-gemmlowp]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-gemmlowp/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-googletest]`: Introduce Library.uk ([#3](https://github.com/unikraft/lib-googletest/pull/3) by [@nderjung](https:/github.com/nderjung)
  * `[lib-http-parser]`: Introduce Library.uk ([#7](https://github.com/unikraft/lib-http-parser/pull/7) by [@nderjung](https:/github.com/nderjung)
  * `[lib-intel-intrinsics]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-intel-intrinsics/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-intx]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-intx/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libc-test]`: Introduce Library.uk ([#3](https://github.com/unikraft/lib-libc-test/pull/3) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libcxx]`: Introduce Library.uk ([#29](https://github.com/unikraft/lib-libcxx/pull/29) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libcxxabi]`: Introduce Library.uk ([#5](https://github.com/unikraft/lib-libcxxabi/pull/5) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libelf]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-libelf/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libfxdiv]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-libfxdiv/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libgo]`: Introduce Library.uk ([#6](https://github.com/unikraft/lib-libgo/pull/6) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libhogweed]`: Introduce Library.uk ([#1](https://github.com/unikraft/lib-libhogweed/pull/1) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libicu]`: Introduce Library.uk ([#1](https://github.com/unikraft/lib-libicu/pull/1) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libsodium]`: Introduce Library.uk ([#9](https://github.com/unikraft/lib-libsodium/pull/9) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libtasn1]`: Introduce Library.uk ([#1](https://github.com/unikraft/lib-libtasn1/pull/1) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libucontext]`: Introduce Library.uk ([#4](https://github.com/unikraft/lib-libucontext/pull/4) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libunwind]`: Introduce Library.uk ([#8](https://github.com/unikraft/lib-libunwind/pull/8) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libuuid]`: Introduce Library.uk ([#3](https://github.com/unikraft/lib-libuuid/pull/3) by [@nderjung](https:/github.com/nderjung)
  * `[lib-libuv]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-libuv/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-lua]`: Introduce Library.uk ([#6](https://github.com/unikraft/lib-lua/pull/6) by [@nderjung](https:/github.com/nderjung)
  * `[lib-lvgl]`: Introduce Library.uk ([#3](https://github.com/unikraft/lib-lvgl/pull/3) by [@nderjung](https:/github.com/nderjung)
  * `[lib-lwip]`: Introduce Library.uk ([#37](https://github.com/unikraft/lib-lwip/pull/37) by [@nderjung](https:/github.com/nderjung)
  * `[lib-lzma]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-lzma/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-mbedtls]`: Introduce Library.uk ([#3](https://github.com/unikraft/lib-mbedtls/pull/3) by [@nderjung](https:/github.com/nderjung)
  * `[lib-micropython]`: Introduce Library.uk ([#8](https://github.com/unikraft/lib-micropython/pull/8) by [@nderjung](https:/github.com/nderjung)
  * `[lib-mimalloc]`: Introduce Library.uk ([#5](https://github.com/unikraft/lib-mimalloc/pull/5) by [@nderjung](https:/github.com/nderjung)
  * `[lib-musl]`: Introduce Library.uk ([#60](https://github.com/unikraft/lib-musl/pull/60) by [@nderjung](https:/github.com/nderjung)
  * `[lib-nettle]`: Introduce Library.uk ([#1](https://github.com/unikraft/lib-nettle/pull/1) by [@nderjung](https:/github.com/nderjung)
  * `[lib-newlib]`: Introduce Library.uk ([#34](https://github.com/unikraft/lib-newlib/pull/34) by [@nderjung](https:/github.com/nderjung)
  * `[lib-nginx]`: Introduce Library.uk ([#14](https://github.com/unikraft/lib-nginx/pull/14) by [@nderjung](https:/github.com/nderjung)
  * `[lib-nnpack]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-nnpack/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-open62541]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-open62541/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-openssl]`: Introduce Library.uk ([#6](https://github.com/unikraft/lib-openssl/pull/6) by [@nderjung](https:/github.com/nderjung)
  * `[lib-pcre]`: Introduce Library.uk ([#4](https://github.com/unikraft/lib-pcre/pull/4) by [@nderjung](https:/github.com/nderjung)
  * `[lib-protobuf]`: Introduce Library.uk ([#5](https://github.com/unikraft/lib-protobuf/pull/5) by [@nderjung](https:/github.com/nderjung)
  * `[lib-psimd]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-psimd/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-pthread-embedded]`: Introduce Library.uk ([#12](https://github.com/unikraft/lib-pthread-embedded/pull/12) by [@nderjung](https:/github.com/nderjung)
  * `[lib-pthreadpool]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-pthreadpool/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-python3]`: Introduce Library.uk ([#14](https://github.com/unikraft/lib-python3/pull/14) by [@nderjung](https:/github.com/nderjung)
  * `[lib-redis]`: Introduce Library.uk ([#11](https://github.com/unikraft/lib-redis/pull/11) by [@nderjung](https:/github.com/nderjung)
  * `[lib-ruby]`: Introduce Library.uk ([#3](https://github.com/unikraft/lib-ruby/pull/3) by [@nderjung](https:/github.com/nderjung)
  * `[lib-rust]`: Introduce Library.uk ([#5](https://github.com/unikraft/lib-rust/pull/5) by [@nderjung](https:/github.com/nderjung)
  * `[lib-shfs]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-shfs/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-sqlite]`: Introduce Library.uk ([#7](https://github.com/unikraft/lib-sqlite/pull/7) by [@nderjung](https:/github.com/nderjung)
  * `[lib-tflite]`: Introduce Library.uk ([#5](https://github.com/unikraft/lib-tflite/pull/5) by [@nderjung](https:/github.com/nderjung)
  * `[lib-tinyalloc]`: Introduce Library.uk ([#2](https://github.com/unikraft/lib-tinyalloc/pull/2) by [@nderjung](https:/github.com/nderjung)
  * `[lib-tlsf]`: Introduce Library.uk ([#3](https://github.com/unikraft/lib-tlsf/pull/3) by [@nderjung](https:/github.com/nderjung)
  * `[lib-wamr]`: Introduce Library.uk ([#5](https://github.com/unikraft/lib-wamr/pull/5) by [@nderjung](https:/github.com/nderjung)
  * `[lib-zlib]`: Introduce Library.uk ([#6](https://github.com/unikraft/lib-zlib/pull/6) by [@nderjung](https:/github.com/nderjung)
  * `[lib-zydis]`: Introduce Library.uk ([#1](https://github.com/unikraft/lib-zydis/pull/1) by [@nderjung](https:/github.com/nderjung)
* Firecracker networking support + modern virtio
  * `drivers/virtio`: Pass virtio-mmio devices via the cmdline ([#1116](https://github.com/unikraft/unikraft/pull/1116) by [@michpappas](https:/github.com/michpappas)
  * `drivers/virtio`: Support modern virtio ([#1115](https://github.com/unikraft/unikraft/pull/1115) by [@michpappas](https:/github.com/michpappas)
* Initial ARM64 binary compatibility support
  * `arch/arm64`: Support AArch64 binary syscalls ([#1009](https://github.com/unikraft/unikraft/pull/1009) by [@i-Pear](https:/github.com/i-Pear)
  * `arch/arm64`: Fix dependency for `arm64_syscall_adapter` ([#1132](https://github.com/unikraft/unikraft/pull/1132) by [@i-Pear](https:/github.com/i-Pear)
  * `[app-elfloader]`: feat: Support AArch64 architecture ([#24](https://github.com/unikraft/app-elfloader/pull/24) by [@i-Pear](https:/github.com/i-Pear)
* Re-arch drivers
  * `plat`: Migrate bus drivers to drivers/ukbus ([#1024](https://github.com/unikraft/unikraft/pull/1024) by [@michpappas](https:/github.com/michpappas)
  * Introduce drivers subsystem ([#1023](https://github.com/unikraft/unikraft/pull/1023) by [@michpappas](https:/github.com/michpappas)
  * `plat`: Migrate `gic` to `drivers/ukintctlr` ([#971](https://github.com/unikraft/unikraft/pull/971) by [@rares-miculescu](https:/github.com/rares-miculescu)
  * `drivers`: Move virtio from `plat/drivers/` to `drivers/`  ([#967](https://github.com/unikraft/unikraft/pull/967) by [@rares-miculescu](https:/github.com/rares-miculescu)
  * `lib`: Add ofw from `plat/drivers` to `lib` ([#966](https://github.com/unikraft/unikraft/pull/966) by [@rares-miculescu](https:/github.com/rares-miculescu)
* `plat/kvm`: Adapt EFI boot to new APIC driver ([#1138](https://github.com/unikraft/unikraft/pull/1138) by [@kha-dinh](https:/github.com/kha-dinh)
* `build`, `scripts`: Ensure using GNU coreutils on Darwin ([#1109](https://github.com/unikraft/unikraft/pull/1109) by [@skuenzer](https:/github.com/skuenzer)
* `support/scripts`: mkcpio: Support Darwin (MacOS) environments ([#1078](https://github.com/unikraft/unikraft/pull/1078) by [@skuenzer](https:/github.com/skuenzer)
* `build`: Support replacing internal libraries ([#1104](https://github.com/unikraft/unikraft/pull/1104) by [@skuenzer](https:/github.com/skuenzer)
* `drivers/virtio`: Implement support for event index notification suppression ([#1089](https://github.com/unikraft/unikraft/pull/1089) by [@mschlumpp](https:/github.com/mschlumpp)
* `{lib/uknetdev,drivers/virtio}`: Add support for IPv4/TCP segmentation offloading ([#1088](https://github.com/unikraft/unikraft/pull/1088) by [@mschlumpp](https:/github.com/mschlumpp)
* `lib/ukintctlr`: Introduce uk_intctlr API - Re-arch IRQ handling ([#1103](https://github.com/unikraft/unikraft/pull/1103) by [@michpappas](https:/github.com/michpappas)

### 🐛 Bug Fixes & Improvements

* `plat/kvm/x86`: Pre-initialize VGA framebuffer `terminal_buffer` ([#1136](https://github.com/unikraft/unikraft/pull/1136) by [@mogasergiu](https:/github.com/mogasergiu)
* `plat/kvm/x86`: Use `ur_pte` for the first page table ([#1135](https://github.com/unikraft/unikraft/pull/1135) by [@mogasergiu](https:/github.com/mogasergiu)
* `lib/uklibid`: Clang-compatible compile option flags ([#1131](https://github.com/unikraft/unikraft/pull/1131) by [@skuenzer](https:/github.com/skuenzer)
* `build`: Use ISO 8601 format for `$(HOSTUTC)` ([#1127](https://github.com/unikraft/unikraft/pull/1127) by [@skuenzer](https:/github.com/skuenzer)
* `plat/kvm/x86`: Make zero page inaccessible ([#1123](https://github.com/unikraft/unikraft/pull/1123) by [@mschlumpp](https:/github.com/mschlumpp)
* `plat/common/acpi`: Check for offline `GICC`'s and fix `VGIC` `IRQ Mode` flag ([#1120](https://github.com/unikraft/unikraft/pull/1120) by [@mogasergiu](https:/github.com/mogasergiu)
* `build`: Recompile everything on `.config` changes (workaround) ([#1119](https://github.com/unikraft/unikraft/pull/1119) by [@skuenzer](https:/github.com/skuenzer)
* `Makefile`: Save UK_NAME on savedefconfig ([#1118](https://github.com/unikraft/unikraft/pull/1118) by [@StefanJum](https:/github.com/StefanJum)
* `lib/uklibid`: Library metadata ([#1117](https://github.com/unikraft/unikraft/pull/1117) by [@skuenzer](https:/github.com/skuenzer)
* `plat/common/x86`: Make `SIPI Vector` related symbols relocations independent from `ukreloc` ([#1113](https://github.com/unikraft/unikraft/pull/1113) by [@mogasergiu](https:/github.com/mogasergiu)
* `driver/ukbus`: Fix an invalid check in PCI probe ([#1110](https://github.com/unikraft/unikraft/pull/1110) by [@kha-dinh](https:/github.com/kha-dinh)
* `build`: Add target to print unikernel LoC stats ([#1108](https://github.com/unikraft/unikraft/pull/1108) by [@andreittr](https:/github.com/andreittr)
* `lib/vfscore`: Fix spelling mistake in `Config.uk` ([#1106](https://github.com/unikraft/unikraft/pull/1106) by [@chococandy63](https:/github.com/chococandy63)
* `lib/nolibc`: Move prctl.h inside nolibc/musl-imported ([#1102](https://github.com/unikraft/unikraft/pull/1102) by [@TAGOliveira201000](https:/github.com/TAGOliveira201000)
* `lib`: Remove vfscore_mount_initrd_volume-related build warnings ([#1100](https://github.com/unikraft/unikraft/pull/1100) by [@TAGOliveira201000](https:/github.com/TAGOliveira201000)
* `lib`: Remove timeval-related build warnings ([#1099](https://github.com/unikraft/unikraft/pull/1099) by [@TAGOliveira201000](https:/github.com/TAGOliveira201000)
* `lib/9pfs`: Return ENOTSUP on ioctl requests except for FIONBIO ([#1098](https://github.com/unikraft/unikraft/pull/1098) by [@StefanJum](https:/github.com/StefanJum)
* `lib` Remove dirent64-related build warnings ([#1097](https://github.com/unikraft/unikraft/pull/1097) by [@TAGOliveira201000](https:/github.com/TAGOliveira201000)
* `arch`: Add an non-aligned version for stack-pushing ([#1096](https://github.com/unikraft/unikraft/pull/1096) by [@i-Pear](https:/github.com/i-Pear)
* `drivers`: Add PLAT_COMMON_BASE to the include path ([#1095](https://github.com/unikraft/unikraft/pull/1095) by [@michpappas](https:/github.com/michpappas)
* `lib/vfscore`: Fix pipe error codes ([#1093](https://github.com/unikraft/unikraft/pull/1093) by [@andreittr](https:/github.com/andreittr)
* `build`: Forward YACC/LEX to kconfig make invocation ([#1092](https://github.com/unikraft/unikraft/pull/1092) by [@mschlumpp](https:/github.com/mschlumpp)
* `arch`: Align virtual/physical address validation on x86 and arm64 ([#1091](https://github.com/unikraft/unikraft/pull/1091) by [@kha-dinh](https:/github.com/kha-dinh)
* `lib/uklock`: Remove the rwlock_{upgrade,downgrade} functions ([#1090](https://github.com/unikraft/unikraft/pull/1090) by [@mschlumpp](https:/github.com/mschlumpp)
* `lib/9pfs`: Add check for `NULL` `data` in `uk_9pfs_parse_options` ([#1086](https://github.com/unikraft/unikraft/pull/1086) by [@mogasergiu](https:/github.com/mogasergiu)
* `arch/ctx.h`: Update ctx members declaration order ([#1085](https://github.com/unikraft/unikraft/pull/1085) by [@StefanJum](https:/github.com/StefanJum)
* `build`: Always save architecture with savedefconfig ([#1084](https://github.com/unikraft/unikraft/pull/1084) by [@skuenzer](https:/github.com/skuenzer)
* `Makefile`: Fix support for external platforms ([#1082](https://github.com/unikraft/unikraft/pull/1082) by [@kubanrob](https:/github.com/kubanrob)
* `plat/kvm`: Fix typo in configuration variable ([#1081](https://github.com/unikraft/unikraft/pull/1081) by [@kubanrob](https:/github.com/kubanrob)
* Make `elf64_to_32.py` also build the `multiboot` header and rename it to `multiboot.py` ([#1079](https://github.com/unikraft/unikraft/pull/1079) by [@mogasergiu](https:/github.com/mogasergiu)
* `support/scripts`: `checkpatch` `WARN` on commit summary > 70 chars ([#1077](https://github.com/unikraft/unikraft/pull/1077) by [@mogasergiu](https:/github.com/mogasergiu)
* `plat/virtio`: Fix vring_avail_event macro ([#1076](https://github.com/unikraft/unikraft/pull/1076) by [@mschlumpp](https:/github.com/mschlumpp)
* `lib/ramfs`: Fix UAF bug when deleting open file ([#1075](https://github.com/unikraft/unikraft/pull/1075) by [@andreittr](https:/github.com/andreittr)
* `lib/vfscore`: Fix potential `vfscore_file` mem leak ([#1074](https://github.com/unikraft/unikraft/pull/1074) by [@andreittr](https:/github.com/andreittr)
* `lib/ukmmap`: Fix wrong return of NULL ([#1073](https://github.com/unikraft/unikraft/pull/1073) by [@andreittr](https:/github.com/andreittr)
* `lib/posix-user`: Allow custom user & group ([#1072](https://github.com/unikraft/unikraft/pull/1072) by [@andreittr](https:/github.com/andreittr)
* `lib/ukcpio`: Misc fixes and improvements ([#1071](https://github.com/unikraft/unikraft/pull/1071) by [@andreittr](https:/github.com/andreittr)
* `lib/vfscore`: Embedded initrd ([#1070](https://github.com/unikraft/unikraft/pull/1070) by [@skuenzer](https:/github.com/skuenzer)
* `lib/vfscore`: Replace `dup2` syscalls with `dup3` ([#1069](https://github.com/unikraft/unikraft/pull/1069) by [@andreittr](https:/github.com/andreittr)
* `doc`: Add KIT to `ADOPTERS.md` ([#1068](https://github.com/unikraft/unikraft/pull/1068) by [@lluchs](https:/github.com/lluchs)
* `Makefile`: Fix build verbosity for V=0 ([#1066](https://github.com/unikraft/unikraft/pull/1066) by [@StefanJum](https:/github.com/StefanJum)
* `plat/kvm`: Use `AllocatePages()` to allocate memory regions in `UEFI` ([#1061](https://github.com/unikraft/unikraft/pull/1061) by [@mogasergiu](https:/github.com/mogasergiu)
* `plat`: Let coalescing method ensure memregion alignment ([#1060](https://github.com/unikraft/unikraft/pull/1060) by [@mogasergiu](https:/github.com/mogasergiu)
* `lib/nolibc`: Add `__errno_location` implementation ([#1044](https://github.com/unikraft/unikraft/pull/1044) by [@Starnox](https:/github.com/Starnox)
* `lib/nolibc`: Provide symbols for `malloc`, `free`, `calloc`, `realloc`... ([#1042](https://github.com/unikraft/unikraft/pull/1042) by [@Starnox](https:/github.com/Starnox)
* `[lib-click]`: Makefile.uk: Fix build-time infinite loop ([#6](https://github.com/unikraft/lib-click/pull/6) by [@eduardvintila](https:/github.com/eduardvintila)
* `[lib-intel-intrinsics]`: Add `cpuid.h` header ([#5](https://github.com/unikraft/lib-intel-intrinsics/pull/5) by [@andreittr](https:/github.com/andreittr)
* `[lib-libcxx]`: Makefile.uk: Add `-D_GNU_SOURCE` to C++ flags ([#34](https://github.com/unikraft/lib-libcxx/pull/34) by [@andreittr](https:/github.com/andreittr)
* `[lib-libffi]`: Fix missing internal function declaration ([#2](https://github.com/unikraft/lib-libffi/pull/2) by [@andreittr](https:/github.com/andreittr)
* `[lib-libgo]`: `Config.uk`: Imply `LIBUKMMAP` / `LIBPOSIX_MMAP` ([#8](https://github.com/unikraft/lib-libgo/pull/8) by [@razvand](https:/github.com/razvand)
* `[lib-libunwind]`: Select `lib-compiler-rt` as `Kconfig` dependency ([#10](https://github.com/unikraft/lib-libunwind/pull/10) by [@andreittr](https:/github.com/andreittr)
* `[lib-libuuid]`: Makefile.uk: Restrict private headers to `-iquote` ([#6](https://github.com/unikraft/lib-libuuid/pull/6) by [@andreittr](https:/github.com/andreittr)
* `[lib-lua]`: Fix structure member naming in patches ([#5](https://github.com/unikraft/lib-lua/pull/5) by [@panagiotiskon](https:/github.com/panagiotiskon)
* `[lib-newlib]`: Makefile.uk: Suppress more warnings ([#36](https://github.com/unikraft/lib-newlib/pull/36) by [@andreittr](https:/github.com/andreittr)
* `[lib-nginx]`: `Config.uk`: Imply `LIBUKMMAP` ([#15](https://github.com/unikraft/lib-nginx/pull/15) by [@razvand](https:/github.com/razvand)
* `[lib-python-numpy]`: Makefile.uk: Fix internal build include paths ([#2](https://github.com/unikraft/lib-python-numpy/pull/2) by [@andreittr](https:/github.com/andreittr)
* `[lib-libcxx]`: Assign `-Wno-keyword-compat` to clang only ([#35](https://github.com/unikraft/lib-libcxx/pull/35) by [@skuenzer](https:/github.com/skuenzer)
* `[lib-libelf]`: Set `ELFTC_HAVE_MMAP` to `1` ([#3](https://github.com/unikraft/lib-libelf/pull/3) by [@mogasergiu](https:/github.com/mogasergiu)
* `[lib-sqlite]`: `Makefile.uk`: Register library using `addlib_s` ([#8](https://github.com/unikraft/lib-sqlite/pull/8) by [@andreittr](https:/github.com/andreittr)
 
A big thank you also to all those who helped in the [review process](unikraft.org/docs/contributing/review-process/): [Adina-Maria Vaman](https://github.com/adinamariav), [Andra Paraschiv](https://github.com/andraprs), [Andrei Tatar](https://github.com/andreittr), [Andrei Topală](https://github.com/Krechals), [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Delia Pavel](https://github.com/DeliaPavel), [Eduard Vintilă](https://github.com/eduardvintila), [Eduard-Florin Mihăilescu](https://github.com/Starnox), [Ioan-Teodor Țeugea](https://github.com/John-Ted), [Jakub Ciolek](jake-ciolek), [Marco Schlumpp](https://github.com/mschlumpp), [Maria Sfîrăială](https://github.com/mariasfiraiala), [Michalis Pappas](https://github.com/michpappas), [Radu Nichita](https://github.com/RaduNichita), [Rareș Miculescu](https://github.com/rares-miculescu), [Răzvan Deaconescu](https://github.com/razvand), [Răzvan Vîrtan](https://github.com/razvanvirtan), [Robert Kuban](https://github.com/kubanrob), [Sergiu Moga](https://github.com/mogasergiu), [Simon Kuenzer](https://github.com/skuenzer), [Ștefan Jumarea](https://github.com/StefanJum), [Tianyi Liu](https://github.com/i-Pear).

---

For more information, check out [the accompanying blog post](TODO) or [view the full changelog](https://github.com/unikraft/unikraft/compare/RELEASE-0.14.0...RELEASE-0.15.0).

---

## Twitter

Unikraft v0.15.0 is here! 🚀 This release brings important new features and further improvements and stabilizing to the previous release (0.14.0 - Prometheus).

Check out the blog post for extensive details on the latest changes: TODO

---

## LinkedIn

Unikraft v0.15.0 is here! 🚀 This release brings important new features and further improvements and stabilizing to the previous release (0.14.0 - Prometheus).
It adds new features, a healthy number of fixes and it enhances application support.

Check out the blog post for extensive details on the latest changes (TODO) and join us on GitHub (https://github.com/unikraft/) and on Discord (https://bit.ly/UnikraftDiscord).

---

## Blog Post

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](https://github.com/unikraft/unikraft/compare/RELEASE-0.14.0...RELEASE-0.15.0).

### Improved Application Documentation and Support Scripts

_This feature was championed by [Răzvan Deaconescu](https://github.com/razvand) and [Ștefan Jumărea](https://github.com/StefanJum)._

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.

### Improved Python Support

_This feature was championed by [Andrei Tatar](https://github.com/razvand) with support from [Ștefan Jumărea](https://github.com/StefanJum), [Maria Sfîrăială](https://github.com/mariasfiraiala), [Eduard Vintilă](https://github.com/eduardvintila), [Radu Nichita](https://github.com/RaduNichita)._

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.

### Steps Towards Library Versioning (`Library.uk`)

_This feature was championed by [Alexander Jung](https://github.com/nderjung) with feedback and support from [Simon Kuenzer](https://github.com/skuenzer), [Michalis Pappas](https://github.com/michpappas), [Marc Rittinghaus](https://github.com/marcrittinghaus), [Marco Schlumpp](https://github.com/mschlumpp), [Răzvan Deaconescu](https://github.com/razvand)._

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 `Makefile.uk`, `Config.uk`, but also includes new information such as SPDX License identifier.

### Re-arch IRQ Handling (part of "Platform Re-architecting")

_This feature was championed by [Michalis Pappas](https://github.com/michpappas) with feedback from [Sergiu Moga](https://github.com/mogasergiu), [Marco Schlumpp](https://github.com/mschlumpp) and [Simon Kuenzer](https://github.com/skuenzer)._

Part of the "Platform Re-architecting" project, the feature removes all interrupt-related code from `plat/`, and moves it into `lib/ukintctlr/` and `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:

* All interrupt management, registration, and handling is moved to `lib/ukintctlr`.
* The GIC driver is updated to implement the new `uk_intctlr` API.
* The x86 IRQ controller drivers (PIC, x2APIC) are moved to the `drivers/ukintctlr` subsystem into a new driver `xPIC` and implement the `uk_intctlr` API.
* Explicit IRQ acknowledgement is removed from individual handlers and moved into the unified handler of `lib/ukintctlr`.
* Limits such as `MAX_IRQ` are defined by the individual drivers.
* New features like unregistering IRQ handlers, and IRQ allocation are added into the `uk_intctlr` API.
* All platforms, libraries, and drivers are adapted to the changes introduced by the `uk_intctlr` API.

To minimize the scope of this work, changes to the implementation has been limited to the smallest possible.

### Re-arch Drivers (part of "Platform Re-architecting")

_This feature was championed by [Rareș Miculescu](https://github.com/rares-miculescu) and [Michalis Pappas](https://github.com/michpappas) with feedback from [Sergiu Moga](https://github.com/mogasergiu), [Simon Kuenzer](https://github.com/skuenzer) and [Xingjian Zhang](https://github.com/zhxj9823)._

Part of the "Platform Re-architecting" project, the feature adds a drivers subsystem to Unikraft.
Drivers are placed under the top-level `drivers/` directory.
In `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 `<subsystem>/<driver>` hierarchy.

As part of this work, several drivers have been ported:

* Migrate the PCI and platform drivers to `drivers/ukbus/`.
* GIC (_Generic Interrupt Controller_) is moved into `drivers/ukintctlr/`, and the API for the interrupt controller into `llib/ukintctlr`.
* Move virtio drivers into newly introduce drivers subsystem.
  Virtio drivers should have been scattered around the `drivers/` filesystem, but an exception was made, to keep them altogether.
* Ofw (_open firmware_) driver is moved from `plat/drivers` into `lib/ukofw`.

### Extended Application Support

_This feature was championed by [Andrei Tatar](https://github.com/andreittr), [Razvan Deaconescu](https://github.com/razvand), [Stefan Jumărea](https://github.com/StefanJum) and the greater Unikraft community._

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

_This feature was championed by [Michalis Pappas](https://github.com/michpappas), [Andrei Topală](https://github.com/Krechals), [Marco Schlumpp](https://github.com/mschlumpp) with support from [Sergiu Moga](https://github.com/mogasergiu), [Răzvan Vîrtan](https://github.com/razvanvirtan) and [Răzvan Deaconescu](https://github.com/razvand)._

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.

### Improved Build-system Support for macOS

_This feature was championed by [Simon Kuenzer](https://github.com/skuenzer) with support from [Michalis Pappas](https://github.com/michpappas) and [Ștefan Jumărea](https://github.com/StefanJum)._

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.

### Replace Internal Libraries (`E` build option)

_This feature was championed by [Simon Kuenzer](https://github.com/skuenzer) with support from [Michalis Pappas](https://github.com/michpappas), [Maria Sfîrăială](https://github.com/mariasfiraiala) and [Cezar Crăciunoiu](https://github.com/craciunoiuc)._

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 `E=`:

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

### Initial ARM64 Binary Compatibility

_This feature was championed by [Tianyi Liu](https://github.com/i-Pear) with extensive support from [Simon Kuenzer](https://github.com/skuenzer)._

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](https://github.com/unikraft/app-elfloader).

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.

## Community Activities

### Aveiro Hackathon

In collaboration with [University POLITEHNICA of Bucharest](https://upb.ro/en), [University of Aveiro](https://www.ua.pt/), [Grupo de Linux da Universidade de Aveiro (GLUA)](https://glua.ua.pt/) and [Associação Nacional para o Software Livre (ANSOL)](https://ansol.org/) we organized the **Aveiro Unikraft Hackathon**, on Friday and Saturday, September 15-16, 2023, as part of [Festa do Software Livre 2023](https://festa2023.softwarelivre.eu/).

The hackathon took place as an in-person event at [DETI - Departamento de Electrónica, Telecomunicações e Informática](https://www.ua.pt/en/deti) 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.

<Image
  border
  maxW={'2xl'}
  src="/images/hackathon-aveiro-2023-09-15.jpg"
  description="Aveiro Hackathon, 2023"
/>

### Vancouver Unikraft Hackathon

Together with [Systopia Lab](https://systopia.cs.ubc.ca/) at [University of British Columbia (UBC)](https://www.ubc.ca/), we organized the **Vancouver Unikraft Hackathon**, on Saturday and Sunday, September 23-24, 2023.

The hackathon took place as an in-person event at **Room 2020, Fred Kaiser Building, Point Grey Campus** and online, on [Discord](http://bit.ly/UnikraftDiscord), on the `#hack-vancouver23` channel.

From the Unikraft community, [Răzvan](https://github.com/razvand) and [Ștefan](https://github.com/StefanJum) were present.

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.

<Image
  border
  maxW={'2xl'}
  src="/images/hackathon-vanceouver-2023-09-24.jpg"
  description="Vancouver Hackathon, 2023"
/>

### Unikraft Romania Gathering 2023

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.

<Image
  border
  maxW={'2xl'}
  src="/images/romania-gathering-2023-10-08.jpg"
  description="Romania Gathering, 2023"
/>

### Unikraft Hacktoberfest

As part of [Hacktoberfest 2023](https://hacktoberfest.com/) 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](http://bit.ly/UnikraftDiscord), and in person, at [University POLITEHNICA of Bucharaest](https://upb.ro/).
As Unikraft matures and stabilizes, it becomes easier for newcomers to jump in, use it and cotribute to it.

From the Unikraft community, [Răzvan](https://github.com/razvand), [Ștefan](https://github.com/StefanJum) and [Luca](https://github.com/LucaSeri) were present.

Looking forward for other Unikraft Hacktoberfests!

<Image
  border
  maxW={'2xl'}
  src="/images/hacktoberfest-2023-10-21.jpg"
  description="Hacktoberfest, 2023"
/>
