30e7645e758558a1c5e71739bc38661ea5bed912
[mono.git] / web / mono-hacking-roadmap.html
1 <html>
2 <head><title>Mono Hacking Roadmap</title>
3 <style type="text/css">
4 h1 {
5 color: #efefef;
6 font-size: 18pt;
7 font-family: "Trebuchet MS";
8 border: 0;
9 margin: 0;
10 padding: 1em;
11 background: #666666;
12 }
13
14 h2, h3, h4, h5, h6 {
15 font-family: Verdana,sans-serif;
16 font-weight: bold;
17 margin: 9pt;
18 }
19
20 h2, h3 {
21 font-size: 18px;
22 }
23
24 h2 {
25 padding: 3px;
26 color: #000000;
27 }
28
29 h3 {
30 font-size: 13px;
31 border-bottom: 2px solid #dddddd;
32 }
33
34 h4 {
35 border-bottom: 2px solid #dddddd;
36 }
37
38 body, table {
39 background-color: #ffffff;
40 font-family: Verdana, sans-serif; font-size: 12px;
41 color: black;
42 margin: 0;
43 padding: 0;
44 border: 0;
45        margin-left: 20%;
46        margin-right: 20%;
47 }
48
49 p {
50 margin-left: 2em;
51 margin-right: 2em;
52 }
53
54 ul li {
55 margin-left: 2em;
56 }
57
58 img {
59 border: 0;
60 vertical-align: top;
61 }
62
63 </style>
64 </head>
65 <body>
66 <center>
67   <h1>
68   Mono Hacking Roadmap
69   <br>
70
71   <font size=1>Miguel de Icaza (<a href="mailto:miguel@ximian.com">miguel@ximian.com</a>)</font>
72
73   </h1>
74   <p>
75 </center>
76
77 <h3>Introductory notes</h3>
78
79         <p>The intention of this document and the <a
80         href="http://www.go-mono.com/mono-roadmap.html">Mono
81         Roadmap</a> is to be a basis for discussion.  I want to build
82         on these two documents, and update as we get more insight into
83         the release process and the technologies we want to ship.
84
85 <h3>Background</h3>
86
87         <p>At the 2003 PDC Microsoft introduced many new technologies,
88         which many of us are very excited about.  To me, it underlined
89         the importance of having a roadmap for users of Mono
90         technologies.  That way they know precisely what to expect
91         from us when.  We have been working on Mono for more than two
92         years, and it is important that we release a stable product to
93         the public.
94
95         <p>We have various degrees of maturity and feature
96         completeness in our code base, and I do not believe that we
97         should aim to be full implementation .NET 1.0 or .NET 1.1 in
98         our 1.0 release, that would just push the release at least for
99         another year .  The <a
100         href="http://www.go-mono.com/mono-roadmap.html">Mono
101         Roadmap</a> emphasizes this assumption.
102
103         <p>The 1.0 release is critical for the adoption of Mono on the
104         Linux environment, even if it is not as complete as the
105         Framework, lets get something stable, and fun to people to
106         use. 
107
108 <h3>Mono 1.0: missing functionality.</h3>
109
110         <p>For the 1.0 release, there are a number of features that we
111         will have to complete, in no particular order:
112         
113         <ul>
114                 <li>We need to fix corcompare and our cor-compare
115                 pages to support both 1.0 and 1.1 API API compares.
116
117                 We might want to move this outside of the Mono site,
118                 to reduce the complexity of the HTML hackage, and use
119                 ASP.NET to implement this.  Bonus points if we use
120                 Piers' nice dynamic tree to load the CorCompare data
121                 dynamically. 
122                 
123                 <li>Global Assembly Cache: Needed to support the
124                 parallel installation of .NET 1.0 and 1.1 assemblies,
125                 and to fix the various Assembly loading routines.
126
127                 <li>PowerPC port.
128
129                 <li>ECMA profile: We will like take care of this one
130                 at Novell.
131
132                 <li>Assembly signing: I do not know what is the state
133                 of this feature currently in Mono, maybe Sebastien and
134                 Zoltan could give us an update here.
135
136                 <li>ASP.NET caching: Non-existant at this point, this
137                 needs to be implemented. 
138                 
139                 <li>Stability of ASP.NET and Mod_Mono.  They are both
140                 functional, but they fail under load.  Much debugging
141                 and testing must go into these components.  As we use
142                 more of it, we have found more little problems surface
143                 on it. 
144
145                 <li>Codebase audit: Duncan did an audit of Corlib, but
146                 we must do an audit of all the assemblies that we we
147                 are going to ship, just to get an idea of the major
148                 areas missing.
149         </ul>
150
151         <p>The team at Novell can probably take care of most of these
152         things (help is always welcomed, of course), letting folks in
153         the open source world working on the more fun components. 
154         
155 <h3>Alpha components.</h3>
156
157         <p>Various Mono developers are working on areas that will not
158         make it into the 1.0 timeframe: JScript, WSE, VB.NET,
159         Windows.Forms, Generics.  We should continue to work on
160         those components, as they will come shortly after, and they
161         are probably more fun to develop than stabilizing the core. 
162
163 <h3>New components: Whidbey and Longhorn features</h3>
164
165         <p>Everyone is probably very excited about the new features in
166         the Whidbey release of .NET, and most importantly the Longhorn
167         features.  I am sure that many of us will not resist the urge
168         to put some of the new assemblies on CVS.
169
170         <p>We will likely add a profile for those of you that want to
171         work on this, and can not wait to get your hands in the code,
172         although keep in mind that your contributions wont reach the
173         general audience until we successfully ship 1.0.
174         
175         <p>The things to keep in mind while adding code which is not
176         in .NET 1.0 and .NET 1.1:
177
178         <ul>
179                 <li>Make sure you surround new classes and methods
180                 with the appropriate define: NET_1_2 for things
181                 available on the .NET 1.2 SDK (Whidbey) and NET_3
182                 define for things only available on the Longhorn API.
183                 We need this so that these methods do not appear on
184                 the 1.0 and 1.1 builds.
185
186                 <li>If you add generic types or methods, also surround
187                 the method with GENERICS for now, since our compiler
188                 can not currently build this code yet.   This is
189                 redundant with the NET_1_2 define but important. 
190                 
191                 <li>For every assembly you update, make sure that you
192                 also add the relevant AssemblyInfo versioning
193                 information.  If possible, when you add methods from
194                 .NET 1.2 to the build, also update the AssemblyInfo.cs
195                 for the library.
196         </ul>
197
198         <p>There are three areas of new hot features:
199
200         <ul>
201                 <li>Class library improvements (Whidbey, Mono 1.2
202                 time frames).
203
204                 <li>Indigo: They will release this in 2005 or 2006 and
205                  wont make it into the 2004 Whidbey .NET 1.2 release.
206
207                 <li>Avalon: Definitely a Longhorn-bound feature.
208         </ul>
209
210         <p>Most code that will reach the users in the short time frame
211         (next year) will be related to the Whidbey improvements, so I
212         encourage developers to work on those pieces, as they are the
213         ones that will help Mono the most.  
214
215 <h3>ASP.NET 2.0 plans</h3>
216
217         <p>Gonzalo will continue to coordinate this effort;  At this
218         time ASP.NET 2.0 features will not make it into Mono 1.0.
219         
220 <h3>Avalon plans</h3>
221
222         <p>On the surface Avalaon seems like it uses something like
223         GdiPlus/Cairo for rendering.  That was my initial feeling, but
224         it turns out that they had to rewrite everything to have a
225         performing rendering engine, and implement some very advanced
226         rendering features that include compositing with video
227         streams, also their brushes seem to be fairly powerful.
228
229         <p>XAML, a new markup language that binds tags to .NET classes
230         was also presented, but this is the least interesting part.  A
231         tiny compiler translates the XAML source files into C# code.
232         The whole process is just like Glade, and should be easy to
233         do.
234
235         <p>The really elaborate parts are the rendering engine, and the
236         composition model for widgets.  It is a complete new toolkit,
237         and if we want to implement this one, we will have to have a
238         new toolkit on Unix, incompatible with everything else, maybe
239         stressing the importance of working with other open source
240         projects in defining a cross-toolkit theming strategy to
241         address this particular problem.
242
243         <p>A Mini-Avalon is easy to do, but a complete one will
244         require much interaction with other groups: the Cairo folks
245         are probably the most qualified to assist us.
246
247 <h3>Indigo Plans</h3>
248
249         <p>Indigo is still an early product (<a
250         href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx?pull=/library/en-us/dnlong/html/indigofaq1.asp">FAQ</a>,
251         but it could benefit from continued development of our WSE1
252         and WSE2 components, later to bring some of the code to it.
253
254         <p>Again, since people are visibly excited about this
255         technology, we will lay down in the next few days a framework
256         to contribute to it.
257         
258
259 <p>
260 <i>Last Updated: Nov 1st, 2003</i>
261                 
262 </body>
263 </html>