contributing 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. * Contributing to the Mono project
  2. Mono has not been completed yet. It is a project under
  3. active development and with a vibrant community. If you are
  4. looking at ways of helping the project, you have come to the
  5. right web page.
  6. There are three different philosophical approaches to helping
  7. the Mono project, the selfish way, the altruistic or the
  8. educational way.
  9. The <b>selfish</b> way is packed with adventure. You start by
  10. building your own software, and start using the compiler and
  11. tools that come with Mono. Eventually you will run into
  12. missing features, or a bug in the software. Since we ship all
  13. the source code for Mono, you can start tracking down the
  14. problem. Depending on how much time you have to devote to the
  15. problem you could: <a href="http://bugzilla.ximian.com">File a
  16. bug report</a> (read <a href="#goodbugreport">this</a>); track
  17. down the problem and provide a better
  18. <a href="http://bugzilla.ximian.com">bug report</a>; fix the
  19. bug and provide a patch (you can <a
  20. href="mailto:[email protected]">post it</a> to the <a
  21. href="http://lists.ximian.com/mailman/listinfo/mono-list">mono
  22. mailing list</a>; or discuss the solution on the mailing
  23. list. Ideally you will also write a <a
  24. href="testing.html">regression test</a> so the bug does not
  25. get re-introduced in the future.
  26. The <b>altruistic</b> is probably the easiest because you get
  27. to pick a piece of Mono that you might want to work on. You
  28. can pick an unfinished <a href="class-library.html">class</a> (from our <a
  29. href="class-status.html">class status page</a>); help with the
  30. <a href="documentation.html">documentation effort</a> (<a
  31. href="http://lists.ximian.com/mailman/listinfo/mono-docs-list">mailing
  32. list for the documentation effort</a>); fix existing <a
  33. 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
  34. bugs</a>; <a
  35. 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
  36. bugs</a>; help with the <a href="tools.html">tools</a> or
  37. writing <a href="testing.html">tests</a> that help make Mono
  38. more robust or help with the <a
  39. href="http://www.go-mono.com/winforms.html">Winforms
  40. effort</a>.
  41. The <b>educational</b> way is an interesting one, because you
  42. pick a technology you are interested in, and work on that
  43. technology to learn the technology.
  44. Those are just broad things that need to be worked on, but
  45. something that would help tremendously would be to help with
  46. small duties in the project that need to be addressed.
  47. You can see what needs to be done in the class libraries <a href="class-status.html">here</a>
  48. * IRC Channel
  49. Many developers get together on the <b>#mono</b> irc channel
  50. on the <b>irc.gnome.org</b> server.
  51. ** To start contributing
  52. As a programmer, you can contribute in three different scenarios to Mono:
  53. <ul>
  54. * If you only have Linux/Unix.
  55. * If you only have Windows.
  56. * If you have both Linux and Windows.
  57. </ul>
  58. You might also want to check our <a href="#setup">common
  59. setups</a> section that describes some common setups that people
  60. use while working on Mono.
  61. *** Contributing to the class library, regression tests or the compiler
  62. This only requires Windows currently.
  63. To start developing classes or to contribute to the compiler,
  64. you only need Windows and the .NET Framework 1.0 SDK. Please notice
  65. that you do not need Visual Studio (although you can use it if
  66. you want). The .NET Framework SDK requires some version of
  67. Windows XP or Windows NT. If you are running Windows 98, 95
  68. or Me, you could use instead the <a
  69. 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
  70. lacks the documentation browser and the ildasm program (C#, VB, JScript and IL
  71. assembler are included).
  72. 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>
  73. If you are new to .NET, writing regression tests is a good way
  74. of starting to contribute: it will help you get used to C# as
  75. well as getting comfortable with the .NET APIs.
  76. This helps because at this point you might be the best
  77. qualified person to fix a problem found by the regression
  78. test, or you might have a new class to implement in the .NET
  79. world that only has a test suite.
  80. To get started writing tests see the <a href="testing.html">Test Suite</a>
  81. section. <a href="mono-contribution-howto.html">Here</a> there is a good All-In-One introduction to the art of writing tests.
  82. *** Contributing to the runtime engine
  83. This only requires Linux, currently some tasks are easier if you
  84. have access to Windows as well.
  85. Here are a few things you can do:
  86. <ul>
  87. * Port the runtime to other architectures.
  88. * Port the runtime to other operating systems.
  89. * Finish the IL code verifier in the runtime.
  90. * Hack the JIT, improve the code generator, add new
  91. pattern rules, improve the register allocator.
  92. * Implement the debugging interfaaces
  93. </ul>
  94. ** Bug reporting
  95. If you find bugs in Mono, please make sure you enter a bug
  96. report so we can keep track of problems in Mono.
  97. To enter bug reports go to <a href="http://bugzilla.ximian.com">
  98. http://bugzilla.ximian.com</a> and enter bug reports against
  99. your favorite component (Mono, Runtime, C# compiler).
  100. 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>
  101. Check our <a href="bugs.html">Bugs</a> that contains links to
  102. easily add a bug report, or to query the existing bugs.
  103. <a name="goodbugreport"/>
  104. ** How to make good bug reports
  105. A mail from Paolo to mono-devel-list contained this check list:
  106. <ol>
  107. * Submit a test case, the smaller it is, the better
  108. * Use <a href="http://bugzilla.ximian.com">
  109. http://bugzilla.ximian.com</a> to report the bug.
  110. <p>In <b>addition</b> to bugzilla, posting to the list is
  111. fine if the bug merits larger exposure or design
  112. discussions to solve; posting to the list twice or more
  113. is just a way to annoy people and make them waste time,
  114. specially when you start a new thread about it.
  115. * If the test involves libraries or assemblies that are
  116. not part of mono, add info about where to download all
  117. the dependencies, and how to compile/install them.
  118. * If compiling the test case requires more than:
  119. <pre> mcs test.cs </pre>
  120. provide the <b>full command line</b> you used to compile
  121. the test.
  122. * If running the test requires more than:
  123. <pre> mono test.exe </pre>
  124. provide the <b>full command line</b> needed to replicate
  125. the bug.
  126. * Provide info about the version of the software you're
  127. using (both mono and the operating system or relevant
  128. libraries).
  129. * Provide the output you expect the test case to produce.
  130. * Provide the actual output <b>you</b> get from the test case.
  131. </ol>
  132. A good bug report complies with at least 6 items from the list.
  133. If your bug report complies with 3 or less items, it is very
  134. poor and it means it will take much more time to fix (when it's
  135. not ignored).
  136. ** Small tasks
  137. A few smaller tasks are here, dropped in no particular order:
  138. <ul>
  139. * <b>Mono/doc and web site:</b> They need to be
  140. packaged up in the official `distribution'
  141. * Adding serialization support to all the classes.
  142. We have many classes, but we have not implemented in
  143. many cases the serialization and re-incarnation support in
  144. them (this is pretty straight forward code, and simple,
  145. but there is a lot to be done here).
  146. </ul>
  147. * Emacs support
  148. Brad Merryl's C# mode for Emacs is available: <a
  149. href="http://www.cybercom.net/~zbrad/DotNet/Emacs/">http://www.cybercom.net/~zbrad/DotNet/Emacs/</a>
  150. * Books on C# and DotNet.
  151. <ul>
  152. * Dotnet Books (<a href="http://www.dotnetbooks.com">http://www.dotnetbooks.com</a>)
  153. * Dotnet Resources (<a href="http://www.dotnetexperts.com/resources/">
  154. http://www.dotnetexperts.com/resources</a>)
  155. * O'Reilly C# Essentials (<a href="http://www.oreilly.com/catalog/csharpess/">
  156. http://www.oreally.com/catalog/csharpess</a>)
  157. * O'Really .NET Essentials (<a href="http://www.oreilly.com/catalog/dotnetfrmess/">
  158. http://www.oreally.com/catalog/dotnetfrmess</a>)
  159. </ul>
  160. <a name="setup">
  161. * Common Setups
  162. People running both Linux and Windows while contributing to
  163. Mono use a number of tricks to increase their productivity.
  164. Scenarios:
  165. <ul>
  166. * <b>Linux host and Windows host</b>
  167. The Windows file system is shared (right click on
  168. your hard drive icon, and select sharing, allow this
  169. to be shared).
  170. The Windows machine has the required build tools
  171. (cygwin, and the .NET framework). On the Windows
  172. machine, you want to setup the ssh server (run the
  173. ssh-host-config program to configure your ssh) and
  174. run it (from a cygwin terminal, type: /usr/sbin/sshd).
  175. From the Linux side, you want to mount the Windows
  176. file system, using something like this:
  177. <tt><pre>
  178. mount -t smbfs -o uid=miguel,username="Miguel de Icaza" "//quack/c$" /mnt
  179. </pre></tt>
  180. In the above example, my Linux user name is
  181. `miguel', and this will allow this user to have
  182. read/write access to the share.
  183. The host name is `quack', and the name of the share
  184. is `c$' (that is the C: partition).
  185. The file system is accessible on /mnt.
  186. You can perform your cvs update and cvs commits from
  187. the /mnt directory, and run Emacs or your favorite
  188. Linux text editor on the Unix side in this way.
  189. Then from another terminal, you can ssh into your
  190. Windows box using ssh, like this: ssh "Miguel de Icaza@quack"
  191. </ul>
  192. * Special Note
  193. If you have looked at Microsoft's implementation of .NET or
  194. their shared source code, you may not be able to contribute
  195. to Mono. Details will follow when we know more about this.
  196. In general be careful when you are implementing free software
  197. and you have access to proprietary code. We need to make sure
  198. that we are not using someone else's copyrighted code
  199. accidentally.
  200. Please do not use the <b>ildasm</b> program to disassemble
  201. proprietary code when you are planning to reimplement a class
  202. for Mono. If you have done this, we might not be able to use
  203. your code.
  204. Please stick to published documentation for implementing any
  205. classes.