|
| 1 | +# Values |
| 2 | + |
| 3 | +The following are values for any crates adopted in the `rust-seq` stack. |
| 4 | + |
| 5 | +## Correctness |
| 6 | + |
| 7 | +Most fundamentally, software in the `rust-seq` stack is designed to produce |
| 8 | +correct results or error with reasonable error messages when producing correct |
| 9 | +results is not possible. We collectively believe that bioinformatics tools today |
| 10 | +are fragile and all too often either (a) silently fail or (b) return unhelpful |
| 11 | +information when failures occur. Eliminating these modes of failure in omics |
| 12 | +development and analyses is one of the primary reasons the project was created. |
| 13 | + |
| 14 | +To that end, correctness should be considered the highest priority of crates in |
| 15 | +the `rust-seq` stack—**even at the cost of performance**. |
| 16 | + |
| 17 | +## Performance |
| 18 | + |
| 19 | +Beyond correctness, performance is the next most fundamental goal of crates |
| 20 | +within the `rust-seq` stack. Simply put, if software is not performant, it's |
| 21 | +unlikely to be widely adopted and used. As such, there is a high emphasis on |
| 22 | +optimization and benchmarking for crates in the `rust-seq` stack. Changes that |
| 23 | +introduce regressions in performance are unlikely to be accepted (unless the |
| 24 | +case is sufficiently demonstrated that a new feature is worth the cost of a |
| 25 | +performance hit). |
| 26 | + |
| 27 | +# Contributable |
| 28 | + |
| 29 | +Crates in the `rust-seq` stack are designed to be contributed to be the |
| 30 | +community. Though one individual may carry the vision for a particular crate in |
| 31 | +the beginning, it should be possible for anyone to take a few hours to |
| 32 | +grok a crate's design, develop a set of improvements, and then submit those |
| 33 | +improvements to be considered. Achieving this uniformly across an ecosystem of |
| 34 | +crates necessitates many common practices, including: |
| 35 | + |
| 36 | +- All crates are **comprehensively tested** to ensure that code can be modified |
| 37 | + and refactored by non-experts with confidence. |
| 38 | +- All crates are **comprehensively linted** to ensure that code is of the |
| 39 | + highest quality possible. |
| 40 | +- All crates are **comprehensively documented** to ensure that using the code is |
| 41 | + clear and straightforward. This means (a) ensuring documentation for all |
| 42 | + public-facing code, (b) ensuring documentation for all private code [to ease |
| 43 | + development in those areas], and (c) including examples for any user-facing |
| 44 | + code to make sure usage is straightforward. Note that this can be accomplished |
| 45 | + largely by enabling the [`missing_docs`], |
| 46 | + [`clippy::missing_docs_in_private_items`], and |
| 47 | + [`rustdoc::missing_doc_code_examples`] lints. |
| 48 | + |
| 49 | +All of the above should be independently verified and readily reported by |
| 50 | +continuous integration processes on PRs to ensure that contributors can iterate |
| 51 | +asyncronously towards a common goal-post for contributions. Note that this also |
| 52 | +builds confidence in hesistant contributors that they can work without the |
| 53 | +perception of bothering maintainers, which is a common discourager of |
| 54 | +open-source contributions. |
| 55 | + |
| 56 | +## Maintained |
| 57 | + |
| 58 | +Crates in the `rust-seq` stack are _permanent_ commitments to addressing a |
| 59 | +particular need in the ecosystem. In particular, they are not "published and |
| 60 | +forgotten". To that end, the expectation is that crates will continue to evolve |
| 61 | +as technology evolves, providing a first-class experience that's always up to date. |
| 62 | + |
| 63 | +## Stable |
| 64 | + |
| 65 | +Crates in the `rust-seq` stack follow [semantic versioning]. In brief, this |
| 66 | +means that you can immediately look at the version and know the stage of the |
| 67 | +project (`v0.y.z` means the crate is still in development and the API is not yet |
| 68 | +stable), `v1.y.z` is the first stable release that will always remain backwards |
| 69 | +compatible for version starting with `v1`, etc). It also means that software |
| 70 | +will not unexpectedly break once you've built on top of a particular dependency |
| 71 | +(not considering, of course, when software is in the `v0.y.z` stage). |
| 72 | + |
| 73 | +[`missing_docs`]: https://doc.rust-lang.org/stable/nightly-rustc/rustc_lint/builtin/static.MISSING_DOCS.html |
| 74 | +[`clippy::missing_docs_in_private_items`]: https://rust-lang.github.io/rust-clippy/master/index.html#/missing_docs_in_private_items |
| 75 | +[`rustdoc::missing_doc_code_examples`]: https://doc.rust-lang.org/stable/nightly-rustc/rustdoc/lint/static.MISSING_DOC_CODE_EXAMPLES.html |
| 76 | +[semantic versioning]: https://semver.org/ |
0 commit comments