
                             ========
                             Road Map
                             ========


Herein, we lay out our plans for evolving Genode. Progress in addition to this
planning will very much depend on the degree of community support the project
will receive. The
[https://genode.org/about/challenges - Challenges] page collects some of our
ideas to advance Genode in various further directions.

The road map is not fixed. If there is commercial interest of pushing the
Genode technology to a certain direction, we are willing to revisit our plans.


Review of 2022
##############

The two main topics of 2022 went hand in hand. First, we reimagined Genode's
driver landscape across x86 and ARM, universally adopting a new method of
reusing Linux drivers to great success, and rigidly applying the framework's
security architecture to driver components. This effort unlocked the second
major achievement, namely the use of Genode as mobile OS on the PinePhone.

Following the introduction of Genode's rigid driver architecture on ARM
platforms in 2021, we took the year 2022 as opportunity to consistently
establish this architecture across all platforms.
We conquered the convoluted world of x86 in greater depth than ever before,
leaving almost no stone unturned. On top of the new architecture, we built an
arsenal of fresh driver components, most of them based on our Linux
device-driver environment. Other drivers had been written from scratch
specifically for Genode, most prominently our custom Intel GPU multiplexer
that covers recent hardware generations like Intel Alderlake and Tigerlake.

Our intense engagement with the PinePhone was driven by the vision of a
Genode-based smartphone. It entailed the enablement of device hardware ranging
from touch screen, over power management, audio, storage, telephony, camera,
GPU, to mobile-data connectivity. The challenge of getting the hardware to
cooperate was met by the challenge of enabling meaningful application
workloads. The ability to run the Chromium-based morph browser directly on
Genode on the PinePhone is certainly the most prolific result. Moreover, we
haven't merely managed to get it to work, but we gained detailed guidance
material ([https://genode.org/documentation/genode-platforms-22-05.pdf - PDF])
along the way, lowering the barrier of entry for others who wish to port
Genode to further mobile platforms in the future.

Besides these two main lines of development, 2022 was packed with further
intriguing topics as well. To name a few, we combined Genode with FPGAs for
new hardware-software co-design opportunities, enabled the use of
WireGuard-based virtual private networks, experimented with hardware security
modules, and explored suspend/resume functionality on PC hardware.
The [https://genode.org/documentation/release-notes/index - documentation] of
the four releases of 2022 presents the whole picture.


2023 - Rocking the platforms we support!
########################################

Genode has already come a long way to support a variety of device form factors
ranging from the embedded appliances, over the PinePhone, to PC hardware.
With the term "support", we used to refer to the principle use of fundamental
platform features like storage, networking, display, audio, or USB. The needs
of most real-world scenarios, however, go beyond those functional basics.
Think of suspend/resume, quick boot times, the deliberate management of
energy-efficient versus high-performance CPU cores, prolonged standby,
bounded audio latency, scaling down (towards microcontrollers), and
scaling up (towards edge-computing platforms).

In 2023, we are going to move from making things work to making things rock!

Specifically, to rock the PinePhone, we will invite the community to
participate in multiple rounds of field tests, allowing us to enable and
refine advanced features, like prolonged standby, in an iterative way.

Regarding the PC, we aim at leveraging the different power characteristics
of CPU cores found in modern Intel platforms, step up our game regarding GPU
support (peeking at Vulkan), and making suspend/resume a regular feature that
just works.

These efforts will be flanked by continuous architectural work that will make
the framework ever cleaner and leaner, e.g., by reducing the reliance on
complex C++ features like exceptions, and continuously simplifying the
framework fundamentals and interfaces. On our mission to attain least
complexity of the base system, we strive to host the fully featured PC version
of Sculpt OS on Genode's custom-tailored microkernel by the end of the year.

In addition to the overarching theme outlined above, the following additional
topics stood out during our yearly brainstorming session on the mailing list.
First, several developers expressed their curiosity in working on AMD graphics
(display and GPU) as a side activity. A second recurring topic was the
usability of Genode as desktop OS, easing the work with files on Sculpt,
supporting Drag'n'Drop, tightening the work-flow integration of app-VMs
using the light-weight Seoul VMM, or the use of Qemu on top of Genode for
cross development.
Even though those topics are absent from the timeline below, we can expect
improvements in these areas throughout the year.


Milestones for 2023
###################

In the following, we present a rough schedule of the planned work. As usual,
it is not set in stone. If you are interested in a particular line of work,
please get in touch.


February - Release 23.02
========================

* Mobile version of Sculpt OS (PinePhone)
  * Ready-to-use system image for first field test
  * Quick switch between different system scenarios as presets
  * On-target system update
  * Boot optimization
* Goa support for porting 3rd-party libraries to Genode
* Improved I/O performance (Intel GPU buffer management, VFS I/O batching,
  TCP throughput)
* Custom IP block for DMA protection on Xilinx Zynq
* PC suspend/resume mechanism for the base-hw kernel
* Optimized base-hw multimedia support (kernel scheduling, latency)
* Completed driver support for MNT Reform 2 laptop (i.e., Wifi)
* Interactive graphical VMs on ARM


May - Release 23.05
===================

* Updated "Genode Foundations" book
* Tool-chain update, switch to C++20 by default
* Mobile version of Sculpt OS (PinePhone)
  * First system image fit for general use
  * Reuse of an existing SDK for building applications
  * Integration of file vault and WireGuard
  * Prolonged standby mode
  * Easy installation of user-supplied applications
  * Wifi
* Principle x86 virtualization support for base-hw kernel (on Qemu)
* Base-hw kernel support for the tracing of scheduling events
* Updated DDE-Linux based driver for USB HID and USB network
* Replacing iPXE network driver by DDE-Linux-based driver
* Revision of the consistent block encrypter (CBE) + usability improvements
* Goa support for building simple Rust programs for Genode


August - Release 23.08
======================

* Improved PC platform support
  * Pre-boot ACPI discovery, sandboxing of ACPICA
  * Device & driver restart and/or resume support after ACPI wakeup
  * Support for I2C based HID devices in Intel GEN12 (e.g., touchpad)
  * Management of efficient/performance cores on Intel GEN12
* Mobile version of Sculpt OS (PinePhone)
  * File-management functionality
  * Support for receiving and sending SMS messages
* User-level IPv6 routing (using IPv6 by VMs)
* VirtualBox on Intel hardware running on the base-hw kernel
* DDE-Linux update to kernel version 6.x
* System wind-down protocol (component life-cycle management)
* Exemplary port of non-trivial Rust-based application using Goa
* Revival of GDB monitor (update, making it easier to use)


November - Release 23.11
========================

* Feature-complete PC version of Sculpt OS on the base-hw kernel
  * IOMMU handled in platform driver
* Suspend/resume for Sculpt OS on the PC
* Mobile version of Sculpt OS (PinePhone)
  * GPS, compass
  * Open-street-map client
* IPv6 protocol stack (lxIP update, using IPv6 by native applications)
* Revised audio (timing robustness, pluggable drivers, sample-rate conversion)
* Dynamic VFS configuration

