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 Simon Kuenzer
- 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 Eduard Vintilă
- Re-factor context, extended context, and TLS/TCB handling in
- Clone system call support. This feature consists of multiple contributions by Simon Kuenzer
- Provide support for Musl as standard C library for Unikraft:
- Solve redefining conflicts in
uktime
(#454) by Dragoș Argint - Add
UK_LIBC_SYSCALLS
guard aroundsend()
andrecv()
inposix-socket
(#637) by Răzvan Deaconescu - Replace
access
andstat
with Unikraft syscalls invfscore
(#636) by Maria Sfîrăială - Add syscalls in
legacy_syscalls.h
insyscall_shim
(#634) by Maria Sfîrăială - Change
pipe()
call touk_syscall_r_pipe()
invfscore
(#633) by Eduard Vintilă - Add threading support in
musl
(#9) by Dragoș Argint - Add script for generating Makefile.uk.musl.* entries (#8) by Robert Kuban
- Update aarch64 makefiles (#7) by Robert Kuban
- Add patches for aarch64 (#6) by Robert Kuban
- Re-enable wrappers (#5) by Dragoș Argint
- Update Makefile for LWIP integration (#19) by Răzvan Deaconescu
- Add syscall wrapper for getrandom (#25) by Michalis Pappas
- Include
tgmath.h
header (#24) by Florin Postolache - Add
wait.c
build dependency (#23) by Răzvan Deaconescu - Add
sysexits.h
include dependency (#22) by Răzvan Deaconescu - Add sources for
POSIX_USER
functions (#20) by Ștefan Jumărea - Always include the uname sources (#18) by Ștefan Jumărea
- In
lib-lwip
, includefcntl.h
andsys/ioctl.h
insockets.c
(#27) by Răzvan Deaconescu - In
lib-lwip
, removeip6addr
-related files (#25) by Răzvan Deaconescu - Add Musl support for LWIP (#23) by Răzvan Deaconescu
- In
lib-lwip
, adduk/essentials.h
as include dependency (#22) by Răzvan Deaconescu - Adopt to refactored scheduling API in LWIP (
lib/uksched
) (#19) by Simon Kuenzer - In
lib-libcxx
, add patch with signature forvasprintf
(#23) by Maria Sfîrăială - Add libcxx
math.h
header (#22) by Ștefan Jumărea - Include the first
stddef
header file in libcxx (#18) by Ștefan Jumărea - In
lib-libcxx
, remove multiple definitions when using musl (#17) by Ștefan Jumărea - In
lib-libcxx
, definestrtoll_l
andstrtoull_l
inlocale
(#14) by Ștefan Jumărea - Add support headers for Musl in LIBCXX (#10) by Ștefan Jumărea
- In
lib-libcxx
, add location offeatures.h
file from Musl (#9) by Ștefan Jumărea - Add support (in
kraft.yaml
) forapp-helloworld-cpp
(#8) by Răzvan Deaconescu - Add support (in
kraft.yaml
) forapp-nginx
(#7 and #8) by Răzvan Deaconescu - Add support (in
kraft.yaml
) forapp-redis
(#11) by Răzvan Deaconescu - Add support (in
kraft.yaml
) forapp-sqlite
(#5) by Răzvan Deaconescu - Add support (in
kraft.yaml
) forapp-python3
(#8) by Răzvan Deaconescu - Add support (in
kraft.yaml
) forapp-micropython
(#3) by Răzvan Deaconescu
- Solve redefining conflicts in
- Implement SGIs in GIC-v3 (#471) by Răzvan Vîrtan
- Add Armv8 MTE (Memory Tagging Extensions) (#458) by Michalis Pappas
- Introduce
ukarch_random
and add implementation for arm64 (FEAT_RNG
) (#434) by Michalis Pappas - New
getdents64
system call (#672) by Răzvan Deaconescu
🐛 Bug Fixes & Improvements
- Use
-Wno-cast-function-type
for GCC >= 8 insyscall_shim
(#677) by Răzvan Deaconescu - Fix
getdents
count unit invfscore
(#670) by Tu Dinh Ngoc - Fix
stdio.c
build warning invfscore
(#667) by Răzvan Deaconescu - Change the printing function from
printf
to_uk_printk
inuktest
(#662) by Florin Postolache - Fix implicit declaration of
__lxstat
invfscore
(#661) by Eduard Vintilă - Fix typecast warnings in
posix-process
(#657) by Răzvan Deaconescu - Change argument type for
posix_socket_close
inposix-socket
(#647) by Florin Postolache - Fix 9pfs scatter/gather I/O in
9pfs
(#639) by Eduard Vintilă - Fix uninitialized variable in
vfscore
(#551) by Maria Moșneag - Define
LVLC_CALLER
in caseCONFIG_LIBUKDEBUG_ANSI_COLOR
is not set inukdebug
(#559) by Hamza Chandad - Fix warning undeclared function
halt()
inarm/lcpu.c
(#540) by Julian Hartmer - Fix warning in
year_to_secs
inuktime
(#534) by Marc Rittinghaus - Fix buffer length argument when calling
virtio_cread_bytes_many
invirtio_pci
(#519) by Eduard Vintilă - Use mutable strings in tests in
ukargparse
(#439) by Michalis Pappas - Insert
.uk_testtab
after data section foruktest
(#606) by Aleksandr Iashchenko - Make
LIBUKTEST_TEST_MYSELF
option enable/disable self tests inuktest
(#602) by Florin Postolache - Add asm flag for compilation with clang on x86 (#560) by Maria Sfîrăială
- Add
clone
rule to the build system (#553) by Florin Postolache - Update checkpatch configuration and helper script (#651) by Simon Kuenzer
- Add support for long application directory paths when building (#619) by Robert Kuban
- Add
RLIMIT_DATA
resource forprlimit64
inposix-process
(#531) by Alex Apostolescu - In
lib-musl
, use function declaration for getdents64 (#31) by Răzvan Deaconescu - In
lib-musl
, add patch to fix definition of environ variable (#30) by Răzvan Deaconescu - In
lib-musl
, avoid bug inuk_syscall_set_tid_address()
(#29) by Dragoș Argint - In
lib-musl
, use-Wno-cast-function-type
for GCC >= 8 (#28) by Răzvan Deaconescu - In
lib-musl
, remove include directory from clean list (#17) by Robert Kuban - In
lib-musl
, introduce depedency to enable parallel build (#15) by Robert Kuban - In
lib-musl
, enable FPSIMD support on ARM64 (#14) by Răzvan Vîrtan - In
lib-musl
, hide internal headers (#13) by Robert Kuban - In
lib-musl
, patch CVE-2020-28928 (#11) by Robert Kuban - In
lib-musl
, comment macros to stop using VDSO (#10) by Florin Postolache - In
lib-lwip
, use-Wno-cast-function-type
for GCC >= 8 (#28) by Răzvan Deaconescu
A big thank you also to all those who helped in the review process: Adina Smeu, Alexander Jung, Cezar Crăciunoiu, Dragoș Argint, Eduard Vintilă, Marc Rittinghaus, Maria Sfiraiala, Răzvan Deaconescu, Răzvan Vîrtan, Renê de Souza Pinto, Robert Kuban, Sergiu Moga, Simon Kuenzer, Ștefan Jumărea, Vlad Bădoiu, Florin Postolache, Delia Pavel and Marco Schlumpp.
For more information, check out the accompanying blog post or view the full changelog.