Developers

Port existing software

Porting existing C or C++ to CHERI exposes pointer assumptions and helps a team decide what must change for hybrid or pure-capability operation.

For
Developers, engineering managers and educators
Last reviewed
2026-08-05
Review cycle
Review every 6 months

What you’ll do

Porting existing C or C++ to CHERI is an evidence-gathering process. Compiler warnings and runtime faults reveal assumptions about pointer size, integer conversions, bounds and authority that conventional systems may leave implicit.

Before you begin

The aim is not only to make the program run, but to preserve intended behaviour while narrowing unnecessary authority.

Steps

1. Inventory

Map source, assembly, build logic, generated code, libraries and platform interfaces; choose a small representative target.

2. Compile

Enable capability warnings, fix pointer-integer and layout assumptions deliberately, and avoid casts that merely silence diagnostics.

3. Test

Exercise normal, boundary and malformed inputs; record faults, source changes, performance and remaining unsupported dependencies.

Check your result

A successful hybrid build does not provide the same coverage as a pure-capability build, and a clean compile does not prove temporal safety or correct compartment design.

Record the architecture, platform, ABI, release, source revision and complete commands. A second developer should be able to reproduce the result.

Useful references

Continue

Port one dependency-light component and publish a short log of changes, warnings, tests and unresolved assumptions.

Check ecosystem porting status