* Seoul

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 [[https://github.com/TUD-OS/NUL][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:

[[http://os.inf.tu-dresden.de/papers_ps/steinberg_eurosys2010.pdf][NOVA: A Microhypervisor-Based Secure Virtualization Architecture]]

NUL and the Vancouver project is discontinued. Even so Seoul has beend
developed originally solely to run with the NOVA hypervisor, nowadays it is
also available for seL4 and Fiasco.OC on Genode.

This fork of [[https://github.com/TUD-OS/seoul][Seoul]] is an adjusted version
specifically tailored to run with the [[https://genode.org][Genode]] operating
system framework and [[https://genode.org/download/sculpt][Sculpt]] OS.
Ready to use Seoul packets for Sculpt OS are available via
[[https://www.genodians.org/alex-ab/2023-05-09-seoul-23-04][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
[[https://github.com/alex-ab][me]] on a casual base - as time permits.
This repository is referenced as external port via Genode GOA SDK in
[[https://codeberg.org/genodelabs/genode-world][genode-world]] and for
developer purposes via my [[https://github.com/alex-ab/genode-chest][chest]]
repository.

Beside keeping it runnable, the noteworthy extensions are
the [[https://genode.org/documentation/release-notes/23.11#Seoul_virtual_machine_monitor][64 bit guest support]]
added in 2023 and the support of
[[https://genode.org/documentation/release-notes/22.11#Seoul_VMM][Virtio]]
models for GPU(2D), audio and input in 2021-2022.
From time to time I [[https://www.genodians.org/alex-ab/index][publish]]
on [[https://www.genodians.org][genodians.org]] updates.

* Developing Seoul with Genode OS framework

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.
