More flush
[mono.git] / web / class-library
1 * The Class Library
2
3         The Class Library should be compatible with Microsoft's .NET
4         implementation.
5
6         We will write as much code as possible in C#. We may need to
7         interface with code written in C to gain access to the
8         functionality of
9         libraries like libart, Gtk+, and libc.
10
11 ** Layout
12
13         The Class Library resides in the `mcs' module in the directoy
14         `class'.
15         
16         Each directory in the directory represents the assembly where
17         the code belongs to, and inside each directory we divide the
18         code based on the namespace they implement.
19
20         There are two cases when we should consider portability: when
21         we are dealing with a couple of classes only that differ from
22         system to system (Consider System.Net and System.IO for Win32
23         and Unix).  In those cases we will just place the files for
24         example on <t>corlib/System/System.IO/Unix-Console.cs</t> and
25         <t>corlib/System/System.IO/Win32-Console.cs</t>.
26
27         For classes that might differ more (for example, the
28         implementation of Windows.Forms), we might have different
29         directories altogether: <t>System.Windows.Forms/Win32</t>,
30         <t>System.Windows.Forms/Gtk+</t> and
31         <t>System.Windows.Forms/Cocoa</t>.
32
33 ** Using existing components from GNOME.
34
35         Our current plan is to implement the GUI tools on top of
36         Gtk+.  The only obstacle here is that applications from Windows
37         might expect to be able to pull the HWND property from the
38         widgets and use PInvoke to call Windows functions.
39
40 ** Class Library and Win32 dependencies.
41
42         There are a few spots where the Win32 foundation is exposed to
43         the class library (for example, the HDC and HWND properties in
44         the GDI+). Casual inspection suggests that these can be
45         safely mapped to Gdk's GC and GdkWindow pointers without
46         breaking anything.
47
48         The only drawback is that support for PInvoke of Win32 code
49         won't be available.  An alternate solution would be to use
50         portions of Wine, or even to use Wine as our toolkit.
51
52 *** Initial GDI+ and WinForms implementation
53
54         The initial implementation will use Gtk+ as the underlying
55         toolkit. Since GTK+ has already been ported to many windowing
56         systems other than X (including frame buffer, Win32, and BeOS)
57         its use should cover most applications for most users. 
58         
59 *** Database access
60
61         We will implement ADO.NET functionality by reusing <a
62         href="http://www.gnome-db.org">GNOME-DB</a>. This is an ideal
63         choice, since GNOME-DB was implemented precisely to provide an
64         ADO-like system for GNOME.
65
66 *** Component Integration
67
68         We will provide a new namespace to use GNOME specific features
69         as well as a namespace to host Bonobo interfaces and classes
70         in Mono.  
71
72 ** Licensing
73
74         The class library will be licensed under the terms of the GNU
75         LGPL.
76
77         We suggest that you assign the copyright of your work to the
78         GNOME Foundation or the Free Software Foundation to simplify
79         defending the code in case it is used inappropiately. 
80
81 ** Class Library testing
82
83         We need to write regression tests that will verify
84         the correctness of the class library, compiler, and JIT
85         engine.
86
87 ** Contributing
88
89         We welcome contributions to the the Class Library.  To get
90         started, check the status page for information about which
91         APIs are being worked on, and how to get in touch with 
92         individual maintainers.
93