2002-03-20 Duncan Mak <duncan@ximian.com>
[mono.git] / web / contributing
index e34c0c8c684d2b2e116cfec5df9a3ecebde55a96..5bec9cefda558cf6b93e8a442ecc3a32e283d491 100644 (file)
@@ -10,7 +10,7 @@
                  href="tools.html">the tools</a>, the <a
                  href="testing.html">testing framework</a>
 
-               * <b>Writers:</b> You can help us with writing <a
+               * <b>Writers:</b> You can help us bywriting <a
                  href="documentation.html">documentation</a>.
        </ul>
 
        something that would help tremendously would be to help with
        small duties in the project that need to be addressed. 
 
+       You can see what needs to be done in the class libraries <a href="class-status.html">here</a>
+
+** To start contributing
+
+       As a programmer, you can contribute in three different scenarios to Mono:
+
+       <ul>
+               * If you only have Linux/Unix.
+               * If you only have Windows.
+
+               * If you have both Linux and Windows.
+       </ul>
+
+       You might also want to check our <a href="#setup">common
+       setups</a> section that describes some common setups that people
+       use while working on Mono.
+
+*** Contributing to the class library, regression tests or the compiler
+
+       This only requires Windows currently.
+
+       To start developing classes or to contribute to the compiler,
+       you only need Windows and the .NET Framework 1.0 SDK.  Please notice
+       that you do not need Visual Studio (although you can use it if
+       you want).  The .NET Framework SDK requires some version of
+       Windows XP or Windows NT.  If you are running Windows 98, 95
+       or Me, you could use instead the <a
+       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
+       lacks the documentation browser and the ildasm program (C#, VB, JScript and IL 
+       assembler are included).
+
+       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>
+
+       If you are new to .NET, writing regression tests is a good way
+       of starting to contribute: it will help you get used to C# as
+       well as getting comfortable with the .NET APIs.  
+
+       This helps because at this point you might be the best
+       qualified person to fix a problem found by the regression
+       test, or you might have a new class to implement in the .NET
+       world that only has a test suite.  
+       
+       To get started writing tests see the <a href="testing.html">Test Suite</a>
+       section.
+
+*** Contributing to the runtime engine
+
+       This only requires Linux, currently some tasks are easier if you
+       have access to Windows as well.
+
+       Here are a few things you can do:
+       <ul>
+               * Port the runtime to other architectures.
+               * Port the runtime to other operating systems.
+               * Finish the IL code verifier in the runtime.
+               * Hack the JIT, improve the code generator, add new
+                 pattern rules, improve the register allocator.
+               * Implement the debugging interfaaces
+       </ul>
+
+** Bug reporting
+
+       If you find bugs in Mono, please make sure you enter a bug
+       report so we can keep track of problems in Mono.
+
+       To enter bug reports go to <a href="http://bugzilla.ximian.com">
+       http://bugzilla.ximian.com</a> and enter bug reports against
+       your favorite component (Mono, Runtime, C# compiler).
+
+       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>
+
 ** Small tasks
 
        A few smaller tasks are here, dropped in no particular order:
        <ul>
-               * <b>MCS compilation process:</b> Currently MCS does
-                 not build with a single `make' command.  This should
-                 be fixed (this being part of the `Joel Test' that
-                 software has to pass).
-
                * <b>Mono/doc and web site:</b> They need to be
                  packaged up in the official `distribution'
 
-               * <b>Enthusiasts: </b>
+               * Adding serialization support to all the classes.
+
+                 We have many classes, but we have not implemented in
+                 many cases the serialization and re-incarnation support in 
+                 them (this is pretty straight forward code, and simple,
+                 but there is a lot to be done here).
        </ul>
 
-* Special note
+* Emacs support
+
+       Brad Merryl's C# mode for Emacs is available: <a
+       href="http://www.cybercom.net/~zbrad/DotNet/Emacs/">http://www.cybercom.net/~zbrad/DotNet/Emacs/</a>
+
+* Books on C# and DotNet.
+
+       <ul>
+       * Dotnet Books (<a href="http://www.dotnetbooks.com">http://www.dotnetbooks.com</a>)
+
+       * Dotnet Resources (<a href="http://www.dotnetexperts.com/resources/">
+         http://www.dotnetexperts.com/resources</a>)
+
+       * O'Reilly C# Essentials (<a href="http://www.oreilly.com/catalog/csharpess/">
+         http://www.oreally.com/catalog/csharpess</a>)
+
+       * O'Really .NET Essentials (<a href="http://www.oreilly.com/catalog/dotnetfrmess/">
+         http://www.oreally.com/catalog/dotnetfrmess</a>)
+       </ul>
+
+<a name="setup">
+* Common Setups
+
+       People running both Linux and Windows while contributing to
+       Mono use a number of tricks to increase their productivity.
+
+       Scenarios:
+
+       <ul>
+               * <b>Linux host and Windows host</b>
+
+                 The Windows file system is shared (right click on
+                 your hard drive icon, and select sharing, allow this
+                 to be shared).  
+
+                 The Windows machine has the required build tools
+                 (cygwin, and the .NET framework).  On the Windows
+                 machine, you want to setup the ssh server (run the
+                 ssh-host-config program to configure your ssh) and
+                 run it (from a cygwin terminal, type: /usr/sbin/sshd).
+
+                 From the Linux side, you want to mount the Windows
+                 file system, using something like this:
+
+<tt><pre>
+       mount -t smbfs -o uid=miguel,username="Miguel de Icaza" "//quack/c$" /mnt
+</pre></tt>
+
+                 In the above example, my Linux user name is
+                 `miguel', and this will allow this user to have
+                 read/write access to the share.  
+
+                 The host name is `quack', and the name of the share
+                 is `c$' (that is the C: partition).  
+
+                 The file system is accessible on /mnt.
+
+                 You can perform your cvs update and cvs commits from
+                 the /mnt directory, and run Emacs or your favorite
+                 Linux text editor on the Unix side in this way.
+
+                 Then from another terminal, you can ssh into your
+                 Windows box using ssh, like this: ssh "Miguel de Icaza@quack"
+       </ul>
+
+* Special Note
 
        If you have looked at Microsoft's implementation of .NET or
        their shared source code, you may not be able to contribute
        and you have access to proprietary code.  We need to make sure
        that we are not using someone else's copyrighted code
        accidentally. 
+
+       Please do not use the <b>ildasm</b> program to disassemble
+       proprietary code when you are planning to reimplement a class
+       for Mono.  If you have done this, we might not be able to use
+       your code.
+
+       Please stick to published documentation for implementing any
+       classes.