
                             ========
                             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 2020
##############

The overarching theme of our road map for 2020 was "Dwarfing the barrier of
entry", which expressed the ambition to reach a wider audience. On that
account, we identified four promising directions: First, making Sculpt OS
palatable for a wider circle. Second, fostering the public perception of the
high quality of Genode to reinforce the confidence of people who are sceptical
towards novel operating-system technology. Third, lowering the barrier of
entry by providing frictionless tooling. And fourth, publicly presenting use
cases that prove the fitness and flexibility of Genode. These directions
certainly did a good job of motivating the working topics of last year's four
releases
[https://genode.org/documentation/release-notes/20.02 - 20.02],
[https://genode.org/documentation/release-notes/20.05 - 20.05],
[https://genode.org/documentation/release-notes/20.08 - 20.08], and
[https://genode.org/documentation/release-notes/20.11 - 20.11].

The UI improvements of Sculpt OS in version 20.02 largely eliminated the need
to use the command line as presented
[https://www.youtube.com/watch?v=vmgWgzeKAjU - here].
The second direction - software quality - motivated the steady improvements of
our POSIX runtime, ultimately enabling highly sophisticated workloads like the
Chromium web engine on Genode. Regarding our stated commitment to 64-bit ARM
hardware, in particular supporting the NXP i.MX8 SoC, we covered 64-bit
multi-core virtualization, HDMI, touch input, OLED, networking, LTE, USB,
clock and power management, VirtIO, up to running Sculpt OS on this platform.

Granted, Genode's audience hasn't increased by a large margin as a direct
result of these efforts. But as illustrated by the fruitful road-map
discussion for 2021 on the
[https://genode.org/community/mailing-lists - mailing list],
our community is more engaged and enthusiastic than ever before.


2021 - Optimization and Platform diversity
##########################################

For the initial conquering of 64-bit ARM territory, restraining our focus to
one particular SoC - namely NXP i.MX8 - was a healthy approach. Now it is the
right time to optimize and to branch out the development to further
platforms. The following key aspects of our road map for 2021 reflect that.

:Pinephone:
  By the end of the year, we want be able to use Genode on the
  [https://pine64.com/product-category/pinephone/ - Pinephone]
  as a feature phone, covering basic web-browsing needs, placing calls, and
  SMS.

:Linux-device-driver environment re-imagined:
  We are convinced that we have to dramatically reduce the engineering
  effort needed to port device drivers from the Linux kernel to Genode. With
  many years of driver-porting experience under our belts, we plan to condense
  the lessons learned in the form of new tooling and documentation. This, in
  turn, will hopefully pave the ground for more and more developers
  contributing to Genode's device-driver coverage in the future.

:Developer experience:
  Speaking of new developers, we see Genode's existing tool set as a barrier
  because it requires a rather steep learning curve. Hence, this year, we will
  have a fresh take on tooling and workflows. The starting point will be the
  experimental [https://github.com/nfeske/goa - Goa] tool, which in principle
  allows developers to use familiar build systems for Genode development. We
  plan to extend Goa to cover more build systems, and shape the tool towards
  system-integration tasks and quick compile-test cycles targeting embedded
  devices.

:Optimization:
  Motivated by usage scenarios like the Pinephone, we are eager to tap into
  plenty of opportunities for optimization. Based on data gathered by improved
  system tracing, we consider interface refinements to improve the batching of
  I/O (file-system access, networking), micro-optimizations of hot code paths
  (like TLS lookup, parsers, and allocators), as well as structural changes
  (like the consolidation of low-level services).

:GPU support:
  Distantly related to optimization, GPU support is an increasingly requested
  feature. We already
  [https://genode.org/documentation/release-notes/17.08#Hardware-accelerated_graphics_for_Intel_Gen-8_GPUs - wetted our toes]
  in the past. But GPU support has not yet become routinely supported in
  system scenarios like Sculpt OS. In 2021, we want to change that, making GPU
  support a feature that can be relied on. We will primarily address Intel
  graphics first but also explore GPUs on ARM-based devices.


Milestones for 2021
###################

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 21.02
========================

* Pluggable device drivers (NIC, WLAN, framebuffer, input)
* VirtualBox 6
* Sculpt: basic UI for the consistent block encrypter (CBE)
* 64-bit ARM
  * VirtIO block-device support for virtual machines
  * Base platform support for the Pine A64 board (kernel base framework)


May - Release 21.05
===================

* Annual documentation update, including the "Genode Foundations" book
* GPU support
  * MESA update
  * Experiments on ARM (e.g., Vivante on i.MX8, or Mali-400 on A64)
* Sculpt OS on Pine A64 (USB, input, framebuffer, SD-card, networking)
* 64-bit ARM
  * Platform-driver consolidation between ARM and x86
  * PCI-express support for MNT Reform (i.MX8)
* Tool-chain update (e.g., switching to hard-float on ARM)
* Modernized client-side NIC and uplink APIs
* Goa
  * Broadened architecture support and testing workflow
  * API projects
  * Inter-project dependencies


August - Release 21.08
======================

* Linux DDE re-imagined
  * Improved tooling
  * Exploring Goa-based development workflow
* GPU support
  * GPU multiplexer for Intel Gen9 graphics
  * Harmonization of GPU driver with Intel framebuffer driver
* Initial version of a custom kernel (Spunky) implemented in Ada/SPARK
* System-level tracing infrastructure for guiding and validating optimizations
* Pinephone
  * Touchscreen and display
  * Mobile web browser
* Goa
  * CMake-based Qt5 applications
  * QML-based applications


November - Release 21.11
========================

* Pinephone
  * Mobile data connectivity (LTE)
  * Phone calls (audio)
  * SMS
* seL4
  * Update to current kernel version, MCS scheduling
  * Combining CAmkES with Genode
* SMMU (I/O-MMU for ARM) support for our custom (base-hw) kernel
* Multi-monitor support

