|
1 |
| -# Overview |
| 1 | +# Goals |
2 | 2 |
|
3 | 3 | ## Elevator pitch
|
4 | 4 |
|
5 |
| -Coding guidelines are available within this repository, potentially deployed to a website mdBook-style. |
| 5 | +We will make Rust coding guidelines are available within this repository, deployed to an accessible location on the internet which comply with relevant standards for various safety-critical industries such as: IEC 61508, ISO 26262, and DO 178. |
6 | 6 |
|
7 | 7 | ## Detailed
|
8 | 8 |
|
9 |
| -In general these coding guidelines should be a set of rules of do / do not do with examples which should cover all "general" aspects of the Rust programming language, e.g. enums, structs, traits, and so on. We can use the [FLS](https://rust-lang.github.io/fls/index.html) as a means to ensure we have reasonable coverage of the language. |
10 |
| - |
11 |
| -There should be an addendum which covers how various safety standards like ISO 26262 map onto the coding guidelines. |
12 |
| - |
13 |
| -This serves as a tracking issue which is why it's considered "XL". Work will get logged against this in smaller chunks! |
14 |
| - |
15 |
| -# Way of work |
16 |
| - |
17 |
| -## Outline & issue breakdown |
| 9 | +In general these coding guidelines will be a set of rules of do / do not do with examples which should cover all "general" aspects of the Rust programming language, e.g. enums, structs, traits, and so on. We will use the [FLS](https://rust-lang.github.io/fls/index.html) as a means to ensure we have reasonable coverage of the language. |
18 | 10 |
|
19 |
| -We will use the Coding Guidelines Work Items [board](https://github.com/orgs/rustfoundation/projects/1) as a means to break the work down into smaller chunks that can be tackled in a reasonable manner. |
| 11 | +There will be an addendum which covers how various safety standards like ISO 26262 map onto the coding guidelines. |
20 | 12 |
|
21 |
| -## Contribution of existing guidelines |
22 |
| - |
23 |
| -We are very open to receiving contributed coding guidelines in whole or in part and wholly originally contributions based on learnings from past organizational experience using Rust in safety-critical projects. |
24 |
| - |
25 |
| -## Contribution of a new guideline |
26 |
| - |
27 |
| -A good first step is to open a new [coding guideline issue](https://github.com/rustfoundation/safety-critical-rust-coding-guidelines/issues/new?template=CODING-GUIDELINE.yml). |
28 |
| - |
29 |
| -# Goals |
| 13 | +## Criteria |
30 | 14 |
|
31 |
| -* Coding guidelines that make a "best effort" attempt at cataloging common pieces (e.g. functions, arithmetic, unsafe) of the Rust programming language and how they fit into a safety-critical project |
| 15 | +* We produce coding guidelines that make a "best effort" attempt at cataloging common pieces (e.g. functions, arithmetic, unsafe) of the Rust programming language and how they fit into a safety-critical project |
32 | 16 | * We will use [MISRA Compliance: 2020](https://misra.org.uk/app/uploads/2021/06/MISRA-Compliance-2020.pdf) for categorization
|
33 |
| - * Includes rationale with links to parts of the Rust Project and wider Rust community for guidance |
34 |
| - * Could later be refined according to various standards, e.g. DO 178 or ISO 26262 |
35 |
| -* Practical recommendations on how to use this piece of the language |
36 |
| - * May include considerations of "what" is being built, e.g. broadly speaking library software: (potentially broke down further into low-level driver code, a framework system for real-time applications, SDKs) vs application software |
37 |
| -* Should be done in parallel with developing an addendum matrix to reduce burden of attaching these later |
38 |
| - * We can begin with DO 178 and ISO 26262 at perhaps chapter level, maybe subsection level _for now_ and expand later |
39 |
| -* Releases of the coding guidelines are released and tagged with the versions of stable Rust that they support (e.g. `1.42`) |
40 |
| -* Upstream Clippy lints which will cover decidable guidelines |
41 |
| - |
42 |
| -## Goals obtained by discussion with Tooling Subcommittee |
43 |
| - |
44 |
| -* Make a label for each which _in theory_ is decidable or not |
45 |
| -* Include for each guideline a minimum of one compliant and one non-compliant example of code, to help illustrate its exact meaning and context. |
46 |
| -* Consider only the language reference / spec, not the tooling availability when writing the coding guidelines |
47 |
| -* Guidelines should be evidence-based, with statistics around human error when programming Rust, to support: |
| 17 | + * We include a rationale with links to parts of the Rust Project and wider Rust community for guidance |
| 18 | + * We will include linkage where appropriate to to various standards, e.g. CERT C, MISRA C, DO 178, ISO 26262 |
| 19 | + * We will include practical recommendations on how to use this piece of the language using compliant and non-compliant examples |
| 20 | +* We will develop an addendum matrix to reduce burden of attaching these later |
| 21 | + * We will begin with DO 178 and ISO 26262 at perhaps chapter level, maybe subsection level _for now_ and expand later |
| 22 | +* We will release the coding guidelines tagged with the versions of stable Rust that they support (e.g. `1.42`) |
| 23 | +* We will create Clippy lints which will cover decidable guidelines |
| 24 | + |
| 25 | +### Criteria obtained by discussion with Tooling Subcommittee |
| 26 | + |
| 27 | +* We will affix a label for each guideline, which describes whether said guideline is decidable or not (in the theory of computation sense) |
| 28 | +* We will include for each guideline a minimum of one compliant and one non-compliant example of code, to help illustrate its exact meaning and context. |
| 29 | +* We will consider only the language reference / spec, not the tooling availability when writing the coding guidelines |
| 30 | +* We aim to produce evidence-based guidelines, with statistics around human error when programming Rust, to support: |
48 | 31 | 1. What guidelines are written, and
|
49 | 32 | 2. Why a specific suggestion was made
|
50 |
| -* Produce the guidelines in an artifact that's easily machine readable and consistent format to make it easier to consume by tool vendors as a baseline (e.g. multiple JSON files, one per language piece, also potentially one large JSON concatenated together) |
| 33 | +* We will produce the guidelines in an artifact that's easily machine readable and consistent format to make it easier to consume by tool vendors as a baseline (e.g. multiple JSON files, one per language piece, also potentially one large JSON concatenated together) |
51 | 34 |
|
52 |
| -# Non-goals |
| 35 | +# Explicit non-goals |
53 | 36 |
|
54 |
| -* For the initial version to be complete coverage of the Rust programming languages pieces |
55 |
| - * "Something" shipped to alleviate pressure at organizations is better than "nothing available" |
| 37 | +* For the initial version to be complete coverage of the Rust programming language |
| 38 | + * "Something" shipped to alleviate pressure at organizations is better than "nothing is available" even if we have to heavily subset the language |
56 | 39 | * For any version to be conflict-free with various members' or their organizations' viewpoints
|
57 |
| - * Members and their organizations may take different stances on how pieces of the Rust programming language should be viewed and approached. This is **okay and expected**. |
| 40 | + * Members and their organizations may take different stances on how Rust programming language constructs should be viewed and approached. This is **okay and expected**. |
58 | 41 | * We'd like to ship something that we can obtain broad consensus on.
|
59 | 42 | * Worst case scenario: there may be a section here or there which you may need to adjust in an internal version that'd downstream.
|
0 commit comments