Certification and Safety Standards
What Resilient contributes to DO-178C, ISO 26262, IEC 61508, and MISRA-style coding standards — and what the integrator still owns.
Table of contents
Honest framing
Resilient is not a certified tool and is not DO-178C / ISO 26262 / IEC 61508 compliant. No tool qualification dossier exists. No certification body has audited the compiler. Claiming otherwise would mislead a safety engineer into building on a foundation that hasn’t been laid.
What Resilient is is a language designed with certifiability as a first-order concern. Every feature in the language was chosen with the knowledge that a downstream user may eventually have to defend the software to a Designated Engineering Representative (DER), a functional safety manager, or an IEC 61508 assessor.
The path this page describes is the realistic one:
- Resilient’s features reduce the evidence burden for the objectives listed in each standard.
- Resilient’s features do not eliminate the need for tool qualification, system-level hazard analysis, hardware safety mechanisms, requirements management, or independent verification.
- Until the compiler itself is qualified, Resilient’s role in a certified product is as an input artifact generator — its proof certificates, audit reports, and signed manifests feed a qualified process run by the integrator.
The rest of this page maps concrete features to concrete objectives in each standard, and flags the gaps.
DO-178C (Airborne Software)
DO-178C governs software in certified civil aircraft. Compliance is evidence-based: for each objective in Annex A (tables A-1 through A-10, scaled by DAL A–E) the applicant supplies artifacts showing the objective is satisfied.
What Resilient contributes
-
Objective A-5 (Verify software architecture). Function contracts (
requires/ensures) express architectural invariants directly in the source. When Z3 discharges them, the architectural property is proven for all inputs in the contract’s domain — stronger than test-based architectural verification. -
Objective A-6 (Verify source code). The SMT-LIB2 certificates emitted by
--emit-certificateare re-verifiable under stock Z3. This matters because it breaks the circular trust problem: an auditor does not need to trust the Resilient binary to accept the proof — they re-run the.smt2file under their own solver and confirmunsat. Thecert.sigEd25519 signature (RES-194) plus per-certsha256hashes inmanifest.json(RES-195) give tamper-evidence from the point of emission onward. -
Objective A-7 (Verify software requirements).
requires/ensuresclauses tied to a function provide traceable mappings from low-level requirements (LLRs) to code, with source locations. The--auditsubcommand emits a coverage matrix showing which clauses are discharged statically versus deferred to a runtime check — useful evidence for A-7 and for the MC/DC-adjacent objective A-7.9. -
Objective A-9 (Software configuration management). Signed certificate bundles provide a cryptographic configuration identification artifact: a given source program, compiled with a given verifier version, produces a byte-identical certificate set whose top-level signature binds the bundle to the signer’s key.
What you still need
-
DO-330 tool qualification. Resilient is not a qualified tool. If the compiler, verifier, or runtime are used in a way that their output is not independently verified, each must be qualified as a Criterion 1 / 2 / 3 tool per DO-330. That is a multi-year effort the project has not started.
-
MC/DC coverage. DO-178C Level A requires Modified Condition / Decision Coverage. Resilient does not ship an MC/DC instrumentation or coverage tool. A third-party coverage harness has to be integrated.
-
Worst-case execution time (WCET). Timing analysis is out of scope. DO-178C Section 6.3.4.f (accuracy and consistency of the source code) does not mandate WCET, but any real-time avionics function will need an external static or measurement-based WCET analyzer applied to the compiled binary.
-
Hardware testing. Proofs on the source program do not substitute for on-target testing. The compiled binary still needs to be exercised on representative hardware.
-
Requirements management system. Resilient does not store, baseline, or trace high-level requirements. That is the domain of DOORS, Polarion, or an equivalent tool.
ISO 26262 (Automotive — Road Vehicles)
ISO 26262 covers E/E systems in passenger vehicles. The standard scales evidence by Automotive Safety Integrity Level (ASIL), from QM (quality-managed, no ASIL) through ASIL A, B, C, to D (highest).
ASIL decomposition
The evidence Resilient can provide is proportional to the ASIL:
- ASIL A / B. Runtime contracts (
requires/ensurescompiled to runtime assertions) plus the--auditreport are defensible evidence for the software unit verification objectives in Part 6, Tables 7 and 8. - ASIL C / D. Runtime checks alone are insufficient. The
pipeline needs (a) Z3-discharged static proofs, (b) emitted
SMT-LIB2 certificates, (c) cryptographic signatures binding the
certificate bundle to the supplier, and (d) an independent
peer review of contract completeness — i.e. a human confirming
that the
requires/ensuresclauses capture every relevant precondition and postcondition of the unit. Resilient provides (a), (b), (c); (d) is always a human process.
What Resilient contributes
-
Part 6, Table 1 (Methods for specification of software safety requirements). Formal notations are highly recommended up to ASIL D.
requires/ensuresare a first-order formal notation embedded in the source. -
Part 6, Section 6.4.7 (Software unit design principles). The
static-onlyfeature ofresilient-runtimeis a compile-time assertion that the program allocates no heap. This directly addresses the ASIL D expectation that dynamic objects and memory allocation be avoided; the constraint is enforced by the build system, not by coding convention. -
Part 6, Table 9 (Methods for software unit verification). Formal verification is highly recommended for ASIL C / D. Z3 proofs plus SMT-LIB2 certificates supply exactly this.
-
Part 8 (Supporting processes — configuration management, change management, verification). Signed certificate bundles with per-file SHA-256 hashes are usable as configuration-managed verification artifacts.
-
Part 6, Section 8 (Software integration and verification). The deterministic bytecode VM and
--seed <u64>PRNG pinning make integration tests reproducible bit-for-bit, which Part 8 recommends for regression evidence.
What you still need
-
System-level hazard analysis (Part 3). HARA, ASIL assignment, and functional safety concept development are activities that precede any software consideration. Resilient has nothing to say about them.
-
FMEA, FTA, DFA at the system and hardware levels. Part 4 / Part 5 analyses are out of scope.
-
Hardware safety mechanisms. Lockstep CPUs, ECC RAM, watchdogs, and the rest of the ISO 26262 hardware architectural metrics are the domain of the silicon supplier and the ECU integrator. Resilient assumes a correct execution substrate.
-
Tool confidence level (TCL) evaluation. Per Part 8, Section 11, every tool in the toolchain needs a TCL evaluation. The Resilient compiler would currently be TCL3 (high confidence required, qualification needed). No qualification kit exists.
IEC 61508 (Functional Safety — Industrial)
IEC 61508 is the generic functional-safety standard for programmable electronic systems in industrial and process applications; it is the parent of IEC 61511 (process), IEC 62061 (machinery), and related sector standards. Evidence scales by Safety Integrity Level (SIL) 1 through 4.
SIL mapping
- SIL 1 / 2. Runtime-checked contracts plus the Resilient
--auditcoverage report are sufficient as software verification evidence (Part 3, Table A.5 “Software verification”). - SIL 3 / 4. Static proofs are required: Z3-discharged obligations, exported SMT-LIB2 certificates, and a signed certificate chain. Part 3 Annex C “Properties for systematic safety integrity” treats formal proof as a Highly Recommended technique at SIL 3/4.
What Resilient contributes
-
Part 3, Table A.4 (Software design and development). Structured programming is Highly Recommended at all SILs. Resilient has no
goto, no macros, no inheritance, no implicit conversions, no null, and a single way to declare a function. The surface for systematic faults is small by construction. -
Part 3, Table A.3 (Software architecture design). Defensive programming is Highly Recommended at SIL 3/4. Live blocks (
live { ... }with retry budget and exponential backoff),assert(cond, msg)with operand values in the diagnostic, and automatic state restoration on recoverable error directly implement this technique. -
Part 3, Table A.9 (Software verification). Static analysis is Highly Recommended. Resilient’s type checker, lint pass (unused variables, dead code), and verifier collectively provide the static-analysis evidence.
-
Part 3, Section 7.4.4 (Support tools). Re-verifiable SMT-LIB2 certificates let the assessor confirm the proof under a tool (Z3) that already has a track record in formal-methods deployments, reducing the trust burden on the Resilient compiler itself.
What you still need
- Safety lifecycle management (Part 1). Concept, overall scope definition, hazard and risk analysis, overall safety requirements.
- Random hardware failure analysis (Part 2). PFH / PFD calculations, diagnostic coverage, safe failure fraction — hardware territory.
- Independence of verification. The assessor will require evidence that verification was performed with the independence appropriate to the SIL; Resilient emits artifacts but does not enforce the process.
MISRA analogy
MISRA C (and MISRA C++) is a coding standard for C in safety-critical automotive and adjacent contexts. It does not apply to Resilient — Resilient is a different language — but the spirit of MISRA C is “remove the constructs of C that produce undefined, unspecified, or implementation-defined behavior.” Many MISRA C rules exist because C allows something that should never have been allowed in a safety-critical context.
Resilient’s design choices align with that spirit by construction:
| MISRA C rule family | Resilient’s answer |
|---|---|
| MISRA C Rule 2.4 (no misleading identifiers) | ASCII-only identifiers — rejects homoglyph attacks (Cyrillic а vs Latin a) at the lexer. |
| MISRA C Rule 10.x (type conversions) | No implicit conversions. int + float is a type error; coerce with to_float(x). |
| MISRA C Directive 4.9 (function-like macros) | No macro system at all. |
| MISRA C Rule 14.x / 15.x (control flow) | No goto. if / while only. live { } is the single structured retry primitive. |
| MISRA C Rule 18.x (pointers and arrays) | No raw pointers in surface syntax. Array access is checked. |
| MISRA C Rule 21.3 (dynamic memory) | --features static-only makes heap allocation a compile error in the embedded runtime. |
| MISRA C Directive 4.1 (run-time failures) | requires / ensures contracts with static proof or runtime fallback. |
| MISRA C Rule 1.3 (undefined behavior) | Resilient has no undefined behavior at the language level; the bytecode VM is deterministic. |
A formal Resilient equivalent of a MISRA-style coding standard —
a numbered ruleset with deviation procedures — is a future
deliverable. For now, the language itself enforces most of what
such a standard would mandate. The integrator’s project-level
coding guide only needs to cover what the language permits but
the project disallows (e.g. limits on live block nesting,
naming conventions, file organization).
Related security standards
- IEC 62443 (industrial cybersecurity). ASCII-only identifiers are a supply-chain-integrity property: source code cannot contain homoglyph-spoofed identifiers that review tools might miss. Relevant to IEC 62443-4-1 secure development lifecycle requirements for source integrity.
Generating audit artifacts
The three commands that produce certifiable evidence are
--audit, --emit-certificate, and --sign-cert. They compose:
# One shot: typecheck + verify + audit + emit signed certificates.
resilient \
--features z3 \
--audit \
--emit-certificate ./artifacts/certs \
--sign-cert ~/.resilient-priv.pem \
src/main.rs \
> ./artifacts/audit.txt
Output layout:
artifacts/
audit.txt # human-readable coverage report
certs/
manifest.json # per-obligation sha256 + sig
cert.sig # Ed25519 over the concatenated .smt2 files
<fn>__<kind>__<idx>.smt2 # one re-verifiable proof per obligation
...
Downstream verification (auditor’s machine, no Resilient compiler needed beyond the verifier subcommand):
# Cryptographic regression check — fast.
resilient verify-all ./artifacts/certs
# With re-run of Z3 on every certificate — slower but strongest.
resilient verify-all ./artifacts/certs --z3
Incorporating into a DO-178C Software Accomplishment Summary
A Software Accomplishment Summary (SAS) is the top-level DO-178C deliverable summarizing how each Annex A objective was satisfied. Resilient’s artifacts map in as follows:
- Section 3 (Software Life Cycle). Reference the Resilient compiler version and Z3 version used; both are echoed in the certificate headers.
- Section 5 (Software Life Cycle Data). The
artifacts/certs/directory is a Software Verification Result (SVR) item. Themanifest.jsonis the index;cert.sigis the configuration management integrity artifact. - Section 7 (Additional Considerations). If Resilient is
used as an unqualified tool, its output must be independently
verified — the
--z3re-run on every certificate, performed on a separate machine by separate personnel, is the independent verification.
Incorporating into an ISO 26262 work product
The ISO 26262 analogue is the Software Verification Report (Part 6, Clause 9). The certificate bundle + audit log is a direct input to it. The signed manifest satisfies the Part 8 configuration-management requirement for “unique identification” of the verification artifact.
Roadmap
The gap between “features that contribute to a safety argument” and “a qualified toolchain” is the honest subject of this section. Items below are planned, not delivered.
- Tool qualification dossier (G19+). A DO-330 TQL-5 (or ISO 26262 TCL3) evaluation of the verifier subset used for certificate generation, starting from the Z3 translation layer and the signature verification path — the smallest credibly qualifiable slice.
- WCET analysis integration. Coordinate with an existing static WCET tool (aiT, Bound-T) applied to the Cranelift JIT output or to a separate AOT backend targeting the supported MCUs.
- MC/DC coverage tooling. Source-level branch and MC/DC instrumentation for the interpreter and bytecode VM backends.
- Formal memory-safety proof. Today the runtime inherits Rust’s safety guarantees; a formal argument (in Coq, Lean, or Isabelle) that the Resilient abstract semantics is preserved by the bytecode VM and JIT lowerings is a long-term target.
- Concurrency analysis. The language is single-threaded today. Interrupt-service-routine semantics, lockstep CPU support, and a data-race-free concurrency model are open research — see the Concurrency page for the current story.
- Partnership with certification bodies. Engagement with TÜV, SGS, or equivalent is a prerequisite to any formal claim of conformance. No such engagement has started.
Further reading
- Design Philosophy — the verifiability pillar and why the language looks the way it does.
- Memory Model — allocation behavior and the
static-onlyfeature. - Concurrency and Real-Time Scheduling — what the language currently says (and does not say) about concurrency.
- GitHub Issues — the live engineering ledger, including every verification and certificate ticket (RES-067, RES-071, RES-131, RES-132, RES-136, RES-137, RES-178, RES-194, RES-195).