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,
and 2012 are archived.)
STUDENTS - BEFORE YOU SUBMIT YOUR PROJECT
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 email@example.com (list
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.
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.
Prolog for Java|
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
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 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
Gnucap is a modern post-spice circuit simulator with several
advantages over Spice derivatives.
Gnucap maintains a list of ideas here:
Contact:Al Davis (firstname.lastname@example.org)
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:
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
Contact: email@example.com (to subscribe, see the
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
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
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
(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.
: 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: firstname.lastname@example.org (to subscribe, see the list-info page).
this separate page
for our project ideas, as well as
our student application form.
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
GNU Mediagoblin is a free software media publishing software that
everyone can use.
The SoC ideas for Mediagoblin can be found in the following
Contact:email@example.com (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
The SoC ideas for Octave can be found in the following
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: firstname.lastname@example.org (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: email@example.com (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
- If you are an eligible student and have an idea that is not listed
here, you should propose it
normally through the Google
Summer of Code web site (after applications are open). Please
discuss it with the package maintainers.
- If you are a GNU package developer, have an idea for a Summer of
Code project for your own package, and can mentor it yourself, please
email the idea at firstname.lastname@example.org and one
of the administrators will add it. (Simple HTML fragment in plain text
preferred.) Please also recruit a backup mentor and tell us who that
will be. Make sure that the description of your idea contains enough
information (perhaps in the form of pointers to other information or
mailing lists) for students to research the feasibility of them
implementing your idea. More
- In all other cases (e.g., you are a developer with an idea for
another package), please contact the maintainer for the package. If you
can find a mentor for the project (or, hopefully, can mentor it
yourself), then we will add it if it is feasible. The project must meet
the Summer of Code criteria; see the