== Overview ==

[http://mono-project.org Mono] is a Open Source implementation of the .NET runtime.  The Mono Loader aims to embed mono into libpurple so that plugins can be written in any .NET Language.

== Mono Loader SoC Development Notes ==

=== SoC Goals and Milestones ===
  * Completely wrap libpurple API in .NET bindings.
  * Fix the Mysterious Seg Fault On Exit (tm).
  * Re-examing and possibly re-implement signal-glue and API -glue code.
  * Give .NET Purple objects the ability to actually update their C counterpart (or create one).
    Possible solution:  Every api Object thats mapped to a purple object would inherit from Object.  Object would have a !IntPtr pointing to the C structure (or null if this is a "new" object). A potential constructor could look like:
    {{{
    public class Object {
        private IntPtr _c_structure = null;
        Object(IntPtr struct) {
           _c_structure = struct;
           _updateFromStruct();
        }
    }
    }}}
    And base classes could be responsible for implementing _updateFromStruct().
  * Right now delegates are invoked and just given an array of their data.  Would be nice if we could explicitly state what they expect, e.g. {{{ OnBuddyStatusChanged(Buddy b, Status s) }}}

=== Mentor Goals/Objectives ([http://guifications.org/trac/wiki/grim grim]) ===
 * Implement signal chaining in Mono so Pidgin's signal handling doesn't get eaten up by the Mono runtime.  See [http://bugzilla.ximian.com/show_bug.cgi?id=75990 Mono Bug 75990].
 * Fix the build system so that make can be run successfully with multiple jobs.

=== Loader Internals: ===
  * There must be a better way for having the loader handle signals on behalf of .net plugins (will document the current implementation here).
  