1 * Contributing to the Mono project
3 There are many ways in which you can help in the Mono project:
6 * <b>Programmers:</b> You can work on a free
7 implementation of the <a
8 href="class-library.html">class libraries</a>, the
9 <a href="runtime.html">runtime engine</a>, <a
10 href="tools.html">the tools</a>, the <a
11 href="testing.html">testing framework</a>
13 * <b>Writers:</b> You can help us bywriting <a
14 href="documentation.html">documentation</a>.
17 Those are just broad things that need to be worked on, but
18 something that would help tremendously would be to help with
19 small duties in the project that need to be addressed.
21 You can see what needs to be done in the class libraries <a href="class-status.html">here</a>
23 ** To start contributing
25 As a programmer, you can contribute in three different scenarios to Mono:
28 * If you only have Linux/Unix.
29 * If you only have Windows.
31 * If you have both Linux and Windows.
34 You might also want to check our <a href="#setup">common
35 setups</a> section that describes some common setups that people
36 use while working on Mono.
38 *** Contributing to the class library, regression tests or the compiler
40 This only requires Windows currently.
42 To start developing classes or to contribute to the compiler,
43 you only need Windows and the .NET Framework 1.0 SDK. Please notice
44 that you do not need Visual Studio (although you can use it if
45 you want). The .NET Framework SDK requires some version of
46 Windows XP or Windows NT. If you are running Windows 98, 95
47 or Me, you could use instead the <a
48 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
49 lacks the documentation browser and the ildasm program (C#, VB, JScript and IL
50 assembler are included).
52 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>
54 If you are new to .NET, writing regression tests is a good way
55 of starting to contribute: it will help you get used to C# as
56 well as getting comfortable with the .NET APIs.
58 This helps because at this point you might be the best
59 qualified person to fix a problem found by the regression
60 test, or you might have a new class to implement in the .NET
61 world that only has a test suite.
63 To get started writing tests see the <a href="testing.html">Test Suite</a>
66 *** Contributing to the runtime engine
68 This only requires Linux, currently some tasks are easier if you
69 have access to Windows as well.
71 Here are a few things you can do:
73 * Port the runtime to other architectures.
74 * Port the runtime to other operating systems.
75 * Finish the IL code verifier in the runtime.
76 * Hack the JIT, improve the code generator, add new
77 pattern rules, improve the register allocator.
78 * Implement the debugging interfaaces
83 If you find bugs in Mono, please make sure you enter a bug
84 report so we can keep track of problems in Mono.
86 To enter bug reports go to <a href="http://bugzilla.ximian.com">
87 http://bugzilla.ximian.com</a> and enter bug reports against
88 your favorite component (Mono, Runtime, C# compiler).
90 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>
94 A few smaller tasks are here, dropped in no particular order:
96 * <b>Mono/doc and web site:</b> They need to be
97 packaged up in the official `distribution'
99 * Adding serialization support to all the classes.
101 We have many classes, but we have not implemented in
102 many cases the serialization and re-incarnation support in
103 them (this is pretty straight forward code, and simple,
104 but there is a lot to be done here).
109 Brad Merryl's C# mode for Emacs is available: <a
110 href="http://www.cybercom.net/~zbrad/DotNet/Emacs/">http://www.cybercom.net/~zbrad/DotNet/Emacs/</a>
112 * Books on C# and DotNet.
115 * Dotnet Books (<a href="http://www.dotnetbooks.com">http://www.dotnetbooks.com</a>)
117 * Dotnet Resources (<a href="http://www.dotnetexperts.com/resources/">
118 http://www.dotnetexperts.com/resources</a>)
120 * O'Reilly C# Essentials (<a href="http://www.oreilly.com/catalog/csharpess/">
121 http://www.oreally.com/catalog/csharpess</a>)
123 * O'Really .NET Essentials (<a href="http://www.oreilly.com/catalog/dotnetfrmess/">
124 http://www.oreally.com/catalog/dotnetfrmess</a>)
130 People running both Linux and Windows while contributing to
131 Mono use a number of tricks to increase their productivity.
136 * <b>Linux host and Windows host</b>
138 The Windows file system is shared (right click on
139 your hard drive icon, and select sharing, allow this
142 The Windows machine has the required build tools
143 (cygwin, and the .NET framework). On the Windows
144 machine, you want to setup the ssh server (run the
145 ssh-host-config program to configure your ssh) and
146 run it (from a cygwin terminal, type: /usr/sbin/sshd).
148 From the Linux side, you want to mount the Windows
149 file system, using something like this:
152 mount -t smbfs -o uid=miguel,username="Miguel de Icaza" "//quack/c$" /mnt
155 In the above example, my Linux user name is
156 `miguel', and this will allow this user to have
157 read/write access to the share.
159 The host name is `quack', and the name of the share
160 is `c$' (that is the C: partition).
162 The file system is accessible on /mnt.
164 You can perform your cvs update and cvs commits from
165 the /mnt directory, and run Emacs or your favorite
166 Linux text editor on the Unix side in this way.
168 Then from another terminal, you can ssh into your
169 Windows box using ssh, like this: ssh "Miguel de Icaza@quack"
174 If you have looked at Microsoft's implementation of .NET or
175 their shared source code, you may not be able to contribute
176 to Mono. Details will follow when we know more about this.
178 In general be careful when you are implementing free software
179 and you have access to proprietary code. We need to make sure
180 that we are not using someone else's copyrighted code
183 Please do not use the <b>ildasm</b> program to disassemble
184 proprietary code when you are planning to reimplement a class
185 for Mono. If you have done this, we might not be able to use
188 Please stick to published documentation for implementing any