-
Notifications
You must be signed in to change notification settings - Fork 51
ISO 26262 and Rust Gap Analysis for the front-page to evaluate Rust safety-critical readiness #562
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
PLeVasseur
merged 7 commits into
Safety-Critical-Rust-Consortium:main
from
fried-gluttony:feature/website-update
Mar 16, 2026
Merged
Changes from 1 commit
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
ae97298
Added general overview of Rust safety-critical readiness together wit…
fried-gluttony 438064a
further improved the gap-analysis and corrected typos
fried-gluttony 083da79
refactored the gap analysis for clarity and completeness
fried-gluttony dc70568
final touches and editing
fried-gluttony 20cd3a2
Updated the ratings based on vjonaswolf comments
fried-gluttony 6fd6e2c
Front page overview updated
fried-gluttony 6538224
final touches to use standard font sizes and colors matching the comm…
fried-gluttony File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,175 @@ | ||
| --- | ||
| sidebar_position: 1 | ||
| --- | ||
| # ISO 26262 vs. Rust Gap Analysis | ||
|
|
||
| The ISO 26262 is a standard that is split into 13 parts. Management, System-level, Hardware-level, Software-Level and supporting. | ||
| Conformity to the ISO 26262 standard reached, by conforming to each single requirement. | ||
| In the following for each clause of the Software part it is judged how well it is possible to conform to each requirement. | ||
| Most interesting is of course the Software part. But the context of the other parts matter. | ||
|
|
||
| Note: ISO 26262 allows for tailoring. If a requirement can't be met literally (ior doesn't make sense in the given context), it can be satisfied by providing a sound technical argumentation proving that the intent of the requirement is met or exceeded by other means. It is recommended to discuss that with the assessor apriori though. | ||
| The best way to describe the readiness is here along the reference phase model. | ||
|
|
||
|  | ||
|
|
||
| ## 2 Management of FuSa | ||
|
|
||
| TODO | ||
|
|
||
| ### 🟢 6-5 General topics for the product development at the software level | ||
|
|
||
| Table 1 — Topics to be covered by modelling and coding guidelines | ||
|
|
||
| | ID | Method | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :--- | :--- | | ||
| | **1a** | Enforcement of low complexity | `clippy::cyclomatic_complexity` | 🟢 | | ||
| | **1b** | Use of language subsets | Coding Guidelines (in progress) | 🟡 | | ||
| | **1c** | Enforcement of strong typing | inherent | 🟢 | | ||
| | **1d** | Use of defensive implementation techniques | possible e.g. Option'<T'>, Result<T, E> | 🟢 | | ||
| | **1e** | Use of well-trusted design principles | n.A. for Rust | n.A. | | ||
| | **1f** | Use of unambiguous graphical representation | n.A. for Rust | n.A. | | ||
| | **1g** | Use of style guides | clippy can enforce rules | 🟢 | | ||
| | **1h** | Use of naming conventions | clippy can enforce rules | 🟢 | | ||
| | **1i** | Concurrency aspects | native compile-time enforcable | 🟢 | | ||
|
fried-gluttony marked this conversation as resolved.
Outdated
|
||
|
|
||
| General considerations based on experience: | ||
|
|
||
| - IDE & Debugging support | ||
| - dependent on target... | ||
|
|
||
| ### 🟡 6-6 Safety requirements | ||
|
|
||
| - Traceability establishment from requiremets to implementation 🟢 | ||
| - Tooling exists: mantra | ||
| - ... TODO | ||
|
|
||
| ### 🟡 6-7 Software Architectural Design | ||
|
|
||
| Table 3 — Principles for software architectural design | ||
|
|
||
| | ID | Principle | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :---: | :---: | | ||
| | **1a** | Appropriate hierarchical structure of the software components | possible | 🟢 | | ||
| | **1b** | Restricted size and complexity of software components | possible | 🟢 | | ||
| | **1c** | Restricted size of interfaces $^a$ | possible | 🟢 | | ||
| | **1d** | Strong cohesion within each software component $^b$ | possible | 🟢 | | ||
| | **1e** | Loose coupling between software components $^{b,c}$ | possible | 🟢 | | ||
| | **1f** | Appropriate scheduling properties $^d$ | scheduler available (RTIC, ) - qualification unknown | 🟡 | | ||
| | **1g** | Restricted use of interrupts $^a$ | possible | 🟢 | | ||
| | **1h** | Appropriate spatial isolation of the software components | TBD | TBD | | ||
| | **1i** | Appropriate management of shared resources $^e$ | borrow checker/Mutexes available | 🟢 | | ||
|
|
||
| Table 4 — Methods for the verification of the software architectural design | ||
|
|
||
| | ID | Principle | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :---: | :---: | | ||
| | **1a** | Walk-through of the design $^a$ | n.A. for Rust | n.A. | | ||
|
fried-gluttony marked this conversation as resolved.
Outdated
|
||
| | **1b** | Inspection of the design $^a$ | n.A. for Rust | n.A. | | ||
| | **1c** | Simulation of dynamic behaviour of the design | n.A. for Rust | n.A. | | ||
| | **1d** | Prototype generation | n.A. for Rust | n.A. | | ||
| | **1e** | Formal verification | creusat, ... TBD | 🟡 | | ||
| | **1f** | Control flow analysis $^b$ | TBD | TBD | | ||
| | **1g** | Data flow analysis $^b$ | TBD | TBD | | ||
| | **1h** | Scheduling analysis | WCET available | 🟡 | | ||
|
|
||
| - Model based code generation tools 🔴 | ||
| - TODO: no tools exist so far afaik | ||
| - upper estimation of required resources? (execution time, storage, communication ressources) | ||
| - TODO what exists here? | ||
|
|
||
| ### 🟡 6-8 Software unit Design & Implementation | ||
|
|
||
| Table 6 — Design principles for software unit design and implementation | ||
|
|
||
| | ID | Principle | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :---: | :---: | | ||
| | **1a** | One entry and one exit point in subprograms and functions $^a$ | TBD clippy enforcable? panic handler? needs argumentation | TBD | | ||
| | **1b** | No dynamic objects or variables, or else online test during their creation $^a$ | use no_std, heapless, borrow checker | 🟢 | | ||
| | **1c** | Initialization of variables | TBD clippy enforcable | TBD | | ||
| | **1d** | No multiple use of variable names $^a$ | shadowing possible, TBD clippy enforcable | TBD | | ||
| | **1e** | Avoid global variables or else justify their usage $^a$ | TBD clippy enforcable | TBD | | ||
| | **1f** | Restricted use of pointers $^a$ | disallow safe rust - pointer usage discouraged | 🟢 | | ||
|
fried-gluttony marked this conversation as resolved.
Outdated
|
||
| | **1g** | No implicit type conversions $^a$ | inherent | 🟢 | | ||
| | **1h** | No hidden data flow or control flow | TBD clippy enforcable | TBD | | ||
| | **1i** | No unconditional jumps $^a$ | TBD clippy enforcable | TBD | | ||
| | **1j** | No recursions | TBD clippy enforcable | TBD | | ||
|
|
||
| - tbd: ARM FuSa Library support | ||
| - tbd: support of ARM Cortex R based microcontroller | ||
|
|
||
| ### 🟡 6-9 Software unit verification | ||
|
|
||
| Table 7 — Methods for software unit verification | ||
|
|
||
| | ID | Method | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :---: | :---: | | ||
| | **1a** | Walk-through $^a$ | n.A. for Rust | n.A. | | ||
|
fried-gluttony marked this conversation as resolved.
Outdated
|
||
| | **1b** | Inspection $^a$ | n.A. for Rust | n.A. | | ||
| | **1c** | Pair-programming $^a$ | n.A. for Rust | n.A. | | ||
| | **1d** | Semi-formal verification | + | + | | ||
|
fried-gluttony marked this conversation as resolved.
Outdated
|
||
| | **1e** | Formal verification | o | o | | ||
| | **1f** | Control flow analysis $^{b,c}$ | + | + | | ||
| | **1g** | Data flow analysis $^{b,c}$ | + | + | | ||
| | **1h** | Static code analysis $^d$ | TBD partially clippy, TBD how far Coding Guidelines | 🟡 | | ||
| | **1i** | Static analyses based on abstract interpretation $^e$ | + | + | | ||
| | **1j** | Requirements-based test $^f$ | inherent cargo test | 🟢 | | ||
|
fried-gluttony marked this conversation as resolved.
Outdated
|
||
| | **1k** | Interface test $^g$ | inherent cargo test | 🟢 | | ||
| | **1l** | Fault injection test $^h$ | TBD | TBD | | ||
| | **1m** | Resource usage evaluation $^i$ | TBD | TBD | | ||
| | **1n** | Back-to-back comparison test $^j$ | TBD | TBD | | ||
|
|
||
| Table 9 — Structural coverage metrics at the software unit level | ||
|
|
||
| | ID | Method | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :---: | :---: | | ||
| | **1a** | Statement coverage | llvm/Tool TBD | 🟢 | | ||
| | **1b** | Branch coverage | llvm/Tool TBD | 🟢 | | ||
| | **1c** | MC/DC (Modified Condition/Decision Coverage) | no tool support yet | 🔴 | | ||
|
|
||
| - Coverage instrumentation 🟡 | ||
| - Exists for x86 | ||
| - For embedded targets TBD | ||
| - General test tooling and report generation 🟢 | ||
| - inherently supported by cargo test | ||
| - report generation TBD | ||
| - Tracebility tooling between test case definition and test case specification 🟡 | ||
| - TBD | ||
|
|
||
| ### 🟡 6-10 Software unit integration & verification | ||
|
|
||
| Table 10 — Methods for verification of software integration | ||
|
|
||
| | ID | Method | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :---: | :---: | | ||
| | **1a** | Requirements-based test $^a$ | TBD | TBD | | ||
| | **1b** | Interface test | TBD | TBD | | ||
| | **1c** | Fault injection test $^b$ | TBD | TBD | | ||
| | **1d** | Resource usage evaluation $^{c, d}$ | TBD | TBD | | ||
| | **1e** | Back-to-back comparison test $^e$ | TBD | TBD | | ||
| | **1f** | Verification of the control flow and data flow | TBD | TBD | | ||
| | **1g** | Static code analysis $^f$ | TBD | TBD | | ||
| | **1h** | Static analyses based on abstract interpretation $^g$ | TBD | TBD | | ||
|
|
||
| Table 12 — Structural coverage at the software architectural level | ||
|
|
||
| | ID | Method | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :---: | :---: | | ||
| | **1a** | Function coverage $^a$ | llvm/Tool TBD | 🟢 | | ||
| | **1b** | Call coverage $^b$ | llvm/Tool TBD | 🟢 | | ||
|
|
||
| ### 🟡 6-11 Testing embedded software | ||
|
|
||
| Table 14 — Methods for tests of the embedded software | ||
|
|
||
| | ID | Method | Solution: Rust Native or Tool | Readiness | | ||
| | :--- | :--- | :---: | :---: | | ||
| | **1a** | Requirements-based test | TBD | TBD | | ||
| | **1b** | Fault injection test $^a$ | TBD | TBD | | ||
|
|
||
| ### Annex C | ||
|
|
||
| ## 🔴 8 Supporting Processes | ||
|
fried-gluttony marked this conversation as resolved.
Outdated
|
||
|
|
||
| - Tool Qualification 🔴 | ||
| - TODO: keep in mind the usage of tools requires tool qualification. Depending on your usage, context, processes, this might require you to qualify the tool. | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.