-
v0.13.0
AtlasWe are proud to announce the latest version of Unikraft, v0.13.0 (Atlas)! Along with many fixes, this release comes with a bunch of new features that are worth your attention!
This release includes a breaking change which affects output unikernel binary name. See native Firecracker support for details.
Here is the full updates list:
🚀 New Features
- Update parser in
lib/uklibparam
(#882) by Simon Kuenzer - Support escaping of quotes in
lib/ukargparse
(#893) by Simon Kuenzer - Add support for environment variables in
lib/posix-environ
(#868) by Simon Kuenzer - Support for environment variables with
lib/posix-environ
in Musl (lib-musl#43) by Simon Kuenzer - Add
README.md
file for 9pfs inlib/9pfs
(#837) by Delia Pavel - Extend prsyscall in
lib/syscall_shim
(print structs, …) (#836) by Marc Rittinghaus - Dynamically allocate
struct mount
paths (#826) by Dinh Ngoc Tu - Port the testsuite to the new scheduling APIs in
lib/posix-futex/test
(#809) by Nour-eddine Taleb - Add per-lcpu variable definition (#784) by Andra Paraschiv
- Add
README.md
file inlib/vfscore
(#780) by Radu Nichita - Add
README.md
file inlib/nolibc
(#778) by Alexandru Calciu - Implement a more robust compiler detection in
build
(#774) by Marco Schlumpp - Add Codacy code quality status badge to
README.md
indoc
(#764) by Aryan Verma - Firecracker boot protocol support in
plat/kvm
(#760) by Marco Schlumpp - Implement subset of FUTEX_WAIT_BITSET in
lib/posix-futex
(#758) by Marco Schlumpp - Add an empty implementation of ioctl to eventfd in
lib/posix-event
(#756) by Marco Schlumpp - Add
syscall
alias touk_syscall
inlib/syscall_shim
(#755) by Marco Schlumpp - Implement the EFD_NONBLOCK flag for eventfd in
lib/posix-event
(#754) by Marco Schlumpp - Merge
.gcc_except_table
s inplat/common
(#753) by Marco Schlumpp - Compile all source files for ISR context in
lib/ukvmem
(#751) by Marco Schlumpp - Use -ffreestanding compiler flag in
lib/nolibc
(#740) by Răzvan Deaconescu - Use 48-bit virtual addressing for PARange >= 52 in
plat/kvm/arm
(#729) by Eduard Vintilă - Improve unwind information for x86 architecture in
plat/x86
(#700) by Marco Schlumpp - Improve nolibc compatibility in
lib/nolibc
(#627) by Marco Schlumpp - Add synchronization mechanisms (#476) by Sairaj Kodilkar
- Update description of Musl support in
README
(lib-musl#49) by Răzvan Deaconescu - Update newlib to the latest Unikraft version (#28) by Eduard Vintilă
- Update pthread-embedded to the latest Unikraft version (#11) by Eduard Vintilă
- Add linux definitions patch (#34) by Teodor Țeugea
- Add
SOCK_NONBLOCK
toaccept4()
andsocket()
(#33) by Marc Rittinghaus - Improve
README.md
forapp-elfloader
(app-elfloader#7) by Simon Kuenzer - VFS and native dynamic loader support (app-elfloader#17) by Simon Kuenzer
🐛 Bug Fixes & Improvements
- Add semicolon to
DPRINTF
macro inlib/vfscore
(#890) by Răzvan Deaconescu - Initialize lists for
stdio_vnode
inlib/vfscore
(#889) by Răzvan Deaconescu - Avoid recursive locking in sys_rename in
lib/vfscore
(#888) by Marc Rittinghaus - Add missing errno include in
lib/ukswrand
(#887) by Marc Rittinghaus - Fix I/O error on fsync with 9P2000.u in
lib/uk9p, lib/9pfs
(#886) by Marc Rittinghaus - Start TID numbering from 1 in
lib/posix-process
(#885) by Florin Postolache - Fix file path resolution for 9pfs setup in
lib/vfscore
(#883) by Andra Paraschiv - Disable compiler control flow protection in
build
(#881) by Andrei Tătar - Modify pointer comparison in
lib/{nolibc,isrlib}
(#880) by Maria Sfîrăială - Add additional recognised Git trailers to checkpatch in
support/scripts
(#879) by Alexander Jung - Fix memory region setup and issue #766 in
plat/linuxu
(#878) by Sergiu Moga - Fix register names for clang in
plat/kvm/x86
(#877) by Ștefan Jumărea fs0
for automounting 9pfs inlib/vfscore
(#875) by Simon Kuenzer- Handle
FIONBIO
command inpipe_ioctl()
inlib/vfscore
(#874) by Eduard Vintilă - Fix Python ascii codec can’t decode byte in
support/scripts
(#873) by Florin Postolache - Change vnops to take constant strings in
lib/vfscore
(#866) by Marc Rittinghaus - Fix
dup
,utimensat
, andfutimens
inlib/vfscore
(#865) by Marc Rittinghaus - Add
ukarch_fetch_sub
inuk/arch
(#864) by Răzvan Vîrtan - Fix
ioctl()
on device files (+ cleanup) in/lib/devfs
,/lib/ukswran
(#855) by Marc Rittinghaus - Fix file flags for
O_NONBLOCK
andO_ASYNC
(#850) by Marc Rittinghaus - Remove
clone3
syscall inlib/posix-process
(#847) by Teodor Țeugea - Apply
LIBxxx_COMPFLAGS{,-y}
to C++ too inbuild
(#845) by Dinh Ngoc Tu - Fix cast to invalid type in
9p.c
(#844) by Hugo Lefeuvre - Fix potential
free(NULL)
inlib/vfscore
(#843) by Hugo Lefeuvre - Use page alignment macros everywhere (#842) by Hugo Lefeuvre
- Remove unreachable NULL checks in
ukalloc
(#840) by Hugo Lefeuvre - Fix unchecked
uk_palloc
value inxen/x86/mm.c
(#839) by Hugo Lefeuvre - Various fixes for application compatibility (#834) by Marc Rittinghaus
- Fix compilation and loading of linuxu images in
plat/linuxu
(#833) by Marco Schlumpp - Allow non-writable shared file mappings in
lib/ukvmem
(#832) by Cosmin Vancea - Fix symlink support for 9pfs in
9pfs, vfscore
(#830) by Andra Paraschiv - Fix wrong type for the
st_nlink
field insidestruct stat
inlib/nolibc
(#829) by Cosmin Vancea - Fix build warnings in
lib/posix-process
(#820) by Konstantinos Koukopoulos - Force update
UK_CONFIG
inbuild/Makefile
(#817) by Tianyi Liu - Fix for Issue #730 in
lib/uksglist
(#813) by Vineeth Krishna M - Handle a full tracing buffer correctly in
lib/ukdebug
(#810) by Marco Schlumpp - Fix issues in FDT functions in
plat/drivers/ofw
(#805) by Eduard Vintilă - Detect if
gawk
can be used instead ofawk
inbuild
(#803) by Simon Kuenzer - Add a simple test for mmap and munmap in
lib/ukmmap
(#802) by Kha Dinh - Remove warnings related to timespec in
lib/nolibc
(#800) by Takeru Wada - Fix
posix-mmap
errno issue (#799) by Teodor Țeugea - Update
uio_offset
anduio_resid
on successful reads inlib/posix-event
(#798) by Eduard Vintilă - Add comments to
9pfs.h
file (#794) by Delia Pavel - Change the
SECINFO_EXP
regex to be more permissive insupport/scripts
(#792) by Florin Postolache - Fix double fault and failing mmap (#790) by Marc Rittinghaus
- Add
write-combined
page entry attribute inplat/x86
(#788) by Marco Schlumpp - Ensure the
.eh_frame
section stays inplat/common
(#776) by Marco Schlumpp - Fix type of
revents
pointer inlib/posix-event
(#775) by Marco Schlumpp - Change unhandled IRQ message to a tracepoint in
plat/kvm
(#768) by Marco Schlumpp - Fix interrupt flag check in
drivers/virtio
(#761) by Marco Schlumpp - Ensure the
ifpages
metadata does not break any alignments inlib/ukalloc
(#757) by Marco Schlumpp - Disable default LIBMUSL_COMPLEX in
Config.uk
(lib-musl#47) by Răzvan Deaconescu - Fix ioctl signature in function definition in
patches
(lib-musl#44) by Ștefan Jumărea - Fix
ioctl
signature (lib-musl#42) by Marc Rittinghaus - Various fixes (lib-musl#41) by Marco Schlumpp
- Add option to disable character maps in
locale
(lib-musl#40) by Dinh Ngoc Tu - Apply
-ffreestanding
for the Musl source code (lib-musl#35) by Marco Schlumpp - Use
-ffreestanding
as internal build option inMakefile.uk
(lib-newlib#33) by Răzvan Deaconescu - Add
*_OK
flags in fcntl.h header ininclude
(#32) by Ștefan Jumărea - Return address from previous
brk()
context on follow-up request (#15) by Andra Paraschiv - Fix
argv
parsing (app-elfloader#13) by Cosmin Vancea - Align the stack pointer at a 16-byte boundary at function calls (#9) by Cosmin Vancea
A big thank you also to all those who helped in the review process: Adina Smeu, Alexander Jung, Alexandru Calciu, Alexandru Apostolescu, Andra Paraschiv, Andrei Tătar, Cezar Crăciunoiu, Delia Pavel, Dragoș Petre, Eduard Mihăilescu, Eduard Vintilă, Florin Postolache, Gabriel Mocanu, Teodor Țeugea, Luca Serițan, Marco Schlumpp, Marc Rittinghaus, Maria Sfîrăială, Michalis Pappas, Radu Nichita, Rareș Miculescu, Răzvan Deaconescu, Răzvan Vîrtan, Robert Kuban, Sergiu Moga, Simon Kuenzer, Ștefan Jumarea, Teodor Tiron, Tu Dinh Ngoc, Vlad Bădoiu.
For more information, check out the accompanying blog post or view the full changelog.
- Update parser in
-
v0.12.0
EpimetheusWe are proud to announce the latest version of Unikraft, v0.12.0 (Epimetheus)! This release comes with a bag of new exciting features and more stability to the existing ones. Here is the full updates list:
🚀 New Features
- Expose
HANDLED_CONT
return value ininclude/event
(#738) by Marc Rittinghaus - Register
mkdirat
to syscall shim inlib/vfscore
(#732) by Eduard Vintilă - Fault-safe memory access in
lib/uknofault
(#725) by Marc Rittinghaus - Boot code refactoring (#722) by Marc Rittinghaus
- Make TCB overlap configurable in
arch/libcontext
(#720) by Eduard Vintilă - Add
_SC_PHYS_PAGES
and_SC_AVPHYS_PAGES
tosysconf
inlib/posix-sysinfo
(#719) by osmten - Add
setattr
function for 9pfs inlib/9pfs
(#710) by Ștefan Jumărea - Update rust version to latest nightly in
lang/rust
(#709) by Fabian Patraș - Add comments to vfs.h file in
lib/vfscore
(#707) by Radu Nichita - Add
README.md
file inlib/ramfs
(#705) by Delia Pavel - Add comments to ramfs.h file in
lib/ramfs
(#704) by Delia Pavel - Update documentation of ukarch_random (#703) by Michalis Pappas
- Use ukarch_random_seed to seed MTE keys in
arch/arm64
(#702) by Michalis Pappas - Add IRQ events in
plat/*
(#699) by Marco Schlumpp - Implement
ukarch_random
inarch/x86_64
(#695) by Michalis Pappas - Handle error code returns from event handlers in
include/event
(#691) by Marco Schlumpp - Use correct variable name for sect-strip.py tool in
lib/ukdebug
(#690) by Marco Schlumpp - Use the ukarch_random API to generate PAuth keys and enable Pointer Authentication on KVM (#686) by Michalis Pappas
- 9p2000.L support in
lib/{uk9p,9pfs}
(#671) by Dinh Ngoc Tu - Implement subclass matching in
plat/common/pci
(#624) by Marco Schlumpp - Add additional flags for compatibility in
lib/vfscore
(#623) by Marco Schlumpp - Expose
rmdir
/rename
fromnolibc
inlib/nolibc
(#622) by Marco Schlumpp - Add
lib/ukvmem
andlib/posix-mmap
(#603) by Marc Rittinghaus - Add README.md file in
lib/uktest
(#555) by Ștefan Jumărea - Upgrade musl to latest version (1.2.3) (#34) by Eduard Vintilă
- Upgrade libsqlite version (#4) by Eduard Mihăilescu
- Add configuration file for textlint in
.github
(#178) by Razvan Deaconescu - Add make-based build workflow (#177) by Ștefan Jumărea
- Add
CONTRIBUTING.md
file referencing the website (#174) by Ștefan Jumărea - Add instructions on contributing to documentation (#171) by Ștefan Jumărea
- Split coding style content (#162) by Ștefan Jumărea
- Port the informations on the
Makefile.uk
,exportsyms.uk
andextra.ld
files from the Unikraft old documentation (#126) by Ștefan Jumărea
🐛 Bug Fixes & Improvements
- Fix typecast for
PT_BUFP
inuk_prsyscall
forlib/syscall_shim
(#750) by Simon Kuenzer - Fix
lstat()
infinite loop inlib/vfscore
(#711) by Maria Sfîrăială - Fix
gcc
-ism forclang
compilation inplat/pci_ecam.c
(#701) by Maria Sfîrăială - Comment out unused sysinfo buffer in
lib/posix-info
(#673) by Razvan Deaconescu - Fix a memory leak in
lib/ukallocbbuddy
(#689) by Noureddine Taleb - Fix race condition during context switch in
lib/uksched
(#694) by Eduard Vintilă - Fix segments in ELF output images in
build
(#698) by Marco Schlumpp - Align the stack to 16 bytes in
arch/x86_64
(#684) by Marco Schlumpp - Update ukrust to work alongside Cargo in
lib/ukrust
(#680) by Vlad Badoiu - Use Linux-compatible stat structure in
lib/nolibc
(#675) by Razvan Deaconescu - virtio-net fixes (#669) by Dinh Ngoc Tu
- Flip argument names of
VOP_SYMLINK
inlib/vfscore
(#629) by Marco Schlumpp - Prefer local include dirs in
support/build
(#625) by Marco Schlumpp - Ensure time monotonicity for tscclock in
plat/kvm
(#617) by Marco Schlumpp - 16-byte align syscall stack in
plat/common/x86
(#748) by Marc Rittinghaus - Align allocated stacks to arch requirement in
lib/uksched
(#747) by Simon Kuenzer - Fix for .tdata warning (#746) by Marc Rittinghaus
- Cast initrd vbase to
(void *)
in lib/vfscore (#744) by Simon Kuenzer - Fix initrd0 macro in
include/uk/plat
(#742) by Marc Rittinghaus - Fix cmdline parsing in
plat/kvm/x86
(#741) by Marc Rittinghaus - Fix various warnings (#739) by Marc Rittinghaus
- Fix dependency for
nanosleep()
inapp-helloworld
(#13) by Michalis Pappas - Adapt forced polling mode to
uknetdev
flag rename (#30) by Marco Schlumpp - Adapt memory region usage in patch (#7) by Marc Rittinghaus
- Remove hash templates for
pthread_t
(#26) by Dinh Ngoc Tu - Move
_XOPEN_SOURCE
define to library CFLAGS (#33) by Marco Schlumpp - Remove outdated vendored
features.h
(#32) by Marco Schlumpp - Fix typos in the
en/docs/contributing
(#179) by Radu Nichita - Fix kraft via pip installation step (#176) by Martin Kröning
- Ignore md104 rule when inside shortcodes in
github/linter
(#173) by Ștefan Jumărea - github/linter: Remove
.png
keyword ingithub/linter
(#172) by Ștefan Jumărea
A big thank you also to all those who helped in the review process: Gabriel Mocanu, Alexander Jung, Cezar Crăciunoiu, Eduard Vintilă, Marc Rittinghaus, Maria Sfîrăială, Răzvan Deaconescu, Răzvan Vîrtan, Robert Kuban, Sergiu Moga, Simon Kuenzer, Ștefan Jumărea, Vlad Bădoiu, Radu Nichita, Fabian Patraș, Andra Paraschiv, Michalis Pappas, Florin Postolache, Delia Pavel and Marco Schlumpp.
For more information, check out the accompanying blog post or view the full changelog.
- Expose
-
v0.11.0
JanusWe 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.
- Update the scheduling API and thread support. This feature consists of multiple contributions by Simon Kuenzer
-
v0.10.0
PhoebeWe 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 Adina Smeu - Introduce new internal eventpoll API to
vfscore
(#484) by Marc Rittinghaus - Introduction of
posix-event
andepoll*
syscalls (#485) by Marc Rittinghaus and Hugo Lefeuvre - Introduction of
posix-socket
abstraction library (#65) by Alexander Jung and Marc Rittinghaus - Paging support on arm64 based on VMSAv8-64 (#506) by Michalis Pappas
- SMP implementation for x86_64 (#502) by Marc Rittinghaus
- Add
clock_getres
syscall (#503) by Stefan Jumarea - New syscalls and cleanups to
posix-user
(#504) by Marc Rittinghaus - Add option to enforce W^X (
f21273f
via #506) by Marc Rittinghaus - New
rt_sig*
systems registered inuksignal
(#314) by Răzvan Vîrtan
🐛 Bug Fixes & Improvements
- Fix
uktest
to print custom formats (#515) by Florin Postolache - Ignore only unnumbered legacy syscalls in
syscall_shim
(#509) by Răzvan Vîrtan - Fix parsing error in
fdt_get_address
(ofw
device trees) (#507) by Robert Kuban - Solve redefining conflicts in
uksignal
(#453) by Dragos Iulian Argint - Solve redefining conflicts in
vfscore
(#441) by Dragos Iulian Argint - Solve redefining conflicts in
posix-process
(#442) by Dragos Iulian Argint - Fix syscall definitions in
posix-process
(#526) by Dragos Iulian Argint - Force argument order for
uk_vsyscall_r
insyscall_shim
(#512) by Marc Rittinghaus - Fix warnings about unused variables in
plat/arm/lcpu
(#479) by Marc Rittinghaus - Faster builds by considering obj-only libs for linking (#482) by Robert Kuban
- Cleanup GIC-v2/GIC-v3 code (#478) by Marc Rittinghaus
- Fix spinlock headers (#477) by Marc Rittinghaus
- Update reference to
liftoff
(#487) by Simon Kuenzer - Include missing
syscall.h
invfscore
(#527) by Simon Kuenzer - Various fixes/improvements in preparation for new scheduling API (#524) by Simon Kuenzer
- Add data barrier after PTE writes in arm64 (#525) by Aleksandr Iashchenko and Michalis Pappas
- Reorder macros in the linuxu system call header files (#438) by Florin Postolache
- Preserve x18 in exception vectors for arm64 on kvm (#523) by Michalis Pappas
- 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: Gabi Mocanu, Sergiu Moga, Cezar Craciunoiu, Dragos Iulian Argint, Răzvan Vîrtan, Gabriel Mocanu, Stefan Jumarea, Renê de Souza Pinto, Razvan Deaconescu, Simon Kuenzer and Marc Rittinghaus.
For more information, check out the accompanying blog post or view the full changelog.
- Introduction of
-
v0.9.0
HyperionWe 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 Marc Rittinghaus
- Introduce support for ARM64 SMP (#373) by Răzvan Vîrtan
- Introduce the
ukstore
library for static entries (#459) by Cezar Craciunoiu - Register allocator statistics to
ukstore
(#279) by Cezar Craciunoiu - Add Branch Target Identification (BTI) for ARM (#421) by Michalis Pappas
- Unify boot information storage (#406) by Cristian Vijelie
- Allow building GRUB based ISO images (#342) by Aadhithya Kannan
- Enable pl031 for ARM64 (#316) by Razvan Deaconescu
- Ignore unnumbered system calls (#468) by Simon Kuenzer
🐛 Bug Fixes & Improvements
- Remove
__i386__
code (#435) by Sairaj Kodilkar - Fix interprocessor interrupts in gic-v2 (#445) by Răzvan Vîrtan
- Remove
#ifndef CONFIG_PARAVIRT
code (#466) by Stefan Jumarea - Fix fget in
flock()
(#472) by Marc Rittinghaus - Cleanup and upgrade to FDT 45f3d1a (#378) by Michalis Pappas
- Readdir should return error in
errno
invfscore
(#473) by Marco Schlumpp - Update
COPYING.md
with generalized copyright copyright attribution (#456) by Alexander Jung - Replace psci functions with generic SMCCC calls (#428) by Răzvan Vîrtan
- Update
CODEOWNERS
with latest libs and remove reviewer teams (#475) by Alexander Jung
A big thank you also to all those who helped in the review process: Florin Postolache, Andrei Mutu, Cristian Vijelie, Michalis Pappas, Răzvan Vîrtan, Marco Schlumpp, Stefan Jumarea, Cezar Craciunoiu, Renê de Souza Pinto, Sergiu Moga, Marc Rittinghaus, Simon Kuenzer, Razvan Deaconescu
For more information, check out the accompanying blog post or view the full changelog.
-
v0.8.0
EnceladusWe 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 Michalis Pappas
- Virtual Memory API (x86_64, kvm) (#338) by Marc Rittinghaus
- Support for partial checksumming / checksum offloading (#308) by Simon Kuenzer
- Add
uk_event
for new trap interface (#227 #230, #231) by Marc Rittinghaus - Additional interrupt context safe functions (#192) by Cristian Vijelie
- TAP network device driver (#251) by Sharan Santhanam
- Add basic test suite to
ukargparse
(#392 #431) by Stefan Jumarea - Add
uk_list_last_entry_or_null
(#396) by Marc Rittinghaus - Add
mprotect
(#394) by Marc Rittinghaus - Add support for arm64 on linuxu (#418) by Florin Postolache
🐛 Bug Fixes & Improvements
- Rewrite of ubsan library (#404) by Marc Rittinghaus
- Migrate and update docs (#252) by Alexander Jung
- Allow
mkcpio
to quietly gzip compress CPIO images (#359) by Aadhithya Kannan - Enhance arm(64)/x86_64 Bitscan Functions (#395) by Marc Rittinghaus
- Add
getgrgid
to export (#410) by Marc Rittinghaus - Do not invoke
rustc
ifukrust
is not enabled (#403) by Michalis Pappas - Fixes layout of assert table on ARM64 (#397) by Marc Rittinghaus
- Add dependency to
lib/ukalloc
forlinuxu
(#430) by Simon Kuenzer - Fix quoted whitespaces handling (#433) by Stefan Jumarea
- Fix build warning for
_uk_printd
definition (#432) by Gabi Mocanu - Fix build warning for halt definition (#429) by Gabi Mocanu
- Fix build errors introduced by #251 (#412) by Vlad-Andrei Badoiu
- Fix conditional definition of functions (#399) by George Hopkins
- Fix some bugs (#394) by Marc Rittinghaus
- Fix and introduce more range macros (#370) by Simon Kuenzer
- Fixing various bugs (#411) by Marc Rittinghaus
- Complete syscall lists on arm and aarch64 (#423) by Răzvan Vîrtan
- Replace
EDOOFUS
macro (#416) by Florin Postolache - Remove
uk_free
call on request dequeue (#413) by Marco Schlumpp - Move alloc out of critical section in
sys_open
(#408) by Marc Rittinghaus - Use types from
shareddefs.h
(#407) by Marc Rittinghaus - Use non-prototyped no-ops (#405) by Marc Rittinghaus
- Do not pass
-march
with-mcpu
(#368) by Michalis Pappas - Do not allocate IRQ handler entries dynamically (#240) by Hugo Lefeuvre
A big thank you also to all those who helped in the review process: Cristian Vijelie, Michalis Pappas, Marco Schlumpp, Simon Kuenzer, Adina Smeu, Florin Postolache, Gabi Mocanu, Sergiu Moga, Razvan Deaconescu, Stefan Jumarea, Răzvan Vîrtan, Cezar Craciunoiu, Daniel Dinca and Vlad-Andrei Badoiu.
For more information, check out the accompanying blog post or view the full changelog.
-
v0.7.0
MimasWe 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 (@vladandrew, @cffs, @TrueDoctor)
- New documentation + website (@nderjung)
- VSCode IDE extension (@adinasm)
- NS16550 driver (@michpappas)
- ARM GIC V3 support (@rene)
- ARM SMCCC (@michpappas)
- ARM Ticket lockets (@michpappas)
- README updates for configuring, building and running Unikraft applications (@gabrielmocan, @mogasergiu, @FredrikBakken, @StefanJum)
- Version boosts (@FredrikBakken, @razvanvirtan)
- Optional locking to waitq wait event to prevent signal loss (@marcrittinghaus)
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.0
DioneTo 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.0
TethysWe 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.0
Rhea- 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
-
v0.3.1
IapetusThis release is a bugfix that adds support for newlib back to Unikraft. Due to changes in unikraft’s vfscore library, newlib did not properly compile against v0.3. This release fixes this problem.
All xenbits-hosted unikraft repositories (unikraft, newlib, lwip, as well as the example applications helloworld and httpreply) at
RELEASE-0.3.1
tag are compatible with each other and can be built and linked together again. -
v0.3.0
IapetusThis release includes many exciting features; the biggest ones are:
- Xenstore and Xen bus support
- ARM32 support for Xen
- ARM64 support for QEMU/KVM
- X86_64 bare metal support
- Networking support, with virtio drivers
- A lightweight network stack (lwip)
- Initial VFS support along with an in-RAM filesystem