A couple of weeks ago my friend showed me
libm, a port of the math library from musl (a
re-implementation of the C standard library) to "nostd" Rust which is just Rust
with no external dependencies (even the standard library). The coolest part: it
wasn't written yet! The maintainer, @japaric had set up a bunch of "help wanted"
and "good first issue" issues, and the tasks were fairly compartmentalized
because each one involved porting a single math function like atan2f
or pow
.
As someone who's always been interested in open source software, but never
actually contributed, it looked like a great opportunity and I got right to
work.
One of the hurdles to contributing to a project is the difficulty of setting up
your environment, but a combination of japaric's beginner friendly
contributing gude
and cargo being amazing made it a breeze. I uncommented one line of code and
unit tests for the function I was working on magically appeared thanks to some
macro magic.
After fumbling around with my basic knowledge of Rust I finally got fmod
working and made a PR. Even though it had merge conflicts, I didn't run
rustfmt
, and I didn't squash my commits, no one made fun of my incompetence.
Japaric left helpful comments, and a few fixes later I had merged my code! High
off that success I implemented more functions over the next few evenings, and
there were enough other people contributing that within the week we had finished
all but a few difficult functions. I've been checking in on it since, and it
looks like it may get used in the core
crate.
I always had this idea that open source contributors were superhuman programmers and it made me apprehensive about trying to do it myself, but my experience with libm has showed me that I had nothing to be afraid of. The largest factor that made the process so welcoming was the kindness of the rest of the contributors. For a self concious newbie like myself, I could have been scared away very easily by someone calling out my obvious inexperience while commenting on PRs. I hate that some of the most famous open source discourse out there is Torvalds yelling at people on the LKML. I realize how silly it sounds, but I was terrified of being made fun of for my numerous mistakes.
I've heard great things about the Rust community, now I can say from firsthand experience that they were right. I joined the Rust Discord server and it's been refreshing to watch a bunch of strangers on the internet treat each other with respect. Programming is a collaborative process, even when working by yourself you consult documentation and Stack Overflow so having a community that cares about each other isn't just heartwarming, it's productive. More people having their questions answered nicely means more people getting better at the language means more people contributing to open source. The Rust community seems to understand this well, the weekly newsletter has a list of open source projects that need help and are good for beginners.
I can't wait to jump back in and find another Rust project that wants help. In the meantime, since I can use complex math in nostd projects now thanks to libm, maybe I'll go port cubefield to Rust.