This article is by gusye1234, a LFX mentorship mentee for WasmEdge project, who is implementing the wasi-nn proposal.
Hi, I'm gusye1234, an MSc. Computer Science student from China. My contributions to WasmEdge mainly focus on the
wasi-nn proposal. I have completed the first milestone of the
wasi-nn project. There is more to achieve and future work left to do, like supporting more types of AI models for WasmEdge.
Now, I am thrilled to share how rewarding I felt and the experience I gain during my open-source contribution. I hope this article will make you feel less burdened to join and contribute to the WasmEdge and other open-source projects.
I started my contributions to WasmEdge from the time I was accepted as a mentee with the LFX program early in 2022. You can also join any time and communicate with the maintainers of WasmEdge as long as you have ideas. I think this blog can do you a little bit of favor on the following questions:
- How do I know if I'm prepared to contribute to an open-source project?
- What does it take to make one contribution “complete”?
- How to contribute?
How do I know if I'm prepared?
You're always prepared when you feel enthusiastic about what you're going to accomplish. I know it may sound like a cliché, but that's actually the first thing I learned during this program with WasmEdge.
I applied for the LFX program three months before. When I tracked down the particular issue opened for
wasi-nn on Github, I thought, “I'm absolutely not qualified for it. I don't know WebAssembly, nor C++, nor…". The fear overwhelmed me, and frankly. I never thought I could be chosen for the program. But I tried to keep up and finished the pre-test as much as I could.
Unexpectedly, my application succeeded. I was so surprised that the first question I asked in the first meeting with my mentors was: Why me?
Their answer is quite simple: It was not because of my resume or educational background, but me being earnest in the pre-test. The fact that I tried hard to understand what is the host function in WasmEdge and how I could write one made my mentors believe I had the passion needed. They thought passion was the most important for a beginner. That's when it hits me: They value your enthusiasm more than your experience. So if you're really excited about what you can do in an open source project like WasmEdge, just go for it. Do your best and be enthusiastic!
Besides, the mentors (Mine are yi-ying and hydai) are super friendly.
What does it take to make one contribution “complete”?
Enough about the feelings; Let's get geeky and dive into the coding part :). I believe no matter what is the program you apply for, some certain milestones you should reach:
- Main Functionality. For my LFX program, the main functionality is supporting OpenVINO backend for the
wasi-nnproposal in WasmEdge. To do that, I needed to learn about OpenVINO APIs and the
wasi-nnspec. My main efforts and time are spent here. (Eg., my main functionality Pull Request)
- Test and continuous integration(CI). Writing tests is crucial. You do this to convince others that your implementation is safe and usable. My tests were written by learning from the others’ tests in the WasmEdge repo. Basically, you need to make sure your programs succeed correctly and fail correctly.
- CI is a part of development ops. Since WasmEdge is hosted on Github, the keyword here is the “Github workflow”. So I added new CI scripts for WasmEdge WASI-nn Proposal. If you want to contribute to open-source projects, when you created a PR for this project, the CI tests will automately run your code in a stable environment. Make sure your code passes the tests (my test Pull Request), then it will be merged.
- Documentation and demo: Write docs like code! Besides the code parts, docs are necessary so that the developers will know how to use your code in their projects. It's better when you also write a demo to enrich the documentation. A running demo is always helpful (Eg. My docs Pull Request, a demo for
How to contribute?
Besides, you can also check out the good first issue and help wanted tags in the WasmEdge GitHub repo to have some ideas on where you can start. If you have any questions, don't hesitate to ask questions by raising a GitHub issue.
Remember, before you create a PR for WasmEdge and other open-source projects, the contribution guide will help you a lot.
You will never be 100% ready. Just start!
Join the WasmEdge Discord server to talk about everything about WasmEdge and WebAssembly.