contributing 10 KB

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