Seoul is a x86 Virtual Machine Monitor including device models and instruction emulator. It is a standalone version of the Vancouver VMM that is included in NUL and was developed mainly by Bernhard Kauer. The combination of NOVA and Vancouver (later Seoul) is described in the following paper by Udo Steinberg and Bernhard Kauer:
NOVA: A Microhypervisor-Based Secure Virtualization Architecture
Additionally, Vancouver is described as part of the dissertation of Bernhard Kauer:
Improving System Security Through TCB Reduction
NUL and the Vancouver project is discontinued. Even so Seoul has been developed originally solely to run with the NOVA hypervisor, nowadays it is also available for seL4 and Fiasco.OC on Genode.
This fork of Seoul is an adjusted version specifically tailored to run with the Genode operating system framework and Sculpt OS. Ready to use Seoul packets for Sculpt OS are available via alex-ab’s index. Note: the other bindings for NUL and NRE of this repository are not maintained nor runnable.
Seoul gets maintained and extended mainly by me on a casual base - as time permits. This repository is referenced as external port via Genode GOA SDK in genode-world and for developer purposes via my chest repository.
Beside keeping it runnable, the noteworthy extensions are the 64 bit guest support added in 2023 and the support of Virtio models for GPU(2D), audio and input in 2021-2022. In 2024 USB support got added. In 2026 virtio filesystem support got added. From time to time I publish on genodians.org updates.
To use it, you first need to obtain a clone of Genode:
! git clone https://codeberg.org/genodelabs/genode.git genode
Please follow the instruction of the Genode OS framework to get ready.
Now, clone the genode-chest.git repository to genode/repos/chest:
! git clone https://github.com/alex-ab/genode-chest.git genode/repos/chest
For enabling the repository, adjust the build-directory configuration etc/build.conf by adding the following line to the ‘REPOSITORIES’ definitions.
! REPOSITORIES += $(GENODE_DIR)/repos/chest
Within the genode directory, create an build directory for x86, e.g.
! tool/create_builddir x86_64
Get the external Seoul port, which is this repository:
! tool/ports/prepare_port seoul
In repos/chest/run you will find various seoul*.run scenarios, e.g. an example invocation is
! make -C build/x86_64 KERNEL=nova run/seoul-auto
For questions please consult github issue tracker of this repository.
List of resources about or mentioning Vancouver respectively Seoul VMM in chronological order:
2025.09 - seL4 summit - Sculpt OS - a dynamic general-purpose OS powered by Genode on seL4
2025.02 - Fosdem 2025 - Celebrating kernel diversity with Genode - (check out pdf presentation)
2024.08 - Genode release - 24.08 - AVX suport
2024.05 - Genode release - 24.05 - USB support
2024.02 - Genode release - 24.02
2023.11 - Genode release - 23.11 - 64bit VM support
2022.11 - Genode release - 22.11 - First virtio models
2020.02 - Genode release - 20.02
2019.08 - Genode release - 19.08
2019.05 - Genodians article - Seoul VMM and the new VM interface
2019.05 - Genode release - 19.05
2019.02 - Fosdem 2019 - Microkernel virtualization under one roof - Dare the impossible
2018.05 - Genode release - 18.05
2015.11 - Genode release - 15.11
2014.11 - Genode release - 14.11
2014.08 - Genode release - 14.08 - SMP for the Seoul VMM
2014.02 - Genode release - 14.02
2013.11 - Genode release - 13.11
2013.08 - Genode release - 13.08
2013.05 - Genode release - 13.05
2013.02 - Genode release - 13.02 - Full virtualization on NOVA/x86
2012.08 - Genode release - 12.08
2011.11 - Genode release - 11.11 - Faithful x86 PC Virtualization enabled by the Vancouver VMM