[Mono-list] Mentoring new developers with Mono

Robert Scott Horning robert_horning@netzero.net
Tue, 03 Jun 2003 15:41:57 -0600

I've been lurking on this list for some time now, and I decided to try 
and wade in a little bit.

I've noticed that there are occasional messages that pop up every now 
and again from new people who want to join in the efforts of developing 
Mono, but don't know where to begin.  This can be very intimidating, 
especially when you got seasoned developers who are annoyed with the 
same (FAQ like) questions over and over again.

In addition, trying to ramp up and digest everything that has been going 
on with a project the size of Mono can be very tough, and is going to be 
even tougher as time goes on.  Every time a new file or an additional 
line of code gets committed to CVS, it just makes it that much harder 
for somebody new to come in.  This isn't a problem with just Mono but is 
an aspect of just about every open source/free software project that 
I've ever seen.  There are a variety of ways to get this accomplished, 
but I'd like to take a stab at it if there are no other takers.

My own background is that I've been developing in Borland Delphi for 
about 8 years now on Win32 platforms archiving software using MS-Source 
Safe.  It is a culture clash to say the least to switch to GCC on Linux 
using CVS.  I still have problems along those lines, and finding a spare 
box (or Bochs) to install Linux, especially as my professional 
involvement is still strongly tied to Microsoft software development.

I also have a small little project that I originally did as part of a 
U.S. Department of Education research grant that involved multi-media 
software development for educational purposes.  This project was 
originally written with Visual Basic 3.0 on Windows 3.1.  A small 
attempt to port it to Windows 95 using Borland Delphi was done, but this 
was only a half-hearted effort and the grant ran out.  The 
non-disclosure/non-compete agreement with my former employer has run 
out, and I'd like to get that project going again.  I've also developed 
and matured as a software developer, and I've been keeping my eyes out 
for a really good development environment that has the following 

1)  Cross platform capability.  I no longer want to be tied to a single 
operating system environment, and want to keep a common software 
development base.  I also want to avoid like the plague (Really! or 
anthrax, SARS, what have you) any "#ifdef Win32" or "#ifdef LinuxDev" 
statements in the software base.  This may be acceptable in very, very 
limited exceptions, but I have seen those statements breed like mice in 
Australia and quickly overrun a project unless you keep hacking them down.

2)  Modular plug-in capabilities.  This used to be a much bigger issue 
in the past than it is now with most modern OS environments allowing 
this capability, but I would like the ability for this software to add 
extensions to the environment without having to recompile the main 
program.  Distributed object oriented behavior is a big plus, and I'd 
like to make it a requirement as well.  The plug-ins must pass objects 
to the main program, not simply expose a common plug-in interface.

3)  Multi-media capabilities.  This really is a requirement of the 
software itself, and again most modern OS environments give this ability 
very easily.  The depth of media formats available is going to be a big 
plus factor here.  I would perfer native code implementations of the 
media import/export, even if I have to write them myself.

4)  Access to source code of the development environment.  As I stated 
earlier, I have been using the Delphi Professional environment for about 
the total existance of Delphi, which always included all core compiler 
source code.  While I never had to recompile the System unit in Delphi, 
I did pull things out of other core units and make bug fixes to things 
that Borland (or Inprise or Borland again) didn't get right for a 
particular application.  There have even been a couple of patches to 
Delphi that some of these fixes have helped contribute.  More on this in 
a moment.  Compilers are complex programs, and by this nature will 
always have a bug or two left to pull out, even if it is very well done. 
 Simply put, you need the compiler source code in order to really push 
and tweak performance in some applications.

5)  Open Source friendly development environment.  This is really a 
bigger factor than I considered originally.  There are a number of open 
source efforts that are being done with Delphi, but it is very limiting 
when the main compiler that is being used is being distributed under a 
propritary license, even one with a good programmer friendly reputation 
that Borland has.  Indeed, of the propritary compiler vendors, I would 
say that Borland is perhaps one the the most generous to the Open 
Source/Free Software movement.  This still doesn't keep things 
frustrating when bugs don't get fixed.

6)  Self-hosting.  This doesn't seem like that big of a deal, but trying 
to fix a compiler that is written in a different environment than the 
main development environment requires at the very least a shift of 
paradygm.  And if you aren't familiar with that development environment 
it is even more difficult.  Plus, I like the clean symmatry with a 
self-hosting development environment.

I've looked around at several environments.  Here are some I considered:

Java:  I like the cross-platform capabilities and plug-in situation for 
the most part.  The performance issues with Java are a real killer 
though with multimedia content, especially for full-motion 
video/audio/rumble seats/fog machines running simultaneously.  When I 
say multimedia, I don't mean simply DVD-Video.  I also don't like the 
strongly web-centric nature of most Java development (which I know to be 
a myth, but the perception that it is only used for web page development 
is still there).  Dispite the best efforts of Sun microsystems, it is 
also not very open-source friendly, but there are some open source 
alternatives that can fill the bill.

Borland Delphi:  I won't add much to what I said above, but this was a 
hard one to cross off the list if for no other reason than I have a 
bunch of experience with the environment and am very comfortable with 
the quirks of the compiler.  I guarentee that I can get anything 
developed in Delphi in about 40% of the time somebody can do it with 
Visual Studio C++.  I also love the Pascal programming language (insert 
your favorite programming language holy war statement here) and will 
continue to be a defender for that programming language until the day I 
die.  Just because everybody else is using C++ doesn't meant that it is 
the best language ever invented by the best minds of computer science. 
 This doesn't mean that I'm not open to new environments, but I think 
