Skip to content

Instantly share code, notes, and snippets.

@mjzffr
Last active August 6, 2022 15:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mjzffr/d2adef328a416081f543 to your computer and use it in GitHub Desktop.
Save mjzffr/d2adef328a416081f543 to your computer and use it in GitHub Desktop.
This is an excerpt of an email exchange I had with a student interested in contributing to Mozilla's open source projects. The notes and resources are aimed at someone who has knowledge of programming (1st-year CS, say) but little or no knowledge of version control. Feel free to remix, reuse. :)

Hey ---, nice to talk with you yesterday! Giant email ahead!

Here's what we talked about:

All open source projects use version control tools like git for code submission. Mozilla uses two version control tools (hg and git) to track the history of code changes: hg (also called mercurial) is used for Firefox code, git is used for other supporting projects. The underlying concepts for hg and git are similar, but I think the documentation for git is much better so I suggest you focus on git first. Github is a web-based user interface for git. Locally (i.e. "on your computer"), you will interact with git using the terminal instead by entering commands. Version control is all about tracking project history so that it's easy to merge work from many different people or go back in time; it's an extra step/tool in software development on top of writing/testing your code.

To start working on any open source project, the first step is to get a copy of the source code repository (e.g. git clone). Then the programmer changes their local copy of the code, makes a local commit (git commit ...), then pushes that commit to a public repository for code review (git push ...), and if all is well, that commit gets accepted or "merged" into the project's main public repository by the project owner. Eventually, a snapshot of that main public repository gets packaged into a release (e.g. Firefox 42) so that other people can use it conveniently.) We also talked about the special process for code submissions to Firefox: programmer gets copy of code repository, makes changes, runs and tests locally, then commits, pushes the commit to a special "test area" repository called "try". Once the commit is on "try", it gets tested extensively "in the cloud" and the results are shown on https://treeherder.mozilla.org/#/jobs?repo=try. If the tests pass, the commit will get code review by a human and progress to the next "test area" before it gets accepted into a Firefox release; if the tests fail, the programmer commits and pushes more changes to fix the problems, and the cycle restarts.

And to follow-up, here's how I suggest you proceed. This is a long list; think of it as a 6-month road map. It won't necessarily take that long, but I know you have other responsibilities like school, so there's no hurry either. :) In any case, feel free to ask questions any time.

  1. You have already set up IRC, which is great! Pick a nick that you like, register it with nickserve to reserve it for yourself - https://developer.mozilla.org/en-US/docs/Mozilla/QA/Getting_Started_with_IRC#NickServ
  2. Get comfy with version control. Some hands-on tutorials about git: http://githowto.com/ and https://try.github.io. More options here: https://help.github.com/articles/good-resources-for-learning-git-and-github/ or http://betterexplained.com/articles/a-visual-guide-to-version-control/ and http://swcarpentry.github.io/git-novice/ or https://www.udacity.com/course/how-to-use-git-and-github--ud775
  3. Once you have a basic sense of git, I can give you a task to work on in one of our Mozilla Github projects -- let me know when you're ready. :)
  4. If you want to refresh your memory of Python, I like these resources: http://docs.python-guide.org/en/latest/starting/installation/ and http://www.diveintopython.net/ and http://www.dabapps.com/blog/introduction-to-pip-and-virtualenv-python/
  5. At that point, set up your Firefox development environment: https://developer.mozilla.org/en-US/docs/Simple_Firefox_build (You can do this at any stage, really, but you won't really use it until you learn about hg a bit)
  1. From there, I suggest you continue by learning some hg, especially if you want to work on Firefox. hg is similar to git, just slightly different syntax. I learned with this: http://hginit.com/
  • hginit.com tells you how to install hg, but if you set up your Firefox dev environment successfully in step 3, hg will already be set up for you.
  1. Read https://wiki.mozilla.org/Good_first_bug to get an overview and then practice making a change to Firefox by trying out http://www.joshmatthews.net/trainingmontage/
  2. Make sure you have a Bugzilla account -- that way you can be assigned to work on a bug: https://bugzilla.mozilla.org/createaccount.cgi
  • When you fill in your Bugzilla profile, include your irc nickname in your name.
  1. Start working on Firefox bugs -- I have a few good first bugs in mind -- ask me. :) You can also look at http://www.joshmatthews.net/bugsahoy
@firestack
Copy link

From 6: http://hginit.com/ seems to have moved to https://hginit.github.io/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment