# Release Post - v0.14.0 (Prometheus)
:::info
To generate the feature list:
```bash
gh pr list --label "ci/merged" -s closed --search "milestone:\"v0.14.0 (Prometheus)\"" -L 100 --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.13.0 | uniq
```
:::
:::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.0+%28Prometheus%29%22
:::
[toc]
## GitHub Release Note
We are proud to announce the latest version of Unikraft, v0.14.0 (Prometheus)!
This is one of the biggest releases so far, with tons of fixes and improvements!
Here is the full updates list:
### 🚀 New Features
* build: Darwin (MacOS) support ([#1034](https://github.com/unikraft/unikraft/pull/1034)) by [@skuenzer](https://github.com/skuenzer)
* .github/workflows: Introduce GitHub Actions Workflow integrations ([#1012](https://github.com/unikraft/unikraft/pull/1012)) by [@nderjung](https://github.com/nderjung)
* build: Add tree builds ([#1001](https://github.com/unikraft/unikraft/pull/1001)) by [@andreittr](https://github.com/andreittr)
* plat/kvm/arm64: Firecracker support on arm64 ([#989](https://github.com/unikraft/unikraft/pull/989)) by [@michpappas](https://github.com/michpappas)
* plat/kvm/arm64: Implement lxboot on arm64 ([#988](https://github.com/unikraft/unikraft/pull/988)) by [@michpappas](https://github.com/michpappas)
* lib/vfscore: Implement individual volume automounting ([#979](https://github.com/unikraft/unikraft/pull/979)) by [@mogasergiu](https://github.com/mogasergiu)
* `lib/uklibid`: Library identifiers and `SUBBUILD` build system feature ([#938](https://github.com/unikraft/unikraft/pull/938)) by [@skuenzer](https://github.com/skuenzer)
* build: Allow setting flags from the environment ([#957](https://github.com/unikraft/unikraft/pull/957)) by [@mkroening](https://github.com/mkroening)
* Add the ability to build `EFI` `ISO` and `DISK` images. ([#910](https://github.com/unikraft/unikraft/pull/910)) by [@mogasergiu](https://github.com/mogasergiu)
* Add `EFI` stub support ([#909](https://github.com/unikraft/unikraft/pull/909)) by [@mogasergiu](https://github.com/mogasergiu)
* doc: Introduce `ADOPTERS.md` ([#892](https://github.com/unikraft/unikraft/pull/892)) by [@nderjung](https://github.com/nderjung)
* Add PIE support for Xen and KVM ([#772](https://github.com/unikraft/unikraft/pull/772)) by [@mogasergiu](https://github.com/mogasergiu)
* Makefile: Add flags for cross-compiler `LLVM` target ([#685](https://github.com/unikraft/unikraft/pull/685)) by [@mariasfiraiala](https://github.com/mariasfiraiala)
* [lib-geos] Port upstream libgeos 3.11.2 ([#1](https://github.com/unikraft/lib-geos/pull/1)) by [@andreittr](https://github.com/andreittr)
* [lib-libffi] Port upstream libffi 3.4.4 for x86_64 ([#1](https://github.com/unikraft/lib-libffi/pull/1)) by [@andreittr](https://github.com/andreittr)
* [lib-fork-glibc] feat: Binary syscall bypass through VDSO ([#1](https://github.com/unikraft/lib-fork-glibc/pull/1)) by [@i-Pear](https://github.com/i-Pear)
* [lib-fork-musl] feat: Binary syscall bypass through VDSO ([#1](https://github.com/unikraft/lib-fork-musl/pull/1)) by [@i-Pear](https://github.com/i-Pear)
* [lib-python-numpy] Port upstream NumPy 1.25.0 ([#1](https://github.com/unikraft/lib-python-numpy/pull/1)) by [@andreittr](https://github.com/andreittr)
* [lib-python-shapely] Port upstream Shapely 2.0.1 ([#1](https://github.com/unikraft/lib-python-shapely/pull/1)) by [@andreittr](https://github.com/andreittr)
* [app-elfloader] feat: Provide VDSO image and __kernel_vsyscall interface ([#23](https://github.com/unikraft/app-elfloader/pull/23)) by [@i-Pear](https://github.com/i-Pear)
* [catalog] Create initial version of `catalog` repository by [@nderjung](https://github.com/nderjung)
### 🐛 Bug Fixes & Improvements
* plat/drivers/virtio: Fix virtio_9p tag read ([#1059](https://github.com/unikraft/unikraft/pull/1059)) by [@zhxj9823](https://github.com/zhxj9823)
* lib/posix-environ: Remove unused variable warnings ([#1058](https://github.com/unikraft/unikraft/pull/1058)) by [@mogasergiu](https://github.com/mogasergiu)
* plat/kvm/x86: Ensure that lxboot initrd/cmdl regions are aligned ([#1057](https://github.com/unikraft/unikraft/pull/1057)) by [@mogasergiu](https://github.com/mogasergiu)
* plat/kvm/arm: Use length when clean/invalidating cache in `KVM` entry ([#1056](https://github.com/unikraft/unikraft/pull/1056)) by [@mogasergiu](https://github.com/mogasergiu)
* build: Adjust fixdep to the changed config.h location ([#1055](https://github.com/unikraft/unikraft/pull/1055)) by [@mschlumpp](https://github.com/mschlumpp)
* lib/posix-environ: Ensure that compiled-in strings are writable ([#1054](https://github.com/unikraft/unikraft/pull/1054)) by [@mogasergiu](https://github.com/mogasergiu)
* plat/kvm/arm: Fix default choice in arm64 VMM menu ([#1053](https://github.com/unikraft/unikraft/pull/1053)) by [@michpappas](https://github.com/michpappas)
* plat/kvm: Check return code of all memory region inserting methods ([#1052](https://github.com/unikraft/unikraft/pull/1052)) by [@mogasergiu](https://github.com/mogasergiu)
* plat/common: Increase granularity of hardcoded legacy high memory ([#1051](https://github.com/unikraft/unikraft/pull/1051)) by [@mogasergiu](https://github.com/mogasergiu)
* plat/common: Align TLS sections to PAGE_SIZE ([#1050](https://github.com/unikraft/unikraft/pull/1050)) by [@mogasergiu](https://github.com/mogasergiu)
* plat/kvm/arm: Rework early cache clean & invalidate ([#1049](https://github.com/unikraft/unikraft/pull/1049)) by [@michpappas](https://github.com/michpappas)
* plat/kvm: Enable 8250 / NS16550 for Firecracker on arm64 ([#1048](https://github.com/unikraft/unikraft/pull/1048)) by [@michpappas](https://github.com/michpappas)
* plat/kvm: Align the bootstack base address ([#1047](https://github.com/unikraft/unikraft/pull/1047)) by [@michpappas](https://github.com/michpappas)
* plat/common: Add BIOS system memory in legacy high memory region ([#1046](https://github.com/unikraft/unikraft/pull/1046)) by [@mogasergiu](https://github.com/mogasergiu)
* plat/kvm/x86: Enable relocation for `Firecracker` `PIE` builds ([#1045](https://github.com/unikraft/unikraft/pull/1045)) by [@mogasergiu](https://github.com/mogasergiu)
* support/qemu-guest: Workaround for TCG/x86 and Unikraft paging ([#1041](https://github.com/unikraft/unikraft/pull/1041)) by [@skuenzer](https://github.com/skuenzer)
* plat/kvm: Fix guest hang on `UKPLAT_HALT` during shutdown request ([#1039](https://github.com/unikraft/unikraft/pull/1039)) by [@mogasergiu](https://github.com/mogasergiu)
* plat/kvm: Add configuration hint for EFI ([#1038](https://github.com/unikraft/unikraft/pull/1038)) by [@skuenzer](https://github.com/skuenzer)
* plat/common/x86: Fix `libukreloc` error for non-`PIE` `SMP` builds ([#1037](https://github.com/unikraft/unikraft/pull/1037)) by [@mogasergiu](https://github.com/mogasergiu)
* .github/workflows: Output all unikernel information and log test fails ([#1035](https://github.com/unikraft/unikraft/pull/1035)) by [@craciunoiuc](https://github.com/craciunoiuc)
* .github/workflows: Fix missing dependency to `LIBCOMPILER_RT` ([#1033](https://github.com/unikraft/unikraft/pull/1033)) by [@nderjung](https://github.com/nderjung)
* lib/nolibc: Fix compiler warning for `(f)scanf()` prototypes ([#1029](https://github.com/unikraft/unikraft/pull/1029)) by [@skuenzer](https://github.com/skuenzer)
* Makefile: Include Makefile.build from main Makefile ([#1028](https://github.com/unikraft/unikraft/pull/1028)) by [@skuenzer](https://github.com/skuenzer)
* plat/common: Add support for pvpanic devices for x86 ([#1022](https://github.com/unikraft/unikraft/pull/1022)) by [@craciunoiuc](https://github.com/craciunoiuc)
* Add ULiège to ADOPTERS.md. ([#1020](https://github.com/unikraft/unikraft/pull/1020)) by [@gaulthiergain](https://github.com/gaulthiergain)
* plat/*: Signal shutdown cause on QEMU ([#1019](https://github.com/unikraft/unikraft/pull/1019)) by [@mschlumpp](https://github.com/mschlumpp)
* plat/kvm/x86: Fix build error due to missing `assert.h` header ([#1017](https://github.com/unikraft/unikraft/pull/1017)) by [@mogasergiu](https://github.com/mogasergiu)
* doc: Add EPAM Systems to the ADOPTERS.md ([#1015](https://github.com/unikraft/unikraft/pull/1015)) by [@oleksiimoisieiev](https://github.com/oleksiimoisieiev)
* Add The University of Manchester to ADOPTERS.md ([#1013](https://github.com/unikraft/unikraft/pull/1013)) by [@olivierpierre](https://github.com/olivierpierre)
* Makefile: Allow external Makefile.build and Provide GO 1.18 support ([#1005](https://github.com/unikraft/unikraft/pull/1005)) by [@eduardvintila](https://github.com/eduardvintila)
* lib/*: Add syscall interfaces for dotnet runtime ([#1004](https://github.com/unikraft/unikraft/pull/1004)) by [@i-Pear](https://github.com/i-Pear)
* lib/nolibc: Fix & improve headers ([#1002](https://github.com/unikraft/unikraft/pull/1002)) by [@andreittr](https://github.com/andreittr)
* lib/vfscore: Fix create through broken symlink ([#998](https://github.com/unikraft/unikraft/pull/998)) by [@andreittr](https://github.com/andreittr)
* lib/ramfs: Support setting file mode on creation ([#997](https://github.com/unikraft/unikraft/pull/997)) by [@andreittr](https://github.com/andreittr)
* lib/ramfs: Ensure stability of inode numbers ([#996](https://github.com/unikraft/unikraft/pull/996)) by [@andreittr](https://github.com/andreittr)
* lib/ramfs: Implement new file timestamps ([#995](https://github.com/unikraft/unikraft/pull/995)) by [@andreittr](https://github.com/andreittr)
* lib/vfscore: Add unlinkat syscall ([#994](https://github.com/unikraft/unikraft/pull/994)) by [@andreittr](https://github.com/andreittr)
* lib/vfscore: Correct behavior of utime(NULL) ([#993](https://github.com/unikraft/unikraft/pull/993)) by [@andreittr](https://github.com/andreittr)
* lib/ukcpio: Fix symlinks not being extracted ([#992](https://github.com/unikraft/unikraft/pull/992)) by [@andreittr](https://github.com/andreittr)
* lib/vfscore: Accept negative timestamps ([#991](https://github.com/unikraft/unikraft/pull/991)) by [@andreittr](https://github.com/andreittr)
* lib/vfscore: Fix wrong application of umask ([#990](https://github.com/unikraft/unikraft/pull/990)) by [@andreittr](https://github.com/andreittr)
* arch/x86_64: Paging code - Enclose params of function-like macros in brackets ([#987](https://github.com/unikraft/unikraft/pull/987)) by [@cppstef](https://github.com/cppstef)
* plat/drivers: Add two configurations to ns16550 ([#985](https://github.com/unikraft/unikraft/pull/985)) by [@zhxj9823](https://github.com/zhxj9823)
* plat/drivers/virtio-ring: Downgrade saturated descriptors error ([#984](https://github.com/unikraft/unikraft/pull/984)) by [@mkroening](https://github.com/mkroening)
* build: Add compiler version checking for Clang ([#983](https://github.com/unikraft/unikraft/pull/983)) by [@andreittr](https://github.com/andreittr)
* plat/kvm/arm: Do not enable interrupts before `wfi` ([#980](https://github.com/unikraft/unikraft/pull/980)) by [@kubanrob](https://github.com/kubanrob)
* lib/nolibc: scanf and fscanf functions ([#977](https://github.com/unikraft/unikraft/pull/977)) by [@RaduNichita](https://github.com/RaduNichita)
* build: Silence misc warnings ([#976](https://github.com/unikraft/unikraft/pull/976)) by [@andreittr](https://github.com/andreittr)
* Fix exporting of ntohs and also include the long versions ([#974](https://github.com/unikraft/unikraft/pull/974)) by [@haesbaert](https://github.com/haesbaert)
* plat/drivers/virtio: Fix virtio read write ([#970](https://github.com/unikraft/unikraft/pull/970)) by [@zhxj9823](https://github.com/zhxj9823)
* `lib/ukschedcoop`: Keep track of thread execution times ([#965](https://github.com/unikraft/unikraft/pull/965)) by [@skuenzer](https://github.com/skuenzer)
* lib/*fs, lib/vfscore: Add proper `dirent/dirent64` structure usage ([#963](https://github.com/unikraft/unikraft/pull/963)) by [@StefanJum](https://github.com/StefanJum)
* plat/linuxu: Add fpsimd source file to build system ([#962](https://github.com/unikraft/unikraft/pull/962)) by [@StefanJum](https://github.com/StefanJum)
* lib/vfscore: Fix behavior of writable open on directories ([#953](https://github.com/unikraft/unikraft/pull/953)) by [@andreittr](https://github.com/andreittr)
* lib/vfscore: Fix double-lock bug in symlink ([#952](https://github.com/unikraft/unikraft/pull/952)) by [@andreittr](https://github.com/andreittr)
* lib/vfscore: Reorder locks in *at syscalls ([#951](https://github.com/unikraft/unikraft/pull/951)) by [@andreittr](https://github.com/andreittr)
* build: Add minumum required compiler version and fix cpu model and erratas for arm64 ([#949](https://github.com/unikraft/unikraft/pull/949)) by [@StefanJum](https://github.com/StefanJum)
* build: Use -fcf-protection for GCC >= 8 or Clang >= 7 ([#944](https://github.com/unikraft/unikraft/pull/944)) by [@Krechals](https://github.com/Krechals)
* lib/ukschedcoop: Add early check for runnable thread in idle thread ([#941](https://github.com/unikraft/unikraft/pull/941)) by [@mogasergiu](https://github.com/mogasergiu)
* lib/posix-sysinfo: Provide _SC_GETPW_R_SIZE_MAX ([#936](https://github.com/unikraft/unikraft/pull/936)) by [@andreittr](https://github.com/andreittr)
* lib/9pfs: Fix create call for 9p.2000L ([#934](https://github.com/unikraft/unikraft/pull/934)) by [@StefanJum](https://github.com/StefanJum)
* lib/ukallocbuddy: Add debug freelist sanity checks ([#932](https://github.com/unikraft/unikraft/pull/932)) by [@andreittr](https://github.com/andreittr)
* lib/ukalloc: Fix underallocation bug in malloc ([#931](https://github.com/unikraft/unikraft/pull/931)) by [@andreittr](https://github.com/andreittr)
* lib/posix-sysinfo: Various improvements needed for OpenJDK support ([#930](https://github.com/unikraft/unikraft/pull/930)) by [@csvancea](https://github.com/csvancea)
* lib/ukdebug: Add `LVLC_THREAD` macro ([#929](https://github.com/unikraft/unikraft/pull/929)) by [@StefanJum](https://github.com/StefanJum)
* lib/9pfs: Stub uk_9pfs_ioctl ([#928](https://github.com/unikraft/unikraft/pull/928)) by [@razvand](https://github.com/razvand)
* doc: Correct docstring format to silence warnings ([#927](https://github.com/unikraft/unikraft/pull/927)) by [@andreittr](https://github.com/andreittr)
* arch/x86: Silence warning about incomplete switch ([#926](https://github.com/unikraft/unikraft/pull/926)) by [@andreittr](https://github.com/andreittr)
* plat/drivers/virtio: Fix missing lcpu.h include ([#925](https://github.com/unikraft/unikraft/pull/925)) by [@andreittr](https://github.com/andreittr)
* lib/uksignal: Use correct kernel struct sigaction ([#924](https://github.com/unikraft/unikraft/pull/924)) by [@andreittr](https://github.com/andreittr)
* Fix schedcoop idling and x86 timer interrupts ([#923](https://github.com/unikraft/unikraft/pull/923)) by [@FedeParola](https://github.com/FedeParola)
* arch/x86: Introduce NMI event for x86 ([#920](https://github.com/unikraft/unikraft/pull/920)) by [@mschlumpp](https://github.com/mschlumpp)
* Add support for setting up `SMP` on `ARM64` through `ACPI` ([#912](https://github.com/unikraft/unikraft/pull/912)) by [@mogasergiu](https://github.com/mogasergiu)
* Refactor the `ACPI` code and change its location. ([#911](https://github.com/unikraft/unikraft/pull/911)) by [@mogasergiu](https://github.com/mogasergiu)
* Add `ukvmem` `Aarch64` page fault handler ([#908](https://github.com/unikraft/unikraft/pull/908)) by [@mogasergiu](https://github.com/mogasergiu)
* arch/arm/arm64: Fix `stxr`'s used in `spinlock`s register size ([#907](https://github.com/unikraft/unikraft/pull/907)) by [@mogasergiu](https://github.com/mogasergiu)
* Improve `posix-futex` debugging ([#904](https://github.com/unikraft/unikraft/pull/904)) by [@skuenzer](https://github.com/skuenzer)
* fix/eventfd: O_NONBLOCK ([#903](https://github.com/unikraft/unikraft/pull/903)) by [@skuenzer](https://github.com/skuenzer)
* lib/vfscore: Improve and fix trace point format ([#899](https://github.com/unikraft/unikraft/pull/899)) by [@mschlumpp](https://github.com/mschlumpp)
* lib/ukboot: Allow disabling weak main using KConfig ([#898](https://github.com/unikraft/unikraft/pull/898)) by [@mschlumpp](https://github.com/mschlumpp)
* kvm/x86: Add pristine ECTX check ([#897](https://github.com/unikraft/unikraft/pull/897)) by [@mschlumpp](https://github.com/mschlumpp)
* Integrate `ukplat_memregion` into `Xen` `x86`, `AArch64` `KVM` and `linuxu` ([#848](https://github.com/unikraft/unikraft/pull/848)) by [@mogasergiu](https://github.com/mogasergiu)
* [lib-compiler-rt] Makefile.uk: Remove redundant check for libunwind ([#19](https://github.com/unikraft/lib-compiler-rt/pull/19)) by [@andreittr](https://github.com/andreittr)
* [lib-compiler-rt] Split off functionality that relies on libm ([#18](https://github.com/unikraft/lib-compiler-rt/pull/18)) by [@andreittr](https://github.com/andreittr)
* [lib-compiler-rt] Build: Split off functionality that depends on libunwind ([#14](https://github.com/unikraft/lib-compiler-rt/pull/14)) by [@andreittr](https://github.com/andreittr)
* [lib-googletest] Update to upstream 1.13.0 ([#2](https://github.com/unikraft/lib-googletest/pull/2)) by [@andreittr](https://github.com/andreittr)
* [lib-intel-intrinsics] Add compatibility with GCC <= 11.2 & Clang 10 ([#4](https://github.com/unikraft/lib-intel-intrinsics/pull/4)) by [@andreittr](https://github.com/andreittr)
* [lib-intel-intrinsics] Rework of x86 intrinsics support ([#3](https://github.com/unikraft/lib-intel-intrinsics/pull/3)) by [@andreittr](https://github.com/andreittr)
* [lib-libcxx] Makefile.uk: Add minimum compiler version check ([#33](https://github.com/unikraft/lib-libcxx/pull/33)) by [@andreittr](https://github.com/andreittr)
* [lib-libgo] Upgrade Go to 1.18 ([#7](https://github.com/unikraft/lib-libgo/pull/7)) by [@eduardvintila](https://github.com/eduardvintila)
* [lib-libuuid] Makefile.uk: Fix subdirectory make rule ([#5](https://github.com/unikraft/lib-libuuid/pull/5)) by [@StefanJum](https://github.com/StefanJum)
* [lib-libuuid] Correct libc dependency ([#4](https://github.com/unikraft/lib-libuuid/pull/4)) by [@andreittr](https://github.com/andreittr)
* [lib-lua] patches: Remove outdated patch ([#8](https://github.com/unikraft/lib-lua/pull/8)) by [@StefanJum](https://github.com/StefanJum)
* [lib-lua] Change newlib dependency with musl ([#7](https://github.com/unikraft/lib-lua/pull/7)) by [@JADarius](https://github.com/JADarius)
* [lib-lwip] Makefile.uk: Silence macro redefinition warnings ([#38](https://github.com/unikraft/lib-lwip/pull/38)) by [@andreittr](https://github.com/andreittr)
* [lib-musl] Makefile.uk.musl.misc: Add missing ar.h ([#72](https://github.com/unikraft/lib-musl/pull/72)) by [@marcrittinghaus](https://github.com/marcrittinghaus)
* [lib-musl] Makefile.uk.musl.exit: Patch for building on case insensitive file systems ([#70](https://github.com/unikraft/lib-musl/pull/70)) by [@Starnox](https://github.com/Starnox)
* [lib-musl] Config.uk: Add `uksignal` dependency for `LIBMUSL_SIGNAL` ([#68](https://github.com/unikraft/lib-musl/pull/68)) by [@eduardvintila](https://github.com/eduardvintila)
* [lib-musl] patches: Add syscall function prototype ([#67](https://github.com/unikraft/lib-musl/pull/67)) by [@eduardvintila](https://github.com/eduardvintila)
* [lib-musl] Makefile.uk: Include missing gettid implementation ([#65](https://github.com/unikraft/lib-musl/pull/65)) by [@andreittr](https://github.com/andreittr)
* [lib-musl] Makefile.uk: Include missing cpow* functions ([#64](https://github.com/unikraft/lib-musl/pull/64)) by [@andreittr](https://github.com/andreittr)
* [lib-musl] patches: Delete patching of `ioctl` call in `isatty` ([#62](https://github.com/unikraft/lib-musl/pull/62)) by [@mogasergiu](https://github.com/mogasergiu)
* [lib-musl] Makefile.uk: Silence warnings ([#61](https://github.com/unikraft/lib-musl/pull/61)) by [@andreittr](https://github.com/andreittr)
* [lib-musl] Initialize main thread pthread structure ([#59](https://github.com/unikraft/lib-musl/pull/59)) by [@alexhoppus](https://github.com/alexhoppus)
* [lib-musl] Include missing parts of the string library ([#55](https://github.com/unikraft/lib-musl/pull/55)) by [@andreittr](https://github.com/andreittr)
* [lib-musl] Makefile.uk: Condition behavior on Kconfig ([#54](https://github.com/unikraft/lib-musl/pull/54)) by [@andreittr](https://github.com/andreittr)
* [lib-musl] glue: Init libc.auxv to point to a zero value ([#53](https://github.com/unikraft/lib-musl/pull/53)) by [@StefanJum](https://github.com/StefanJum)
* [lib-musl] Allow deselection of ukmmap ([#52](https://github.com/unikraft/lib-musl/pull/52)) by [@marcrittinghaus](https://github.com/marcrittinghaus)
* [lib-musl] Makefile.uk: Fix gcc specific warnings ([#51](https://github.com/unikraft/lib-musl/pull/51)) by [@mbrdg](https://github.com/mbrdg)
* [lib-newlib] Makefile.uk: Call tcb reserve conditionally ([#35](https://github.com/unikraft/lib-newlib/pull/35)) by [@razvand](https://github.com/razvand)
* [lib-opwnssl] Add patch to remove include of <linux/mman.h> ([#5](https://github.com/unikraft/lib-opwnssl/pull/5)) by [@andreittr](https://github.com/andreittr)
* [lib-python3] Add support for the Shapely extension ([#17](https://github.com/unikraft/lib-python3/pull/17)) by [@andreittr](https://github.com/andreittr)
* [lib-python3] Add support for NumPy ([#16](https://github.com/unikraft/lib-python3/pull/16)) by [@andreittr](https://github.com/andreittr)
* [lib-python3] Update to upstream Python 3.10.11 ([#15](https://github.com/unikraft/lib-python3/pull/15)) by [@andreittr](https://github.com/andreittr)
* [lib-python3] Makefile.uk: Allow configuring with custom config file ([#13](https://github.com/unikraft/lib-python3/pull/13)) by [@StefanJum](https://github.com/StefanJum)
* [lib-python3] include/pyconfig.h: Define `SIZEOF_PHTREAD_T` based on chosen libc ([#12](https://github.com/unikraft/lib-python3/pull/12)) by [@eduardvintila](https://github.com/eduardvintila)
* [lib-redis] Redis 7.0.11 ([#10](https://github.com/unikraft/lib-redis/pull/10)) by [@John-Ted](https://github.com/John-Ted)
* [lib-sqlite] Config.uk: Fix dependency issues & defaults ([#6](https://github.com/unikraft/lib-sqlite/pull/6)) by [@andreittr](https://github.com/andreittr)
* [lib-wamr] lib/lib-wamr: Move to musl and address compiler errors ([#8](https://github.com/unikraft/lib-wamr/pull/8)) by [@R0mbertus](https://github.com/R0mbertus)
* [app-redis] Update configurations and instructions ([#18](https://github.com/unikraft/app-redis/pull/18)) by [@razvand](https://github.com/razvand)
* [app-elfloader] Add missing uk/config.h ([#25](https://github.com/unikraft/app-elfloader/pull/25)) by [@marcrittinghaus](https://github.com/marcrittinghaus)
* [app-elfloader] Add default configuration file ([#22](https://github.com/unikraft/app-elfloader/pull/22)) by [@StefanJum](https://github.com/StefanJum)
* [app-elfloader] Readme: Add Hint about duplicate symbols ([#21](https://github.com/unikraft/app-elfloader/pull/21)) by [@mkroening](https://github.com/mkroening)
* [app-elfloader] `Config.uk`: Fix paging configuration typo ([#18](https://github.com/unikraft/app-elfloader/pull/18)) by [@costinsin](https://github.com/costinsin)
* [app-helloworld] README.md: Add `$` in commands ([#21](https://github.com/unikraft/app-helloworld/pull/21)) by [@StefanJum](https://github.com/StefanJum)
* [app-helloworld] feat(devcontainer): Add devcontainer for codespaces ([#20](https://github.com/unikraft/app-helloworld/pull/20)) by [@craciunoiuc](https://github.com/craciunoiuc)
* [app-helloworld] Add Makefile, configuration files and scripts ([#19](https://github.com/unikraft/app-helloworld/pull/19)) by [@StefanJum](https://github.com/StefanJum)
* [app-helloworld] Update platform name according to 0.13 release ([#17](https://github.com/unikraft/app-helloworld/pull/17)) by [@Krechals](https://github.com/Krechals)
* [app-helloworld-cpp] Add configuration and scripts ([#16](https://github.com/unikraft/app-helloworld-cpp/pull/16)) by [@razvand](https://github.com/razvand)
* [app-helloworld-cpp] Update platform to qemu for all targets ([#13](https://github.com/unikraft/app-helloworld-cpp/pull/13)) by [@gabrielmocanu](https://github.com/gabrielmocanu)
* [app-helloworld-go] Add Makefile and update Makefile.uk ([#9](https://github.com/unikraft/app-helloworld-go/pull/9)) by [@eduardvintila](https://github.com/eduardvintila)
* [app-httpreply] Update platform to qemu for all targets ([#16](https://github.com/unikraft/app-httpreply/pull/16)) by [@gabrielmocanu](https://github.com/gabrielmocanu)
* [app-httpreply] Update README.md file with easier to use instructions ([#15](https://github.com/unikraft/app-httpreply/pull/15)) by [@StefanJum](https://github.com/StefanJum)
* [app-httpreply] Add Makefile, configuration files and scripts ([#14](https://github.com/unikraft/app-httpreply/pull/14)) by [@StefanJum](https://github.com/StefanJum)
* [app-lua] Change newlib with musl ([#9](https://github.com/unikraft/app-lua/pull/9)) by [@JADarius](https://github.com/JADarius)
* [app-nginx] Update configurations and instructions ([#15](https://github.com/unikraft/app-nginx/pull/15)) by [@razvand](https://github.com/razvand)
* [app-nginx] Update `README.md` file with easier to use instructions ([#14](https://github.com/unikraft/app-nginx/pull/14)) by [@StefanJum](https://github.com/StefanJum)
* [app-nginx] Add Makefile, configuration files and scripts ([#13](https://github.com/unikraft/app-nginx/pull/13)) by [@razvand](https://github.com/razvand)
* [app-python3] Fix rootfs mistakenly containing numpy ([#17](https://github.com/unikraft/app-python3/pull/17)) by [@andreittr](https://github.com/andreittr)
* [app-python3] Update default Python app to 3.10.11 ([#16](https://github.com/unikraft/app-python3/pull/16)) by [@andreittr](https://github.com/andreittr)
* [app-python3] Rename running scripts to `run-qemu-*.sh` ([#15](https://github.com/unikraft/app-python3/pull/15)) by [@StefanJum](https://github.com/StefanJum)
* [app-python3] Add Makefile, configuration files and scripts ([#12](https://github.com/unikraft/app-python3/pull/12)) by [@StefanJum](https://github.com/StefanJum)
* [app-redis] Update README.md file with easier to use instructions ([#17](https://github.com/unikraft/app-redis/pull/17)) by [@StefanJum](https://github.com/StefanJum)
* [app-redis] Add run scripts and documentation ([#16](https://github.com/unikraft/app-redis/pull/16)) by [@John-Ted](https://github.com/John-Ted)
* [app-sqlite] Update configurations and instructions ([#11](https://github.com/unikraft/app-sqlite/pull/11)) by [@razvand](https://github.com/razvand)
* [app-sqlite] Update README.md file with easier to use instructions ([#10](https://github.com/unikraft/app-sqlite/pull/10)) by [@StefanJum](https://github.com/StefanJum)
* [app-sqlite] Update building and running workflows ([#9](https://github.com/unikraft/app-sqlite/pull/9)) by [@StefanJum](https://github.com/StefanJum)
* [app-wamr] Port application to musl ([#5](https://github.com/unikraft/app-wamr/pull/5)) by [@R0mbertus](https://github.com/R0mbertus)
A big thank you also to all those who helped in the [review process](unikraft.org/docs/contributing/review-process/): [Adina Vaman](https://github.com/adinamariav), [Alexander Jung](https://github.com/nderjung), [Andra Paraschiv](https://github.com/andraprs), [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Cosmin Vancea](https://github.com/csvancea), [Delia Pavel](https://github.com/DeliaPavel), [Dragoș Petre](https://github.com/dragosp27), [Eduard Mihăilescu](https://github.com/Starnox), [Eduard Vintilă](https://github.com/eduardvintila), [Florin Postolache](https://github.com/maniatro111), [Gabriel Mocanu](https://github.com/gabrielmocanu), [Teodor Țeugea](https://github.com/John-Ted), [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), [Razvan Vîrtan](https://github.com/razvanvirtan), [Robert Kuban](https://github.com/kubanrob), [Sergiu Moga](https://github.com/mogasergiu), [Simon Kuenzer](https://github.com/skuenzer), [Stefan Jumarea](https://github.com/StefanJum), [Tu Dinh Ngoc](https://github.com/dinhngtu).
---
For more information, check out [the accompanying blog post](TODO) or [view the full changelog](https://github.com/unikraft/unikraft/compare/RELEASE-0.13.0...RELEASE-0.14.0).
---
## Twitter
Unikraft v0.14.0 (Prometheus) is here! 🚀 One of our biggest releases yet, it comes packed with fixes and new features that are worth your attention: macOS support, Clang integration, up-to-date application and languages support, improvements to binary compatibility mode, PIE support, Firecracker support and many more.
Check out the blog post for extensive details on the latest changes: TODO
---
## LinkedIn
Unikraft v0.14.0 (Prometheus) is here! 🚀 One of our biggest releases yet, it comes packed with fixes and new features that are worth your attention: macOS support, Clang integration, up-to-date application and languages support, improvements to binary compatibility mode, PIE support, Firecracker support and many more.
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 thrilled to announce the new edition of Unikraft, v0.14.0 (Prometheus)!
This release is the result of extensive hard work during the last months in the entire community.
It comes packed with tons of fixes and new features that improve the overall Unikraft ecosystem.
In this blog post, we describe some of the new features available in Unikraft.
For a full breakdown, please check out the [changelog](https://github.com/unikraft/unikraft/compare/RELEASE-0.13.0...RELEASE-0.14.0).
### Native macOS (Darwin) Support ([#1034](https://github.com/unikraft/unikraft/pull/1034))
_This feature was championed by [Simon Kuenzer](https://github.com/skuenzer), [Mihailescu Eduard-Florin](https://github.com/Starnox), and [Răzvan Deaconescu](https://github.com/razvand) with important advice from [Alexander Jung](https://github.com/nderjung)._
With the release of Unikraft 0.14, the build system officially supports a macOS-based development environment.
Unikernel images can be developed, compiled, and tested directly on macOS.
Both types of Macs are supported: you can do this on a Mac with an Intel processor or with an Apple silicon.
Only the following packages are expected to be installed on the system via [Homebrew](https://brew.sh/):
```bash
brew install gnu-sed make m4 gawk grep wget qemu socat git
# ...for compiling x86_64 unikernels
brew install x86_64-elf-binutils x86_64-elf-gcc
# ...for compiling aarch-64 unikernels
brew install aarch64-elf-binutils aarch64-elf-gcc
```
Behind the scenes, Unikraft uses the Python-based [Kconfiglib](https://github.com/ulfalizer/Kconfiglib) to configure Unikraft on a Mac.
The build system automatically chooses the Linux-equivalent command-line tools on Mac to perform a successful build.
1. Within a terminal session, Unikraft can be cloned in the same way as on Linux:
```bash
git clone https://github.com/unikraft/unikraft.git
cd unikraft
```
1. Configuration and compilation can be invoked with `gmake`:
```bash
# Configure (select an architecture and platform)
gmake menuconfig
# Build
gmake
```
1. Also on Mac, `qemu-guest` can support in running built Unikernels with QEMU:
```
support/scripts/qemu-guest -t arm64v -k build/unikraft_qemu-arm64
```
### UEFI Support on x86_64 and ARM64 ([#910](https://github.com/unikraft/unikraft/pull/910), [#909](https://github.com/unikraft/unikraft/pull/909))
_This feature was championed by [Sergiu Moga](https://github.com/mogasergiu) with amazing support from [Michalis Pappas](https://github.com/michpappas) and advice from [Răzvan Deaconescu](https://github.com/razvand), [Ștefan Jumărea](https://github.com/StefanJum) and [Răzvan Vîrtan](https://github.com/razvanvirtan)._
Unikraft bootable through `UEFI` on `ARM64` and `x86_64`.
Features:
- custom, minimalist built-in bootloader to act as a UEFI stub capable of loading Unikraft straight from UEFI firmware on both x86_64 and AArch64 by relocating the kernel, fetching the command-line, initial RAM disk, Devicetree blob and setting up the memory region descriptors as well as bridging the gap between the components initialized by UEFI and those supported by Unikraft
- script to create UEFI based disk and ISO Unikraft bootable images
### Linux Boot Protocol on `arm64` ([#988](https://github.com/unikraft/unikraft/pull/988))
_This feature was championed by [Michalis Pappas](https://github.com/michpappas) with the inputs of [Xingjian Zhang](https://github.com/zhxj9823) and [Sergiu Moga](https://github.com/mogasergiu)._
The [arm64 Linux boot protocol](https://www.kernel.org/doc/Documentation/arm64/booting.txt) defines the layout of a Linux image, the kernel parameters, and the system configuration expected by the boot environment.
Unikraft `0.14` introduces support for the arm64 Linux boot protocol, which allows booting Unikraft into any environments that expects an `arm64` linux image, such as boot loaders or VMMs like Firecracker.
### Firecracker Support on `arm64` ([#989](https://github.com/unikraft/unikraft/pull/989))
_This feature was championed by [Michalis Pappas](https://github.com/michpappas) with the inputs of [Xingjian Zhang](https://github.com/zhxj9823) and [Sergiu Moga](https://github.com/mogasergiu)._
This release introduces the ability to boot `arm64` builds of Unikraft on Firecracker.
[Firecracker](https://firecracker-microvm.github.io/) is an ultra-light VMM that allows creating and running microVMs, combining the security and isolation properties of VMs with the flexibility and ease of use of containers.
### Dynamic `uk_store` API ([#939](https://github.com/unikraft/unikraft/pull/939))
_This feature was championed by [Michalis Pappas](https://github.com/michpappas) with the inputs of [Simon Kuenzer](https://github.com/skuenzer) and [Cezar Crăciunoiu]()._
The `uk_store` API provides micro-libraries with the ablity to register getters and setters for various properties.
Unikraft `0.14` enhances `uk_store` with the ability for microlibraries to dynamically create and destroy `uk_store` objects.
This paves the road for features like per-device statics, dynamic entries in virtual file systems like `procfs` / `sysfs`, and more.
### SUBBUILD Build System Feature ([#938](https://github.com/unikraft/unikraft/pull/938))
_This feature was championed by [Simon Kuenzer](https://github.com/skuenzer) with support from [Michalis Pappas](https://github.com/michpappas)._
This release introduces a so called `SUBBUILD` feature to the build system.
It adds the ability to place generated files (e.g., pre-processed, compiled units) in a subdirectory of a library build directory.
For this purpose, the build system looks for a file-scoped variable with the suffix `_SUBBUILD`.
Such a variable contains a path that is created below the library build directory.
The feature is especially useful for generating headers with a pre-processor, like AWK or M4.
An example `Makefile.uk`:
```Makefile
# Create `myheader.h` under `build/libmylib/include/uk/`
LIBMYLIB_SRCS-y += $(LIBMYLIB_BASE)/myheader.m4>.h
LIBMYLIB_MYHEADER_SUBBUILD += include/uk
# Register the include folder of the library with the generated header
CINCLUDES-$(CONFIG_LIBMYLIB) += -I$(LIBMYLIB_BUILD)/include
```
### TREE BUILD Build System Feature ([#1001](https://github.com/unikraft/unikraft/pull/1001))
_This feature was championed by [Andrei Tatar](https://github.com/andreittr) with support from [Marco Schlumpp](https://github.com/mschlumpp), [Maria Sfîrăială](https://github.com/mariasfiraiala), [Ștefan Jumărea](https://github.com/StefanJum), and [Simon Kuenzer](https://github.com/skuenzer)._
TREE BUILD is an alternative library registration mode for the build system which automatically handles subdirectory paths for build products.
The work adds `addlib_tree` and `addlib_tree_s` as library registration functions.
For each library in tree mode, the build system places build products in a subdirectory structure that mirrors the directory structure of the corresponding source file.
This is a very handy tool to simplify the porting of libraries whose source files span multiple directories.
Example `Makefile.uk`:
```Makefile
(eval $(call addlib_tree_s,libgeos,$(CONFIG_LIBGEOS)))
$(eval $(call addlib_tree_s,libgeos_test,$(CONFIG_LIBGEOS_UNITTEST)))
```
### `uklibid`: Library Identifiers ([#938](https://github.com/unikraft/unikraft/pull/938))
_This feature was championed by [Simon Kuenzer](https://github.com/skuenzer) with support from [Michalis Pappas](https://github.com/michpappas) and [Robert Kuban](https://github.com/kubanrob)._
Based on the SUBBUILD build feature, this release introduces library identifiers with `uklibid`.
The new library generates at compile-time unique IDs for each library.
Such a ID starts from `0` and increases linearly so that they can be used for table lookups with `O(1)` complexity.
The library provides helpers to map identifiers to names and vice versa.
`lib/ukdebug` and `lib/ukstore` are first users of this library and adopted accordingly.
A clear separation between runtime and compile-time resolution of library identifiers is done so that libraries can potentially be built off-tree and shipped in binary form.
Each library's own identifier (`uk_libid_self()`) is stored in a constant variable that is resolved during link-time.
The owner of the identifier variable is `uklibid`, so that the identifier is external to a binary library.
### `ukreloc`: Self-Relocation and Symbol-based Relocations ([#772](https://github.com/unikraft/unikraft/pull/772))
_This feature was championed by [Sergiu Moga](https://github.com/mogasergiu) with amazing support from [Michalis Pappas](https://github.com/michpappas), [Marco Schlumpp](https://github.com/mschlumpp) and advice from [Răzvan Deaconescu](https://github.com/razvand) and [Dragoș Petre](https://github.com/dragosp27)._
Unikraft is now position independent, can be built as a static `PIE` and self relocate on both `x86_64` and `ARM64`.
Features:
- `CONFIG_OPTIMIZE_PIE` to build Unikraft as a static `PIE`
- `CONFIG_LIBUKRELOC` automatically selected by `CONFIG_OPTIMIZE_PIE` and implements Unikraft's custom relocation system:
- custom macro-definitions to be used as relocation friendly alternatives to various instructions (`ldr` -> `ur_ldr`, `mov` -> `ur_mov`) as well as numerical values declarations GNU Assembler directives (`.quad`/`.long`/`.short`/etc -> `ur_data`) and a way to create relocatable static Page Table entries (`ur_pte`).
- self relocator written in C to be used in 64-bit operating mode
- 32-bit self relocator written in assembly to be used by early code that runs in x86 Protected Mode (e.g. when booting from Multiboot)
### Individual Volume Automounting ([#979](https://github.com/unikraft/unikraft/pull/979))
_This feature was championed by [Sergiu Moga](https://github.com/mogasergiu) with support from [Simon Kuenzer](https://github.com/skuenzer) and advice from [Radu Nichita](https://github.com/RaduNichita) and [Ștefan Jumărea](https://github.com/StefanJum)._
It is now possible to dynamically mount additional volumes via the introduction of a new command-line argument `vfs.fstab` that is meant to contain a list of whitespace separated strings with the following format:
```
vfs.fstab=[
"<src_dev>:<mntpoint>:<fsdriver>[:<flags>:<opts>]"
"<src_dev>:<mntpoint>:<fsdriver>[:<flags>:<opts>]"
...
]
```
The core will parse the provided strings as volume information and attempt to mount them accordingly, if `CONFIG_LIBVFSCORE_FSTAB` is provided.
Furthermore, add a configurable `CONFIG_LIBVFSCORE_FSTAB_SIZE` option that will be used as the maximum amount of automatically mounted volumes, excluding the `rootfs` and modularize `initrd` extraction and mounting functionality into a standalone function to be used by both `fstab` and implicit `rootfs`.
The core will parse the provided strings as volume information and attempt to mount them accordingly.
### vDSO and vsyscall Support for Binary Compatibility ([#23](https://github.com/unikraft/app-elfloader/pull/23))
_This feature was championed by [Michalis Pappas](https://github.com/michpappas) with support from [Cezar Crăcinoiu](https://github.com/craciunoiuc), and [Simon Kuenzer](https://github.com/skuenzer)._
The `vsyscall` (_virtual system call_) is the first and oldest mechanism used to accelerate system calls.
Due to security concerns, it has been deprecated, and `vDSO` (_virtual dynamic shared object_) serves as its successor.
However, in the context of unikernels, kernel isolation is not a concern, allowing us to utilize both of them.
The [`app-elfloader`](https://github.com/unikraft/app-elfloader) now supports both of these features.
If you don't have the source code of your application but desire the performance of Unikraft, [`app-elfloader`](https://github.com/unikraft/app-elfloader) can load unmodified ELF files.
However, there will be some performance overhead compared to a native build, while the two newly introduced features can help mitigate this difference.
The `vDSO` is available for both dynamically linked applications and statically linked ones, to accelerate certain commonly used time-related system calls (`clock_gettime`, `gettimeofday`, `time`, `clock_getres`).
As a result, some server programs can experience significant performance improvements.
If your application is dynamically linked, it can further utilize `vsyscall` to avoid costly binary syscalls (since `vsyscall` has been deprecated in the latest version of libc, we provide patched dynamic runtime libraries for [`glibc`](https://github.com/unikraft/fork-glibc) and [`musl`](https://github.com/unikraft/fork-musl)).
In some cases, this can even result in better performance than a native build.
### Application Updates
_This feature was championed by in the community by [Ștefan Jumărea](https://github.com/StefanJum), [Radu Nichita](https://github.com/RaduNichita), [Andrei Tatar](https://github.com/andreittr), [Răzvan Deaconescu](https://github.com/razvand), [Alexander Jung](https://github.com/nderjung) and participants at various Unikraft hackathons._
The [Unikraft applications](https://github.com/unikraft/?q=app-&type=all&language=&sort=) now contain `README.md` files with very easy to use instructions for running the applications, both using [`kraftkit`](https://github.com/unikraft/kraftkit) and the `Make`-based build system.
We take advantage of the `defconfig` build rule, that can generate a full `.config` file starting from a given minimal configuration.
The minimal configurations (for multiple supported platforms and architectures) are already provided in the application repositories, and can be used as such:
```console
UK_DEFCONFIG=$(pwd)/.config.helloworld_qemu-x86_64 make defconfig
```
After the configuration file is generated, the application can be build using `make` and run using the instructions from the `README.md` files.
Along with that, many applications have been ported to use Musl as the default libc.
Some of the more important ones are [`app-lua`](https://github.com/unikraft/app-lua), [`app-duktape`](https://github.com/unikraft/app-duktape/), [`app-click`](https://github.com/unikraft/app-click/), [`app-wamr`](https://github.com/unikraft/app-wamr).
As part of the [Unikraft Summer of Code](https://unikraft.org/community/hackathons/usoc23/) final hackathon, we also focused on the binary compatibility side, porting a lot of new applications and adding them in the [`dynamic-apps` repository](https://github.com/unikraft/dynamic-apps/).
Among the new ported applications are [`lua`](https://github.com/unikraft/dynamic-apps/tree/master/lang/lua), [`ruby`](https://github.com/unikraft/dynamic-apps/tree/master/lang/ruby), [`iputils`](https://github.com/unikraft/dynamic-apps/tree/master/iputils), [`redis7`](https://github.com/unikraft/dynamic-apps/tree/master/redis7).
In order to have a one to one version match between the binary compatibility and native application, [`app-redis`](https://github.com/unikraft/app-redis) was also updated to version `7.0.11`, from `5.0.6`.
### GitHub Actions for CI ([#1012](https://github.com/unikraft/unikraft/pull/1012))
_This feature was championed by [Alaxander Jung](https://github.com/nderjung) and [Cezar Crăciunoiu](https://github.com/craciunoiuc) with support from [Răzvan Deaconescu](https://github.com/razvand)._
Preliminary steps in using GitHub actions as a continuous integration have been undertaken.
These allow the building and running of tests at PR submissions, as a complement and future replacement of the current [Concourse-based system](https://builds.unikraft.io/).
In conjunction to this, a new [application `catalog` repository](https://github.com/unikraft/catalog) will store application files and serve as the sole go-to place for grabbing applications that can be built and run on top of Unikraft.
### Improved Python Support ([lib-python3:15](https://github.com/unikraft/lib-python3/pull/15))
_This feature was championed by [Andrei Tatar](https://github.com/andreittr) with support from and [Ștefan Jumărea](https://github.com/StefanJum), [Radu Nichita](https://github.com/RaduNichita) and [Maria Sfîrăială](https://github.com/mariasfiraiala)._
The [Unikraft port of Python 3](https://github.com/unikraft/lib-python3) has been updated to upstream version [3.10.11](https://docs.python.org/3.10/whatsnew/3.10.html), with the [Python 3 Demo App](https://github.com/unikraft/app-python3) similarly updated.
Notable changes:
- Functional `asyncio`
- More robust root filesystem build
- Many standard lib functionality & stability improvements
We are also excited to announce the first native ports of 3rd party Python packages:
- [NumPy](https://github.com/unikraft/lib-python-numpy)
- [Shapely](https://github.com/unikraft/lib-python-shapely)
### Updated Go Support ([lib-libgo:#23](https://github.com/unikraft/lib-libgo/pull/7)
_This feature was championed by [Marc Rittinghaus](https://github.com/marcrittinghaus) and [Eduard Vintilă](https://github.com/eduardvintila) with support from [Ștefan Jumărea](https://github.com/StefanJum) and [Radu Nichita](https://github.com/RaduNichita)_.
We update the Go support to version 1.18 an fully integrated `lib-go` with Musl.
Go applications are now fully functional on top of Unikraft for `x86_64`.
In the near future Go support will be updated for `AArch64`.
### Integrated Clang Support ([#23](https://github.com/unikraft/app-elfloader/pull/23))
_This feature was championed by [Maria Sfîrăială](https://github.com/mariasfiraiala) with input from [Michalis Pappas](https://github.com/michpappas) and [Ștefan Jumărea](https://github.com/StefanJum)._
We now provide `Clang` support for compiling for `x86_64` and cross-compiling for `AArch64` targets.
This is exciting news as it opens the door for cool compiler enforced security features and better integration for platforms such as Darwin ([unikraft#685](https://github.com/unikraft/unikraft/pull/685)).
Use the following command to compile with Clang, both on `x86_64` and on `AArch64` (depending on the configuration):
```console
$ make CC=clang
```
### Coding Conventions ([docs:#248](https://github.com/unikraft/docs/pull/248))
_This feature was championed by [Marc Rittinghaus](https://github.com/marcrittinghaus), [Michalis Pappas](https://github.com/michpappas), [Simon Kuenzer](https://github.com/skuenzer), [Marco Schlumpp](https://github.com/mschlumpp) and [Radu Nichita](https://github.com/RaduNichita) based on numerous meetings where the Unikraft community provided insight._
We're excited to announce [an official coding conventions guideline](https://github.com/unikraft/docs/blob/main/content/en/docs/contributing/coding-conventions.md)!
This comprehensive document outlines that one should have in mind when submitting contributions to out codebase, whether it's a first-time contributor or a well-known veteran.
By introducing these conventions, we want to ensure consistent and clean code across all our repositories and make maintenance more efficient.
The document includes naming conventions, indentation guidelines, commenting practices, and many more.
Happy coding!
### External Build System Integration (`kraftld`) ([#957](https://github.com/unikraft/unikraft/pull/957))
_This feature was championed by [Martin Kröning](https://github.com/mkroening) with support from [Marco Schlumpp](https://github.com/mschlumpp) and [Simon Kuenzer](https://github.com/skuenzer)._
You can now influence the Unikraft build process via a set of environment variables.
- `UK_ASFLAGS`: explicit Unikraft-specific additions to the assembler flags (the `ASFLAGS` variable is ignored)
- `UK_CFLAGS`: explicit Unikraft-specific additions to the C compiler flags (the `CFLAGS` variable is ignored)
- `UK_CXXFLAGS`: explicit Unikraft-specific additions to the C++ compiler flags (the `CXXFLAGS` variable is ignored)
- `UK_GOCFLAGS`: explicit Unikraft-specific additions to the GO compiler flags (the `GOCFLAGS` variable is ignored)
- `UK_LDFLAGS`: explicit Unikraft-specific additions to the linker flags (the `LDFLAGS` variable is ignored)
- `UK_LDEPS`: explicit, space-seperated link-time file dependencies (changes to these files will trigger relinking on subsequent builds)
This info is also shown on `make help`.
The `UK_LDFLAGS` and `UK_LDEPS` flags are of special interest, as they allow injecting externally built object files into the Unikraft image.
This approach will be further integrated into KraftKit via [`kraftld`](https://github.com/unikraft/kraftkit/pull/703).
`kraftld` is a drop-in replacement for a gcc-flavored linker, allowing the transparent linking of object files into Unikraft images.
A follow-up blog post will describe this approach and its design in more detail and will show how this is used to bring Rust support to Unikraft.
### `ADOPTERS.md` File ([#892](https://github.com/unikraft/unikraft/pull/892))
_This feature was championed by [Alaxander Jung](https://github.com/nderjung) with support from [Răzvan Deaconescu](https://github.com/razvand)._
We want to keep track of entities using Unikraft.
Inside the `unikraft` core repository there is now [an `ADOPTERS.md` file](https://github.com/unikraft/unikraft/blob/staging/ADOPTERS.md) storing Unikraft users: companies, universities, institutions that benefit from using Unikraft as part of their commercial, research or teaching activities.
If you are an entity using Unikraft, follow the [submission guidelines](https://unikraft.org/docs/contributing/submitting-changes/) and submit a pull request to update [the `ADOPTERS.md` file](https://github.com/unikraft/unikraft/blob/staging/ADOPTERS.md).
## Community Activities
### Unikraft Summer of Code 2023
_This activity was lead by [Ștefan Jumărea](https://github.com/StefanJum) with the active involvement of [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Răzvan Deaconescu](https://github.com/razvand), [Eduard Vintilă](https://github.com/eduardvintila), [Radu Nichita](https://github.com/RaduNichita), [Vlad Bădoiu](https://github.com/vladandrew), [Sergiu Moga](https://github.com/mogasergiu), [Luca Serițan](https://github.com/LucaSeri), [Teodor Țeugea](https://github.com/John-Ted)._
The third edition of [Unikraft Summer of Code](https://unikraft.org/community/hackathons/usoc23/) took place this July, had about 45 participants, and consisted in 6 sessions and a final hackathon.
The sessions covered topics like building and running unikernels, debugging, porting applications, etc.
The final hackathon was a full day event, and the participants had their chance to apply the things they've learned and to contribute to Unikraft.
It took place both in person, at [University POLITEHNICA of Bucharest](https://upb.ro/en), and online, on Discord.
A lot of work was done on application porting and binary compatibility, with more than 35 issues and pull requests opened.
We plan to keep organising the Unikraft Summer of Code in the following years, and make people eager to learn more about low-level topics, operating systems, unikernels, and, most importantly, the open source world.
### Unikernels Alliance
As we want to speed up the unikernels ascent, we decided to organize a discussion group involving all the people that are interested and bring their contribution into this field.
We decided to name our group the "Unikernel Alliance".
This is a community formed from existing unikernel and libOS communities, aimed at popularizing and promoting unikernel-like solutions in research, industry and in technical communities.
We organize monthly meetings, featuring technical talks from the group members. Until now, we have organized three meetings.
You can find the recordings and slides [here](https://drive.google.com/drive/folders/1qXcdpCXb8iKxsQzgP5GBEFwQ06wa1x1L?usp=share_link).
Feel free to join [the discussion group](https://groups.google.com/u/1/g/unikernel-alliance), [our Slack channel](https://join.slack.com/t/unikraftworkspace/shared_invite/zt-1v5zz3l3l-B6~36Me9SpWycaS2TximSA) and to be part of our next meeting on Thusday, August 31, 2023, 6pm CEST, online, on Zoom.
### Unikernels in the Wild
Together with our friends from [RWTH Aachen](https://www.rwth-aachen.de/go/id/a/?lidx=1), we organized the first edition of [Unikernels in the Wild](https://www.acs.eonerc.rwth-aachen.de/cms/E-ON-ERC-ACS/Das-Institut/Aktuelle-Meldungen-Institut/~bapbol/Unikernel-Community-Meeting-Aachen/?lidx=1), an event centered on knowledge sharing in the Unikernels area. [Răzvan Deaconescu](https://github.com/razvand) and [Răzvan Vîrtan](https://github.com/razvanvirtan) participated from our side, having presentations and offering support during the practical workshops.
The day started with a few presentations about the general view and latest updates in [RustyHermit](https://github.com/hermitcore/rusty-hermit). Then, we moved on with two presentations about binary compatibility and memory allocation in Unikraft. Also, our collaborators from [Nubificus](https://nubificus.co.uk/) (remember the [Athens Hackathon](https://unikraft.org/community/hackathons/2023-03-athens/)?) gave a presentation about their work on getting unikernels into the DevOps mainstream. The day ended with two hands-on sessions for Unikraft and [RustyHermit](https://github.com/hermitcore/rusty-hermit).
This event has been a great chance for getting together people from the Unikernels community and we hope it will become a tradition!
If you are using Unikraft, consider adding your affiliation in our [`ADOPTERS.md`](https://github.com/unikraft/unikraft/blob/staging/ADOPTERS.md) file.
We use this file to keep a track of entities that use Unikraft for their commercial and / or research work.
### Google Summer of Code 2023
We are proud to be one of the Google Summer of Code organizations for the second year in a row!
During these last months, our 5 students have started their work and already achieved some amazing intermediary results!
You can find more about our mentees progress in the following blogposts:
- [**Afsar Sahil**](https://github.com/MdSahil-oss): [Enhancing the VSCode Developer Experience](https://unikraft.org/blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience/)
- [**Rareș Miculescu**](https://github.com/rares-miculescu): [re:Arch Unikraft](https://unikraft.org/blog/2023-06-22-unikraft-gsoc-plat-rearch/)
- [**Tianyi Liu**](https://github.com/i-Pear): [Expanding binary compatibility mode](https://unikraft.org/blog/2023-06-23-unikraft-gsoc-app-compat-1/)
- [**Zeyu Li**](https://github.com/zyllee): [Packaging Pre-built Micro-libraries for Faster and More Secure Builds](https://unikraft.org/blog/2023-06-23-unikraft-gsoc-packaging-libs-1/)
- [**Zhang Xingjian**](https://github.com/zhxj9823): [Arm CCA Support for Unikraft](https://unikraft.org/blog/2023-06-23-unikraft-gsoc-arm-cca-1/)
Stay tuned for news regarding the final status of their projects!