-
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