Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Moonlight in 21 days

Moonlight in 21 days

After receiving an invitation to participate in ReMix07 in Paris at the end of May, the Mono team literally spent night and day working on their implementation of Silverlight called Moonlight.  In Miguel de Icaza's own words:

On the 31st( of May), other than having learned about Silverlight, explored how to decode video, experiment a little with video and started planning for an implementation we had nothing to show.

Using only the Sliverlight 1.0 API as a guide, email communication and IRC they were able to implement the following in 3 weeks time:

June 14th:

  • Text renders (Jeff).
  • Radial gradients (Sebastien).
  • Attached properties are now handled by Canvas on changed children.
  • Implemented the downloader (Toshok).
  • Managed downloader (Miguel).
  • Mouse enter/leave events (Miguel).
  • It is possible to load images from the net
  • everaldo gets plugin using embedding instead of the hack we were using.

June 15th:

  • Inlines and Runs in text
  • Performance improvements
  • Mouse event routing to individual objects.
  • Loading of custom objects from XAML files using assemblies.
  • Everaldo gets plugin to change surfaces with javascript.
  • Sebastien starts work on porting the surface to Gtk# with Silverlight, just in case.

June 16th

  • Loading of xaml dependency files (Miguel, Jackson).
  • Toshok optimizes rendering using bounding boxes.
  • Jackson hooks this dependency loader.
  • Jeff refactors the video engine to make it reusable.
  • C# bindings.

June 17th

  • Jeff implement VideoBrush
  • Sebastien implements the various image properties, so that they render with the specified parameters.
  • Event system updated, Surface now gets events in the correct order.
  • Animation parser fixes, surface animations are now properly timed.
  • Everaldo added support for XAML content in HTML pages (referenced with '#' in a url).
  • Jackson got support for x:Class on XAML loading.

June 18th:

  • Rolf implemented support for nullable types in the Moon typesystem and bindings to map Nullable in the C# code to our C++ Nullables.
  • Jeff implemented support for having VideoBrushes share a MediaElement.
  • Jeff implements brushes for Runs.
  • Paolo helps with the profiling of Moonlight's Surface and helps us get interaction smoother.
  • Chris and Sebsatien worked on tuning the performance for rendering on the screen.
  • Chris improves animations and screen refreshes, and sets up xlib-based image surfaces.
  • Jackson completes Path Data parsing, the underlying infrastructure was done by Sebsatien enabling the remaining samples from Sam Ruby's sample site to render.
  • Jackson and Sebastien implement the various segments that are missing for the Path rendering
  • Jackson implemented XAML support for

June 19th:

  • Javascript bridge to DependencyObjects works, the Javascript-controlled XAML Clock sample works now.
  • Collection iterators are implemented
  • Work on proper browser shutdown.
  • Many missing managed bindings are implemented by Rolf.

The project statistics are astounding with 38k+ lines of code written in a very short time period and the screenshots speak for themself.  The idea  to allow Moonlight to be hosted in a widget allowing Linux applications to host Silverlight content is very compelling. Congratulations to the Mono team for their accomplishing so much in such a short amount of time on Moonlight.

Rate this Article


Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Community comments

  • To be Agile or not to be Agile

    by James Vastbinder,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    An area of interest I should have pulled out in the initial news posting concerns how Moonlight was developed. The Mono team built an impressive artifact in only 21 days.

    How they did it is just as impressive. It was only through a community effort, constantly seeking feedback and maintaining a laser focus on their deliverable they were able to deliver this release of Moonlight.

    - When their initial plan to use C demonstrated constraints they could not live with, they moved to C++.
    - After receiving input from Scott and Jason of MSFT, they modified their plans once again
    - They may have to replace ffmpeg as the video rendering engine and appear ready to do so if a better video engine presents itself
    - They are thinking outside the Silverlight box and keeping their options open to be able to host Moonlight in a widget
    - Constant open communication throughout the development process was a keystone to their success

    Just a few thoughts for Agilists to noodle on...

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p