- The Embedded Rustacean
- Posts
- Embedded Rust Contribution Guide
Embedded Rust Contribution Guide
Grow and Help the Rust Community
Are you interested in contributing to the evolution of embedded Rust? The good news is that there are several ecosystem contribution avenues/areas depending on what you want to do. Each area of contribution plays a vital role in the growth and success of the embedded Rust ecosystem. Depending on your skills, interests, and expertise, you can choose one or more areas to focus on and make a meaningful impact. For different platforms/controllers, there are maintainers of different crates that sometimes announce their priorities and areas where help is needed. You can find a list below in this post.
Contribution Areas π¨βπ»
Some areas include, but are not limited to, the following:
Code Contributions: Developing and enhancing embedded Rust libraries, crates, peripheral drivers, and frameworks.
Documentation and Learning Resources: Writing and improving documentation for libraries, crates, and tools. You can also create tutorials, guides, and examples to help newcomers learn embedded Rust. Additionally, translating documentation to make it accessible to a wider audience.
Bug Tracking and Issue Triage: This involves identifying and reporting bugs in libraries and tools. You can also help maintainers prioritize and triage issues.
Testing and Quality Assurance: You can write and maintain unit tests, integration tests, and end-to-end tests. Additionally, you can contribute to Continuous Integration (CI) setups to ensure code quality or perform code reviews.
Porting and Platform Support: part of increasing the reach of Rust is in supporting more controllers. As such, you can port Rust to new embedded platforms and microcontrollers. A good point to start might be also in supporting and maintaining existing platform-specific code.
Performance Optimization: You can contribute performance improvements to libraries and core components.
Tooling and Development Environment: This involves developing and improving tools that aid embedded Rust development.
Community Engagement and Awareness: This entails participating in online forums, mailing lists, community meetings, and chat platforms to help others. Also spreading awareness about the benefits of using Rust in embedded systems to encourage adoption. Some forms could be in writing blog posts, and articles, and giving talks to showcase real-world use cases.
You can find starting points for contribution areas by accessing resources available by maintainers. These resources typically fall into the following categories:
π¦ Repositories
π£οΈ Roadmaps
π¬ Chat Rooms
π€ Community Meetings
π Blogs
The next section provides a list of maintainers and links to the different categories shown above.
Maintainers π·ββοΈ
The Embedded Devices Working Group
The embedded devices working group is an official working group composed of several teams whose functions are defined here. The working group is broken down into different teams which you can find the full organization on the coordination GitHub repository. In its capacity, the embedded working group develops and maintains a long list of projects which are too many to list all here. However, the working group maintains some of the most popular crates like cortex-m
, embedded-hal
, itm
, and svd2rust
. You can refer to the working group repo for the full list. This section lists all the teams and all the projects owned by the WG. For contribution starting points here are some useful links:
π¦οΈ Repositories: Rust Embedded GitHub Project and the Embedded Working Group Coordination Repository.
π£οΈ Roadmap: The Rust Lang Team Roadmap. Note that the roadmap is general for Rust but mentions areas of focus for embedded that fall under the embedded WG mandate.
π€ Community Meetings: They occur in the Matrix room Tuesdays, 8pm CET/CEST. You can find past meeting logs here as well.
π Blogs: The Embedded Rust Working Group Blog - This resource seems outdated since the last update was from 2022.
Espressif Systems
Espressif Systems is a semiconductor company known for its famous ESP devices. Espressif has a core team maintaining several libraries, crates, and examples for using Rust on Espressif SoC's (ESP32s mainly). This includes crates like the esp-idf-hal
and the esp-hal
among various other tools for the Espressif chips. For contribution starting points here are some useful links:
π¦οΈ Repositories: the esp-rs official repository.
π£οΈ Roadmap: Rust on Espressif chips - 2023 Roadmap.
π¬ Chat Room(s): #esp-rs:matrix.org Matrix room.
π€ Community Meetings: Thursdays at 5 pm CEST/GMT+2 via Google Meet. To join, you just need to notify the team in the Matrix room. To access previous meeting logs you can check here.
π Blogz: Scott Mabinβs Blog.
Ferrous Systems
Ferrous Systems is a consultancy and training company that specializes in Rust, particularly in the context of embedded and systems programming. They are known for their expertise in applying Rust to various domains and developed tools like the rust-analyzer
. In the context of embedded Ferrous have developed the Knurling Tools collection composed of tools to building, debugging, and testing embedded Rust systems. This includes tools like probe-run
, defmt
, flip-link
, app-template
, and defmt-test
. Additionally, they are maintainers of the nrf-hal
crate.
π¦οΈ Repositories: Ferrous Systems repository and the nrf-hal repository if you are interested in the nrf controllers.
π£οΈ Roadmap: There isnβt an expicit roadmap, but you an get a sense of direction on the Ferrous Systems Blog.
π¬ Chat Room(s): #nrf-rs:matrix.org and #probe-rs:matrix.org Matrix rooms.
π€ Community Meetings: N/A
π Blog: Ferrous Systems Blog.
Other Projects
There are several projects that do not have official maintainers behind them. Typically this means that maintainers would be different contributors from the community that decided to take the lead. As such, there probably wonβt be any roadmaps or community meetings. As such, in order to contribute you would have to navigate the repositories and engage in chat rooms. Alternatively, you can take the initiative to start a community around a new device/platform yourself! Below is a list of popular projects. For a comprehensive list, I recommend the awesome embedded Rust repository for the full list.
AVR
This is the architecture behind the popular Arduino. The repositories and documentation incorporate the Arduino abstraction layers.
π¦οΈ Repositories: avr-hal github repository.
π¬ Chat Room(s): #avr-rust:gitter.im Matrix room.
Raspberry Pi
This is the architecture behind the popular Raspberry Pi.
π¦οΈ Repositories: rp-hal github repository.
π¬ Chat Room(s): #rp-rs:matrix.org Matrix room.
ST Microelectronics
This is the architecture behind the popular Raspberry Pi.
π¦οΈ Repositories: stm32-rs github project.
π¬ Chat Room(s): #stm32-rs:matrix.org Matrix room.
Embassy Framework
Embassy is a popular framework that supports async
. Embassy also incorporates three different HALs for the STM32, nRF, and rp.
π¦οΈ Repositories: embassy-rs project and embassy repository.
π¬ Chat Room(s): #embassy-rs:matrix.org Matrix room.
π Blog: Embassy Website.
Real-Time Interrupt-driven Concurrency framework (RTIC)
π¦οΈ Repositories: rtic-rs project and rtic repository.
π¬ Chat Room(s): #rtic-rs:matrix.org Matrix room.
π Blog/Website: RTIC Book.
Reply