Skip to content

Commit 79a808b

Browse files
mhatzlmanczak-ifxPLeVasseurtshepang
authored
Add machine readable lists covering all proposed tools and desired compiler features (#463)
* first yaml list * yaml with tools list structure * added desired compiler features list * Bring tools list in better searchable format * Add safety & security category field for desired features * Add proposed tools to list * Change file name to a better fitting one * Fix standards naming Co-authored-by: Pete LeVasseur <plevasseur@gmail.com> * Fix safety level names Co-authored-by: Pete LeVasseur <plevasseur@gmail.com> * Fix license typo Co-authored-by: Pete LeVasseur <plevasseur@gmail.com> * Remove redundant information Co-authored-by: Tshepang Mbambo <hopsi@tuta.io> * Add liability field for tools to clarify open-source commercial products * Update new-tool issue template Adds fields to provide info the tools list format needs. * Remove optional fields vendor, liability, and qualified * Fix details for Ferrocene * Add disclaimer comment clarifying that list only gives tool overview * Improve wording for the description label * Add Rust code to check tools list * Allow info field for qualification entries --------- Co-authored-by: Manczak Tiago (CSS DSI D SW FW FLH) <Tiago.Manczak@infineon.com> Co-authored-by: Pete LeVasseur <plevasseur@gmail.com> Co-authored-by: Tshepang Mbambo <hopsi@tuta.io>
1 parent 1618230 commit 79a808b

8 files changed

Lines changed: 727 additions & 3 deletions

File tree

.github/ISSUE_TEMPLATE/submit_tool.yml

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ body:
2323
- type: textarea
2424
id: tool_description
2525
attributes:
26-
label: What is a description of the tool, what it does, how it would be used?
26+
label: Add a concise description of the tool. Please refrain from marketing claims and stick to what the tool is, does, and how it would be used?
2727
validations:
2828
required: true
2929
- type: input
@@ -32,6 +32,12 @@ body:
3232
label: Link to the tool repo or homepage
3333
validations:
3434
required: true
35+
- type: input
36+
id: tool_license
37+
attributes:
38+
label: License of the tool
39+
validations:
40+
required: true
3541
- type: dropdown
3642
id: submitter_role
3743
attributes:
@@ -44,18 +50,39 @@ body:
4450
- 'Other'
4551
validations:
4652
required: true
53+
- type: input
54+
id: tool_vendor
55+
attributes:
56+
label: Optional name of the tool vendor
57+
validations:
58+
required: false
59+
- type: input
60+
id: tool_liability
61+
attributes:
62+
label: Optional liability provided by the tool vendor
63+
validations:
64+
required: false
65+
- type: input
66+
id: tool_qualification
67+
attributes:
68+
label: List any standards the tool is qualified for
69+
validations:
70+
required: false
4771
- type: dropdown
4872
id: tool_type
4973
attributes:
5074
label: Tool category
5175
description: Specific use and type of this tool
5276
options:
53-
- "coverage"
77+
- "code-coverage"
5478
- "requirements-traceability"
55-
- "qualified-compiler"
79+
- "compiler"
5680
- "test-runner"
5781
- "formal-verification"
5882
- "static-analysis"
5983
- "tests-generation"
84+
- "package-manager"
85+
- "profiler"
86+
- "debugger"
6087
validations:
6188
required: false
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# This file lists desired Rust compiler features for security and safety-critical applications,
2+
# which are currently missing or incomplete in the standard Rust toolchain.
3+
4+
metadata:
5+
title: "Desired Rust Compiler Features"
6+
version: "1.0"
7+
date: "2025-10-01"
8+
purpose: "Track missing compiler features needed for safety-critical Rust applications"
9+
considered-standards:
10+
- name: "ISO 26262"
11+
levels: ["ASIL A", "ASIL B", "ASIL C", "ASIL D"]
12+
description: "Road vehicles - Functional safety"
13+
- name: "DO-178C"
14+
levels: ["DAL-E", "DAL-D", "DAL-C", "DAL-B", "DAL-A"]
15+
description: "Software Considerations in Airborne Systems and Equipment Certification"
16+
- name: "IEC 62304"
17+
levels: ["Class A", "Class B", "Class C"]
18+
description: "Medical device software - software life cycle processes"
19+
- name: "IEC 61508"
20+
levels: ["SIL-1", "SIL-2", "SIL-3", "SIL-4"]
21+
description: "Functional Safety of Electrical/Electronic/Programmable Electronic Safety-related Systems"
22+
- name: "ISO/SAE 21434"
23+
levels: ["CAL 1", "CAL 2", "CAL 3", "CAL 4"]
24+
description: "Road vehicles — Cybersecurity engineering"
25+
26+
topics:
27+
- name: "Stack Protector"
28+
description: "Stack buffer overflow detection and protection mechanism"
29+
priority: "High"
30+
status: "Missing"
31+
category: "Security"
32+
rationale: "Stack protection is not available in any Rust compiler, but required for runtime stack overflow detection in safety-critical systems"
33+
related-links:
34+
- "https://developer.arm.com/documentation/dui0774/l/Compiler-Command-line-Options/-fstack-protector---fstack-protector-all---fstack-protector-strong---fno-stack-protector"
35+
- "https://github.com/rust-lang/rust/issues/114903"
36+
37+
- name: "TrustZone"
38+
description: "TrustZone support for ARM Cortex-M processors"
39+
priority: "High"
40+
status: "Nightly"
41+
category: "Security"
42+
rationale: "TrustZone support is available only on nightly Rust. Stabilizing it is required for data sagmentation on cortex-m devices"
43+
related-links:
44+
- "https://developer.arm.com/documentation/100690/latest/"
45+
- "https://github.com/rust-lang/rust/issues/81391"
46+
- "https://github.com/rust-lang/rust/issues/75835"
47+
48+
- name: "Control Flow Integrity (CFI)"
49+
description: "Control flow integrity protection against ROP/JOP attacks"
50+
priority: "Medium"
51+
status: "Partial"
52+
category: "Security"
53+
rationale: "Prevents control flow hijacking attacks in safety-critical applications. Currently limited CFI support, not comprehensive for all control flow transfers"
54+
related-links:
55+
- "https://clang.llvm.org/docs/ControlFlowIntegrity.html"
56+
- "https://github.com/rust-lang/rust/issues/89653"
57+
58+
- name: "Deterministic Code Generation"
59+
description: "Reproducible binary output for certification requirements"
60+
priority: "High"
61+
status: "Partial"
62+
category: "Safety"
63+
rationale: "Not fully deterministic across different build environments. Required for certification processes that mandate reproducible builds"
64+
related-links:
65+
- "https://github.com/rust-lang/rust/issues/34902"
66+
67+
- name: "Coverage Instrumentation for Macros"
68+
description: "Code coverage that includes macro expansions"
69+
priority: "High"
70+
status: "Missing"
71+
category: "Safety"
72+
rationale: "Coverage tools cannot instrument macro-generated code. Complete coverage analysis required for safety certification"
73+
related-links:
74+
- "https://github.com/rust-lang/rust/issues/79417"
75+
76+
- name: "MC/DC"
77+
description: "MC/DC is currently not supported by any Rust compiler."
78+
priority: "High"
79+
status: "Missing"
80+
category: "Safety"
81+
rationale: "MC/DC is needed to reach highest levels of safety-critical software for example in DO-178C."
82+
related-links:
83+
- "https://github.com/rust-lang/rust/issues/124144"
84+
- "https://github.com/rust-lang/rust/pull/144999"
Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
# This file lists available safety-critical Rust tools and their qualification state.
2+
#
3+
# DISCLAIMER:
4+
# This tools list only provides an overview of tools that may be useful for safety-critical Rust projects.
5+
# No legal guarantees are made for the tool information mentioned in this list.
6+
# It is highly recommended to contact the tool vendor/maintainer before use especially for commercial tools.
7+
8+
metadata:
9+
title: "Rust Tooling for use in Safety Critical Projects"
10+
version: "1.0"
11+
date: "2025-09-29"
12+
tracked-standards:
13+
- name: "ISO-26262"
14+
levels: ["ASIL-A", "ASIL-B", "ASIL-C", "ASIL-D"]
15+
description: "Road vehicles - Functional safety"
16+
- name: "DO-178C"
17+
levels: ["DAL-E", "DAL-D", "DAL-C", "DAL-B", "DAL-A"]
18+
description: "Software Considerations in Airborne Systems and Equipment Certification"
19+
- name: "IEC 62304"
20+
levels: ["Class A", "Class B", "Class C"]
21+
description: "Medical device software - software life cycle processes"
22+
- name: "IEC 61508"
23+
levels: ["SIL-1", "SIL-2", "SIL-3", "SIL-4"]
24+
description: "Functional Safety of Electrical/Electronic/Programmable Electronic Safety-related Systems"
25+
26+
# Tools organized alphabetically by name
27+
tools:
28+
- name: "cargo"
29+
type: "package-manager"
30+
url: "https://github.com/rust-lang/cargo"
31+
description: "Built-in Rust package manager and test runner"
32+
license: "Apache 2.0 & MIT"
33+
34+
- name: "cargo-nextest"
35+
type: "test-runner"
36+
url: "https://nexte.st"
37+
description: "Next-generation test runner for Rust"
38+
license: "Apache 2.0 & MIT"
39+
40+
- name: "cargo-tarpaulin"
41+
type: "code-coverage"
42+
url: "https://github.com/xd009642/tarpaulin"
43+
description: "Code coverage tool for Rust"
44+
license: "Apache 2.0 & MIT"
45+
46+
- name: "clippy"
47+
type: "static-analysis"
48+
url: "https://github.com/rust-lang/rust-clippy"
49+
description: "Clippy is a collection of lints to catch common mistakes and improve Rust code. It analyzes code for potential bugs, performance issues, style violations, and suggests more idiomatic Rust patterns."
50+
license: "Apache 2.0 & MIT"
51+
52+
- name: "creusot"
53+
type: "formal-verification"
54+
url: "https://github.com/creusot-rs/creusot"
55+
description: "Creusot is a deductive verifier for Rust code. It verifies your code is safe from panics, overflows, and assertion failures. By adding annotations you can take it further and verify your code does the correct thing."
56+
license: "LGPL 2.1"
57+
58+
- name: "defmt-test"
59+
type: "test-runner"
60+
url: "https://github.com/knurling-rs/defmt"
61+
vendor: "Ferrous Systems GmbH"
62+
description: "Embedded testing framework"
63+
license: "Apache 2.0 & MIT"
64+
65+
- name: "Ferrocene"
66+
type: "compiler"
67+
url: "https://ferrocene.dev"
68+
vendor: "Critical Section GmbH"
69+
description: "Open-source qualified Rust compiler toolchain for safety- and mission-critical systems"
70+
license: "Apache 2.0 & MIT"
71+
liability: "Pre-qualified binaries and support are available with monthly/yearly subscriptions. Qualification kits are also available for an additional fee."
72+
qualified:
73+
- name: "ISO 26262"
74+
up-to: "ASIL-D"
75+
info: '''
76+
TÜV SÜD certificate: https://www.tuvsud.com/en/customer-hub/ps-cert/?q=Z10+123030+0001+Rev.+01.
77+
For more information, contact Ferrous Systems GmbH at https://ferrous-systems.com/contact#ferrocene.
78+
'''
79+
- name: "IEC 62304"
80+
up-to: "Class C"
81+
info: '''
82+
TÜV SÜD certificate: https://www.tuvsud.com/en/customer-hub/ps-cert/?q=Z10+123030+0001+Rev.+01.
83+
For more information, contact Ferrous Systems GmbH at https://ferrous-systems.com/contact#ferrocene.
84+
'''
85+
- name: "IEC 61508"
86+
up-to: "SIL 4"
87+
info: '''
88+
TÜV SÜD certificate: https://www.tuvsud.com/en/customer-hub/ps-cert/?q=Z10+123030+0001+Rev.+01.
89+
For more information, contact Ferrous Systems GmbH at https://ferrous-systems.com/contact#ferrocene.
90+
'''
91+
92+
- name: "flamegraph"
93+
type: "profiler"
94+
url: "https://github.com/flamegraph-rs/flamegraph"
95+
description: "Flame graph profiler for Rust"
96+
license: "Apache 2.0 & MIT"
97+
98+
- name: "GNAT Pro for Rust"
99+
type: "compiler"
100+
url: "https://www.adacore.com/gnatpro-rust"
101+
vendor: "AdaCore"
102+
description: "AdaCore's Toolsuite for High-Assurance Rust Software; Includes stable toolchain for long-term development, long-term support, and qualification"
103+
license: "Apache 2.0 & MIT"
104+
liability: "Contact AdaCore for costs and legalities related to qualification and support."
105+
106+
- name: "HighTec Rust Compiler"
107+
type: "compiler"
108+
url: "https://hightec-rt.com/products/rust-development-platform"
109+
vendor: "HighTec"
110+
description: "ISO 26262 ASIL D qualified Rust Compiler Development Platform for ARM based Stellar from STMicroelectronics and Infineon AURIX"
111+
license: "Apache 2.0 & MIT"
112+
liability: "Contact HighTec for costs and legalities related to qualification and support."
113+
qualified:
114+
- name: "ISO 26262"
115+
up-to: "ASIL-D"
116+
117+
- name: "kani"
118+
type: "formal-verification"
119+
url: "https://github.com/model-checking/kani"
120+
description: "Kani is an open-source verification tool that uses model checking to analyze Rust programs. Kani is particularly useful for verifying unsafe code blocks in Rust, where the 'unsafe superpowers' are unchecked by the compiler."
121+
license: "Apache 2.0 & MIT"
122+
123+
- name: "Lauterbach Trace32 Debugger"
124+
type: "debugger"
125+
url: "https://www.lauterbach.com/"
126+
vendor: "Lauterbach"
127+
description: "Lauterbach‘s TRACE32® tools are a suite of leading-edge hardware and software components that enables you to analyze, optimize and certify all kinds of embedded systems."
128+
license: "commercial"
129+
liability: "Contact Lauterbach for costs and legalities related to qualification and support."
130+
131+
- name: "mantra"
132+
type: "requirements-traceability"
133+
url: "https://crates.io/crates/mantra"
134+
description: "Requirements traceability with structural code analysis and code coverage"
135+
license: "MIT"
136+
137+
- name: "OpenFastTrace"
138+
type: "requirements-traceability"
139+
url: "https://github.com/itsallcode/openfasttrace"
140+
description: "OpenFastTrace (short OFT) is a requirement tracing suite."
141+
license: "GPL-3.0"
142+
143+
- name: "PLS UDE"
144+
type: "debugger"
145+
url: "https://www.pls-mc.com/products/universal-debug-engine/"
146+
vendor: "PLS Programmierbare Logik & Systeme GmbH"
147+
description: "UDE® Universal Debug Engine is the powerful development tool for debugging, tracing, and testing embedded software for a wide range of multicore SoCs and microcontrollers."
148+
license: "commercial"
149+
liability: "Contact PLS for costs and legalities related to qualification and support."
150+
151+
- name: "Reqtify"
152+
type: "requirements-traceability"
153+
url: "https://www.3ds.com/products/catia/reqtify"
154+
vendor: "Dassault Systèmes"
155+
description: "Reqtify is a solution which allows implementing an End-To-End Traceability along the whole V-Cycle across very different types of document and data bases (by plugin connector)."
156+
license: "commercial"
157+
liability: "Contact Dassault Systèmes for costs and legalities related to qualification and support."
158+
159+
- name: "sphinx-needs"
160+
type: "requirements-traceability"
161+
url: "https://sphinxcontrib-needs.readthedocs.io/"
162+
description: "Sphinx Needs is a requirements management extension for Sphinx documentation that enables tracing and linking of requirements, specifications, test cases, and other project artifacts"
163+
license: "MIT"
164+
165+
- name: "TESSY"
166+
type: "test-runner"
167+
url: "https://www.razorcat.com/en/product-tessy.html"
168+
vendor: "Razorcat"
169+
description: "Qualified unit testing tool"
170+
license: "commercial"
171+
liability: "Contact Razorcat for costs and legalities related to qualification and support."
172+
173+
- name: "TrustInSoft Analyzer"
174+
type: "static-analysis"
175+
url: "https://www.trust-in-soft.com/trustinsoft-analyzer"
176+
vendor: "TrustInSoft"
177+
description: "Static analysis for C, C++, and soon to be Rust code"
178+
license: "commercial"
179+
liability: "Contact TrustInSoft for costs and legalities related to qualification and support."
180+
181+
- name: "VectorCast"
182+
type: "test-runner"
183+
url: "https://www.vector.com/us/en/products/products-a-z/software/vectorcast/"
184+
vendor: "Vector Software"
185+
description: "Qualified test runner and generator for safety-critical applications"
186+
license: "commercial"
187+
liability: "Contact Vector Software for costs and legalities related to qualification and support."
188+
189+
- name: "verifast"
190+
type: "formal-verification"
191+
url: "https://github.com/verifast/verifast"
192+
description: "VeriFast is a tool for modular formal verification of the absence of undefined behavior in Rust1 programs that use unsafe blocks and the soundness of Rust modules that use unsafe blocks."
193+
license: "MIT"
194+
195+
open-topics:
196+
- name: "Fault Injection Tests"
197+
description: "No generally applicable tool exists to inject faults in Rust projects during testing."
198+
199+
- name: "Coding Guidelines"
200+
description: "No Rust coding guidelines currently exist, so no tool can enforce them."
201+
202+
- name: "Graphical Representation"
203+
description: "Missing tools that are capable to represent Rust code in a graphical way (e.g. flow chart)."

0 commit comments

Comments
 (0)