Introduction
Fiducia is a language for building embedded applications on seL4 Microkit systems. A Fiducia project describes a system of protection domains (PDs) connected by channels, each PD implemented by external C / Rust code and modelled by a CSP-style process algebra. From this single description the toolchain produces both a bootable Microkit image and a formal model that can be checked for deadlock-freedom.
This manual is the task-oriented guide to the toolchain. For the
syntax and semantics of the language itself, see the
Fiducia Language Reference
β it stays focused on .fis / .fi syntax, while this manual covers
installing, configuring, running, and verifying projects day-to-day.
π§ Fiducia is under active development. The language and tools are not yet complete; interfaces described here may change between releases.
The toolchain at a glance
| Tool | Role |
|---|---|
fic | The compiler: parses, validates, and type-checks a project; emits ASTs, SDF XML, topology graphs, UPPAAL models, or a bootable Microkit image. |
fire | The project runner: reads fire.toml and drives fic β fire build produces the image, fire run builds and launches it on QEMU or hardware, fire verify model-checks the UPPAAL model with verifyta. |
A Fiducia project
A project is a directory containing:
- one
.fisfile β the system description: memory regions, protection domains, channels, and the system composition; - one
.fifile per protection domain β the PD implementation: imports of C sources, memory mappings, event declarations, and process definitions (the fileeth_outer.fiimplements the PD namedeth_outer); - the imported
.cimplementation files (.rsimports parse but arenβt runnable yet β the C backend rejects them; see--emit=c); - a
fire.tomlmanifest tellingfirehow to build and run it (see The Project Manifest).
The compiler pipeline is:
discover β parse β resolve β validate β typecheck β WF2 β emit
where typecheck enforces information-flow security (no HighβLow leaks via channels) and WF2 checks the channel dependency graph for cycles (a structural deadlock-freedom condition).
Where to go next
- Install the tools.
- Write or copy a
fire.toml. - Build and run on QEMU β the
demo/datadiode/project in the repository is a complete worked example. - Verify deadlock-freedom.
- Consult the
ficreference for the individual compiler emit modes.