Summer of Code projects for GNU

This page has the project suggestions for GNU's participation in Google Summer of Code 2012. (Project proposals for 2006, 2007, 2008, 2009, 2010 and 2011 are archived.)


Please read the GNU Project's guidelines for Summer of Code projects.

Most importantly, please make sure you include all the information requested. If you have questions, please ask (list info here).

Please note that you are not bound to use these ideas, you can propose a new project. It is a good idea to find a mentor and discuss the idea before submit it.

Project suggestions

GNU is a large and complex project, and thus is subdivided into packages, which are relatively independent projetcts. In Summer of Code, GNU acts as an umbrella organization for its packages. The ideas here are grouped by package. The packages are listed in alphabetical order. Many packages have more than one suggestion, or even their own ideas page.

Automake - Classpath - CLISP - Denemo - GNOWSYS - Gnucap - Gnulib - GNU Radio - GnuTLS - Guile - Hurd - JACAL - Kawa - LibreDWG - LilyPond - Linux-libre-firmware - MediaGoblin - GNU Octave - GNU Emacs Org-mode - Prolog for Java - Recutils - SLIB - XaoS - Wget


Automake is a tool for automatically generating `' files compliant with the GNU Coding Standards. Automake requires the use of Autoconf.

Contact: (to subscribe, see list-info page)

Mentors: Akim Demaille

Exploit GNU make in Automake

Currently Automake aims at portability across Make implementations, which comes with several costs: portability issues are discovered by end users, workarounds must be implemented and carefully tested by the Automake maintainers, and finally some common features cannot be used at all because of a single implementation. This also results in very large and slow Makefiles, hence impedes the development cycle of automade projects.

By relying on GNU Make, Automake-ng, a friendly fork of Automake, will eliminate these costs. Widely available and otherwise easy to install, GNU Make will provide end users faster and safer builds. Instead of fighting with obscure and rare bugs in some implementations, Automake maintainers will focus on demanded features. Finally, developers will be freed from arbitrary limitations, and be able to use the powerful features of GNU Make in their (e.g., %-rules, conditionals, built-in functions, user defined functions and so forth).


GNU Classpath is a GNU project to create free core class libraries for use with virtual machines and compilers for the java programming language.

Please see the separate ideas page for GNU Classpath.


GNU CLISP is an implementation of Common Lisp, a high-level, general-purpose, object-oriented, dynamic, functional programming language.

Mentors: Vladimir Tzankov, Sam Steingold, Bruno Haible

Finish the multi-threading interface

Most of the work has already been done by the project developers. The only major thing left to be implemented are thread safe hash tables. Since hash tables are used internally in CLOS, it is not viable to make them lockable. The current implementation should be replaced with lock-free open-addressing ones like described here. The hardest part in this reimplementation is integration with GC because of weak relations. For more information see doc/multithread.txt in the CLISP source distribution.

Embed CLISP into your favorite application

Embed CLISP into your favorite application, e.g., VIM, Firefox, Gnumeric, or LibreOffice. This might require some additional API in CLISP.

Make socket functions work in CLISP on Windows

CLISP now makes use of gnulib, and there is confusion in CLISP between the gnulib provided sockets API and the Winsock2 API (confusion between Unix-like file descriptors and raw handles). Fix this.


Denemo is a music notation editor for GNU/Linux and other operating systems that lets you rapidly enter notation for typesetting via the LilyPond music engraver. You can compose, transcribe, arrange, listen to the music and much more. Denemo participated successfully in the SoC 2010 with one student.

Contact: (to subscribe, see list-info page). See also this other page.
Mentors: Richard Shann (maintainer), Jeremiah Benham

Create functions for all graphical LilyPond glyphs

Create a set of commands for the user to insert all possible LilyPond/Music glyphs, defined in the LilyPond font. These are nearly all musical signs of today and the past, common and uncommon. Adding them to Denemo will make it a comprehensive notation editor. Needed student skills: Essential: Extensive knowledge of musical notation and music theory. Knowledge of Scheme. Useful: Knowledge of LilyPond.

Make midi/audio output realtime-capable

Denemo creates MIDI messages to use them with its internal Fluidsynth-sampler or send them out via the Jack Audio Connection Kit. This procedure is not realtime-safe yet. Graphical computation and controlling Denemo during playback creates playback-glitches. In order to fix this the midi/audio subsystem should run in its own realtime-thread and get priority. Needed student skills: Programming in C, experience in threads and realtime programming. Useful: Knowledge of MIDI and the Jack Audio Connection Kit.


GNOWSYS is a kernel for semantic computing.

Contact: Students desirous of joining should join list to discuss their projects.

Collaborative Concept Mapping Activity in Sugar Learning Platform with GNOWSYS as storage

A pyGTK based extension of the gnowser project to do refined concept mapping. Based on the codebase of Labyrinth Activity in Sugar, we intend to develop a full featured collaborative concept mapping application using GNOWSYS as a storage. The application is required to have three modes: mindMap-mode, conceptMap-mode and conceptMap-mode-with-storage-gnowsys. Python and pyGTK are prerequisites for doing this project.

Synchronization of Data between gnowsys servers

Two or more remote servers of GNOWSYS exchange messages between them, subscribe to parts of database and establish sync relationships (subscription). Automatic agent based synchronization should happen between the servers. This involves, determining the changes, messaging the changes to subscribed servers, and initiating transfer mechanisms using json/RDF based data exchange. Good understanding of serialization of data, jsonrpc, xmlrpc and file transfer protocols, agent oriented services with good working knowledge in Python required.

Dynamic forms for data collection based on ontology specification

All knowledge is represented as relations and attributes of a node in GNOWSYS. Based on the specification of object-types (classes) in GNOWSYS, all possible attributes and relations can be calculated. Based on the datatype specification of each attribute and the definition specified for relations, it is possible to apply the corresponding widgets while creating a dynamic form. The project execution requires skills in javascript, ajax, Python, json data structure, and basic knowledge of form creation and form submission.


Gnucap is the Gnu Circuit Analysis Package.

The primary component is a general purpose circuit simulator. It performs nonlinear dc and transient analyses, fourier analysis, and ac analysis. Spice compatible models for the MOSFET (level 1-8), BJT, and diode are included in this release.
Mentors: Al Davis

Please see this separate ideas page for Gnucap.


Gnulib is a central repository for common GNU code, shared among GNU packages. It has modules for ISO C or POSIX functions, for portable general use facilities, reusable application code, object oriented classes, and build/maintenance infrastructure.

Contact: (to subscribe, see the list-info page).
Mentors: Bruno Haible

Reimplement gnulib-tool in Python

gnulib-tool is the developer tool that collects modules from gnulib and stores them in the source code of a package. It is currently written as a shell script; this leads to limited maintainability and slow execution speed. The task is to rewrite it in Python. This will make the code more maintainable and faster. Required skills: Experience writing code in an object-oriented programming language (such as Java, C#, not necessarily Python). In this project, you can learn Python on the fly or broaden your experience with Python.

GNU Radio

GNU Radio is a free & open-source software development toolkit that provides signal processing blocks to implement software radios. It can be used with readily-available low-cost external RF hardware to create software-defined radios, or without hardware in a simulation-like environment. It is widely used in hobbyist, academic and commercial environments to support both wireless communications research and real-world radio systems.

Contact: (to subscribe, see the list-info page).
Mentors: Tom Rondeau

Please see this separate page for our project ideas.


GnuTLS is a secure communications library implementing the SSL, TLS and DTLS protocols and technologies around them. It provides a simple C language application programming interface (API) to access the secure communications protocols as well as APIs to parse and write X.509, PKCS #12, OpenPGP and other required structures. It is aimed to be portable and efficient with focus on security and interoperability.

Contact: gnutls-devel mailing list
Mentors: Nikos Mavrogiannopoulos

Please see this separate ideas page for GnuTLS.


Guile is the GNU Ubiquitous Intelligent Language for Extensions, the official extension language for the GNU operating system.

Contact: (to subscribe, see the list-info page).
Mentors: Andy Wingo

CPAN for Guile

Guile needs a [ CPAN]-alike. See the thread on guile-devel for more discussions. It looks like dorodango is a good start, but needs adapting for Guile, and it would be nice to use something stowfs-like locally as well.

Integration with Emacs

Guile has a very-nearly-complete implementation of Elisp. We'd like to get it to the point that it can actually run Emacs, and see if we can implement GNU's editor better than the standard Elisp interpreter. This project will require converting Emacs' C code to use Guile's object system, and possibly working on an Emacs Lisp compiler implemented in Scheme.

Compilation and speed

Guile has a pretty good compiler right now, but we always want more speed. The student could take this in different directions depending on interest. One idea that could take about a summer is to compile Guile to a register virtual machine instead of the current stack VM.

Other ideas are possible; start a thread on guile-devel for more info.


The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a collection of servers that run on the Mach microkernel to implement file systems, network protocols, file access control, and other features that are implemented by the Unix kernel or similar kernels (such as Linux).

Contact: (to subscribe, see the list-info page).

Please see this separate page for our project ideas, as well as our student application form.


JACAL is an interactive symbolic mathematics program. JACAL can manipulate and simplify equations, scalars, vectors, and matrices of single and multiple valued algebraic expressions containing numbers, variables, radicals, and algebraic differential, and holonomic functions.



Finish "Decomposition of Algebraic Functions".


Add support for Mathematical Markup Language


Resolve some long-standing JACAL bugs.


Kawa is best known as a Scheme implementation for the Java platform. It compiles Scheme to java bytecodes. It is also a general framework for implementing dynamic languages, and includes a full implementation of XQuery and the beginnings of implementations of Common Lisp and Emacs Lisp (JEmacs).

Mentors: Per Bothner (maintainer), Helmut Eller, Jamison Hope

Please see this separate ideas page for Kawa.


LibreDWG is a free implementation of the .dwg file format, a secret format used by many CAD applications.

Contact: (to subscribe, see the list-info page).
Mentors: Rodrigo Rodrigues da Silva (maintainer)

Please see this separate ideas page for LibreDWG.


LilyPond is a music engraving program, devoted to producing the highest-quality sheet music possible. It is somewhat similar to TeX - user describes the music using a high level description input, which is processed with LilyPond to produce a pdf file. Languages used: mostly C++, Scheme and Python.

Contact: (mailing list subscribe and info:
Mentors: Mike Solomon, Reinhold Kainhofer, Werner Lemberg, Carl Sorensen, Joe Neeman

Please see this separate ideas page for LilyPond.


Linux-libre-firmware is an effort to provide free alternatives to non-free or obfuscated firmware required by some Linux device drivers. This project is complementary to Linux-libre.

We are looking for students with a good knowledge on assembly language and disassembly tools. Familiarity with copyright law and free software licensing is a plus.

Contact: juca at members dot fsf dot org
Mentors: Felipe Correa da Silva Sanches

Please read this blog post for a better understanding of our goals and strategies.


GNU MediaGoblin is a free software media publishing system for the web aiming for decentralization and extensibility.

Contact: (to subscribe, see the list-info page).
Mentors: Christopher Allan Webber

Please see this separate page for our project ideas.


GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems, and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.

Contact: (to subscribe, see the list-info page).
Mentors: Jordi Gutiérrez Hermoso.

Please see this separate page for our project ideas.

GNU Emacs Org-mode

Org is an Emacs Mode for Notes, Planning, and Authoring. Org-mode is for keeping notes, maintaining TODO lists, doing project planning, and authoring with a fast and effective plain-text system.

Contact:Org-mode mailing-list (subscribe and info:
Mentors: Bastien Guerry, Eric Schulte

Please see this separate ideas page for Org-mode.

Prolog for Java

GNU Prolog for Java is an implementation of ISO Prolog as a Java library (gnu.prolog). Last year a successful GSoC student revived it and made it compliant with part 1 of the ISO standard.

Contact: (to subscribe, see the list-info page).
Mentors: Daniel Thomas (drt24)

Implement part 2 of the ISO standard - Modules

Currently GNU Prolog for Java only implements part 1 of the ISO standard it should implement part 2 - Modules as well.

There are also the extensions to part 1 which have not yet been implemented and support for part 3 - Definite clause grammar rules could also be added.

Implement part 5 of the ISO standard - Threads

Support for threading inside Prolog code in GNU Prolog for Java would make it much more useful in multicore environments and there is a section of the ISO standard on this. It is likely that changes would need to be made to the core of the library as it was originally written without much thought about multithreading.

Rewrite the parser

Currently the parser is very flaky and does not support UTF-8, it needs to be rewritten as the old javacc code doesn't compile to working java in modern javaccs and other compiler compilers should do a better job. See #30283 and #30780 for more details.

Add security constraints to running Prolog code

Currently all prolog code is completely trusted and can do anything that native java could do. However it might be interesting to add constraints that prevent it from performing certain actions and instead sandbox it. This way the host java application could recover from running non-terminating Prolog code gracefully.


GNU Recutils is a set of tools and libraries to access human-editable, plain text databases called recfiles. The data is stored as a sequence of records, each record containing an arbitrary number of named fields.

Contact: (to subscribe, see the list-info page).
Mentors: Jose E. Marchesi

Add support for indexes to recutils

If a big recfile is seldom updated, it could be useful to create a binary index for that file that could be used by the recutils in order to boost the performance of read operations. The usage of the index file (which will probably be named after the recfile but using a different extension) must always be optional. The task is to first design and define how the indexes will work and what will be the mechanisms to decide whether a given index file is up to date (timestamps, CRCs, ...). Then the the internal data structures of the index will be designed: btrees, avls, or whatever. Then the concept will be implemented in librec and the utilities expanded to use it. Finally, documentation and tests will be added as well.

Add python bindings to recutils

The goal this project is to write python bindings for librec, which is the recutils C library. This would allow the people to manipulate recfiles from python scripts.


GNU SLIB is a portable library for the programming language Scheme. It provides a platform independent framework for using packages of Scheme procedures and syntax. As distributed, SLIB contains useful packages for all Scheme implementations. Its catalog can be transparently extended to accomodate packages specific to a site, implementation, user, or directory.



Add variable elimination to SLIB's commutative-ring (symbolic algebra) package.


Augment SLIB's discrete-fourier-transform package to work efficiently on non-power-of-two sized arrays.


XaoS is a fast real-time fractal zoomer, created by Jan Hubicka and Thomas Marsh in 1996. During the past 15 years dozens of volunteers contributed to the code. Now XaoS is maintained by J.B. Langston and Zoltan Kovacs, mentors for GSoC 2011.

Contact: See this.

Please see this separate ideas page for XaoS.


GNU Wget is a package for retrieving files using HTTP, HTTPS and FTP, the most widely-used Internet protocols. It is a non-interactive commandline tool, so it may easily be called from scripts, cron jobs, terminals without X-Windows support, etc.


Add support for concurrency. Two ways of concurrency are needed, the first one to allow the same resource to be retrieved from different sources, the second level is during a recursive downloading so different resources can be downloaded at the same time.
You can find more details at this page:
Mentors: Micah Cowan

Submitting ideas to this page