I came across the Linux/RISC-V mentorship while searching for an internship, and my curiosity was sparked by the RISC-V standard and the exciting developments in its community.
What fascinated me most was how RISC-V’s Instruction Set Architecture (ISA) plays a vital role, not only for chip designers but also for developers working on system software like operating systems, compilers, and debuggers.
It’s also crucial for anyone creating new applications, as they need to choose an ISA to run their software. That was it — I was sold! I applied and was accepted for the “Sailing Downstream II” project within the RISC-V ecosystem. In the summer of 2024, I began my journey as a mentee under the incredible guidance of Paul Clarke from Ventana, a knowledgeable and supportive mentor.
The Beginning of My Mentorship
As the mentorship began, I was eager to explore a completely new area of technology. I was stepping into a world that involved working with languages like OCaml and Sail, and interacting with the RISC-V ISA. While I knew I would be continuously learning, I was confident that my background in backend development would serve as a strong foundation. With Paul’s guidance, I quickly realized how transferable my skills were. At its core, problem-solving and debugging remain the same, regardless of the tools or languages used.
My experience with different languages and technologies gave me the adaptability needed to thrive in the Sailing Downstream II project. Having built and hosted full-stack projects from scratch, I learned to approach challenges from a broad perspective, ensuring I understood the full scope of the problem. The ability to make critical decisions, review my code, and handle documentation equipped me to take ownership of my work. These skills became invaluable as I contributed to the Sailing Downstream II project, helping me to navigate the complexity of the tasks while growing as an engineer.
Key Projects and Personal Growth
The Sailing Downstream II project had four overarching goals:
- Improve the RISC-V Sail Specification
The RISC-V Sail specification includes instructions and registers. Each instruction is defined by its mnemonic, operand names, operand types, opcode fields, and semantic function. Paul, my mentor, identified that adding the instruction name, description, format, and profile would further benefit the Sail specification, making it more comprehensive. - Enhance the Sail JSON Backend
At the time I joined, the JSON backend could successfully extract many details such as the mnemonic, operand names, operand types, opcode fields, and the semantic function. However, a few aspects still required refinement, including handling optional operands and parsing pseudoinstructions. - Refine the RISC-V ISA Website
The RISC-V ISA website is an interactive platform where users can search for instructions by name or mnemonic and filter by format. It displays an instruction’s name, mnemonic, extension, format, assembly syntax, operands, opcode layout, semantic function, and description. The website needed refinements in areas such as formatting, scrolling behavior, and implementing a dark mode. - Survey and Inventory of Downstream Projects
This goal involved finding projects that depend on the RISC-V ISA, identifying specific areas with ISA dependencies, evaluating the feasibility of source code generation from JSON, and proposing the adoption of JSON-based source generation in relevant projects.
My plan for the Sailing Downstream II project was to engage with its various scopes to have a comprehensive experience and absorb as much as I could. I began by contributing to the RISC-V Sail specification by adding instruction names. To do this, I referred to the RISC-V manuals and annotated the names within the Sail specification. This was my introduction to both the RISC-V ISA and the Sail language, and it laid a solid foundation that prepared me to take on more complex tasks later in the project.
Next, I tackled fixing the order of operands in the assembly syntax. The goal was to change the extraction of assembly operands from the AST input list to match the assembly order. This approach ensured two things: avoiding unnecessary AST inputs in the operand list and maintaining the correct operand order in the assembly syntax. I started by thoroughly examining the JSON backend to understand the workflow and then went through OCaml documentation to familiarize myself with the language and its core principles.
With this baseline understanding, I worked closely with my mentor Paul to devise a plan of action. We discussed the code and strategized the way forward. I began coding, and we held daily meetings where I shared my progress, breakthroughs, and challenges. These meetings kept me accountable and allowed me to get valuable feedback from Paul. One of the key lessons I learned during this process was working with a codebase I hadn’t written. It pushed me to deeply understand solutions crafted by others and add my contributions in a way that was clear for future developers.
Finally, it was time for the Pull Request. Paul’s rule of thumb was that a commit message should explain the previous state, identify the problem, and describe the new solution. Writing these commit messages made me engage with my work on a deeper level. After submitting the PR, Paul provided recommendations on how to make my code cleaner and more readable, which helped me understand the importance of writing maintainable, long-lasting code. When the project was merged, I felt a strong sense of accomplishment—it was full of firsts: my first time working on an existing codebase, my first time coding in OCaml, and more. These challenges made the experience incredibly rewarding.
Fix order of operands pull request
Another aspect of the Sailing Downstream II project that I enjoyed was improving the RISC-V ISA interactive website. I made a few feature improvements, but what stood out most was implementing the dark mode. Although I have a full-stack skill set, I primarily work on backend development, so this was my first time creating a dark mode for a website. It was a fun, challenging project, and I was excited to show the team how our website looked afterward.
Before and after of the website’s dark mode: RISC-V ISA Reference Website
Valuable Lessons
Overall, the Sailing Downstream II project was a holistic learning experience. I had the chance to dive into different scopes, push my skills, and learn from my incredible mentor, Paul. Each project expanded my knowledge and contributed to my growth as a developer.
One of the most memorable parts of the Sailing Downstream II mentorship was how it felt like a real-world simulation of working in an engineering team. Paul treated us not just as mentees, but as trusted team members, giving us real responsibilities, conducting thorough code reviews, and facilitating team discussions that mirrored professional settings. It wasn’t just about writing code — it was about working together, understanding each other’s contributions, and refining our work as a group. This level of trust and collaboration made the experience feel authentic and impactful.
For me, as an early-career software engineer, this was invaluable. I got a firsthand look at what it’s really like to be part of a software engineering team, which helped me grow both technically and professionally.
It wasn’t just theoretical learning — it was practical, hands-on problem-solving in a collaborative environment.
This experience has boosted my confidence and shown me what it means to contribute meaningfully to a team while developing the skills necessary to thrive in the industry.
Impact on My Future
This mentorship has really broadened my perspective on the RISC-V ecosystem. Working with the Sail RISC-V specification and following Paul’s pull requests to upstream SAIL not only piqued my curiosity but also deepened my understanding of how everything fits together. It’s motivated me to explore beyond the Sailing Downstream project and engage with other communities within the RISC-V ecosystem.
Even after the official end of the mentorship, my interest in Sailing Downstream remains strong. Paul and I have been collaborating asynchronously on parsing pseudo instructions in the JSON backend. I’m excited to keep contributing and learning, and I definitely plan to stick around the RISC-V community for a while!
Conclusion
In my experience, the mentorship exceeded my expectations and revealed areas of growth I didn’t even know I needed.
It has provided a solid foundation for my journey toward becoming a great Software Engineer and has connected me with the vibrant RISC-V community.
Joining a new community can be intimidating, but the mentorship offers a valuable buffer, making it easier to engage with others while having a mentor to guide you.
If you’re looking to broaden your horizons, don’t hesitate to join us!