owned this note
owned this note
Published
Linked with GitHub
<!-- Important, do not remove the line below before article has been created. -->
{{subst:AfC submission/draftnew}}
{{Infobox OS
| name = Unikraft
| logo = Unikraft Logo.svg
| developer = [[NEC|NEC Laboratories Europe GmbH]]
| working state = Current
| source model = [[Open-source software|Open source]]
| released = {{Start date and age|2017|10|29}}
| latest release version = 0.19.1
| latest release date = {{Start date and age|2025|07|17}}
| repo = {{URL|https://github.com/unikraft/unikraft}}
| marketing target = [[Cloud computing]], [[embedded device]]s, [[server (computing)|servers]]
| supported platforms = [[x86]], [[ARM architecture|ARM]]
| programmed in = [[C (programming language)|C]], [[Assembly language|Assembly]]
| kernel type = [[Unikernel]]
| userland = POSIX subset, custom
| license = [[BSD_licenses#3-clause license ("BSD License 2.0", "Revised BSD License", "New BSD License", or "Modified BSD License")|BSD 3-Clause]]<ref name="github-license">{{cite web|url=https://github.com/unikraft/unikraft/blob/stable/COPYING.md|title=COPYING.md file|via=[[GitHub]]}}</ref>
| website = {{URL|https://www.unikraft.org}}
}}
'''Unikraft''' is an [[open-source software]] project that offers a [[software development kit]] (SDK) for building specialized [[Unikernel|unikernels]].
It is designed for [[Cloud computing|Cloud computing platforms]] and [[Internet of things|and IoT devices]].
The SDK provides a [[Command-line interface|command line]] tool called kraft<ref name=kraft_tool>{{cite web|title=The kraft tool|url=https://unikraft.org/docs/cli/reference/kraft}}</ref> for creating and managing unikernel applications, and for selecting the necessary components for a desired [[Computer architecture|architecture]] and [[Computing platform|platform]].
== History ==
Unikraft began as a [[Research|research project]] at [[NEC|NEC Laboratories Europe GmbH]] (NLE) in [[Heidelberg]], [[Germany]].<ref name=unikraft_NECLabs>{{cite web|title=Unikraft Project, NEC Laboratories|url=https://web.archive.org/web/20221127042825/http://sysml.neclab.eu/projects/unikraft/|accessdate=27 November 2022}}</ref>
The project was officially introduced on December 5, 2017, as an incubation project under the [[Xen|Xen Project]], which is hosted by [[The Linux Foundation]].<ref name=unikraft_XenProject>{{cite web|title=Unikraft - Xen Project|url=https://xenproject.org/projects/unikraft/}}</ref><ref name=unikraft_intro_XenProject>{{cite web|title=Xen Project Introduces the Unikraft Unikernel Project|url=https://www.linuxfoundation.org/press/press-release/xen-project-introduces-unikraft-unikernel-project}}</ref>
The project aimed to address the growing need for lightweight, specialized operating systems that could run efficiently on modern cloud infrastructure.
The motivation behind Unikraft was to make unikernel technology more accessible by enabling the construction of highly customized OS and kernel images.
This approach is designed to provide significant benefits in performance, security, and efficiency for cloud-native and containerless applications.
The first stable release of Unikraft was made available in 2020, marking a significant milestone in its development.
Over the years, the project has evolved through contributions from a diverse global community of developers and researchers.
During its development, it has received significant contributions from both core maintainers at NLE and research students at [[Politehnica University of Bucharest]], [[Lancaster University]], [[Manchester University]] and [[University of Liège]].
== Usecases ==
Unikraft is designed for a variety of use cases where high performance, security, and efficiency are critical. These include:
* '''Cloud and Edge Computing''': Unikraft's small footprint and fast boot times make it suitable for deploying applications in cloud and edge environments.<ref name=unikraft_repo>{{cite web|title=Unikraft on GitHub|url=https://github.com/unikraft/unikraft|via = [[GitHub]]}}</ref>
* '''Microservices''': The lightweight nature of unikernels is well-suited for building and deploying microservices.<ref name=unikraft_XenProject />
* '''Embedded and IoT Devices''': Unikraft can be used to create highly specialized and efficient operating systems for resource-constrained embedded and IoT devices.<ref name=unikraft_XenProject />
* '''Automotive''': The project has also seen interest from the automotive industry.<ref name=unikraft_XenProject />
== Design ==
=== Binary Compatibilty ===
One of Unikraft's key features is its ability to run unmodified Linux applications in a "binary compatibility" mode.<ref name=uk_binary_compatibility>{{cite web|title=Binary Compatibility|url=https://unikraft.org/guides/bincompat}}</ref>
This capability is significant because it lowers the barrier to adopting unikernel technology by removing the often-difficult requirement of porting applications to a new environment.<ref name=uk_binary_compatibility />
This is achieved through a specialized elfloader application, which loads and executes standard [[Executable and Linkable Format|ELF]] binaries compiled for Linux.<ref name=uk_binary_compatibility />
To use this feature, a developer packages the application binary and its required libraries into a filesystem, such as a cpio archive, which is then provided to the Unikraft unikernel at runtime.<ref name=uk_binary_compatibility />
This allows even [[Proprietary software|closed-source]] applications to be run on Unikraft, as no source code modifications are necessary.
In contrast to the binary compatibility mode, the native approach involves compiling an application's source code directly with the Unikraft libOS components.
In this mode, the application and the necessary operating system libraries are linked together at compile time to create a single, highly specialized machine image.
This method provides the greatest benefits in terms of performance, security, and resource efficiency, as the resulting unikernel contains only the code essential for the application to run, resulting in a minimal attack surface and the smallest possible image size.
=== Kraft Toolkit ===
The <code>kraft</code> command-line tool simplifies the process of building, running, and managing Unikraft unikernels.
It provides an intuitive interface for selecting libraries, configuring the kernel, and generating images for various platforms.
<code>kraft</code> can be installed via an interactive installer and is designed to be familiar to developers who have experience with container tools like [[Docker_(software)|Docker]].<ref name=unikraft_repo /><ref name=kraft_tool />
=== Modularity and Libraries ===
At the core of Unikraft is a [[Library (computing)|library]]-based operating system (libOS) architecture.
This means that operating system components are provided as a collection of libraries that can be selected and configured at build time.
This allows for a high degree of customization, as developers can include only the components that are necessary for their application.
This results in smaller image sizes, reduced attack surfaces, and improved performance.<ref name=unikraft_concepts>{{cite web|title=Concepts of Unikraft|url=https://unikraft.org/docs/concepts}}</ref>
=== Main Libraries of Unikraft ===
<!-- TODO: anything else to add here? -->
{| class="wikitable"
|-
! Library !! Description
|-
| '''vfscore'''<ref name=uk_vfscore_on_github>{{cite web|title=vfscore library on GitHub|url=https://github.com/unikraft/unikraft/tree/staging/lib/vfscore|via=[[GitHub]]}}</ref> || Provides a virtual file system layer, allowing for the use of various file systems.
|-
| '''uknetdev'''<ref name=uk_uknetdev_on_github>{{cite web|title=uknetdev library on GitHub|url=https://github.com/unikraft/unikraft/tree/staging/lib/uknetdev|via=[[GitHub]]}}</ref> || A network device API that provides a unified interface to network devices.
|-
| '''ukbus'''<ref name=uk_ukbus_on_github>{{cite web|title=ukbus library on GitHub|url=https://github.com/unikraft/unikraft/tree/staging/lib/ukbus|via=[[GitHub]]}}</ref> || A bus API that allows for the registration and management of devices.
|-
| '''syscall-shim'''<ref name=uk_syscall-shim_on_github>{{cite web|title=syscall-shim library on GitHub|url=https://github.com/unikraft/unikraft/tree/staging/lib/syscall_shim|via=[[GitHub]]}}</ref> || A library that provides a POSIX-compatible system call interface.
|}
== Community ==
As of August 2025, the project has over 3200 stars on [[GitHub]] and over 100 contributors.<ref name=unikraft_repo />
The community of Unikraft is organized on a [[Discord]] server, where there are channels for the main subsystems of the project.
Furthermore, on the Discord server, there are multiple meetings (general ones - called "community meetings" and thematic ones, specific per each track of the roadmap <ref name=roadmap>{{cite web|title=Unikraft Core Roadmap|url=https://github.com/orgs/unikraft/projects/24/views/1|via=[[GitHub]]}}</ref>), where any participant could attend.<ref name=unikraft_discord>{{cite web|title=Unikraft Discord Server|url=https://unikraft.org/discord}}</ref>
The project organizes regular hackathons, which are hybrid events with the physical component often hosted at the [[Politehnica University of Bucharest]].
These hackathons provide an opportunity for new and existing community members to collaborate and contribute to the project.<ref name=hackathons_and_workshops>{{cite web|title=Unikraft Hackathos and Workshops|url=https://unikraft.org/hackathons}}</ref>
=== Google Summer of Code ===
Unikraft has been a participating organization in the [[Google Summer of Code]] (GSoC) since 2022.
The project has hosted a number of students working on various aspects of the Unikraft ecosystem.<ref name=unikraft@GSoC22>{{cite web|title=Unikraft - Google Summer of Code 2022|url=https://summerofcode.withgoogle.com/archive/2022/organizations/unikraft}}</ref><ref name=unikraft@GSoC23>{{cite web|title=Unikraft - Google Summer of Code 2023|url=https://summerofcode.withgoogle.com/archive/2023/organizations/unikraft}}</ref><ref name=unikraft@GSoC24>{{cite web|title=Unikraft - Google Summer of Code 2024|url=https://summerofcode.withgoogle.com/archive/2024/organizations/unikraft}}</ref><ref name=unikraft@GSoC25>{{cite web|title=Unikraft - Google Summer of Code 2025|url=https://summerofcode.withgoogle.com/programs/2025/organizations/unikraft}}</ref>
=== Summer Workshops ===
During the summer, Unikraft also organizes multi-week virtual hackathons.
These online events are led by members of the community and are designed to facilitate collaboration on specific projects over a period of three weeks.<ref name=hackathons_and_workshops />
== Apps, Frameworks and Languages support ==
Unikraft provides extensive support for a wide range of popular programming languages, allowing developers to build unikernels for new or existing applications without needing to change their preferred language.
This is made possible by porting common language runtimes and libraries to the Unikraft ecosystem.<ref name=official_website>{{cite web|title=Official Unikraft website|url=https://unikraft.org/}}</ref><ref name=catalog>{{cite web|title=Unikraft Applications & Examples Catalog|url=https://github.com/unikraft/catalog|via=[[GitHub]]}}</ref>
The official Unikraft application catalog provides pre-built, ready-to-run images for many languages and frameworks.<ref name=catalog />
== Hypervisor support ==
Unikraft unikernels can be run on a variety of [[Hypervisor|hypervisors]], including:
* [[Xen]]
* [[Kernel-based Virtual Machine|KVM]]
* [[Firecracker (software)|Firecracker]]
== Hardware support ==
<!-- TODO: RISC-V status? -->
The current version of Unikraft SDK may build unikernels that are capable of running on [[x86]] and [[ARM architecture family|ARM]] architectures.
The support for [[RISC-V]] is currently under development.
== Tools ==
The main tools for working with Unikraft are:
* '''kraft''': A command-line tool for building, running, and managing Unikraft unikernels. <ref name="kraft_tool>{{cite web|title=The kraft tool|url=https://unikraft.org/docs/cli/reference/kraft}}</ref>
* '''menuconfig''': A configuration tool based on the Linux kernel's kconfig system, which allows for detailed configuration of the unikernel.<ref name="uk_build_system>{{cite web|title=Build System of Unikraft|url=https://unikraft.org/docs/internals/build-system}}</ref>
== Categories ==
{{FOSS}}
{{Operating system}}
<!-- [[Category:Computing platforms]]
[[Category:Cloud platforms]]
[[Category:Free software programmed in C]]
[[Category:Operating systems]] -->
== References ==
{{reflist}}
== External links ==
* [https://www.unikraft.org Official website]
* [https://unikraft.org/community/papers Peer-reviewed Papers & Publications]
* [https://www.github.com/unikraft/unikraft Unikraft] on [[GitHub]]
* [https://www.youtube.com/@unikraft Unikraft] on [[YouTube]]
* [https://www.twitter.com/UnikiraftSDK Unikraft] on [[Twitter]]