# Become a next-generation systems hacker with Rust
[Rust] is a novel systems programming language, designed for writing
and maintaining large-scale, ultra-reliable software in the domains
where typically only C and C++ are appropriate. It is the only
production programming language in the world that is memory safe -
meaning Rust software does not segfault - but does not have a garbage
collector or rely on reference counting, and that makes it suitable
for writing all kinds of software. It is also arguably the fastest
programming language in the world. And with a focus on developer
ergonomics, Rust makes the most difficult types of programming
accessible to a wide audience.
Rust is known for it's welcoming and rewarding community. Although
sponsored by Mozilla (the creators of Firefox), it has a thriving
community of contributors, and many of the greatest parts of Rust have
been written by ambitious students. There is great opportunity yet for
making a name for oneself in the growing Rust ecosystem.
In this hackfest we're going to learn how to contribute to open source
generally, by learning how to participate in Rust. We're going to
first learn a bit of Rust, and in the process we're going to socialize
with, and get help from, other Rust hackers; we're going to figure out
how to discover appropriate contribution opportunities, and we'll each
submit a quick, simple patch, to get some early success. Then we'll
hack on whatever cool thing we feel like.
Our primary goal will be to have a good time with Rust, and we can be
flexible about what exactly we work on.
[Rust]: http://rust-lang.org/
- [Phase 1: Getting started](#ph1)
- [Phase 2: Making an initial contribution](#ph2)
- [Phase 3: Finding your niche](#ph3)
# Resources
- [Rust installation](https://www.rust-lang.org/en-US/install.html)
- [areweideyet.com](https://areweideyet.com/)
Information about Rust and editors.
- [The new Rust book](https://rust-lang.github.io/book/)
This is probably the best guide for learning Rust.
- [Rust documentation](https://www.rust-lang.org/en-US/documentation.html)
The old Rust book, API docs, more.
- [rust-learning](https://github.com/ctjhoa/rust-learning)
Lots of learning resources.
- [Contributing to Rust](https://www.rust-lang.org/en-US/contribute.html)
Basic guides for contributing to Rust.
- [Community resources](https://www.rust-lang.org/en-US/community.html)
More places to find other Rust folks.
- [rust-lang/rust](https://github.com/rust-lang/rust)
The main Rust source code repository.
- [CONTRIBUTING.md](https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md)
How to submit bugs and pull requests to the main repository.
- [Contributing to Open Source on GitHub](https://guides.github.com/activities/contributing-to-open-source/)
Rust is hosted on [GitHub], as are most Rust projects. This explains
basic GitHub usage.
[GitHub]: https://github.com
# Phase 1: Getting started
## Where to get help
The first thing to do is join #rust-beginners on Mozilla's IRC
network. This is the best place to go to get started with Rust and the
Rust community. There are usually people there happy to help, and you
should ask for help freely. IRC is where much of the Rust community
collaborates, and being on IRC is a good way to make friends and stay
in the loop.
The easiest way to join is through [Mibbit], a web based IRC client,
but any IRC client will work. [XChat], [mIRC], and [Colloquy] are good
options.
The [community page][cp] on the Rust website lists other places to
look for help.
[Mibbit]: https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-beginners
[XChat]: http://xchat.org/
[mIRC]: http://www.mirc.com/
[Colloquy]: http://colloquy.info/
[cp]: https://www.rust-lang.org/en-US/community.html
## Installation
Follow the [installation instructions][i]. It is usually
straightforward.
Additionally, Windows users will need the [Microsoft Visual C++ Build
Tools][bt], or a recent version of Visual Studio. Mac users will need
XCode. Linux users will need gcc.
[bt]: http://landinghub.visualstudio.com/visual-cpp-build-tools
[i]: https://www.rust-lang.org/en-US/install.html
Use the editor of your choice. VS Code, emacs, and vim are the most
widely used editors with Rust. Most editors have at least syntax
highlighting for Rust, while some have more advanced features.
Details about Rust editors can be found at [areweideyet.com]. For VS
Code, use the RustyCode plugin, emacs use rust-emacs, vim use
rust.vim.
[areweideyet.com]: https://areweideyet.com/
With a working installation you should be able to type `rustc
--version` at the command line and get a useful result.
## Read the book and do some exercises
If you are new to Rust it's probably best to spend some time on your
own reading about it, trying exercises, and forming opinions and
questions.
The best starting place is probably [The New Rust Book]. This book is
incomplete, but is somewhat higher quality than [The Old Rust Book].
The book has a guessing game tutorial that I strongly suggest
doing. It will give you a good feel for Rust. Another excellent
source of Rust exercises is [rustlings].
[The New Rust Book]: https://rust-lang.github.io/book/
[The Old Rust Book]: http://doc.rust-lang.org/book/
[rustlings]: https://github.com/carols10cents/rustlings
We don't need to be very knowledgable about Rust to start contributing
to Rust, but it will be important to have some background. While you
are acquainting yourself, keep an eye out for things that are wrong,
confusing, annoying, etc. Those little things that personally affect
you are often the best threads to start tugging at to find your way as
a contributor.
Ask for help on #rust-beginners!
# Phase 2: Making an initial contribution
One's initial contribution to any project is a critical juncture, like
any new relationship. First impressions matter, for both the new
contributor and maintainer. It's usually best to start small, because
small contributions are most likely to be acceptable without a great
amount of debate, allowing one to ease successfully into the project
without yet understanding it.
Good initial contributions usually come from "scratching an itch". If
you've gotten this far and you've already encountered something
confusing or buggy, that's a good place to start. Was some
documentation not clear enough? Fixing that is a perfect initial
contribution - docs are always being improved, patches are always
welcomed, and as a new user you have the right perspective to make the
docs clearer. If you know what you want to do at this point,
the next step is to search the appropriate bug tracker to see if
anybody else is talking about the issue.
Sources for discovering Rust tasks:
- [Rust easy bugs][e]. Bugs specifically tagged for new contributors.
- [Rust mentor bugs][m]. Bugs for new contributors with willing mentors.
- [Rust help wanted bugs][h]. Not easy bugs that still need help.
- [This Week in Rust][t]. Every week they put out a call for
contributions, with specific curated tasks. This is probably the
best place to find community libraries that are actively seeking
contributions (as opposed to contributing to Rust itself).
- [brson's someday list][b]. This is my personal list of things that
should get done but haven't. I may be able to help you pick
something out of this.
[e]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy
[m]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-mentor
[h]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-help-wanted
[b]: https://internals.rust-lang.org/t/brsons-someday-list/3948/23
[t]: https://this-week-in-rust.org/
Selected candidate tasks for 2017-02-24:
- [Move COMPILER_TESTS.md out of the root directory](https://github.com/rust-lang/rust/issues/39896)
- [macros: don't `cfg`-process items before applying attribute proc macros](https://github.com/rust-lang/rust/issues/39336)
- [Removal of the lang feature gate tests whitelist](https://github.com/rust-lang/rust/issues/39059)
- [byteorder crate remediations](https://gist.github.com/brson/d17ff2fb3f1b1418c5d073e8afc9da55).
Fixes needed for the byteorder crate after a recent evaluation.
- [Multiple unused formatting argument notes should use multispan](https://github.com/rust-lang/rust/issues/37718)
- [E0072 needs better underline](https://github.com/rust-lang/rust/issues/35965)
- [Remove obsolete no_stack_check attribute and test](https://github.com/rust-lang/rust/issues/34915)
- [Add error explanations for all error codes](https://github.com/rust-lang/rust/issues/32777)
- [The Standard Library Documentation Checklist](https://github.com/rust-lang/rust/issues/29329)
- [Failure to fulfill higher-kinded "outlives" predicate could have better error message](https://github.com/rust-lang/rust/issues/27114)
# Phase 3: Finding your niche
TODO. A good place to contribute right now is [Rust Cookbook](https://gist.github.com/brson/eac868c319248a97f7834991fa63e290).