StudentProjects


This is the Mono Project's project ideas page. For general information and rules about participating in Google Summer of Code (GSoC) for the Mono Project, please see our overview page.

This page lists some ideas for Mono GSoC projects that students can apply for. Additionally, we encourage students to submit their own interesting Mono-related project proposals. In past years, roughly 20% of the accepted proposals were original ideas from students instead of from our suggestions. You can submit more than one proposal, so you can submit your own ideas as well as apply for one from this list - but only one can be chosen, of course!

You can use the following links to jump to sections that you're interested in:

Suggest your own ideas for a project
Create and improve Mono's Class library and C# bindings
Improve the core Mono runtime and JIT
Help developers build applications by improving the cross-platform MonoDevelop / Xamarin Studio IDE
Work on Mono's tools and compilers
GTK# Core, Bindings and Applications
F# language tooling and libraries
Contribute to exciting user applications built with Mono
How to get in touch with us and ask questions

Table of contents

Other Ideas

If a project is not listed here, but you think you have a great idea, feel free to contact the Mono team, mentors and org admins to discuss or suggest your own project ideas.

Over the past years we have picked projects that were not listed here because they were great ideas, and we had students that were passionate about those projects. In the end, most of these projects were a success.

Do not be afraid to pick up a project that would be interesting and also help the Mono universe.

You can find some additional ideas on the MonkeySquare ideas page, and on the Gnome ideas page (Mono-based projects in Gnome: Banshee, Blam, Tasque, Tomboy, GBrainy, Mistelix, F-Spot, ChronoJump, SparkleShare, LongoMatch).

Class Libraries and Bindings

Cocos3D for XNA

Complexity: Medium

Area: Graphics, C#, XNA

Cocos3D is a set of API extensions to Cocos2D that brings 3D capabilities to the popular game engine. There is a cross platform C# version of Cocos2D called Cocos2D-XNA. The objective of this project is to port the 3D extensions from Objective-C/OpenGLES 2.0 to C# and the XNA APIs.

The C#/XNA Cocos2D is available here: https://github.com/totallyevil/cocos2d-xna

The Cocos3D is available here: https://github.com/cocos3d/cocos3d

Mentors: Miguel de Icaza

Ogre Bindings

Complexity: Medium

Area: C#, C++, Graphics

Working with the new C++ binding generator that produces C#, create a binding for the Ogre toolkit that runs on Linux.

Mentors: Miguel de Icaza, Joao Matos

Three.js port to C#

Complexity: Medium

Area: C#, Graphics

Port the popular Javascript Three.js library to C#.

Unlike Three.js, we won't initially support multiple backends, we will only have one (OpenGL or MonoGame) and will defer the backend until later.

Mentors: Miguel de Icaza

Mono Runtime

Implement a replacing write barrier for sgen

Complexity: Medium

Area: GC, IL, Assembly

Right now sgen uses a non-replacing write barrier, we want to switch to a replacing one and have fast paths to do so.

Deliverable: Implement replacing barriers with IL then add JIT support for them and implement those for x86, amd64 and arm.

Mentors: Mark Probst

More and better benchmarks for our suite

Complexity: medium

Area: C#

We have a benchmark suite that we mainly use to benchmark our GC, but it's not very comprehensive and many of the benchmarks are very simplistic. Ideally we'd have something along the lines of the DaCapo or SPECjava benchmarks. The goal here is not to implement new benchmarks, but to find existing code that can be turned into benchmarks, and/or adapt or convert benchmark suites of non-CLR languages.

Deliverables: A number of complex, more real-world benchmarks integrated into our suite

Mentors: Mark Probst

MonoDevelop / Xamarin Studio

Revamped Syntax Highlighting System

Complexity: Medium/Hard

Area: Parsers, Text Editor