most C++ programmer are closed minded about the issue.

NASM/SpASM:  Hey, if you really want to go hard-core, go straight to 
assembly.  Believe it or not, you can do some impressive multi-media 
applications using a good assembler, and I would say the time cost 
penalty would be about 20%-30% more than a typical C++ application for a 
seasoned developer who knows and uses assembly.  Performance is 
outstanding, and in fact better than anything else you can possible do 
with any other platform.  Platform independance is a big issue here, 
however, and the intimidation factor for trying to recruit new 
developers to help with the project would be incredible.  Good GUI 
development environments are lacking, but not totally unheard of.

Lazarus/Free Pascal:  This was a strong contender.  Essentially, this is 
a group of Delphi programmers who have gone to Open Source programming 
and trying to port Delphi to Linux.  They started way before Kylix was 
even dreamed up by Borland, and unfortunately they don't seem to have 
the momentum behind them to get what I want done.  The compiler 
self-hosts in both Linux and Windows, but the GUI environment is 
progressing at a snails pace.  The GUI platform they are using is GTK, 
and there has been some cross-polination between the two projects, 
particluarly with the Windows GTK environment.  If you havn't seen this 
project before, at least take a look at their website: 

Macromedia Authorware/Flash/Director:  I've actually used this 
environment, and it does great cross-platform PC/Mac development (which 
is where I used it).  It is kludgy to the max, extreamly bloated 
(particularly Authorware), and doesn't have many features that 
traditional programmers like in traditional sense.  Source code is 
non-existant, and very unfriendly toward Open Source projects.

Code Warrior:  This is another cross-platform development environment, 
and is particularly strong on a Mac.  The problems with propritary 
compilers still apply, but it is a good development environment in 
general.  I've looked into developing with this, but I've always been 
pulled away to do other projects in other environments every time I got 
to cracking open the software or manuals.  I really don't know their 
Linux support, but with Mac OS X I suspect that supporting Linux would 
be relatively trivial for them.  I havn't kept up with this compiler, 
but it certainly is a contender.

GCC:  This runs on both Windows and Linux, but I didn't know if I wanted 
to make this big of a leap.  Development tools for Windows are somewhat 
lacking, and I havn't seen good GUI environments for this, at least that 
I liked.  Programming using GCC is wide spread and has quite a bit of 
support.  One problem I saw going this route is that the old #ifdef 
problem would be widespread with multi-platform development, and as I 
also said, I havn't been satisified with C++ as a programming language 
(another strike against it for myself).  It is still something that I 
won't dismiss completely.

MS-Visual Studio:  I guess I can't leave major development platforms 
without mentioning the dreaded Microsoft.  I have used their compilers 
for decades (yes, plural decades) now, and I believe them to be one of 
the few products that Microsoft can competently make.  IMHO Microsoft is 
a compiler company that just happened to end up with an operating 
system.  The history of MS-DOS spells this out even more, as IBM was 
only interested in their compilers originally.  The push to dotNet for 
Microsoft is rather interesting, but is for me a side issue compared to 
other problems with this environment.  Cross-platform capability is 
almost prohibited according to the EULA.  That and source-code access is 
very limited.  I also wish their compilers actually did what was 
documented as well (they don't).  I could live with Visual Basic for the 
most part, but there still are things that bug me about this 
environment.  It gets crossed off the list totally.

DotNet/Mono:  If you want to know why I'm writing this here, I feel that 
Mono has just about everything I am looking for and more.  In addition 
to the other problems I discussed, I also looked into distributed object 
models like COM/DCOM and Corba.  I have used COM/DCOM extensively in my 
professional experience on some very large projects.  Miguel has also 
written and spoken extensively about this issue, and I'd have to agree 
that dotNet is doing this in a much cleaner implementation of 
distributed object models than most other platforms.  What I love about 
Mono is that the development environments for Mono is also self-hosting. 
 This really is a big deal.  I have actually found it as easy or easier 
to write applications in C# than Delphi.  This isn't by accident or 
mistake, as one of the architects of C# was one of the early architects 
of Delphi.  I can see his influence all over the place and if you are a 
dotNet developer you may not even be aware of it, because it is very 
subtle but it shows up in places that really make a difference.

This is my epistle to the Mono group.  I was originally intending to 
keep this short, but I thought it would be a good opportunity for the 
developers in this group to see where I was coming from and see if I 
might have a place to fit in with the development of Mono.  I knuckled 
down and printed up ECMA-334 and am now trying to learn C# the hard way: 
 Straight from the specifications.  I'm right now in the process of 
writing a simple database application for my wife to try and learn this 
language and learn about the environment in more detail.  I love Mono, 
and I've already influenced a couple of other software developers to at 
least take a look at it and try to consider it as a software development 

What I'm proposing is possibly the formation of a mentoring 
group/mailing list where no question is asked too often and seemingly 
stupid questions can be asked.  I also think that some baby steps need 
to made before wading in and doing some significant development.  If you 
can think of some other ways this can be done (including working on the 
Wiki), I'd like to step in.  I also know that with open source projects 
sometimes some leadership needs to be had, and I'm willing to take on 
this task if necessary.  Of course, this will be the blind leading the 
blind, but I'm willing to do that.

Robert Horning