Table of contents
Git Repository
The Mono source code is hosted on GitHub using the Git source code control system for all of its source code. Although only active contributors get write access to the modules on Git, third party developers and easily fork the code on GitHub or download full copies of the repositories to their own systems.
Here we describe how one obtains commit access to the Mono Git repository and the responsibilities that come with that access privilege.
Also, you can see our list of important branches.
Browsing the Sources
If all you need is to browse the sources, you can go to Mono Organization page on GitHub.
Building Mono from source
Once you've obtained the source code for different modules of the Mono project, you'll want to build Mono from source
Contributing Patches
Now that Mono is hosted on GitHub, contributing patches has never been easier. If you aren't yet familiar with GitHub, you may wish to read GitHub's guide on getting started.
Once you've gotten a GitHub account and gotten set up, you should read GitHub's guide to branching a repository. Once you feel that your patch is finished and you've tested that everything still builds and works as expected, you can then issue a pull request which alerts the active maintainers that they should examine and review your patch, merging it into the mainline source repository.
Policies
It is important that everyone follow these policies:
Coding Guidelines
We have our own coding guidelines.
Code License
If you are about to commit code to a module, the code that is being committed should be released under the X11 license. Mono code licenses themselves are basically: compilers, class libraries and managed code tools: X11; runtime: LGPL.
If in doubt, check with the maintainers of the module, or send mail to mono-devel-list@ximian.com.
Changing Code
Even if you have write access to the official Mono Project GitHub repositories, that doesn't mean you can change code at will in any directory or module. Directories and Namespaces have a sort of unofficial ownership. If you are not the owner of a piece of code and you want to make changes/fixes to it, there are two cases.
Note: If the patch is an addition of code and doesn't change any of the existing code, the rules are slightly relaxed: there is more freedom in committing such changes, if they don't interfere with the existing codebase.
Owning Code
Now, how do you get to be the owner of a chunk of code? The answer is simple. You wrote the code, so you're the unofficial owner. There is also another way. After sending a few patches for the code, the owner (or the core developers of mono, if the owner somehow disappeared) trusts you and tells you you're free to commit without getting his review first.
You can most likely find ownership by reading ChangeLogs or by using git blame. The entries are with emails, so feel free to ask them. If you are still unsure, post your patch to the mailing list (mono-devel-list).
If you are the owner of a piece of code, feel free to commit code, and delegate the work to others.
But, if you're not the owner of the code, committing a rewrite without getting a review first is frowned upon (especially when the rewrite claimed to fix bugs, but not a single regression test has been added to the suite).
Pull-Request Rules
There are a few rules to follow before making a pull request on GitHub:
git diff of the files you're going to commit and check the changes.Also, remember to pat yourself on the back after the commit, smile and think we're a step closer to a better free software world.
Getting Help With Git
GitHub maintains some great resources for developers here:
Branches
For details on existing branches, see Branches.
Keeping track of code changes
Via Web/Email
It is now possible to subscribe to a special group to track changes to the Mono SVN repository over the web using Google Groups:
Via Email
We provide an e-mail based mechanisms to keep track of changes to the code base:
This will send you an email message every time a change is made to the SVN repository, together with the information that the author of the changes submitted.
The CIA.Navi.Cx project tracks the changes in their page