The syntax highlighting in MonoDevelop is done by defining a grammar as xml file to colorize tokens. Some highlightings are extended with hand written code. The highlighting system can be made faster, more extensible (atm it's difficult to write semantic highlightings) and more scaleable . You will first need to understand how our highlighting files are defined and how the semantic highlighting currently works. After that a new implementation approach needs to be implemented. One of our current drawbacks are that regular expressions could be integrated better - for example span begin/end constructs aren't atm regular. In fact everything should be based on regular expressions. Esp. important is to have a system that allows to plug in semantic highlightings and highlightings should be embeddable. (Semantic highlighting works inside of asp.net files for example)

Deliverables: An extensible syntax highlighting system that reads our xml files or a similar format. It should be scalable even for large files (lazy analysis) and much faster than the current implementation (speed tests included).

Mentors: Mike Krüger

Source Analysis

Complexity: Medium

Area: Parsers, C#

The IDE supports source analysis using NRefactory to parse, understand and analyze source code. There are almost unlimited possibilities what can be done to analyze or restructure source code. The system is very flexible. We already support a set of actions and code analyzation rules. But we need even more - if you like source code analysis or refactoring it's your chance to work in this area.

Deliverables: As much code actions & code issues as possible (we've some ideas for them in our bug tracker)

Mentors: Mike Krüger

On the Fly Formatting Engine

Complexity: Hard

Area: Parsers, C#

The on the fly indentation in Xamarin Studio needs a rewrite. The current implementation is a bit flaky and doesn't respect many formatting rules. The engine should respect all formatting settings and give the user a good typing flow. The engine should format code while typed as sell as possible. There is already an implementation for that but it needs more work. The goal is to implement a really good indentation engine that is fast and scales, which is not that simple.

Deliverables: A working indenter & formatting engine with many unit tests. Some groundwork has already been done.

Mentors: Mike Krüger

CSS Support

Complexity: Medium

Area: C#, CSS

Full CSS support would be very useful for developers writing web apps and embedding HTML pages in desktop and mobile apps. This includes code completion, code folding, syntax highlighting, document outline, etc. It should work in standalone CSS files and inline in HTML, CSHTML and ASPX files. CSS is relatively simple, so there would be potential to investigate more interesting and advanced features such as support for browser profiles, checking for common errors, and pads for interactive editing of styles.

Deliverables: CSS editing support in standalone files and inline in HTML/CSHTML files.

Mentors: Michael Hutchinson, Bojan Rajkovic

Javascript Support

Complexity: Hard

Area: C#, Javascript

Full Javascript support would be very useful for developers writing web apps and embedding HTML pages in desktop and mobile apps. This includes code completion, code folding, syntax highlighting, document outline, etc. It should work in standalone JS files and inline in HTML, CSHTML and ASPX files. The code completion should be capable of handling common JS frameworks such as JQuery. There are several open-source managed JS/AS parsers that could perhaps be used.

Deliverables: JS editing support in standalone files and inline in HTML/CSHTML files.

Mentors: Michael Hutchinson, Bojan Rajkovic

Improve C/C++ Binding

Complexity: Hard

Area: C#, C, C++

The C/C++ binding is an undermaintained area of Xamarin Studio. The first part of this project would be to generally polish it and fix bugs, perhaps adding support for the clang and mingw32 compilers. The second part would be to replace the ctags parser with libclang, and generally improve code completion and code navigation.

Deliverables: Negotiable, but should substantially improve C/C++ code completion.

Mentors: Michael Hutchinson, Joao Matos (triton)

Improve C/C++ build support in XBuild

Complexity: Medium

Area: C#, C, C++

The C/C++ build support in xbuild was much improved in GSoC 2011 but still needs some work to better integrate other compilers than MSVC. The first part of this project would be to generally polish it and fix bugs, and add support for the Clang and GCC compilers. This involves adding a mapping from the VS-compatible parameters to the respective command line options on those compilers. The second part would be to improve the C++ binding in MonoDevelop (see entry above) to use this and be able to compile and load and save MSBuild C++ projects from the IDE in Windows and OSX/Linux.

Deliverables: Negotiable, but should substantially improve C/C++ build support.

Mentors: Joao Matos (triton), Atsushi Eno

Make ASP.NET Awesome in Xamarin Studio

Complexity: Easy

Area: C#, ASP.NET

Xamarin Studio ASP.NET support is still maintained but has not been very actively developed in some time. There's lots of room for polishing it and adding minor but useful features - for example, deploying to remote servers, being able to choose which web browser to launch when running/debugging, C# tooltips and navigation in Razor files, etc. There's a lot of flexibility in this project to propose which features you want to work on - it doesn't even have to include the aforementioned examples.

Deliverables: Polish ASP.NET addin, implement some number of minor features.

Mentors: Michael Hutchinson, Bojan Rajkovic

Windows .NET 4.0 debugging

Complexity: Hard

Port the .NET debugging addin to the new debugging APIs in the Microsoft .NET 4.0 runtime, add support for 64-bit debugging, and generally polish the .NET debugging support.

Deliverables: reliable debugging for 64-bit and 32-bit Microsoft .NET 4.0.

Mentors: Jeff Stedfast

Color Scheme Editor

Complexity: Easy/Medium

Area: Text Editor

The current color style editor is hard to use and is missing some features. It would be nice to have a color style editor that works like http://studiostyl.es/schemes/create. Furthermore it would be nice to have an editor mode where you can just adjust some colors and other colors are chosen using an algorithm providing good contrasts. The implementation should be done using xwt - a great cross platform development library.

Deliverables: an awesome color scheme editor

Mentors: Mike Krüger

Netduino support for Xamarin Studio

Complexity: Medium

Area: IDE, Build, Netduino

References: Netduino.com, http://forums.netduino.com/index.php?/forum/12-mono/

Netduino is an Open Source microcontroller that runs the .NET Micro Framework (.NET MF - www.netmf.com). Currently, there is semi-functional alpha support to write code targeting the .NET Micro Framework using MonoDevelop and the Microsoft .NET MF Bootloader. However, there are several issues that can be fixed and the toolchain overall needs an improvement. This project would entail fixing the issues so that building apps to target Netduino in Xamarin Studio and then deploying them would be a relatively painless experience.

Deliverables: A Xamarin Studio Add-In that allows you to build against the .NET MF and then deploy to a connected Netduino.

Mentors: Bryan Costanich, Nina Vyedin, Alex Corrado, Alex Rønne Petersen

Tools and Compilers

Port the Clang C++/CLI compiler to POSIX platforms

Complexity: Easy

Area: C#, C, C++, C++/CLI

Platforms: Windows / Visual Studio 2012

Right now the C++/CLI compiler uses Mono.Cecil to read the metadata of the managed assemblies. This causes a problem because we have no existing compiler apart from the Microsoft one to bootstrap it. You will modify the compiler (mostly the SemaCLI.cpp file) to use the Mono unmanaged metadata reading APIs and port the compiler.

Deliverables: Compiler compiles and runs examples in OSX / Linux.

Mentors: Joao Matos (triton), Alex Rønne Petersen

Implement missing CLI features in the Clang C++/CLI compiler

Complexity: Hard

Area: C#, C, C++, C++/CLI

Platforms: Windows / Visual Studio 2012

Right now the C++/CLI compiler has support for a lot of CLI features but is still missing support for things like exceptions, events, literal and init only fields, static constructors and other more exotic features. You will need familiarity with the ECMA-372 standard, Clang IR generation code and CLI metadata concepts.

Deliverables: Negotiable, but should at least add a couple of missing features.

Mentors: Joao Matos (triton), Alex Rønne Petersen

Implement mixed-mode calls in the Clang C++/CLI compiler

Complexity: Hard

Area: C#, C, C++, C++/CLI

Platforms: Windows / Visual Studio 2012

Right now the C++/CLI compiler emits CIL code for native and managed classes. You will modify Clang frontend to emit native classes as native code and managed classes as CIL code and emit calls to the Mono runtime when making transitions from native to managed.

Deliverables: Negotiable, but should substantially improve C++/ code completion.

Mentors: Joao Matos (triton), Alex Rønne Petersen

Implement "stack optimizations" in the LLVM CIL backend

Complexity: Medium

Area: C++, C++/CLI, LLVM

References: http://elc.yonsei.ac.kr/publications/treegraphs.pdf

Right now the CIL code generated by the LLVM CIL backend is very naive and generates a lot of spills and loads. You will modify the backend to implement some optimizations so the code keeps values in the stack that will be used later and try to minimize the number of operations on the stack. would be doable.

Deliverables: Negotiable, but should at the very least have optimizations on the basic block level (vs. optimizations across basic blocks).

Mentors: Joao Matos

GTK#

Improve GTK# binding support on the desktop

Complexity: Medium

Area: C#, C, GLib libraries

There is an ongoing effort to automate the generation of C# bindings on the GNOME desktop by leveraging the new GObject introspection data that is now available for most libraries. GObject introspection data includes xml files and typeobject files (binary) describing the APIs a library exposes. The bindinator project (https://github.com/andreiagaita/bindinator) takes this information and produces gapi files that can then be used with GTK# gapi tools for generating C# bindings.

The task is to finish the bindinator project so that it can generate bindings automatically, preferably with no manual intervention (if possible, sometimes some manual tweaking of bindings is needed to improve the api, fix corner cases or provide backward compatibility with existing bindings). The bindinator is currently at a point where it should be able to generate Webkit-Gtk bindings automatically.

The importance of this project cannot be overstated: having up to date bindings of all major libraries on the desktop is essential for developers to create apps with C# and keeping it alive and kicking in the Linux desktop and across platforms.

Deliverables: Have the core gtk libraries bound (it can be by finishing existing bindings in GTK# and adding new ones via the bindinator) plus Webkit-GTK and GStreamer libraries, with a process in place so that package owners and/or distro package managers can generate new bindings easily.

Mentors: Andreia Gaita, Jérémie Laval

Integrate GTK# bindinator with MonoDevelop

Complexity: Medium

Area: C#, MonoDevelop, ASP.NET

The idea would be to implement something similar to .NET 2.0 WebServices where you can register a WSDL file (Web References) in your project and have the backing code automatically for you. This project would do the same thing by adding a GIR References folder where people can drop in a .gir and have the binding automatically generated for them. The only file needed to compile the project would thus be the .gir file.

Additionally, an ASP.NET website providing a common repository of those GIR files (curated by the community) will be created for use within MonoDevelop. This could be integrated with Cydin (MD addins gallery) which would need to be modified for it or, if not practical, a custom gallery should be created. Once the website is in place, it should be integrated within MonoDevelop so that the available GIR files are directly accessible from the IDE.

Deliverables: A MonoDevelop addin allowing automatic integration with the bindinator. A new gallery website to allow retrieval of GIR file directly from the Web (based on Cydin or custom). Integration from within MonoDevelop with this gallery.

Mentors: Andreia Gaita, Jérémie Laval

F#

Refactoring support for F#

Complexity: Medium/Large

Area: F#

Description: Several projects have considered the need for F# refactoring tools. This project would look at adding the capability to Xamarin Studio/Monodevelop, possibly via a modified version of the F# compiler DLL for AST support. This would in turn enable a wide range of improvements to the F# editing support.

Deliverables: An integration of refactoring support into the IDE, preferably based on a reusable rich interface to the F# AST.

Mentors: Robin Neatherway

Improve Xamarin Studio F# experience

Complexity: Medium

Area: F#

Description: There are a number of rough edges in the F# experience currently. Smoothing these would help adoption. One example is a number of bugs in the tooltip code. New features requested by the community include (i) presenting a type signature when attempting to jump to definition of external code, (ii) automatically resolving missing references based on heuristics and (iii) offering skeleton implementations of interface methods. Other improvements to be suggested by prospective students.

Deliverables: Negotiable, but offering a significant improvement to the current experience.

Mentors: Robin Neatherway

Language interface Type Providers

Complexity: Medium/Large

Area: F# / Python / Java

Description: Recent exciting project are the FunScript project (https://github.com/ZachBray/FunScript) and the R type provider (https://github.com/BlueMountainCapital/FSharpRProvider), allowing strongly typed access to other languages from within F#. Many other languages remain! The prospective student should investigate suitable options for similar treatment and offer a proposal supporting the choice of language. IronPython is one possibility to consider. Interacting with Java is another via one of several routes:

- Import JVM types use IKVM to access them and target .NET

- Import JVM types target Java through quotations and compile for JVM

- Import JVM types target Java Byte Code through quotations and compile for JVM

Deliverables: Complete type provider(s) with documentation and

tutorials showing the facilities offered. Preferably at least one

video demonstration.

Mentors: Zach Bray, Robin Neatherway

Applications

Awesome MonoDoc Editor

Complexity: Medium

Area: Application, design, cross-platform

MonoDoc is the documentation format used by every component of the Mono project. We use several frontends on various platforms like Web (go-mono.com/docs), Linux/Windows (GTK#) and Mac (MonoMac). Currently the only way to edit documentation is through raw editing of the produced XMLs.

We would love a sexy editor that was specialized for docs. That editor would be abstracted as much as possible from the backend so that, while it gives access to every style attribute available in MonoDoc, it could be easily ported to other platforms. Additionally, the student should implement at least an XWT frontend on top of the cross-platform core to show it off. A great "stretch goal" would be demonstrating platform-specific additional behavior (e.g., an iOS browser with the ability to mark text for editing / rewrite).

Deliverables: A C#, GUI-toolkit independent editor component, and one or two frontend implementations (among MonoMac, GTK#, Web, and iOS)

Mentor: Larry O'Brien


Contacting the Mono Team

If you have questions or suggestions that you want to make in real-time and talk to a member of the team, please join us on IRC on the server "irc.gnome.org" in channel "#monosoc", "#monodev" or the "#mono" channel. Various mentors and students from past years are usually there and can answer some quick questions about the program and about Mono.

The mailing lists are a very important communication channel, students should use them to get more information and feedback about ideas and proposals. Community engagement is essential for a successful summer of code, so get involved!

For any questions you may have about the program itself and to talk to the Mono GSoC admin, you can use soc@xamarin.com.

Mailing Lists

http://lists.ximian.com/mailman/listinfo/mono-devel-list A mailing list dedicated to discussions about developing Mono itself, such as development of the runtime, class libraries, and related Mono projects.

http://lists.ximian.com/mailman/listinfo/monodevelop-devel-list Discussion on the development/implementation of MonoDevelop.

A complete breakdown of all Mono mailing lists is available at Mailing Lists.