Introducing a radically componentized GUI architecture Norman Feske - - PowerPoint PPT Presentation

introducing a radically componentized gui architecture
SMART_READER_LITE
LIVE PREVIEW

Introducing a radically componentized GUI architecture Norman Feske - - PowerPoint PPT Presentation

Introducing a radically componentized GUI architecture Norman Feske < norman.feske@genode-labs.com > Outline 1. Starting point 2. Ingredients 3. Challenges and solutions 4. Next steps Introducing a radically componentized GUI


slide-1
SLIDE 1

Introducing a radically componentized GUI architecture

Norman Feske <norman.feske@genode-labs.com>

slide-2
SLIDE 2

Outline

  • 1. Starting point
  • 2. Ingredients
  • 3. Challenges and solutions
  • 4. Next steps

Introducing a radically componentized GUI architecture 2

slide-3
SLIDE 3

Outline

  • 1. Starting point
  • 2. Ingredients
  • 3. Challenges and solutions
  • 4. Next steps

Introducing a radically componentized GUI architecture 3

slide-4
SLIDE 4

Starting point - Genode

→ Application-specific TCB

Introducing a radically componentized GUI architecture 4

slide-5
SLIDE 5

Starting point - Nitpicker

Introducing a radically componentized GUI architecture 5

slide-6
SLIDE 6

Starting point - Nitpicker

Introducing a radically componentized GUI architecture 6

slide-7
SLIDE 7

Starting point

Starting point Low-complexity GUI server (nitpicker) Toolkits

◮ Qt5 ◮ DOpE ◮ Custom widget set

Hard-wired policy Goal → Desktop environment Retain low TCB complexity Accommodate a great variety of use cases

Introducing a radically componentized GUI architecture 7

slide-8
SLIDE 8

Outline

  • 1. Starting point
  • 2. Ingredients
  • 3. Challenges and solutions
  • 4. Next steps

Introducing a radically componentized GUI architecture 8

slide-9
SLIDE 9

ROM session interface

ROM server ROM client

session

ROM module

Introducing a radically componentized GUI architecture 9

slide-10
SLIDE 10

ROM session interface (2)

ROM server ROM client

session

ROM module

update signal

new version

Transactional update of a ROM session

Introducing a radically componentized GUI architecture 10

slide-11
SLIDE 11

ROM session interface (3)

Init Backdrop FS-ROM RAM FS Noux Runtime Editor config ROM file system file system

Introducing a radically componentized GUI architecture 11

slide-12
SLIDE 12

ROM session interface (4) Demo

Introducing a radically componentized GUI architecture 12

slide-13
SLIDE 13

Report session interface

Existing mechanisms for propagating information Configuration defined at startup Policy defined at session-creation time Session interfaces Dynamic configuration changes What is needed in addition? Components need to publish internal state, e. g.,

◮ Driver: Report available device resources ◮ Component: Report feature set ◮ Applications: User notifications ◮ Propagating error conditions Introducing a radically componentized GUI architecture 13

slide-14
SLIDE 14

Report session interface (2)

Report server Report client

session

RAM

  • report

Introducing a radically componentized GUI architecture 14

slide-15
SLIDE 15

Publisher-subscriber mechanism

Combining “Report” and “ROM” session interfaces The report rom server provides

◮ “Report” service ◮ “ROM” service

Stores reports using report-session labels as keys Controls access using ROM-session labels as selectors Triggers ROM-changed signals on incoming reports → Generic publisher-subscriber mechansism Composeable with existing ROM-using components Can be instantiated many times

Introducing a radically componentized GUI architecture 15

slide-16
SLIDE 16

Outline

  • 1. Starting point
  • 2. Ingredients
  • 3. Challenges and solutions
  • 4. Next steps

Introducing a radically componentized GUI architecture 16

slide-17
SLIDE 17

Flexibility of Nitpicker

Nitpicker’s built-in policy stands in the way New configuration concept Domains Layering → Separation of policy from the nitpicker server Pointer Status bar

Introducing a radically componentized GUI architecture 17

slide-18
SLIDE 18

Nitpicker with built-in policies

Init Nitpicker GUI Backdrop Launchpad Browser

Introducing a radically componentized GUI architecture 18

slide-19
SLIDE 19

Policy as external components

Init Nitpicker GUI Panel Pointer Backdrop Launchpad Browser

