2002-09-25 Martin Baulig <martin@gnome.org>
[mono.git] / doc / contributing
1 * Contributing to the Mono project
2
3         There are many ways in which you can help in the Mono project:
4
5         <ul>
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>
12
13                 * <b>Writers:</b> You can help us bywriting <a
14                   href="documentation.html">documentation</a>.
15         </ul>
16
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. 
20
21         You can see what needs to be done in the class libraries <a href="class-status.html">here</a>
22
23 * IRC Channel
24
25         Many developers get together on the <b>#mono</b> irc channel
26         on the <b>irc.gnome.org</b> server.  
27
28 ** To start contributing
29
30         As a programmer, you can contribute in three different scenarios to Mono:
31
32         <ul>
33                 * If you only have Linux/Unix.
34                 * If you only have Windows.
35
36                 * If you have both Linux and Windows.
37         </ul>
38
39         You might also want to check our <a href="#setup">common
40         setups</a> section that describes some common setups that people
41         use while working on Mono.
42
43 *** Contributing to the class library, regression tests or the compiler
44
45         This only requires Windows currently.
46
47         To start developing classes or to contribute to the compiler,
48         you only need Windows and the .NET Framework 1.0 SDK.  Please notice
49         that you do not need Visual Studio (although you can use it if
50         you want).  The .NET Framework SDK requires some version of
51         Windows XP or Windows NT.  If you are running Windows 98, 95
52         or Me, you could use instead the <a
53         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
54         lacks the documentation browser and the ildasm program (C#, VB, JScript and IL 
55         assembler are included).
56
57         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>
58
59         If you are new to .NET, writing regression tests is a good way
60         of starting to contribute: it will help you get used to C# as
61         well as getting comfortable with the .NET APIs.  
62
63         This helps because at this point you might be the best
64         qualified person to fix a problem found by the regression
65         test, or you might have a new class to implement in the .NET
66         world that only has a test suite.  
67         
68         To get started writing tests see the <a href="testing.html">Test Suite</a>
69         section. <a href="mono-contribution-howto.html">Here</a> there is a good All-In-One introduction to the art of writing tests.
70
71
72 *** Contributing to the runtime engine
73
74         This only requires Linux, currently some tasks are easier if you
75         have access to Windows as well.
76
77         Here are a few things you can do:
78         <ul>
79                 * Port the runtime to other architectures.
80                 * Port the runtime to other operating systems.
81                 * Finish the IL code verifier in the runtime.
82                 * Hack the JIT, improve the code generator, add new
83                   pattern rules, improve the register allocator.
84                 * Implement the debugging interfaaces
85         </ul>
86
87 ** Bug reporting
88
89         If you find bugs in Mono, please make sure you enter a bug
90         report so we can keep track of problems in Mono.
91
92         To enter bug reports go to <a href="http://bugzilla.ximian.com">
93         http://bugzilla.ximian.com</a> and enter bug reports against
94         your favorite component (Mono, Runtime, C# compiler).
95
96         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>
97
98 ** Small tasks
99
100         A few smaller tasks are here, dropped in no particular order:
101         <ul>
102                 * <b>Mono/doc and web site:</b> They need to be
103                   packaged up in the official `distribution'
104
105                 * Adding serialization support to all the classes.
106
107                   We have many classes, but we have not implemented in
108                   many cases the serialization and re-incarnation support in 
109                   them (this is pretty straight forward code, and simple,
110                   but there is a lot to be done here).
111         </ul>
112
113 * Emacs support
114
115         Brad Merryl's C# mode for Emacs is available: <a
116         href="http://www.cybercom.net/~zbrad/DotNet/Emacs/">http://www.cybercom.net/~zbrad/DotNet/Emacs/</a>
117
118 * Books on C# and DotNet.
119
120         <ul>
121         * Dotnet Books (<a href="http://www.dotnetbooks.com">http://www.dotnetbooks.com</a>)
122
123         * Dotnet Resources (<a href="http://www.dotnetexperts.com/resources/">
124           http://www.dotnetexperts.com/resources</a>)
125
126         * O'Reilly C# Essentials (<a href="http://www.oreilly.com/catalog/csharpess/">
127           http://www.oreally.com/catalog/csharpess</a>)
128
129         * O'Really .NET Essentials (<a href="http://www.oreilly.com/catalog/dotnetfrmess/">
130           http://www.oreally.com/catalog/dotnetfrmess</a>)
131         </ul>
132
133 <a name="setup">
134 * Common Setups
135
136         People running both Linux and Windows while contributing to
137         Mono use a number of tricks to increase their productivity.
138
139         Scenarios:
140
141         <ul>
142                 * <b>Linux host and Windows host</b>
143
144                   The Windows file system is shared (right click on
145                   your hard drive icon, and select sharing, allow this
146                   to be shared).  
147
148                   The Windows machine has the required build tools
149                   (cygwin, and the .NET framework).  On the Windows
150                   machine, you want to setup the ssh server (run the
151                   ssh-host-config program to configure your ssh) and
152                   run it (from a cygwin terminal, type: /usr/sbin/sshd).
153
154                   From the Linux side, you want to mount the Windows
155                   file system, using something like this:
156
157 <tt><pre>
158         mount -t smbfs -o uid=miguel,username="Miguel de Icaza" "//quack/c$" /mnt
159 </pre></tt>
160
161                   In the above example, my Linux user name is
162                   `miguel', and this will allow this user to have
163                   read/write access to the share.  
164
165                   The host name is `quack', and the name of the share
166                   is `c$' (that is the C: partition).  
167
168                   The file system is accessible on /mnt.
169
170                   You can perform your cvs update and cvs commits from
171                   the /mnt directory, and run Emacs or your favorite
172                   Linux text editor on the Unix side in this way.
173
174                   Then from another terminal, you can ssh into your
175                   Windows box using ssh, like this: ssh "Miguel de Icaza@quack"
176         </ul>
177
178 * Special Note
179
180         If you have looked at Microsoft's implementation of .NET or
181         their shared source code, you may not be able to contribute
182         to Mono.  Details will follow when we know more about this.
183
184         In general be careful when you are implementing free software
185         and you have access to proprietary code.  We need to make sure
186         that we are not using someone else's copyrighted code
187         accidentally. 
188
189         Please do not use the <b>ildasm</b> program to disassemble
190         proprietary code when you are planning to reimplement a class
191         for Mono.  If you have done this, we might not be able to use
192         your code.
193
194         Please stick to published documentation for implementing any
195         classes.