Yay! We're so happy you want to contribute! Below are the various rules and guidelines for doing so.
DO NOT USE IRIDIUM FOR ANYTHING IN PRODUCTION
It is primarily a teaching tool at https://blog.subnetzero.io, and while it may someday be suitable for production use, it isn't right now.
This project and everyone participating in it is governed by the Iridium Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected]
For the people that like forum-style with Discourse: https://discourse.subnetzero.io/ For the Gitter people: https://gitter.im/iridium-rs/general For the Discord people: https://discord.gg/wjwQ22r
And yes, we'll shortly have IRC, Matrix, Slack, and every other freaking chat service that has ever existed, oh my god.
Ahem.
Lots of ways! First, though, you should know that Iridium is a learning exercise and educational tool. All technical aspects of its development are blogged at https://blog.subnetzero.io/project/iridium-vm. Features on the roadmap are intended to have a tutorial written while they are coded; if you work on those, you get to write a blog post. =)
If there is a non-roadmap feature you would like to code, that's fine. It would be great if you would write up a tutorial or article on the experience, but it isn't required. There is currently no set process to get a feature in, so, uh, just ping me ([email protected]) to talk about it. If this project attracts contributors, we'll have a less, ah, authoritarian style of goverenance.
In all cases, please open a GitLab issue. Bear in mind that some bugs are left in intentionally so that they can be used in tutorials later. If this is the case, we will tag it with the release in which it should be fixed.
We use semver in a slightly odd way -- or at least people tell me we do, while glaring at me. Each patch
number in semver maps to a specific tutorial and a GitLab tag. So we have 0.0.16
, which you can read about here: https://blog.subnetzero.io/project/iridium-vm/building-language-vm-part-16/ and is tied to this tag in GitLab: https://gitlab.com/subnetzero/iridium/tags/0.0.16.
Each tutorial increments the patch
version by one. This started with 0.0.16
, so there are no tags prior to that. Once all of the tutorials are written, or a minimum subset, and it's considered "complete" with respect to the tutorials, the minor version will go to 1. At that point, the project will follow a more typical workflow.
We are not (yet) dogmatic. Just follow these rules:
- rustfmt
- clippy
- Doc comment all functions, structs, enums, everything. Everything.
- Write some tests
- Nightly
- Unsafe without discussion
- Security is more important than performance
- Code should be as complex as it needs to be and as simple as it can be
- Comments should explain why, not what
- Focus on writing tests for the more critical aspects first
- Warnings are errors
I personally tend to write Rust with a more imperative style; you rarely see me using map
and such. A more functional style is fine to use. Please do not be that person that writes tons of clever hacks or insists on using every feature in the language.
- Make a branch off of the latest master. Avoid branches of branches of branches
- Make your changes
- Submit an MR for review
This will get updated more as the project grows.