# airbus/a653lib architecture

> Architecture diagram of the GitHub repository airbus/a653lib, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/airbus/a653lib
- Repository: https://github.com/airbus/a653lib

## Overview

a653lib is a Linux ARINC 653 scheduler and APEX runtime for native and WebAssembly partitions. The main workflow is partition applications invoking APEX process and communication services while the scheduler activates partitions; Wasm partitions reach those services through runtime-registered host functions. The README documents native fork and WAMR/Wasmtime execution. The sampled excerpts confirm scheduler-loop, shared-memory, queue, process, and Wasm wrapper behavior; unsampled service wiring is shown only where the README or explicit wrapper calls support it.

Main entry points: [`a653_inc/a653Lib.h`](https://github.com/airbus/a653lib/blob/main/a653_inc/a653Lib.h) (APEX interfaces), [`a653_lib/a653_i_queuing.c`](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_queuing.c) (Queuing ports), [`a653_lib_wasm32/apex_host_fncs_wasm32.c`](https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/apex_host_fncs_wasm32.c) (APEX host functions), [`main.c`](https://github.com/airbus/a653lib/blob/main/main.c) (Scheduler loop)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sched["Partition Scheduling"]
  node_scheduler["Scheduler loop<br/>[main.c]"]
  node_partition_sched["Partition control<br/>[a653_i_partition.c]"]
  node_native_exec["Native partitions<br/>[a653_i_partition.c]"]
  node_wasm_guest["Wasm partitions<br/>[partition_a.c]"]
end

subgraph group_apex["APEX Services"]
  node_process_api["Process services<br/>[a653_i_process.c]"]
  node_public_api["APEX interfaces<br/>[a653Lib.h]"]
  node_sync["Synchronization<br/>[a653_i_sync.c]"]
  node_time["Time services<br/>[a653_i_time.c]"]
end

subgraph group_ipc["Interpartition Communication"]
  node_sampling["Sampling ports<br/>[a653_i_sampling.c]"]
  node_queuing["Queuing ports<br/>[a653_i_queuing.c]"]
  node_channel_config["Channel configuration<br/>[a653_config.h]"]
end

subgraph group_wasm["WebAssembly Execution"]
  node_wasm_launcher["Wasm launcher<br/>[wasm32_main.c]"]
  node_wamr["WAMR runtime<br/>[a653_wamr.c]"]
  node_wasmtime["Wasmtime runtime<br/>[a653_wasmtime.c]"]
  node_host_functions["APEX host functions"]
  node_wasm_process["Wasm process wrappers"]
  node_wasm_queuing["Wasm queue wrappers"]
end

subgraph group_platform["Shared Runtime State"]
  node_shared_mem[("Shared memory<br/>[a653_i_shm_if.c]")]
end

node_apps(("Partition apps<br/>[partition_a.c]"))
node_linux(("POSIX/Linux"))

node_apps -->|"call APEX"| node_public_api
node_public_api -->|"dispatch process calls"| node_process_api
node_public_api -->|"dispatch sampling calls"| node_sampling
node_public_api -->|"dispatch queue calls"| node_queuing
node_public_api -->|"dispatch sync calls"| node_sync
node_public_api -->|"dispatch time calls"| node_time
node_scheduler -->|"update partitions"| node_partition_sched
node_scheduler -->|"wait on POSIX"| node_linux
node_partition_sched -->|"activate native"| node_native_exec
node_native_exec -->|"fork processes"| node_linux
node_sampling -->|"read channel config"| node_channel_config
node_queuing -->|"read channel config"| node_channel_config
node_sampling -->|"read/write samples"| node_shared_mem
node_queuing -->|"read/write queues"| node_shared_mem
node_scheduler -->|"initialize state"| node_shared_mem
node_partition_sched -.->|"launch Wasm partitions"| node_wasm_launcher
node_wasm_launcher -.->|"instantiate guest"| node_wamr
node_wasm_launcher -.->|"instantiate guest"| node_wasmtime
node_wamr -.->|"register imports"| node_host_functions
node_wasmtime -.->|"register imports"| node_host_functions
node_wasm_guest -.->|"import APEX calls"| node_wasm_process
node_wasm_guest -.->|"import APEX calls"| node_wasm_queuing
node_wasm_process -.->|"invoke process API"| node_process_api
node_wasm_queuing -.->|"invoke queue API"| node_queuing
node_host_functions -.->|"dispatch imports"| node_wasm_process
node_host_functions -.->|"dispatch imports"| node_wasm_queuing

click node_apps "https://github.com/airbus/a653lib/blob/main/partition_a.c"
click node_scheduler "https://github.com/airbus/a653lib/blob/main/main.c"
click node_partition_sched "https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_partition.c"
click node_native_exec "https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_partition.c"
click node_process_api "https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_process.c"
click node_public_api "https://github.com/airbus/a653lib/blob/main/a653_inc/a653Lib.h"
click node_sampling "https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_sampling.c"
click node_queuing "https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_queuing.c"
click node_channel_config "https://github.com/airbus/a653lib/blob/main/a653_config.h"
click node_sync "https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_sync.c"
click node_time "https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_time.c"
click node_shared_mem "https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_shm_if.c"
click node_wasm_launcher "https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/wasm32_main.c"
click node_wamr "https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/a653_wamr.c"
click node_wasmtime "https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/a653_wasmtime.c"
click node_host_functions "https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/apex_host_fncs_wasm32.c"
click node_wasm_process "https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/arinc653_part1_apex_process_wasm32.c"
click node_wasm_queuing "https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/arinc653_part1_apex_queuing_port_wasm32.c"
click node_wasm_guest "https://github.com/airbus/a653lib/blob/main/partition_a.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_scheduler,node_partition_sched,node_native_exec,node_wasm_guest toneBlue
class node_process_api,node_public_api,node_sync,node_time toneAmber
class node_sampling,node_queuing,node_channel_config toneMint
class node_wasm_launcher,node_wamr,node_wasmtime,node_host_functions,node_wasm_process,node_wasm_queuing toneRose
class node_shared_mem,node_linux toneIndigo
class node_apps toneTeal
```

## Components

### Partition Scheduling

- [Scheduler loop](https://github.com/airbus/a653lib/blob/main/main.c): `main.c`
- [Partition control](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_partition.c): `a653_lib/a653_i_partition.c`
- [Native partitions](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_partition.c): `a653_lib/a653_i_partition.c`
- [Wasm partitions](https://github.com/airbus/a653lib/blob/main/partition_a.c): `partition_a.c`

### APEX Services

- [Process services](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_process.c): `a653_lib/a653_i_process.c`
- [APEX interfaces](https://github.com/airbus/a653lib/blob/main/a653_inc/a653Lib.h): `a653_inc/a653Lib.h`
- [Synchronization](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_sync.c): `a653_lib/a653_i_sync.c`
- [Time services](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_time.c): `a653_lib/a653_i_time.c`

### Interpartition Communication

- [Sampling ports](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_sampling.c): `a653_lib/a653_i_sampling.c`
- [Queuing ports](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_queuing.c): `a653_lib/a653_i_queuing.c`
- [Channel configuration](https://github.com/airbus/a653lib/blob/main/a653_config.h): `a653_config.h`

### WebAssembly Execution

- [Wasm launcher](https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/wasm32_main.c): `a653_lib_wasm32/wasm32_main.c`
- [WAMR runtime](https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/a653_wamr.c): `a653_lib_wasm32/a653_wamr.c`
- [Wasmtime runtime](https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/a653_wasmtime.c): `a653_lib_wasm32/a653_wasmtime.c`
- [APEX host functions](https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/apex_host_fncs_wasm32.c): `a653_lib_wasm32/apex_host_fncs_wasm32.c`
- [Wasm process wrappers](https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/arinc653_part1_apex_process_wasm32.c): `a653_lib_wasm32/arinc653_part1_apex_process_wasm32.c`
- [Wasm queue wrappers](https://github.com/airbus/a653lib/blob/main/a653_lib_wasm32/arinc653_part1_apex_queuing_port_wasm32.c): `a653_lib_wasm32/arinc653_part1_apex_queuing_port_wasm32.c`

### Shared Runtime State

- [Shared memory](https://github.com/airbus/a653lib/blob/main/a653_lib/a653_i_shm_if.c): `a653_lib/a653_i_shm_if.c`

### Other components

- [Partition apps](https://github.com/airbus/a653lib/blob/main/partition_a.c): `partition_a.c`
- **POSIX/Linux**

## Connections

- Partition apps → APEX interfaces: call APEX
- APEX interfaces → Process services: dispatch process calls
- APEX interfaces → Sampling ports: dispatch sampling calls
- APEX interfaces → Queuing ports: dispatch queue calls
- APEX interfaces → Synchronization: dispatch sync calls
- APEX interfaces → Time services: dispatch time calls
- Scheduler loop → Partition control: update partitions
- Scheduler loop → POSIX/Linux: wait on POSIX
- Partition control → Native partitions: activate native
- Native partitions → POSIX/Linux: fork processes
- Sampling ports → Channel configuration: read channel config
- Queuing ports → Channel configuration: read channel config
- Sampling ports → Shared memory: read/write samples
- Queuing ports → Shared memory: read/write queues
- Scheduler loop → Shared memory: initialize state
- Partition control → Wasm launcher: launch Wasm partitions
- Wasm launcher → WAMR runtime: instantiate guest
- Wasm launcher → Wasmtime runtime: instantiate guest
- WAMR runtime → APEX host functions: register imports
- Wasmtime runtime → APEX host functions: register imports
- Wasm partitions → Wasm process wrappers: import APEX calls
- Wasm partitions → Wasm queue wrappers: import APEX calls
- Wasm process wrappers → Process services: invoke process API
- Wasm queue wrappers → Queuing ports: invoke queue API
- APEX host functions → Wasm process wrappers: dispatch imports
- APEX host functions → Wasm queue wrappers: dispatch imports
