Releases: unikraft/unikraft
v0.11.0 Janus
We are proud to announce the latest version of Unikraft, v0.11.0 (Janus)! The most important asset of this release is the long awaited musl support. Besides this, we introduce many new improvements, including critical bug fixes, improved stability and new features. To summarise:
🚀 New Features
- Update the scheduling API and thread support. This feature consists of multiple contributions by @skuenzer
- Re-factor context, extended context, and TLS/TCB handling in
arch/libcontext
(#535) - New scheduling API in
lib/uksched
(#564) - Change occurences of
uk_thread_tcb_fini
touk_thread_uktcb_fini
inuksched
(#660) by @eduardvintila
- Re-factor context, extended context, and TLS/TCB handling in
- Clone system call support. This feature consists of multiple contributions by @skuenzer
- Provide support for Musl as standard C library for Unikraft:
- Solve redefining conflicts in
uktime
(#454) by @dragosargint - Add
UK_LIBC_SYSCALLS
guard aroundsend()
andrecv()
inposix-socket
(#637) by @razvand - Replace
access
andstat
with Unikraft syscalls invfscore
(#636) by @mariasfiraiala - Add syscalls in
legacy_syscalls.h
insyscall_shim
(#634) by @mariasfiraiala - Change
pipe()
call touk_syscall_r_pipe()
invfscore
(#633) by @eduardvintila - Add threading support in
musl
(unikraft/lib-musl#9) by @dragosargint - Add script for generating Makefile.uk.musl.* entries (unikraft/lib-musl#8) by @kubanrob
- Update aarch64 makefiles (unikraft/lib-musl#7) by @kubanrob
- Add patches for aarch64 (unikraft/lib-musl#6) by @kubanrob
- Re-enable wrappers (unikraft/lib-musl#5) by @dragosargint
- Update Makefile for LWIP integration (unikraft/lib-musl#19) by @razvand
- Add syscall wrapper for getrandom (unikraft/lib-musl#25) by @michpappas
- Include
tgmath.h
header (unikraft/lib-musl24) by @maniatro111 - Add
wait.c
build dependency (unikraft/lib-musl#23) by @razvand - Add
sysexits.h
include dependency (unikraft/lib-musl#22) by @razvand - Add sources for
POSIX_USER
functions (unikraft/lib-musl#20) by @StefanJum - Always include the uname sources (unikraft/lib-musl#18) by @StefanJum
- In
lib-lwip
, includefcntl.h
andsys/ioctl.h
insockets.c
(unikraft/lib-lwip#27) by @razvand - In
lib-lwip
, removeip6addr
-related files (unikraft/lib-lwip#25) by @razvand - Add Musl support for LWIP (unikraft/lib-lwip#23) by @razvand
- In
lib-lwip
, adduk/essentials.h
as include dependency (unikraft/lib-lwip#22) by @razvand - Adopt to refactored scheduling API in LWIP (unikraft/lib-lwip#19) by @skuenzer
- In
lib-libcxx
, add patch with signature forvasprintf
(unikraft/lib-libcxx#23) by @mariasfiraiala - Add libcxx
math.h
header (unikraft/lib-libcxx#22) by @StefanJum - Include the first
stddef
header file in libcxx (unikraft/lib-libcxx#18) by @StefanJum - In
lib-libcxx
, remove multiple definitions when using musl (unikraft/lib-libcxx#17) by @StefanJum - In
lib-libcxx
, definestrtoll_l
andstrtoull_l
inlocale
(unikraft/lib-libcxx#14) by @StefanJum - Add support headers for Musl in LIBCXX (unikraft/lib-libcxx#10) by @StefanJum
- In
lib-libcxx
, add location offeatures.h
file from Musl (unikraft/lib-libcxx#9) by @StefanJum - Add support (in
kraft.yaml
) (unikraft/app-helloworld-cpp#8) by @razvand - Add support (in
kraft.yaml
) (unikraft/app-nginx#7 and #8) by @razvand - Add support (in
kraft.yaml
) (unikraft/app-redis#11) by @razvand - Add support (in
kraft.yaml
) (unikraft/app-sqlite#5) by @razvand - Add support (in
kraft.yaml
) (unikraft/app-python3#8) by @razvand - Add support (in
kraft.yaml
) (unikraft/app-micropython#3) by @razvand
- Solve redefining conflicts in
- Implement SGIs in GIC-v3 (#471) by @razvanvirtan
- Add Armv8 MTE (Memory Tagging Extensions) (#458) by @michpappas
- Introduce
ukarch_random
and add implementation for arm64 (FEAT_RNG
) (#434) by @michpappas - New
getdents64
system call (#672) by @razvand
🐛 Bug Fixes & Improvements
- Use
-Wno-cast-function-type
for GCC >= 8 insyscall_shim
(#677) by @razvand - Fix
getdents
count unit invfscore
(#670) by @dinhngtu - Fix
stdio.c
build warning invfscore
(#667) by @razvand - Change the printing function from
printf
to_uk_printk
inuktest
(#662) by @maniatro111 - Fix implicit declaration of
__lxstat
invfscore
(#661) by @eduardvintila - Fix typecast warnings in
posix-process
(#657) by @razvand - Change argument type for
posix_socket_close
inposix-socket
(#647) by @maniatro111 - Fix 9pfs scatter/gather I/O in
9pfs
(#639) by @eduardvintila - Fix uninitialized variable in
vfscore
(#551) by @mariamosn - Define
LVLC_CALLER
in caseCONFIG_LIBUKDEBUG_ANSI_COLOR
is not set inukdebug
(#559) by @hchandad - Fix warning undeclared function
halt()
inarm/lcpu.c
(#540) by @julianhartmer - Fix warning in
year_to_secs
inuktime
(#534) by @marcrittinghaus - Fix buffer length argument when calling
virtio_cread_bytes_many
invirtio_pci
(#519) by @eduardvintila - Use mutable strings in tests in
ukargparse
(#439) by @michpappas - Insert
.uk_testtab
after data section foruktest
(#606) by @alexhoppus - Make
LIBUKTEST_TEST_MYSELF
option enable/disable self tests inuktest
(#602) by @maniatro111 - Add asm flag for compilation with clang on x86 (#560) by @mariasfiraiala
- Add
clone
rule to the build system (#553) by @maniatro111 - Update checkpatch configuration and helper script (#651) by @skuenzer
- Add support for long application directory paths when building (#619) by @kubanrob
- Add
RLIMIT_DATA
resource forprlimit64
inposix-process
(#531) by @Alex-deVis - Add command line parameter
N
for settingUK_NAME
(#682) by @nderjung - In
lib-musl
, use function declaration for getdents64 (#unikraft/lib-musl31) by @razvand - In
lib-musl
, add patch to fix definition of environ variable (#unikraft/lib-musl30) by @razvand - In
lib-musl
, avoid bug inuk_syscall_set_tid_address()
(#unikraft/lib-musl29) by @dragosargint - In
lib-musl
, use-Wno-cast-function-type
for GCC >= 8 (#unikraft/lib-musl28) by @razvand - In
lib-musl
, remove include directory from clean list (#unikraft/lib-musl17) by @kubanrob - In
lib-musl
, introduce depedency to enable parallel build (#unikraft/lib-musl15) by @kubanrob - In
lib-musl
, enable FPSIMD support on ARM64 (#unikraft/lib-musl14) by @razvanvirtan - In
lib-musl
, hide internal headers (#unikraft/lib-musl13) by @kubanrob - In
lib-musl
, patch CVE-2020-28928 (#unikraft/lib-musl11) by @kubanrob - In
lib-musl
, comment macros to stop using VDSO (#unikraft/lib-musl10) by @maniatro111 - In
lib-lwip
, use-Wno-cast-function-type
for GCC >= 8 (unikraft/lib-lwip#28) by @razvand
A big thank you also to all those who helped in the review process: @adinasm, @nderjung, @craciunoiuc, @dragosargint, @eduardvintila, @marcrittinghaus, @mariasfiraiala, @razvand, @razvanvirtan, @rene, @kubanrob, @mogasergiu, @skuenzer, @StefanJum, @vladandrew, @maniatro111, @DeliaPavel and @mschlumpp!
For more information, check out the accompanying blog post or view the full changelog.
v0.10.0 Phoebe
We are proud to announce the latest version of Unikraft, v0.10.0 (Phoebe)! In this release, we introduce many new improvements, including critical bug fixes, improved stability and new features. To summarize:
🚀 New Features
- Introduction of
posix-futex
andfutex
syscall (#488) by @adinasm - Introduce new internal eventpoll API to
vfscore
(#484) by @marcrittinghaus - Introduction of
posix-event
andepoll*
syscalls (#485) by @marcrittinghaus and @hlef - Introduction of
posix-socket
abstraction library (#65) by @nderjung and @marcrittinghaus - Paging support on arm64 based on VMSAv8-64 (#506) by @michpappas
- SMP implementation for x86_64 (#502) by @marcrittinghaus
- Add
clock_getres
syscall (#503) by @StefanJum - New syscalls and cleanups to
posix-user
(#504) by @marcrittinghaus - Add option to enforce W^X (f21273f via #506) by @marcrittinghaus
- New
rt_sig*
systems registered inuksignal
(#314) by @razvanvirtan
🐛 Bug Fixes & Improvements
- Fix
uktest
to print custom formats (#515) by @maniatro111 - Ignore only unnumbered legacy syscalls in
syscall_shim
(#509) by @razvanvirtan - Fix parsing error in
fdt_get_address
(ofw
device trees) (#507) by @kubanrob - Solve redefining conflicts in
uksignal
(#453) by @dragosargint - Solve redefining conflicts in
vfscore
(#441) by @dragosargint - Solve redefining conflicts in
posix-process
(#442) by @dragosargint - Fix syscall definitions in
posix-process
(#526) by @dragosargint - Force argument order for
uk_vsyscall_r
insyscall_shim
(#512) by @marcrittinghaus - Fix warnings about unused variables in
plat/arm/lcpu
(#479) by @marcrittinghaus - Faster builds by considering obj-only libs for linking (#482) by @kubanrob
- Cleanup GIC-v2/GIC-v3 code (#478) by @marcrittinghaus
- Fix spinlock headers (#477) by @marcrittinghaus
- Update reference to
liftoff
(#487) by @skuenzer - Include missing
syscall.h
invfscore
(#527) by @skuenzer - Various fixes/improvements in preparation for new scheduling API (#524) by @skuenzer
- Add data barrier after PTE writes in arm64 (#525) by Aleksandr Iashchenko and @michpappas
- Reorder macros in the linuxu system call header files (#438) by @maniatro111
- Preserve x18 in exception vectors for arm64 on kvm (#523) by @michpappas
- Add call to
_init_paging
insetup.c
for x86 on kvm (#483) by @cristian-vijelie
A big thank you also to all those who helped in the review process: @gabrielmocanu, @mogasergiu, @craciunoiuc, @dragosargint, @razvanvirtan, @gabrielmocanu, @StefanJum, @rene, @razvand, @skuenzer and @marcrittinghaus.
For more information, check out the accompanying blog post or view the full changelog.
v0.9.0 Hyperion
We are proud to announce the latest version of Unikraft, v0.9.0 (Hyperion)! In this release, we introduce many new improvements, including critical bug fixes, improved stability and new features. To summarise:
🚀 New Features
- Architecture-independent parts of SMP API (#469) by @marcrittinghaus
- Introduce support for ARM64 SMP (#373) by @razvanvirtan
- Introduce the
ukstore
library for static entries (#459) by @craciunoiuc - Register allocator statistics to
ukstore
(#279) by @craciunoiuc - Add Branch Target Identification (BTI) for ARM (#421) by @michpappas
- Unify boot information storage (#406) by @cristian-vijelie
- Allow building GRUB based ISO images (#342) by @aadhi0319
- Enable pl031 for ARM64 (#316) by @razvand
- Ignore unnumbered system calls (#468) by @skuenzer
🐛 Bug Fixes & Improvements
- Remove
__i386__
code (#435) by @Sairajkodilkar - Fix interprocessor interrupts in gic-v2 (#445) by @razvanvirtan
- Remove
#ifndef CONFIG_PARAVIRT
code (#466) by @StefanJum - Fix fget in
flock()
(#472) by @marcrittinghaus - Cleanup and upgrade FDT to 45f3d1a (#378) by @michpappas
- Readdir should return error in
errno
invfscore
(#473) by @mschlumpp - Update
COPYING.md
with generalized copyright copyright attribution (#456) by @nderjung - Replace psci functions with generic SMCCC calls (#428) by @razvanvirtan
- Update
CODEOWNERS
with latest libs and remove reviewer teams (#475) by @nderjung
A big thank you also to all those who helped in the review process: @maniatro111, @mandrei12, @cristian-vijelie, @michpappas, @razvanvirtan, @mschlumpp, @StefanJum, @craciunoiuc, @rene, @mogasergiu, @marcrittinghaus, @skuenzer, @razvan
For more information, check out the accompanying blog post or view the full changelog.
v0.8.0 Enceladus
We are proud to announce the latest version of Unikraft, v0.8.0 (Enceladus)! In this release, we introduce many new improvements, including critical bug fixes, improved stability and new features. To summarise:
🚀 New Features
- Introduce Pointer Authentication (PAuth) support (#369) by @michpappas
- Virtual Memory API (x86_64, kvm) (#338) by @marcrittinghaus
- Support for partial checksumming / checksum offloading (#308) by @skuenzer
- Add
uk_event
for new trap interface (#227, #230, #231) by @marcrittinghaus - Additional interrupt context safe functions (#192) by @cristian-vijelie
- TAP network device driver (#251) by @hisharanwithu
- Add basic test suite to
ukargparse
(#392, #431) by @StefanJum - Add
uk_list_last_entry_or_null
(#396) by @marcrittinghaus - Add
mprotect
(#394) by @marcrittinghaus - Add support for arm64 on linuxu (#418) by @maniatro111
🐛 Bug Fixes & Improvements
- Rewrite of ubsan library (#404) by @marcrittinghaus
- Migrate and update docs (#252) by @nderjung
- Allow
mkcpio
to quietly gzip compress CPIO images (#359) by @aadhi0319 - Enhance arm(64)/x86_64 Bitscan Functions (#395) by @marcrittinghaus
- Add
getgrgid
to export (#410) by @marcrittinghaus - Do not invoke
rustc
ifukrust
is not enabled (#403) by @michpappas - Fixes layout of assert table on ARM64 (#397) by @marcrittinghaus
- Add dependency to
lib/ukalloc
forlinuxu
(#430) by @skuenzer - Fix quoted whitespaces handling (#433) by @StefanJum
- Fix build warning for
_uk_printd
definition (#432) by @gabrielmocanu - Fix build warning for halt definition (#429) by @gabrielmocanu
- Fix build errors introduced by #251 (#412) by @vladandrew
- Fix conditional definition of functions (#399) by @george-hopkins
- Fix some bugs (#394) by @marcrittinghaus
- Fix and introduce more range macros (#370) by @skuenzer
- Fixing various bugs (#411) by @marcrittinghaus
- Complete syscall lists on arm and aarch64 (#423) by @razvanvirtan
- Replace
EDOOFUS
macro (#416) by @maniatro111 - Remove
uk_free
call on request dequeue (#413) by @mschlumpp - Move alloc out of critical section in
sys_open
(#408) by @marcrittinghaus - Use types from
shareddefs.h
(#407) by @marcrittinghaus - Use non-prototyped no-ops (#405) by @marcrittinghaus
- Do not pass
-march
with-mcpu
(#368) by @michpappas - Do not allocate IRQ handler entries dynamically (#240) by @hlef
A big thank you also to all those who helped in the review process: @cristian-vijelie, @michpappas, @mschlumpp, @skuenzer, @adinasm, @florin-diaconescu, @gabrielmocanu, @mogasergiu, @razvand, @StefanJum, @razvanvirtan, @craciunoiuc, @danield20 and @vladandrew.
For more information, check out the accompanying blog post or view the full changelog.
v0.7.0 Mimas
We are proud to announce the latest version of Unikraft. In this release, we introduce many new improvements, including critical bug fixes, improved stability and new features. To summarise:
- Rust support for internal Unikraft libraries (#348) (@vladandrew, @cffs, @TrueDoctor)
- New documentation + website (@nderjung)
- VSCode IDE extension (@adinasm)
- NS16550 driver (#233) (@michpappas)
- ARM GIC V3 support (#234) (@rene)
- ARM SMCCC (#297) (@michpappas)
- ARM Ticket locks (#347) (@michpappas)
- Optional locking to waitq wait event to prevent signal loss (#288) (@marcrittinghaus)
- README updates for configuring, building and running Unikraft applications (@gabrielmocan, @mogasergiu, @FredrikBakken, @StefanJum)
- Version boosts (@FredrikBakken, @razvanvirtan)
Also thank you to @razvanvirtan, @skuenzer, @mogasergiu, @razvand, @hlef, @danield20 and @farif for additional bug fixes and improvements!
For more information, check out the accompanying blog post.
v0.6 Dione
To celebrate Unikraft’s 4-year "git commit birthday", we are proud to announce the latest release: v0.6 - Dione.
Unikraft is a comprehensive toolchain and library operating system which builds highly specialized unikernels, software bundles that consist of a target application along with just the operating system primitives and libraries features it needs to run.
It's been close to a year since our last release, and a lot of things have been happening in the Unikraft community, moving Unikraft further as a mature product for industry, research and academic use cases.
This release has over 432 new commits from more than 112 merged PRs, comprising 31,829 new lines of code (4,537 deletions), across 85 repositories (3 new external libraries), 4 new internal libraries, and with 12 new complete syscall implementations from 24 contributors!
During the past year, we've moved towards a fully open source project, with an open source governance system, public CI/CD integration and GitHub-supported development and planning (you can already see the plans for the next release!). The community has expanded and we're now actively using GitHub and Discord to create, review and integrate contributions and to host meetings and talks. The community consists of active members from:
- NEC Laboratories Europe GmbH;
- University POLITEHNICA of Bucharest;
- Lancaster University,
- Karlsruhe Institute of Technology;
- University of Manchester;
- University of Liege;
- OpenSynergy;
- ARM China.
In order to further promote the Unikraft project to students, hobbyists, researchers, developers and professionals, we also organized the Unikraft Summer of Code USoC'21 in August/September, a 10 day hands-on workshop which provided attendees with extensive information and skills on unikernels and Unikraft. This was a consistent effort of the Unikraft community, resulting in extensive documentation and support for newcomers. A bunch of the USoC'21 attendees are now part of the extended Unikraft community and have found their work already upstream in this release!
During the same period, we published a paper on Unikraft: Fast, Specialized Unikernels the Easy Way at EuroSys'21 (and won best paper award!). Many of improvements and additional work resulting from this paper has made its way upstream into this release. The paper is open-access, so do check it out if you wish dive into more details on Unikraft internals and the reasonings for its design.
Apart from bug fixes, improvements and version updates, Unikraft Release v0.6 Dione adds core features to support its development and deployment, including:
uktest
, the new unit testing framework for Unikraft. Testing of both internal and external libraries will be facilitated byuktest
, allowing you to turn on tests across all or select libraries; helping you ensure the integrity of your unikernel image before hittingmain()
.isrlib
, a library for providing "interrupt-service-routine"- safe variants of standard functions so that they can be used in interrupt handlers and early boot code. This library provides an initial set of standard functions normally found with<string.h>
. The implementation is derived fromnolibc
and compiled with the|isr
variant which disables the use of extended CPU features, like vector units (e.g., SSE, AVX) and floating point units.ubsan
can catch runtime bugs such as dereferencing NULL or non-canonical addresses, certain undefined overflow errors, shifting or multiplying data which is out of bounds, and other errors.ukcpio
provides you the ability to read CPIO files into memory, allowing for high-performance virtual in-memory filesystem for your application. You can pass a CPIO file as the initramfs to your unikernel image.- SMP support is still on-going but with this release we introduced common SMP API for all architectures and platforms, preparing for multi-core support. The SMP API that will be backed by the actual implementation on the corresponding architecture (x86_64 and ARM).
- System call support has been extended reaching to more than 150 supported system calls via the
syscall_shim
layer (40 merged PRs in this category alone!) - A new open-source governance system, deepening our GitHub integration which now automatically allocates reviewers and assignees to PRs. This is complemented by the CI/CD system that publicly shows results of build / run pipelines and automatically integrates approved PRs.
libsodium
, an easy-to-use software library for encryption, is now part of the Unikraft ecosystem.dafny
, a library for the Dafny programming language, used for verification.shfs
, a simple (and fast!) hash filesystem implementation, used for fast cache-based storage.
Find out more about the release and Unikraft by joining us on GitHub and on Discord.
v0.5 Tethys
We are proud to announce the latest version of Unikraft. In this release, we
introduce many new improvements, including critical bug fixes, improved
stability and new features. To summarise:
- Support for multiple, concurrent memory allocators
- Support for non-executable pages on x86;
- Support for IEEE 802.1q and IEEE 802.1ad tagged frames;
- Access to the TSC-clock for accurate boot and system time;
- Memory stack-protection;
- Recursive PCI-bus enumeration;
- Better error reporting;
- Support for arm64 fp;
- Automatic libc-style system call stubs;
- Improved console I/O;
- virtio block driver;
- signals support
- ANSI-colored output;
…and much more!
We have also been hard at work increasing the number of available applications
and libraries supported by Unikraft, including:
tflite
- ML for Mobile and Edge Devicesdnnl
- Deep Neural Network Librarynnpack
- an acceleration package for neural network computationstlsf
- Memory allocator real time embedded systemsallocregion
- A simple region-based memory allocatortinyalloc
- A tiny allocator designed for tiny embedded systemsmimalloc
- A general purpose allocator with excellent performance characteristicsnettle
- A low-level cryptographic librarygemmlowp
- Low-precision matrix multiplicationliblzma
- A compression library with an API similar to that of zlibprotobuf
- Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.zydis
- Fast and lightweight x86/x86-64 disassembler libraryfarmhash
- FarmHash provides hash functions for strings and other dataflatbuffers
- FlatBuffers is an efficient cross platform serialization library
v0.4 Rhea
This release includes:
- Cloud-based deployments (GCP, AWS, Digital Ocean)
- Native support for many programming languages and language environments: C++, Python/Micropython, Go, Lua, Web Assembly (WAMR), JavaScript (Duktape), Ruby
- Improvements to the ARM64 platform, including virtio and multi-thread support
- Basic musl support
- pthread and TLS support
- Trace point sub-system
- Filesystem support (9pfs, devfs, ramfs)
- Applications: Click, SQLite, nginx, redis
- Support for external platforms, and in particular solo5
- Additional lib ports: uuid, http-parser, intel-intrinsics, openssl, boost, protobuf, etc.
- Lots of other features and bug fixes