* Contributing to the Mono project Mono has not been completed yet. It is a project under active development and with a vibrant community. If you are looking at ways of helping the project, you have come to the right web page. There are three different philosophical approaches to helping the Mono project, the selfish way, the altruistic or the educational way. The selfish way is packed with adventure. You start by building your own software, and start using the compiler and tools that come with Mono. Eventually you will run into missing features, or a bug in the software. Since we ship all the source code for Mono, you can start tracking down the problem. Depending on how much time you have to devote to the problem you could: File a bug report; track down the problem and provide a better bug report; fix the bug and provide a patch (you can post it to the mono mailing list; or discuss the solution on the mailing list. Ideally you will also write a regression test so the bug does not get re-introduced in the future. The altruistic is probably the easiest because you get to pick a piece of Mono that you might want to work on. You can pick an unfinished class (from our class status page); help with the documentation effort (mailing list for the documentation effort); fix existing runtime bugs; compiler bugs; help with the tools or writing tests that help make Mono more robust or help with the Winforms effort. The educational way is an interesting one, because you pick a technology you are interested in, and work on that technology to learn the technology. Those are just broad things that need to be worked on, but something that would help tremendously would be to help with small duties in the project that need to be addressed. You can see what needs to be done in the class libraries here * IRC Channel Many developers get together on the #mono irc channel on the irc.gnome.org server. ** To start contributing As a programmer, you can contribute in three different scenarios to Mono: You might also want to check our common setups section that describes some common setups that people use while working on Mono. *** Contributing to the class library, regression tests or the compiler This only requires Windows currently. To start developing classes or to contribute to the compiler, you only need Windows and the .NET Framework 1.0 SDK. Please notice that you do not need Visual Studio (although you can use it if you want). The .NET Framework SDK requires some version of Windows XP or Windows NT. If you are running Windows 98, 95 or Me, you could use instead the .NET Redist package, but it lacks the documentation browser and the ildasm program (C#, VB, JScript and IL assembler are included). You can get it here If you are new to .NET, writing regression tests is a good way of starting to contribute: it will help you get used to C# as well as getting comfortable with the .NET APIs. This helps because at this point you might be the best qualified person to fix a problem found by the regression test, or you might have a new class to implement in the .NET world that only has a test suite. To get started writing tests see the Test Suite section. Here there is a good All-In-One introduction to the art of writing tests. *** Contributing to the runtime engine This only requires Linux, currently some tasks are easier if you have access to Windows as well. Here are a few things you can do: ** Bug reporting If you find bugs in Mono, please make sure you enter a bug report so we can keep track of problems in Mono. To enter bug reports go to http://bugzilla.ximian.com and enter bug reports against your favorite component (Mono, Runtime, C# compiler). You can review the list of current bugs by going here ** Small tasks A few smaller tasks are here, dropped in no particular order: * Emacs support Brad Merryl's C# mode for Emacs is available: http://www.cybercom.net/~zbrad/DotNet/Emacs/ * Books on C# and DotNet. * Common Setups People running both Linux and Windows while contributing to Mono use a number of tricks to increase their productivity. Scenarios: * Special Note If you have looked at Microsoft's implementation of .NET or their shared source code, you may not be able to contribute to Mono. Details will follow when we know more about this. In general be careful when you are implementing free software and you have access to proprietary code. We need to make sure that we are not using someone else's copyrighted code accidentally. Please do not use the ildasm program to disassemble proprietary code when you are planning to reimplement a class for Mono. If you have done this, we might not be able to use your code. Please stick to published documentation for implementing any classes.