Skip to content

Commit 013d395

Browse files
author
Arnaud Riess
committed
docs: update README to clarify project goals and safety standards
1 parent 8cd2a78 commit 013d395

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

README.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@
22

33
> ⚠️ **This project is work in progress! Not all wasm features nor corner cases were tested!**
44
5-
A compilation pipeline that transpiles WebAssembly modules into memory-safe Rust code with compile-time isolation guarantees, replacing runtime hardware-based memory protection (MMU/MPU) with type-system-enforced safety.
5+
A compilation pipeline that transpiles WebAssembly modules into memory-safe Rust code with compile-time isolation guarantees (memory+capabilities), replacing runtime hardware-based memory protection (MMU/MPU) with type-system-enforced safety.
6+
7+
herkos approach: if the Rust compiler accepts the transpiled code, isolation is guaranteed; no MMU, no context switches, no runtime overhead for proven accesses.
68

79
**WebAssembly → Rust source → Safe binary**
810

911
## Motivation
1012

11-
Safety-critical standards (ISO 26262, IEC 61508, DO-178C) require **freedom from interference** between software modules of different criticality levels. Typically this is achieved via MMU/MPU or hypervisors, approaches that are expensive in cpu time performance, energy, and certification effort.
13+
Running untrusted or unsafe-language components alongside safe code usually requires hardware isolation (MMU/MPU, hypervisors) or process boundaries, all of which add runtime overhead and complexity. What if the compiler itself could enforce "spatial" isolation?
1214

13-
herkos takes a different approach: if the Rust compiler accepts the transpiled code, isolation is guaranteed; no MMU, no context switches, no runtime overhead for proven accesses.
15+
herkos explores this idea: transpile WebAssembly modules into safe Rust, so that memory isolation and capability restrictions are checked at compile time rather than at runtime. This opens up several use cases:
1416

15-
Still we have a challenge: how to do efficient communication between "*compile-time-mmu*" partitions? This will be one of the things this project will explore.
17+
- **Isolating untrusted components** — sandbox C/C++ libraries without hardware protection
18+
- **Porting unsafe-language code to Rust** — use Wasm as an intermediate representation to get a safe Rust version of existing C/C++ code
19+
- **Efficient cross-partition communication** — how do "compile-time-MMU" partitions talk to each other efficiently?
1620

1721
## Architecture
1822

@@ -21,11 +25,8 @@ The project is a Rust workspace with three core crates:
2125
| Crate | Purpose |
2226
|---|---|
2327
| `herkos` | CLI transpiler: parses `.wasm` binaries, emits Rust source code |
24-
| `herkos-runtime` | `#![no_std]` runtime library shipped with transpiled output (`IsolatedMemory`, capability types, Wasm operations) |
25-
26-
Features:
27-
- compile time isolation
28-
- compile time capability based security access via traits
28+
| `herkos-runtime` | `#![no_std]` runtime library shipped with transpiled output (isolated memory, capability types, wasm operations) |
29+
| `herkos-tests` | collection of wat/Rust/C sources that are compiled to .wasm, transpiled and tested. |
2930

3031
## Build and test
3132

0 commit comments

Comments
 (0)