3. You should follow the [Design Goals](/development/design/index.md) and [Best Practices](#best-practices) when possible
Otherwise, feel free to start contributing!
## Best Practices
These are various "best practices" for code written for the **Mercury** project.
They should be followed when reasonable, to the best of your ability/understanding.
Feel free to [contact](https://mercury.the-system.eu.org/contribute/) a maintainer with questions!
- No compromises will be made for compatibility. If there is a better, if unusual, way to do things, it should be done that way.
- Everything must be fully accessible. Everything else can be sacrificed for this.
-`unsafe` code should be avoided when possible.
- Everything should be documented as it is written.
- Nesting should be avoided as much as possible.
- If something can be excluded from the main `kernel`, it should be. It's a `microkernel`!
- Features should be *opt-in* rather than *opt-out*.
## Source Code
All of the source code for **Mercury** is on a self-hosted [Gitea](https://git.lavender.software/mercury), courtesy of [Lavender Software](https://lavender.software).
Sign up there, and contact one of the maintainers to get access to the repositories.
The source for this site, and our [website](https://mercury.the-system.eu.org) is available there as well.
All `crates`/`libraries` are in a `no-std` environment. This means we only have access to the [libcore](https://doc.rust-lang.org/core/) functionality.
However, we will be using the `alloc` crate to access the heap, and`collections` to have access to data structures like `Vec`.
5. Read the [RISC-V Guide](https://github.com/mikeroyal/RISC-V-Guide)/[RISC-V Bytes](https://danielmangum.com/categories/risc-v-bytes/) to learn more about the **RISC-V** architecture
Additionally you might want to learn about **Vulkan** if you're going to be hacking on the [GUI](/development/design/gui.md):
1. Go through the [Vulkan Tutorial (Rust)](https://kylemayes.github.io/vulkanalia/introduction.html) to learn some of the basics
2. Read through the [Vulkano](https://vulkano.rs/about.html) docs. *(**Vulkano** is a safe wrapper around the **Vulkan API**. It's likely what we will be using)*