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
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.
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
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.
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
45 There are different areas of interest where high-level
46 contributions can be made:
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.
55 * <b>VM runtime</b>: optimizing the runtime data structures, experimenting with
56 different garbage collectors, integration with different component models.
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).
67 <table border=1 cellspacing="0" cellpadding="0">
69 <th>Area<th>Description<th>Difficulty<th>Time estimate<th>Bugzilla ID
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
80 <td>Medium-hard (thesis subject)
82 <td><a href="http://bugzilla.ximian.com/show_bug.cgi?id=52605">52605</a>
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)
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)
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.
117 <td>3-6 months per arch
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
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)
143 <td><a href="http://bugzilla.ximian.com/show_bug.cgi?id=52606">52606</a>
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)
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)
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.
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.
191 <td>Write an implementation of the MSBuild compilation tool available in .NET 1.2
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.
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
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.
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.
238 <td>Comment Service API
239 <td>Design a full system for comments and ratings so
240 people can annotate the documentation in Monodoc.
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
252 <td>Work with the mono-devel-list to keep track of things.
255 <td>System.XML updates
257 <td>.NET 2.0 will introduce many new updates to the
258 System.Xml namespace: XQuery and new XPathDocument are
263 <td>Work with the mono-devel-list to keep track of things.