=======================================
                 Future Challenges of the Genode project
                 =======================================


Abstract
########

This document compiles various ideas to pursue in the context of Genode. It is
meant as source of inspiration for individuals who are interested in getting
involved with the project and for students who want to base their student
research projects on Genode.


Applications and library infrastructure
#######################################

:Port of the Ladybird web browser:

  [https://ladybird.org/ - Ladybird] is a new web browser developed
  independently from the large browser-engine vendors. It is designed to
  be light-weight and portable. Among the supported platforms is Qt,
  which is available for Genode. This makes the porting of Ladybird a
  tempting application of the Goa SDK.

:Goa SDK running on Sculpt OS:

  Genode's [https://github.com/genodelabs/goa - Goa SDK] is currently used
  in Linux-based development environments, facilitating cross-compilation
  to Genode. The goal of this project is the ability to use Goa directly on
  Sculpt OS without the need for a Linux VM. This entails a number of
  challenges, ranging from running the Goa tool itself by porting the expect
  interpreter, over running the Genode tool chain, adjusting the
  network-facing Goa commands to Genode's environment, to crafting custom
  support for executing 'goa run' as a sandboxed Genode subsystem.

:Interfacing with the SAFE network:

  The [https://safenetwork.org/ - SAFE network] is an attempt to fix many
  shortcomings of the internet - in particular with respect to privacy and
  freedom - at an architectural level. It is a peer-to-peer communication
  and storage network that does not depend on single point of
  failure or control. It is intriguing to explore the opportunity of
  integrating support for the SAFE network not merely as an application but
  integrated in the operating system, i.e., in the form of Genode components
  or a set of Genode VFS plugins.

:Graphical on-target IPC tracing tool using Qt:

  Analysing the interaction of components of a multi-server operating system
  such as Genode is important to discover bottlenecks of the system and for
  debugging highly complex usage scenarios involving many processes. Currently,
  Genode handles this problem with two approaches. First, Genode's
  recursive structure enables the integration of a subsystem in a basic
  OS setup featuring only those drivers and components used for the particular
  subsystem. After the successful integration of such a subsystem, it can
  be embedded into a far more complex application scenario without any changes.
  With this approach, the subject to analyse can be kept at a reasonable level
  at integration time. For debugging purposes, the current approach is using
  the debugging facilities of the respective base platforms (e.g., using
  GDB on Linux, the Fiasco kernel debugger, the OKL4 kernel debugger).

  However, in many cases, bottlenecks do not occur when integrating individual
  sub systems but after integrating multiple of such subsystems into a large
  application scenario. For such scenarios, existing debugging methodologies do
  not scale. A tool is desired that is able to capture the relationships
  between processes of a potentially large process hierarchy, to display
  communication and control flows between those processes, and to visualize the
  interaction of threads with the kernel's scheduler.

  Since Qt is available natively on Genode, the creation of both offline and
  on-target analysis tools has become feasible. The first step of this project
  is creating an interactive on-target tool, that displays the interaction
  of communicating threads as captured on the running system. The tool should
  work on a selected kernel that provides a facility for tracing IPC messages.

  The underlying light-weight tracing infrastructure is
  [https://genode.org/documentation/release-notes/19.08#Tracinghttps://genode.org/documentation/release-notes/19.08#Tracing - already in place].
  The Qt-based tracing tools would complement this infrastructure with
  an interactive front end.

:Ports of popular software:

  The [https://github.com/genodelabs/goa - Goa SDK] streamlines the process
  of developing, porting, packaging, and publishing software for Genode,
  and Sculpt OS in particular.
  Thanks to the C runtime, the flexible per-component VFS, the standard
  C++ library, and a variety of supported 3rd-party libraries, porting
  software to Genode is relatively straight forward.
  A wish list of software that we'd like to have available on Genode is
  available at
  [https://usr.sysret.de/jws/genode/porting_wishlist.html].

:Native Open-Street-Maps (OSM) client:

  When using Sculpt OS, we regularly need to spawn a fully fledged web browser
  for using OSM or Google maps. The goal of this project would be a native
  component that makes maps functionality directly available on Genode,
  alleviating the urge to reach for a SaaS product. The work would include a
  review of existing OSM clients regarding their feature sets and the
  feasibility of porting them to Genode. Depending on the outcome of this
  review, an existing application could be ported or a new component could be
  developed, e.g., leveraging Genode's Qt support.


Application frameworks and runtime environments
###############################################

:GTK:

  Genode supports Qt as a native toolkit. But many popular applications
  are built upon [https://www.gtk.org/ - GTK]. A port of GTK to Genode would
  allow for the use of these applications on Sculpt OS without the need
  of a Linux VM. A tangible goal for this line of work could be the port
  of [https://mtpaint.sourceforge.net/ - mtPaint] to Sculpt OS.

:OpenJDK:

  [https://openjdk.java.net/ - OpenJDK] is the reference implementation of the
  Java programming language and hosts an enormous ecosystem of application
  software.

  Since
  [https://genode.org/documentation/release-notes/19.02#Showcase_of_a_Java-based_network_appliance - version 19.02], 
  Genode features a port of OpenJDK that allows the use of Java for networking
  applications.

  The next step would be the creation of Genode-specific native classes that
  bridge the gap between the Java world and Genode, in particular the glue
  code to run graphical applications as clients of Genode's GUI server. Since
  OpenJDK has been ported to numerous platforms (such as Haiku), there exists
  a comforting number of implementations that can be taken as reference.

:Android's ART VM natively on Genode:

  ART is a Java virtual machine that is used for executing applications on
  Android. By running ART directly on Genode, the Linux kernel could be
  removed from the trusted computing base of Android, facilitating the use of
  this mobile OS in high-assurance settings.

:Runtime for the D programming language:

  The D systems programming language was designed to overcome many gripes that
  exists with C++. In particular, it introduces a sane syntax for meta
  programming, supports unit tests, and contract-based programming. These
  features make D a compelling language to explore when implementing OS
  components. Even though D is a compiled language, it comes with a runtime
  providing support for exception handling and garbage collection. The goal of
  the project is to explore the use of D for Genode programs, porting the
  runtime to Genode, adapting the Genode build system to accommodate D
  programs, and interfacing D programs with other Genode components written in
  C++.

:Xlib compatibility:

  Developments like Wayland notwithstanding, most application software on
  GNU/Linux systems is built on top of the Xlib programming interface.
  However, only a few parts of this wide interface are actually used today.
  I.e., modern applications generally deal with pixel buffers instead of
  relying on graphical drawing primitives of the X protocol. Hence, it seems
  feasible to reimplement the most important parts of the Xlib interface to
  target Genode's native GUI interfaces (nitpicker) directly. This would
  allow us to port popular application software to Sculpt OS without
  changing the application code.

:Bump-in-the-wire components for visualizing session interfaces:

  Genode's session interfaces bear the potential for monitoring and
  visualizing their use by plugging a graphical application
  in-between any two components. For example, by intercepting block
  requests issued by a block-session client to a block-device driver,
  such a bump-in-the-wire component could visualize
  the access patterns of a block device. Similar ideas could be pursued for
  other session interfaces, like record/play (sound visualization) or NIC
  session (live visualization of network communication).

  The visualization of system behavior would offer valuable insights,
  e.g., new opportunities for optimization. But more importantly, they
  would be fun to play with.


Platforms
#########

:Support for additional ARM SoCs:

  Genode's ARM support has been focused on NXP's i.MX family, Allwinner A64
  (used by the PinePhone), and to a lesser degree the Raspberry Pi. To make
  Genode compatible with a larger variety of devices, the support for further
  chip families calls for exploration. For example,
  [https://en.wikipedia.org/wiki/Rockchip - Rockchip] SoCs are getting
  popular in products by open-source hardware vendors such as
  [https://pine64.com/ - Pine64] and [https://mntre.com/ - MNT].
  The first steps have been [https://github.com/mickenx/genode-rockchip - already taken]
  by [https://genodians.org/mickenx/index - Michael Grunditz]!
  Another example is the Mediatek SoC family, which is popular in
  affordable consumer smartphones.
  Another example is the Mediatek SoC family, which is popular in
  affordable consumer smartphones.

  The process of bringing an OS like Genode to a new SoC is full of technical
  challenges and labor-intensive, yet extremely gratifying.
  As a guide through this process, the
  [https://genode.org/documentation/genode-platforms-23-05.pdf - Genode Platforms]
  book breaks the challenge down to a sequence of manageable steps, where
  each step can be celebrated as a success.


Virtualization
##############

:Genode as virtualization layer for Qubes OS:

  [https://www.qubes-os.org/ - Qubes OS] is a desktop operating system
  that follows the principle of security through compartmentalization.
  In spirit, it is closely related to Genode. In contrast Genode's
  clean-slate approach of building a fine-grained multi-component system,
  Qubes employs Xen-based virtual machines as sandboxing mechanism. In
  [https://blog.invisiblethings.org/2015/10/01/qubes-30.html - version 3.0],
  Qubes introduced a Hypervisor Abstraction Layer, which decouples Qubes
  from the underlying virtualization platform. This exploration project
  pursues the goal of replacing Xen by Genode as virtualization layer
  for Qubes.

:Qemu:

  As we use Qemu as primary testing platform for most of the kernels, a port
  of Qemu to Genode is needed in order to move our regular work flows to
  Genode as development platform. The basic prerequisites namely libSDL and a
  C runtime are already available such that this porting work seems to be
  feasible. In our context, the ia32, amd64, and ARM platforms are of most
  interest. Note that the project does not have the immediate goal of
  using hardware-based virtualization. However, if there is interest,
  the project bears the opportunity to explore the provisioning of the
  KVM interface based on Genode's VFS plugin concept.


System management and tools
###########################

:Virtual network-boot infrastructure as Sculpt component:

  Network-based development work flows for PCs require a variety of tools and
  network-configuration peculiarities. Think of a development network with a
  custom configured DHCP server, a TFTP or HTTP server on the development
  machine, the provisioning of a PXE boot loader, tooling for obtaining serial
  output over AMT, or tooling for remote power control via AMT.

  The goal of this project would be the hosting of all those functions in a
  Sculpt OS component "devnet" that is exclusively in charge of a dedicated
  LAN port of the developer's Sculpt machine. By connecting a test machine to
  this LAN port, the test machine becomes immediately available as development
  target without any manual installation or configuration steps needed. The
  devnet component would interface with the rest of the Sculpt system as a
  client of a file-system session (containing the boot payloads) and a
  terminal session (for the virtual serial connection).

:Statistical profiler using Sculpt's GDB monitor:

  Starting with version 24.04, Sculpt OS provides the ability to supervise
  selected components
  [https://genodians.org/chelmuth/2024-05-17-on-target-debugging - using the GDB protocol].
  The underlying mechanism and infrastructure could be leveraged for
  implementing a statistical profiler that monitors components live.
  Using the on-target information obtained via Sculpt's "download debug info"
  option, the tool could display a sorted list of the most executed
  functions, facilitating interactive on-target analysis and experimentation.

:Remote management of Sculpt OS via Puppet:

  [https://en.wikipedia.org/wiki/Puppet_(company)#Puppet - Puppet] is a
  software-configuration management tool for administering a large amount
  of machines from one central place. Genode's
  [https://genode.org/download/sculpt - Sculpt OS] lends itself to such
  an approach of remote configuration management by the means of the
  "config" file system (for configuring components and deployments) and
  the "report" file system (for obtaining the runtime state of components).
  The project would explore the application of the Puppet approach and tools
  to Sculpt OS.