Backport
[mono-project.git] / web / mono-todo
blobc57c430c9b278be7cc0613de118b52dfa956d804
1 * Mono hacking TODO list
3         From time to time people that want to contribute to Mono ask
4         on the mailing list what they can help with. The generic
5         answer is always:
6         <ul>
7         <li> Write documentation.
8         <li> Write regression tests.
9         <li> Complete the implementations of the class libraries.
10         <li> Help fix the bugs filed in our bugzilla database.
11         </ul>
13         The proposed tasks are very important for the Mono project and
14         are suitable for people that can dedicate even just an hour
15         per week to contribute.  But some people may need something
16         more focused to work on, such as students that want to do a
17         thesis on their contribution to Mono. For such people (and
18         also for professors who want ideas for thesis regarding JIT or
19         VM technologies), here is a list of tasks that need attention.
21         The estimated time to complete any of the tasks is between 1
22         week to several months to accomodate for different hacking
23         possibilities.
25         Note on the time estimates: they are very rough estimates, a
26         smart and dedicated hacker can complete the tasks in half of
27         the minimum time, a part-time hacker that also has a social
28         life can take more than double the max time, but there's
29         nothing to worry as long as progress is being done.
31         If some people (or group of people) want to take on a task,
32         they should write to the mono-devel mailing list and in the
33         relative bugzilla bug report. Discussions about how to
34         implement a feature or additional information on the task
35         should be mailed to the list or in the bugzilla report as well
36         so that people can keep informed on the progress or have the
37         information needed to start contributing.
38         
39         Mono is an excellent platform for research on JITs, virtual
40         machines and specifically the CLR because it provides an
41         advanced free software implementation that can be used as a
42         basis for more optimizations, new approaches to problems and
43         new features.
45         There are different areas of interest where high-level
46         contributions can be made:
48         <ul>
49         * <b>JIT compiler</b>: tasks can be: adding more optimizations, reducing 
50         compile time, porting to different architectures.
52         * <b>AOT compiler</b>: optimizing the compiler output and the AOT loader,
53         better support for multiple application domains.
54         
55         * <b>VM runtime</b>: optimizing the runtime data structures, experimenting with
56         different garbage collectors, integration with different component models.
57         
58         * <b>Class library</b>: many opportunities in the implementation of regular 
59         expressions, Xml related technologies (XPath, XLST, etc).
61         * <b>Compilers</b>: writing compilers, interpreters and runtimes for langauges
62         so that they run on the CLR (using Reflection.Emit support, for example).
63         </ul>
65 Happy hacking!
67 <table border=1 cellspacing="0" cellpadding="0">
68         <tr>
69                 <th>Area<th>Description<th>Difficulty<th>Time estimate<th>Bugzilla ID
70         </tr>
72         <tr>
73                 <td>System assembly (mcs/class/System/)
74                 <td>Implement the IL-based regular expression engine. Instead of
75                 intepreting the regular expression pattern, a method is created at runtime using
76                 Reflection.Emit. This makes for faster pattern matching because there is no 
77                 intepreter overhead and the matching code is jitted to fast native code.
78                 Bonus points if the compiled regular expression is compatible with the ones generated 
79                 by the MS runtime.
80                 <td>Medium-hard (thesis subject)
81                 <td>2-4 months
82                 <td><a href="http://bugzilla.ximian.com/show_bug.cgi?id=52605">52605</a>
83         </tr>
85         <tr>
86                 <td>JIT (mono/mini/)
87                 <td>Implement common subexpression elimination.
88                 Global and local common subexpression elimination needs to be implemented
89                 to achieve better performance. The local case is easier and may take just one month.
90                 It should be implemented in the context of the SSA framework (mini/ssa.c).
91                 <td>Hard (thesis subject)
92                 <td>2-4 months 
93                 <td>not assigned
94         </tr>
96         <tr>
97                 <td>JIT (mono/mini/)
98                 <td>Optimize AOT compiler output.
99                 Currently the code generated by the AOT compiler may be significantly slower than
100                 jitted code. This is mostly because the AOT code supports multiple application domains
101                 and some values that are constant at JIT-time are not constant at AOT-time. It may be
102                 needed to write a simple dynamic linker and/or binary object writer. Bonus poinst if
103                 it supports ELF, PE/COFF and mach-O binary formats. A possible idea for improvements 
104                 is also the use of appdomain ID-indexed tables to get at the appdomain specific data.
105                 <td>Medium-hard (thesis subject)
106                 <td>3-6 months
107                 <td>not assigned
108         </tr>
110         <tr>
111                 <td>JIT (mono/mini/)
112                 <td>Port the JIT to additional architectures.
113                 Currently ports exist for x86, ppc, sparc and s390. 
115                 Ports to more architectures are welcome as well.
116                 <td>Medium-hard
117                 <td>3-6 months per arch
118                 <td>not assigned
119         </tr>
121         <tr>
122                 <td>Runtime and JIT (mono/metadata and mono/mini/)
123                 <td>Add support for COM and/or XPCOM and/or ORBit.
124                 We need a way to seamlessy use existing component technologies inside the mono runtime.
125                 The COM support needs to match the MS runtime behaviour and is targeted at windows systems.
126                 XPCOM and ORBit support are important on Unix platforms. Bonus points for developing
127                 the runtime support so that different component systems can be used at the same time.
128                 <td>Medium-hard (thesis subject)
129                 <td>3-4 months for each
130                 <td>not assigned
131         </tr>
133         <tr>
134                 <td>Runtime and JIT (mono/metadata and mono/mini/)
135                 <td>Implement support for Code Access Security.
136                 Support needs to be added to the JIT and the runtime to ensure
137                 code that executes privileged operations is permitted to do so.
138                 The task includes loading the security information from metadata,
139                 collecting evidence, inserting calls to the permission objects, 
140                 stack walking to collect security info.
141                 <td>Medium-hard (thesis subject)
142                 <td>4-5 months
143                 <td><a href="http://bugzilla.ximian.com/show_bug.cgi?id=52606">52606</a>
144         </tr>
146         <tr>
147                 <td>Runtime and JIT (mono/metadata and mono/mini/)
148                 <td>Implement support for a generational GC.
149                 We're currently using a conservative non-moving GC.
150                 Support for a generational and moving GC requires changes to the JIT
151                 (to record locations in frames as well as registers that may contain 
152                 pointers to GC-allocated memory) and to the runtime code (when
153                 objects are manipulated directly we should make sure they are pinned
154                 and reachable by the GC also in the C unmanaged code). Code from an existing
155                 precise GC such as the ORP one could be reused or a new GC may be developed
156                 (increasing the estimated development time).
157                 <td>Hard (thesis subject)
158                 <td>6-8 months
159                 <td>not assigned
160         </tr>
162         <tr>
163                 <td>Compilers for dynamic languages
164                 <td>Write a IL compiler and runtime support for dynamic languages like
165                 Python, Perl, Ruby, PHP.
166                 <td>Medium-hard (thesis subject)
167                 <td>6-12 months
168                 <td>not assigned
169         </tr>
171         <tr>
172                 <td>Linker tool.
174                 <td>Write a tool that given a list of methods and
175                 classes extracts them from an existing assembly and
176                 produces a new assembly with these classes and any
177                 dependencies they might have.
178                 
179                 <br>The idea is to have a way of creating custom
180                 libraries that can either be embedded with Mono's
181                 bundle setup or to create smaller editions of the
182                 libraries for embedded systems.
184                 <td>Medium
185                 <td>4-6 months
186                 <td>
187         </tr>
189         <tr>
190                 <td>Tools
191                 <td>Write an implementation of the MSBuild compilation tool available in .NET 1.2
192                 <td>Medium
193                 <td>4-6 months
194                 <td>not assigned
195         </tr>
196         <tr>
197                 <td>Build tools.
198                 <td>Currently it is easy for people doing daily
199                 updates from CVS to break their installation.  Design a mechanism by
200                 which Mono never fails to compile.
201                 <td>Easy
202                 <td>1-2 weeks
203                 <td>not assigned
204         </tr>
205         <tr>
206                 <td>Documentation.
207                 <td>Editorial review of the Monkeyguide: The monkeyguide is known to contain outdated
208                 statements, it needs to be reviewed and it needs an
209                 editor to take control over it.  Some simple tasks
210                 include flattening out the Monkeyguide, since it is
211                 too nested today. 
212                 <td>Easy
213                 <td>Ongoing work.
214                 <td>not assigned
215         </tr>
216         <tr>
217                 <td>Documentation
218                 <td>GNOME.NET Chapter should probably be separated
219                 from the Monkeyguide.  This is probably the most
220                 complete chapter, but it is burried  in various nested
221                 levels of stuff, and because of this, it is not being
222                 updated.  Write a chapter on custom control
223                 authoring and common patterns of app development. 
224                 <td>Easy
225                 <td>Ongoing work.
226                 <td>not assigned
227         </tr>
228         <tr>
229                 <td>Documentation Tools
230                 <td>The Monodoc collaborative service needs a better
231                 administration tool than it has today;  Someone needs
232                 to redo the UI and streamline its process.
233                 <td>Easy
234                 <td>2-3 months.
235                 <td>not assigned
236         </tr>
237         <tr>
238                 <td>Comment Service API
239                 <td>Design a full system for comments and ratings so
240                 people can annotate the documentation in Monodoc. 
241                 <td>Easy
242                 <td>2-3 months.
243                 <td>not assigned
244         </tr>
245         <tr>
246                 <td>System.Data updates
247                 <td>.NET 1.2 will introduce many new updates to the
248                 System.Data namespace: MARS and ObjectSpaces are the
249                 big ones. 
250                 <td>Medium
251                 <td>6-9 months.
252                 <td>Work with the mono-devel-list to keep track of things.
253         </tr>
254         <tr>
255                 <td>System.XML updates
256                 
257                 <td>.NET 2.0 will introduce many new updates to the
258                 System.Xml namespace: XQuery and new XPathDocument are
259                 the big changes.
261                 <td>Medium
262                 <td>6-9 months.
263                 <td>Work with the mono-devel-list to keep track of things.
264         </tr>
265 </table>