An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
OSv was originally designed and implemented by Cloudius Systems (now ScyllaDB) however
currently, it is being maintained and enhanced by a small community of volunteers.
If you are into systems programming or want to learn and help us improve OSv, then please
contact us on OSv Google Group forum
or feel free to pick up any good issues for newcomers.
For details on how to format and send patches, please read
this wiki
(we do accept pull requests as well).
OSv
OSv is an open-source versatile modular unikernel designed to run single unmodified
Linux application securely as microVM on top of a hypervisor, when compared to traditional
operating systems which were designed for a vast range of physical machines. Built from
the ground up for effortless deployment and management of microservices
and serverless apps, with superior performance.
OSv has been designed to run unmodified x86-64 and aarch64 Linux
binaries as is, which effectively makes it a Linux binary compatible unikernel
(for more details about Linux ABI compatibility please read
this doc).
In particular, OSv can run many managed language runtimes including
JVM,
Python,
Node.JS,
Ruby, Erlang,
and applications built on top of those runtimes.
It can also run applications written in languages compiling directly to native machine code like
C, C++,
Golang
and Rust
as well as native images produced
by GraalVM
and WebAssembly/Wasmer.
OSv can boot as fast as ~5 ms on Firecracker using as low as 11 MB of memory.
OSv can run on many hypervisors including QEMU/KVM,
Firecracker,
Cloud Hypervisor,
Xen, VMWare,
VirtualBox and
Hyperkit as well as open clouds like AWS EC2, GCE and OpenStack.
For more information about OSv, see the main wiki page
and http://osv.io/.
Building and Running Apps on OSv
To run an application on OSv, one needs to build an image by fusing the OSv kernel, and
the application files together. This, at a high level, can be achieved in two ways, either:
by using the shell script located at ./scripts/build
that builds the kernel from sources and fuses it with application files, or
by using the capstan tool that uses pre-built
kernel and combines it with application files to produce a final image.
If you intend to try to run your app on OSv with the least effort possible, you should pursue the capstan
route. For introduction please read this
crash course.
For more details about capstan please read
this more detailed documentation. Pre-built OSv kernel files
(osv-loader.qemu) can be automatically downloaded by capstan from
the OSv regular releases page or manually from
the nightly releases repo.
If you are comfortable with make and GCC toolchain and want to try the latest OSv code, then you should
read this part of the readme to guide you how to set up your
development environment and build OSv kernel and application images.
Releases
We aim to release OSv 2-3 times a year. You can find the latest one on github
along with several published artifacts including kernel and some modules.
In addition, we have set up Travis-based CI/CD pipeline where each
commit to the master and ipv6 branches triggers full build of the latest kernel and publishes some artifacts to
the nightly releases repo. Each commit also
triggers the publishing of new Docker "build toolchain" images to the Docker hub.
Design
A good bit of the design of OSv is pretty well explained in
the Components of OSv wiki page. You
can find even more information in the original
USENIX paper and its presentation.
In addition, you can find a lot of good information about the design of specific OSv components on
the main wiki page and http://osv.io/ and http://blog.osv.io/.
Unfortunately, some of that information may be outdated (especially on http://osv.io/), so it is always
best to ask on the mailing list if in doubt.
Component Diagram
In the diagram below, you can see the major components of OSv across the logical layers. Starting with libc at the top, which is greatly based on musl, the core layer in the middle comprises ELF dynamic linker, VFS, networking stack, thread scheduler, page cache, RCU, and memory management components. Then finally down, the layer is composed of the clock, block, and networking device drivers that allow OSv to interact with hypervisors like VMware and VirtualBox or the ones based on KVM and XEN.
Metrics and Performance
There are no official up-to date performance metrics comparing OSv to other unikernels or Linux.
In general, OSv lags behind Linux in disk-I/O-intensive workloads partially due to coarse-grained locking
in VFS around read/write operations as described in this issue.
In network-I/O-intensive workloads, OSv should fare better (or at least used to as Linux has advanced a lot since)
as shown with performance tests of Redis and Memcached.
You can find some old "numbers" on the main wiki, http://osv.io/benchmarks, and some papers listed at the bottom of this readme.
So OSv is probably not best suited to run MySQL or ElasticSearch, but should deliver pretty solid performance for general
stateless applications like microservices or serverless (at least as some papers show).
Kernel Size
At this moment (as of December 2022) the size of the universal OSv kernel (loader.elf artifact) built with all symbols hidden is around
3.6 MB. The size of the kernel linked with the full libstdc++.so.6 library and ZFS filesystem library included is 6.8 MB. Please read the Modularization wiki to better understand how kernel can be built and further reduced in size and customized to run on a specific hypervisor or a specific app.
The size of OSv kernel may be considered quite large compared to other unikernels. However, bear in mind that OSv kernel (being unikernel) provides subset of the functionality of the following Linux libraries (see their approximate size on Linux host):
libresolv.so.2 (100 K)
libc.so.6 (2 MB)
libm.so.6 (1.4 MB)
ld-linux-x86-64.so.2 (184 K)
libpthread.so.0 (156 K)
libdl.so.2 (20 K)
librt.so.1 (40 K)
libstdc++.so.6 (2 MB)
libaio.so.1 (1
Read the full README on GitHub