> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/redox-os/redox/llms.txt
> Use this file to discover all available pages before exploring further.

# Contributing to Redox

> Guidelines and requirements for contributing to the Redox OS project

Thank you for your interest in contributing to Redox! This guide will help you understand how to contribute effectively to the project.

## Code of Conduct

We follow the [Rust Code of Conduct](https://www.rust-lang.org/policies/code-of-conduct).

## License

<Info>
  In general, your contributions to Redox are governed by the [MIT License](https://en.wikipedia.org/wiki/MIT_License). Each project repository has a `LICENSE` file that provides the license terms for that project.
</Info>

Please review the `LICENSE` file for the project you are contributing to. Learn more about [why we use the MIT license](https://doc.redox-os.org/book/philosophy.html).

## Contribution Terms

<Warning>
  When making a contribution you agree to the following terms:

  * I (the contributor) am the copyright owner of these changes
  * I submit these changes according to the project's license with no additional requirements
  * I understand these changes in full and will be able to respond to review comments
</Warning>

This is similar to [Developer Certificate of Origin](https://developercertificate.org/) from Linux Foundation.

## AI Policy

<Warning>
  **Redox OS does not accept contributions generated by LLMs** ([Large Language Models](https://en.wikipedia.org/wiki/Large_language_model)), sometimes also referred to as "AI".

  This policy is not open to discussion. Any content submitted that is clearly labelled as LLM-generated (including issues, merge requests, and merge request descriptions) will be immediately closed, and any attempt to bypass this policy will result in a ban from the project.
</Warning>

## Communication Channels

### Matrix (Official)

Matrix is the official way to talk with Redox OS team and community (English-only).

<Steps>
  <Step title="Choose a Matrix client">
    [Element](https://element.io/) is a commonly used choice that works on web browsers, Linux, MacOSX, Windows, Android and iOS. If you have problems with Element, try [Fractal](https://gitlab.gnome.org/World/fractal).
  </Step>

  <Step title="Join the Join Requests room">
    Join the [Join Requests](https://matrix.to/#/#redox-join:matrix.org) room (or use `#redox-join:matrix.org`) and send a message requesting an invite to the Redox Matrix space. This helps us avoid spam and bots.
  </Step>

  <Step title="Leave the Join Requests room">
    After you've been granted access to the Redox space, we recommend leaving the "Join Requests" room.
  </Step>
</Steps>

<Tip>
  For larger discussions in our rooms, use an Element thread. It's more organized and easier to keep track when multiple discussions happen in the same room.
</Tip>

You can find more information on the [Chat](https://doc.redox-os.org/book/chat.html) page.

### Discord (Alternative)

We have a [Discord server](https://discord.gg/JfggvrHGDY) as an alternative for Matrix. Open the #join-requests channel and send a message requesting to be a member.

<Note>
  Matrix messages are sent to Discord and vice-versa using a bot, but sometimes some Discord messages aren't sent to Matrix. If this happens to you, join our Matrix space instead.
</Note>

## GitLab

A more formal way of communication with fellow Redox developers. Submit an issue when you run into problems compiling or testing. Issues can also be used to discuss features, code style, code inconsistencies, minor changes and fixes, etc.

<Card title="Creating a GitLab Account" icon="gitlab" href="https://doc.redox-os.org/book/signing-in-to-gitlab.html">
  Read the Signing in to GitLab guide to create your account
</Card>

<Warning>
  **Important:** After creating an issue, post the link in the Dev or Support rooms of the chat. GitLab email notifications have distractions (service messages or spam) and most developers don't leave their GitLab pages open to receive desktop notifications. This helps prevent issues from being accidentally forgotten.
</Warning>

### Merge Requests

If you have ready MRs (merge requests), send the links in the [MRs](https://matrix.to/#/#redox-mrs:matrix.org) room. You'll need to request an invite in the [Join Requests](https://matrix.to/#/#redox-join:matrix.org) room first.

<Tip>
  Sending a message in the room ensures your MR won't be forgotten or accumulate conflicts.
</Tip>

## Best Practices and Guidelines

You can read the best practices and guidelines in the [Best practices and guidelines](https://doc.redox-os.org/book/best-practices.html) chapter.

## Development Recommendations

<AccordionGroup>
  <Accordion title="Build System">
    * Read the entire [Build System Reference](https://doc.redox-os.org/book/build-system-reference.html) and [Developer FAQ](https://doc.redox-os.org/book/developer-faq.html) pages
    * Keep your build system up-to-date, read the [Update The Build System](https://doc.redox-os.org/book/build-system-reference.html#update-the-build-system) section
  </Accordion>

  <Accordion title="Recipe Development">
    * For local changes in recipe sources, disable automatic recipe source updates. See [Local Recipe Changes](https://doc.redox-os.org/book/configuration-settings.html#local-recipe-changes) for one or multiple recipes
    * For all recipes, see [Cookbook Offline Mode](https://doc.redox-os.org/book/configuration-settings.html#cookbook-offline-mode)
    * Changes to system components, drivers or RedoxFS require manual initfs updates. See [How to update initfs](https://doc.redox-os.org/book/coding-and-building.html#how-to-update-initfs)
  </Accordion>

  <Accordion title="Debugging Tips">
    * If a program can't build or work, something might be missing in [relibc](https://gitlab.redox-os.org/redox-os/relibc), like a POSIX/Linux function or bug
    * Test different QEMU settings if you encounter errors
    * Use recommended distributions: Pop\_OS!, Ubuntu, Debian, and Fedora
    * Always log errors:

    ```bash theme={null}
    your-command 2>&1 | tee file-name.log
    ```
  </Accordion>

  <Accordion title="Merge Request Tips">
    * If you have a problem that seems unsolvable, think about simple/obvious things. Sometimes confidence in your method makes you forget obvious issues
    * For quick reviews, keep MRs small
    * If a large MR is taking too long to review, try splitting it into smaller MRs (but ensure nothing breaks)
  </Accordion>
</AccordionGroup>

## Style Guidelines

### Rust

Follow the official Rust standards for formatting and run `rustfmt` on your changes until the CI system is set up to do it automatically.

### Git

Please follow our [Git style](https://doc.redox-os.org/book/creating-proper-pull-requests.html) for pull requests.

## GitLab Profile Setup

<Steps>
  <Step title="Add your chat username">
    Once your GitLab account is created, add your Matrix or Discord username (the name after the `@` symbol) in the "About" section of your profile so we can recognize you properly.
  </Step>
</Steps>

## Where to Contribute

Before starting to contribute, we recommend reading the [General FAQ](https://www.redox-os.org/faq/) and the [Redox Book](https://doc.redox-os.org/book/).

### Repositories (easiest-to-hardest order)

<CardGroup cols={2}>
  <Card title="Website" icon="globe" href="https://gitlab.redox-os.org/redox-os/website">
    Website contributions
  </Card>

  <Card title="Book" icon="book" href="https://gitlab.redox-os.org/redox-os/book">
    High-level documentation
  </Card>

  <Card title="Build System" icon="gear" href="https://gitlab.redox-os.org/redox-os/redox">
    Our main repository
  </Card>

  <Card title="Orbital" icon="window-maximize" href="https://gitlab.redox-os.org/redox-os/orbital">
    Display Server and Window Manager
  </Card>

  <Card title="pkgutils" icon="box" href="https://gitlab.redox-os.org/redox-os/pkgutils">
    Package Manager
  </Card>

  <Card title="acid" icon="vial" href="https://gitlab.redox-os.org/redox-os/acid">
    Redox Test Suite
  </Card>

  <Card title="relibc" icon="c" href="https://gitlab.redox-os.org/redox-os/relibc">
    Redox C Library
  </Card>

  <Card title="libredox" icon="book-bookmark" href="https://gitlab.redox-os.org/redox-os/libredox">
    Redox System Library
  </Card>

  <Card title="Bootloader" icon="power-off" href="https://gitlab.redox-os.org/redox-os/bootloader">
    Bootloader
  </Card>

  <Card title="RedoxFS" icon="hard-drive" href="https://gitlab.redox-os.org/redox-os/redoxfs">
    Default filesystem
  </Card>

  <Card title="Base" icon="cubes" href="https://gitlab.redox-os.org/redox-os/base">
    Essential system components and drivers
  </Card>

  <Card title="Kernel" icon="microchip" href="https://gitlab.redox-os.org/redox-os/kernel">
    Kernel development
  </Card>
</CardGroup>

To see all Redox repositories, visit the [redox-os group](https://gitlab.redox-os.org/redox-os).

## Contribution by Skill Level

<Tabs>
  <Tab title="No Programming Experience">
    * Test the [daily images](https://static.redox-os.org/img/) on your computer and add reports to the [Hardware Compatibility](https://gitlab.redox-os.org/redox-os/redox/-/blob/master/HARDWARE.md) list
    * Monitor and warn developers if the [daily images](https://static.redox-os.org/img/) are outdated
    * Use/test Redox and create issues for bugs or needed features (check for duplicates first)
    * Fix and write documentation
    * Find or fix typos in configuration
  </Tab>

  <Tab title="Non-Rust Programmers">
    * Web development on the website (minimal JavaScript only to preserve performance)
    * Write unit tests (may require minimal knowledge of Rust)
    * Port C/C++ programs to Redox (read the `TODO`s in [WIP category](https://gitlab.redox-os.org/redox-os/redox/-/tree/master/recipes/wip) recipes)
    * Port programs to Redox
  </Tab>

  <Tab title="Rust (No OS Dev)">
    * See the [easy](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name\[]=easy) issues
    * See the [good first issue](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name\[]=good%20first%20issue) issues
    * See the [help wanted](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name\[]=help%20wanted) issues
    * Improve the package manager, or build system tooling like `redoxer` or `installer`
    * Improve the [Ion](https://gitlab.redox-os.org/redox-os/ion) shell, or other high-level or mid-level projects
    * Port Rust programs (also look for issues with the `port` label)
    * Improve application compatibility in relibc by implementing missing POSIX/Linux functions
  </Tab>

  <Tab title="Systems/OS Development">
    * Familiarize yourself with the repository layout, code, and build system
    * Update old code to remove warnings
    * Search for `TODO`, `FIXME`, `BUG`, `UNOPTIMIZED`, `REWRITEME`, `DOCME`, and `PRETTYFYME` and fix the code
    * Look for issues with labels: `critical`, `help wanted`, `feature`, `enhancement`, `bug` or `port`
    * Improve internal libraries and abstractions, e.g. `libredox`, `redox-scheme`, `redox-event`
    * Help upstream Redox-specific functionality to the Rust ecosystem
    * Improve Redox's automated testing suite and continuous integration testing processes
    * Improve, profile, and optimize code, especially in the kernel, filesystem, and network stack
    * Improve or write device drivers
  </Tab>
</Tabs>

## Priorities and Roadmap

### Current Priorities

Use these GitLab issue label filters to know our development priorities:

* [Critical](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name\[]=critical)
* [High-priority](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name\[]=high-priority)
* [Medium-priority](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name\[]=medium-priority)
* [Low-priority](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name\[]=low-priority)

### Roadmap

We use tracking issues for roadmap goals:

* [Tracking issues](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name\[]=tracking%20issue)

### RFCs

For significant changes that affect Redox's architecture, we use the [Request for Comments](https://gitlab.redox-os.org/redox-os/rfcs) repository.

## Other Ways to Contribute

### Design

If you're a good designer (2D graphics, 3D graphics, interfaces, web design), you can help with logos, UI design, UI skins, app icons, desktop backgrounds, etc.

* [Redox backgrounds](https://gitlab.redox-os.org/redox-os/backgrounds) - Submit your wallpapers
* [Redox assets](https://gitlab.redox-os.org/redox-os/assets) - Submit your logos, icons and themes

For questions about graphic design, ask on the [Chat](https://doc.redox-os.org/book/chat.html).

### Donate to Redox

If you are interested in donating to the Redox OS Nonprofit, visit the [Donate](https://www.redox-os.org/donate/) page.

## Next Steps

<CardGroup cols={2}>
  <Card title="Development Workflow" icon="code-branch" href="/development/workflow">
    Learn about the git workflow and development process
  </Card>

  <Card title="Debugging Guide" icon="bug" href="/development/debugging">
    Learn how to debug Redox OS
  </Card>

  <Card title="Testing Guide" icon="vial" href="/development/testing">
    Learn how to test your contributions
  </Card>

  <Card title="Build System" icon="hammer" href="https://doc.redox-os.org/book/build-system-reference.html">
    Complete build system reference
  </Card>
</CardGroup>
