BEROUNOS for AI-native devices

Architecture

Layers, processes, data.

One window system, one shell daemon, a service manager and a privileged assistant, over a small contract with the hardware.

Beroun is a small set of cooperating processes. Window management stays in Weston, the interface is HTML in a WPE WebKit view, and everything the system can do is behind one daemon. This page is the map; the next pages go into each part.

Layers

LayerWhat it isResponsibility
FrontendsHTML/JS pages: the launcher, apps, Caroline's viewsEverything the owner sees and touches
Shell daemonshelld, PythonStarts and tracks apps, serves pages, owns every API of the system
ServicesBackends declared in manifestsWork that outlives an app's window, with memory and priority rules
CarolineA privileged service and her viewsThe assistant, started and watched by the system
Native helpersSmall C programsA browser host on WPE, the talking-head renderer, splash screens
Window systemWeston 14Windows and the screen. The HTML shell only asks shelld to start a program and shows what it started
Hardware interfaceOne interface per concernInput, power, clock, network, audio, vibration, display, storage, memory (see Targets)

Processes

shelld HTTP :8765 · WebSocket Weston the screen · 640×480 Target daemons power · memory · tmp watch cog · shared window launcher + one app at a time cog · own windows apps that ask for one Native helpers ic-browser · ic-face-view Services (managed by shelld) alarmd · calendard · messaging sidecars · Ratatosk · Caroline's backend · your service
Solid lines: shelld starts and talks to these. Dashed: services serve pages and tools through shelld.
ProcessRole
WestonThe compositor: the screen, windows, XWayland for X11 programs
shelldOne HTTP server (default port 8765) with a WebSocket for input and per-page channels
cogWPE web views: the launcher's shared window, and every app with a window of its own
ServicesDeclared in manifests; started, measured and stopped by the service manager
Native helpersic-browser (the Browser), ic-face-view (Caroline's talking head), ic-screen (splash screens)
Target daemonsPower, swap and temp-directory watchers; see Targets

The stack

Weston 14 with its desktop shell, WPE WebKit 2.52 (libwpe 1.16, wpebackend-fdo 1.16, cog 0.18), Python for the daemon and services, C for native helpers, and GStreamer for media. Versions are pinned in one file, and a target's image uses the same ones, so a page behaves identically everywhere.

Repository layout

Paths are relative to the root of the OS source tree.

PathContent
runtime/The shell daemon and its modules: manifests, services, system API, notifications, clock, network, installer, agents, A2A, Caroline, speech
web-shell/The launcher, platform.js, the on-screen keyboard, focus helpers, translations in i18n/
apps/The apps that ship with the system, one folder with a manifest.json each
system/The system's own views: Caroline's chat, voice view and wizard, the external-screen splash; plus the system services list
caroline/Caroline, pinned as a separate repository and treated as upstream
caroline-overlay/Code that runs inside her process without changing her checkout
native/The C helpers
config/Extra launchables, the button map, weston.ini, pinned versions

Where data lives

Beroun keeps system data, app data and the owner's files apart.

WhatWhereNotes
Logs and process idsThe state directoryshell.log, app-<id>.log, a log per daemon
System dataThe data directoryThe launcher database behind Platform.state, settings, sign-in, agent journals, Caroline's workspace
Installed appsThe apps directoryWritable. Apps that ship with the system are read-only
Data of store apps<data>/apps/<id>/Removed with the app
The owner's filesThe memory cardThe root every app sees. The file API cannot reach anything outside it
AccountOne credentials fileShared with Caroline, so the system and the assistant sign in once

Principles

Caroline is the system, not an app

Her views live in system/. Her backend is never stopped for memory, runs while the device sleeps and may take the window. No app can be privileged.

One manifest format

Apps and system views are described the same way. Unknown fields are errors.

The manifest is the approval

What an app declares is what it may do. Nobody clicks a dialog; what is not declared is not given.

Apps keep their place

A shared-window app saves its state when it closes and returns to it.

One interface to hardware

Everything that touches a device is behind a single interface, so a target supplies its own backend.

A tool for every call

Every API route has a Caroline tool. A test fails if a route has none.

A small input model

Apps get the cursor, A and B. The rest belongs to the system.

Memory is a budget

Services declare memory_mb and priority. Over the limit, the lowest priority stops first.