Thanks to your support, 2015 marks 30 years of the FSF! In the next 30 years, we want to do even more to defend computer user rights. To kick off in that direction, we're setting our highest-ever fundraising goal of $525,000 by January 31st. Read more.

26% (137K)
Count me in

Summer of Code projects for GNU

This page has the project suggestions for GNU's participation in Google Summer of Code 2013. (Project proposals for 2006, 2007, 2008, 2009, 2010, 2011 and 2012 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.

Classpath| CLISP| Emacs| Gnucap| GNUnet| Guix| Hurd| LibreDWG| Mediagoblin| Octave| Prolog for Java| Recutils


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

GNU Classpath maintains a list of ideas here:


GNU CLISP is an ANSI Common Lisp Implementation.

Finish the multithreading 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.



GNU Emacs is the extensible, customizable, self-documenting real-time display editor.

Emacs XWidgets

Emacs XWidgets is an experimental branch to enable embedding GTK widgets inside an Emacs window. For example, this permits Emacs to render HTML pages with WebKit.

The goal of this project is to improve the current implementation by converting C code to Elisp code and to work on the GObjectIntrospection.


Gnucap is a modern post-spice circuit simulator with several advantages over Spice derivatives.

Gnucap maintains a list of ideas here:

Contact:Al Davis (


GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. A first service implemented on top of the networking layer allows anonymous censorship-resistant file-sharing. Anonymity is provided by making messages originating from a peer indistinguishable from messages that the peer is routing. All peers act as routers and use link-encrypted connections with stable bandwidth utilization to communicate with each other. GNUnet uses a simple, excess-based economic model to allocate resources. Peers in GNUnet monitor each others behavior with respect to resource usage; peers that contribute to the network are rewarded with better service. GNUnet is part of the GNU project.

GNUnet maintains a list of ideas here:

Contact:{bart, wachs}


GNU Guix is a purely functional package manager, and associated free software distribution, for the GNU system. In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection.

Contact: (to subscribe, see the list-info page).
Mentors: Ludovic Courtès

Supporting binary package distribution through GNUnet

GNU Guix provides a transparent binary/source deployment model. A server can claim: “hey, I have the binary for /nix/store/v9zic07iar8w90zcy398r745w78a7lqs-emacs-24.3!”, where the base32 string uniquely identifies a build process. If you trust that server to provide genuine binaries, then you can grab them instead of building Emacs locally.

The “traditional model” has been to have a build farm build and serve binary packages. In that model, users trust the build farm to provide authentic binaries.

The project aims to provide a practical decentralization distribution mechanism for binary packages, using GNUnet’s file sharing service. In that model, users would be able to automatically share binaries they have built locally, and to install binaries built by other users. This is part of a broader goal of disintermediation among users, and between users and upstream software developers.

Problems to be solved include the authentication of binary packages, user privacy, and the development of a user interface that makes it trivial to contribute package build results.

Packaging a modern Desktop Environment in GNU Guix

GNU Guix is currently a "userland" distribution: users can install it on top of another distribution, but it is not bootable yet. It provides around 400 packages, and can already be used to do some serious hacking, but it lacks nice graphical user interfaces.

The project aims at packaging one widely used desktop environment. The applicant can choose their favorite one, as long as it's neither too big (in which case it might be hard to package completely) nor too small (ie. a simple window manager). Some possible choices could be GNOME, GNUstep, KDE, XFCE or LXDE.

Package management from Emacs

The goal of this project is to write a complete package management user interface for use in GNU Emacs. The UI would provide the same functionality as the guix package command, but using an interface similar to that of package.el.

Mentor: Ludovic Courtès


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.

Libre DWG

GNU LibreDWG is a free C library to handle DWG files. It aims to be a free replacement for the OpenDWG libraries. DWG is the native file format of AutoCAD.

The SoC ideas for the Libre DWG can be found in the following webpage:



GNU Mediagoblin is a free software media publishing software that everyone can use.

The SoC ideas for Mediagoblin can be found in the following webpage: (please subscribe to the mailing list in advance)


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.

The SoC ideas for Octave can be found in the following webpage:

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.

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.

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


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 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.

Submitting ideas to this page


 [FSF logo] “Our mission is to preserve, protect and promote the freedom to use, study, copy, modify, and redistribute computer software, and to defend the rights of Free Software users.”

The Free Software Foundation is the principal organizational sponsor of the GNU Operating System. Support GNU and the FSF by buying manuals and gear, joining the FSF as an associate member, or making a donation, either directly to the FSF or via Flattr.

back to top