1 * Contributing to the Mono project
3 Mono has not been completed yet. It is a project under
4 active development and with a vibrant community. If you are
5 looking at ways of helping the project, you have come to the
8 There are three different philosophical approaches to helping
9 the Mono project, the selfish way, the altruistic or the
12 The <b>selfish</b> way is packed with adventure. You start by
13 building your own software, and start using the compiler and
14 tools that come with Mono. Eventually you will run into
15 missing features, or a bug in the software. Since we ship all
16 the source code for Mono, you can start tracking down the
17 problem. Depending on how much time you have to devote to the
18 problem you could: <a href="http://bugzilla.ximian.com">File a
19 bug report</a> (read <a href="#goodbugreport">this</a>); track
20 down the problem and provide a better
21 <a href="http://bugzilla.ximian.com">bug report</a>; fix the
22 bug and provide a patch (you can <a
23 href="mailto:mono-list@ximian.com">post it</a> to the <a
24 href="http://lists.ximian.com/mailman/listinfo/mono-list">mono
25 mailing list</a>; or discuss the solution on the mailing
26 list. Ideally you will also write a <a
27 href="testing.html">regression test</a> so the bug does not
28 get re-introduced in the future.
30 The <b>altruistic</b> is probably the easiest because you get
31 to pick a piece of Mono that you might want to work on. You
32 can pick an unfinished <a href="class-library.html">class</a> (from our <a
33 href="class-status.html">class status page</a>); help with the
34 <a href="documentation.html">documentation effort</a> (<a
35 href="http://lists.ximian.com/mailman/listinfo/mono-docs-list">mailing
36 list for the documentation effort</a>); fix existing <a
37 href=http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FClass+Libraries&product=Mono%2FRuntime&component=CORLIB&component=misc&component=System&component=System.Web&component=System.XML&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">runtime
39 href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FMCS&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">compiler
40 bugs</a>; help with the <a href="tools.html">tools</a> or
41 writing <a href="testing.html">tests</a> that help make Mono
42 more robust or help with the <a
43 href="http://www.go-mono.com/winforms.html">Winforms
46 The <b>educational</b> way is an interesting one, because you
47 pick a technology you are interested in, and work on that
48 technology to learn the technology.
50 Those are just broad things that need to be worked on, but
51 something that would help tremendously would be to help with
52 small duties in the project that need to be addressed.
54 You can see what needs to be done in the class libraries <a href="class-status.html">here</a>
58 Many developers get together on the <b>#mono</b> irc channel
59 on the <b>irc.gnome.org</b> server.
61 ** To start contributing
63 As a programmer, you can contribute in three different scenarios to Mono:
66 * If you only have Linux/Unix.
67 * If you only have Windows.
69 * If you have both Linux and Windows.
72 You might also want to check our <a href="#setup">common
73 setups</a> section that describes some common setups that people
74 use while working on Mono.
76 *** Contributing to the class library, regression tests or the compiler
78 This only requires Windows currently.
80 To start developing classes or to contribute to the compiler,
81 you only need Windows and the .NET Framework 1.0 SDK. Please notice
82 that you do not need Visual Studio (although you can use it if
83 you want). The .NET Framework SDK requires some version of
84 Windows XP or Windows NT. If you are running Windows 98, 95
85 or Me, you could use instead the <a
86 href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/829/msdncompositedoc.xml">.NET Redist package</a>, but it
87 lacks the documentation browser and the ildasm program (C#, VB, JScript and IL
88 assembler are included).
90 You can get it <a href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a>
92 If you are new to .NET, writing regression tests is a good way
93 of starting to contribute: it will help you get used to C# as
94 well as getting comfortable with the .NET APIs.
96 This helps because at this point you might be the best
97 qualified person to fix a problem found by the regression
98 test, or you might have a new class to implement in the .NET
99 world that only has a test suite.
101 To get started writing tests see the <a href="testing.html">Test Suite</a>
102 section. <a href="mono-contribution-howto.html">Here</a> there is a good All-In-One introduction to the art of writing tests.
105 *** Contributing to the runtime engine
107 This only requires Linux, currently some tasks are easier if you
108 have access to Windows as well.
110 Here are a few things you can do:
112 * Port the runtime to other architectures.
113 * Port the runtime to other operating systems.
114 * Finish the IL code verifier in the runtime.
115 * Hack the JIT, improve the code generator, add new
116 pattern rules, improve the register allocator.
117 * Implement the debugging interfaaces
122 If you find bugs in Mono, please make sure you enter a bug
123 report so we can keep track of problems in Mono.
125 To enter bug reports go to <a href="http://bugzilla.ximian.com">
126 http://bugzilla.ximian.com</a> and enter bug reports against
127 your favorite component (Mono, Runtime, C# compiler).
129 You can review the list of current bugs by going <a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FClass+Libraries&product=Mono%2FMCS&product=Mono%2FRuntime&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&order=%27Importance%27&form_name=query">here</a>
131 <a name="goodbugreport"/>
132 ** How to make good bug reports
134 A mail from Paolo to mono-devel-list contained this check list:
136 * Submit a test case, the smaller it is, the better
138 * Use <a href="http://bugzilla.ximian.com">
139 http://bugzilla.ximian.com</a> to report the bug.
141 <p>In <b>addition</b> to bugzilla, posting to the list is
142 fine if the bug merits larger exposure or design
143 discussions to solve; posting to the list twice or more
144 is just a way to annoy people and make them waste time,
145 specially when you start a new thread about it.
147 * If the test involves libraries or assemblies that are
148 not part of mono, add info about where to download all
149 the dependencies, and how to compile/install them.
151 * If compiling the test case requires more than:
152 <pre> mcs test.cs </pre>
153 provide the <b>full command line</b> you used to compile
156 * If running the test requires more than:
157 <pre> mono test.exe </pre>
158 provide the <b>full command line</b> needed to replicate
161 * Provide info about the version of the software you're
162 using (both mono and the operating system or relevant
165 * Provide the output you expect the test case to produce.
167 * Provide the actual output <b>you</b> get from the test case.
170 A good bug report complies with at least 6 items from the list.
171 If your bug report complies with 3 or less items, it is very
172 poor and it means it will take much more time to fix (when it's
177 A few smaller tasks are here, dropped in no particular order:
179 * <b>Mono/doc and web site:</b> They need to be
180 packaged up in the official `distribution'
182 * Adding serialization support to all the classes.
184 We have many classes, but we have not implemented in
185 many cases the serialization and re-incarnation support in
186 them (this is pretty straight forward code, and simple,
187 but there is a lot to be done here).
192 Brad Merryl's C# mode for Emacs is available: <a
193 href="http://www.cybercom.net/~zbrad/DotNet/Emacs/">http://www.cybercom.net/~zbrad/DotNet/Emacs/</a>
195 * Books on C# and DotNet.
198 * Dotnet Books (<a href="http://www.dotnetbooks.com">http://www.dotnetbooks.com</a>)
200 * Dotnet Resources (<a href="http://www.dotnetexperts.com/resources/">
201 http://www.dotnetexperts.com/resources</a>)
203 * O'Reilly C# Essentials (<a href="http://www.oreilly.com/catalog/csharpess/">
204 http://www.oreally.com/catalog/csharpess</a>)
206 * O'Really .NET Essentials (<a href="http://www.oreilly.com/catalog/dotnetfrmess/">
207 http://www.oreally.com/catalog/dotnetfrmess</a>)
213 People running both Linux and Windows while contributing to
214 Mono use a number of tricks to increase their productivity.
219 * <b>Linux host and Windows host</b>
221 The Windows file system is shared (right click on
222 your hard drive icon, and select sharing, allow this
225 The Windows machine has the required build tools
226 (cygwin, and the .NET framework). On the Windows
227 machine, you want to setup the ssh server (run the
228 ssh-host-config program to configure your ssh) and
229 run it (from a cygwin terminal, type: /usr/sbin/sshd).
231 From the Linux side, you want to mount the Windows
232 file system, using something like this:
235 mount -t smbfs -o uid=miguel,username="Miguel de Icaza" "//quack/c$" /mnt
238 In the above example, my Linux user name is
239 `miguel', and this will allow this user to have
240 read/write access to the share.
242 The host name is `quack', and the name of the share
243 is `c$' (that is the C: partition).
245 The file system is accessible on /mnt.
247 You can perform your cvs update and cvs commits from
248 the /mnt directory, and run Emacs or your favorite
249 Linux text editor on the Unix side in this way.
251 Then from another terminal, you can ssh into your
252 Windows box using ssh, like this: ssh "Miguel de Icaza@quack"
257 If you have looked at Microsoft's implementation of .NET or
258 their shared source code, you may not be able to contribute
259 to Mono. Details will follow when we know more about this.
261 In general be careful when you are implementing free software
262 and you have access to proprietary code. We need to make sure
263 that we are not using someone else's copyrighted code
266 Please do not use the <b>ildasm</b> program to disassemble
267 proprietary code when you are planning to reimplement a class
268 for Mono. If you have done this, we might not be able to use
271 Please stick to published documentation for implementing any