Introducing a radically componentized GUI architecture 19

slide-20
SLIDE 20

Domains example Demo

Introducing a radically componentized GUI architecture 20

slide-21
SLIDE 21

Transitions

How to smoothly toggle the visibility of the windows? Adding fading feature to the application? → Increase application complexity → Modifications needed per application Adding fading feature to nitpicker? → Increase complexity of nitpicker Solution → Move fading feature to separate component

Introducing a radically componentized GUI architecture 21

slide-22
SLIDE 22

Transitions (2)

Init Scout Nitpicker Fader Scout

Introducing a radically componentized GUI architecture 22

slide-23
SLIDE 23

Transitions (2) Demo

Introducing a radically componentized GUI architecture 23

slide-24
SLIDE 24

Launcher

Starting point Demo menu (monolithic application) Based on pre-rendered PNG images Customization is labour intensive Customizable launcher Runtime-generated widgets → complex (e. g., relies on libc, libpng, zlib)

Introducing a radically componentized GUI architecture 24

slide-25
SLIDE 25

Launcher (2)

How to keep the complexity of the launcher low? Launcher is parent of all started subsystems → belongs to the trusted computing base Appealing presentation comes with complexity Solution

  • 1. Turn launcher into a multi-component application
  • 2. Sandboxed widget-rendering component

Introducing a radically componentized GUI architecture 25

slide-26
SLIDE 26

Launcher (3)

Init Nitpicker Launcher Fader Report ROM Menu view

Nitpicker Nitpicker ROM Report

ROM

<dialog > ... </dialog >

Report

<hover > ... </hover >

Introducing a radically componentized GUI architecture 26

slide-27
SLIDE 27

Launcher (4) Demo

Introducing a radically componentized GUI architecture 27

slide-28
SLIDE 28

Window management

Starting point Genode lacked a coherent window manager Application-specific window management Problem Diversity of tastes and expectations by users There is no a single solution for everyone

Introducing a radically componentized GUI architecture 28

slide-29
SLIDE 29

Window management (2)

Init Nitpicker GUI Window Manager Panel Pointer Backdrop Launchpad Browser

Introducing a radically componentized GUI architecture 29

slide-30
SLIDE 30

Window management (3)

De-componentized window manager Provides “Nitpicker” interface (compatibility) Layouter (defines behavior) Decorator (defines look) Layouter and decorator are sandboxed

Introducing a radically componentized GUI architecture 30

slide-31
SLIDE 31

Window management (4)

Init Window manager Nitpicker App Report ROM

ROM Report

Decorator Layouter

Nitpicker Nitpicker

ROM

<window -list > ... </window -list >

ROM

<hover > ... </hover >

Report

<window -layout > ... </window -layout >

ROM

<window -layout > ... </window -layout >

Report

<hover > ... </hover >

i n p u t

Introducing a radically componentized GUI architecture 31

slide-32
SLIDE 32

Decorator Demo

Introducing a radically componentized GUI architecture 32

slide-33
SLIDE 33

TCB complexity of window management

TCB footprint of the window manager No libc dependency Adds less than 3,500 SLOC Further TCB reduction Multiple window-manager instances Each instance assigned to a different nitpicker domain

Introducing a radically componentized GUI architecture 33

slide-34
SLIDE 34

Screen resolutions

How to support different screen resolutions? The screen resolution used to be hard-wired at build time

◮ VESA driver configuration ◮ Background image of the matching size

Solution

  • 1. Detection heuristics in the VESA driver
  • 2. Resolution-independent backdrop
  • 3. Dynamic framebuffer mode updates

Introducing a radically componentized GUI architecture 34

slide-35
SLIDE 35

Screen resolutions Demo

Introducing a radically componentized GUI architecture 35

slide-36
SLIDE 36

Outline

  • 1. Starting point
  • 2. Ingredients
  • 3. Challenges and solutions
  • 4. Next steps

Introducing a radically componentized GUI architecture 36

slide-37
SLIDE 37

Next steps

Alternative window layouters and decorators Capability-based desktop environment Using Genode for day-to-day computing

Introducing a radically componentized GUI architecture 37

slide-38
SLIDE 38

Thank you

Genode OS Framework http://genode.org Genode Labs GmbH http://www.genode-labs.com Source code at GitHub http://github.com/genodelabs/genode

Introducing a radically componentized GUI architecture 38