The releases are planned once every 3 months, in general. You can see the planning for the next release on GitHub.
Yes. Unikraft uses a BSD-3 license, which allows use in commercial products.
Unikraft is used by academic institutions and commercial organizations.
Check out the full list of adopters in the ADOPTERS.md file.
We are are working towards having Unikraft run baremetal.
For more information, check the baremetal-support channel on the Unikraft Discord server.
Also see summaries of baremetal discussions.
Initial work on Raspberry Pi support is available in the corresponding repository.
First, join our community server on Discord. Then, send a Pull Request, if you already have an idea of contribution, or ask the community for some contribuition ideas. For more details, see the Contributing section.
Make sure you understand the work that was submitted. If you have questions, ask the author. Make sure the submitted changes follow the coding-style standards. Then follow the Reviewing documentation to approve the Pull Request.
First, ask in the community about the problem you encountered. Most of the time, the issues are common, and known in the community. You can also do some debugging on your own. For details, see the Debugging section.
Unikraft is lightweight and fast, similar to a container, while having the security of a virtual machine. Best of both worlds. For more details, see the Performance and Security sections.
This is caused by missing KVM support. This may be the case if:
If you are using kraft run, use the -W option to disable KVM support requirement.
If you are using QEMU, be sure to not use the -enable-kvm nor the -accel kvm options.
Firecracker currently requires KVM support;
you can't run it on a KVM-less system.
Use Ctrl+a x (i.e. press Ctrl and a keys simultanously, release, then press x key) to close an open QEMU instance in the terminal.
You can also kill all QEMU instances by running, in another console:
pkill -f qemu-system
There's no keyboard shortcut to stop a running Firecracker instance. You either find out the pid and kill it:
pgrep -f firecrackerkill <PID>
Replace <PID> with the actual PID (Process ID) returned by pgrep.
You can also kill all Firecracker instances by running, in another console:
pkill -f firecracker
If you use Ctrl+c that will close the current KraftKit controlling process, but may not fully remove the runtime information, including potential port mappings and potential started QEMU / Firecracker / Xen processes.
Use --rm as argument to kraft run to remove the underlying runtime when using Ctrl+c.
To list all active / inactive KraftKit instances, use:
kraft ps -a
To stop an instance or all instances, or to remove an instance or all instances use:
kraft stop <instance_name>kraft stop --allkraft rm <instance_name>kraft rm --all
There is another instance running that is using port 8080.
First, check the listening services to detect what is using the port:
netstat -tlpn
That may be a KraftKit instance, a QEMU instance, a Firecracker instance, or something else.
If it's something else, you can kill it by passing the PID to the kill command:
kill <PID>
If it's a KraftKit, QEMU or Firecracker instance using the port, you can check the running state:
kraft ps -aps -ef | grep qemu-systemps -ef | grep firecracker
You can stop them to free the port:
kraft rm <instance_name>kill <qemu_PID>kill <firecracker_PID>
You can also stop all running instances:
kraft rm --allpkill -f qemu-systempkill -f firecracker
This is because you passed the debug image (with the .dbg extension) to QEMU.
You need to pass the actual image (i.e. without the .dgb extension).
The image with the .dbg extension is used by GDB.
See more here.
It's because you don't use KVM support and large pages are required.
Pass the -cpu max option to qemu-system-x86_64.
You need to also pass the tag, the full command should be:
kraft run unikraft.org/<app_name>:<tag>
For example, run:
kraft run unikraft.org/nginx:1.25kraft run unikraft.org/ruby:3.2
If there is an issue with the kraft run commnd, get more info by using the --log-level debug --log-type basic options:
kraft run --log-level debug --log-type basic --rm ...
Note: Place the --log-level debug --log-type basic options immediately after kraft run, as in the command above.
In case of an issue with running QEMU / Firecracker, you should see the generated command line, pointing you to a log file. For example, for QEMU, you will get something like:
qemu-system-x86_64 [...] -serial file:/home/razvand/.local/share/kraftkit/runtime/f93556bb-3cd1-45da-beac-075d1b123a3b/machine.log
The machine.log file may contain useful information related to the runtime issue:
cat /home/razvand/.local/share/kraftkit/runtime/f93556bb-3cd1-45da-beac-075d1b123a3b/machine.log
It's very likely you didn't provide enough memory.
Investigate further by using the --log-level debug --log-type basic options to kraft run:
kraft run --log-level debug --log-type basic --rm ...
Use the -M option to kraft run, e.g.:
kraft run --rm -M 256M unikraft.org/ruby:3.2
As above, it's very likely you didn't provide enough memory.
Use the -M option to kraft run, e.g.:
kraft run --rm -M 256M unikraft.org/ruby:3.2
The app-... repositories are archived and no longer in use.
Visit the catalog repository and see applications and examples there.
Your goal should be to add the appplication to the catalog repository.
Follow these guides:
In its default configuration, KraftKit will start a temporary / transient BuildKit instance.
To speed things up, start a more permanent BuildKit instance that will cache the built filesystems. Follow the instruction here to start a more permanent BuildKit instance.
Use the commands below to clear all KraftKit-related information and then refresh it.
kraft rm --allkraft pkg rm --allrm -fr ~/.local/share/kraftkit/kraft pkg ls --apps --update
Make sure you remove the local configuration and output files beforehand:
rm -f config*rm -fr .unikraft
There are cached version of repositories. You can clean the KraftKit setup with the steps above:
kraft rm --allkraft pkg rm --allrm -fr ~/.local/share/kraftkit/kraft pkg ls --apps --update
Otherwise, request kraft build to use only fresh images:
kraft build --no-cache --no-update ...
Feel free to ask questions, report issues, and meet new people.