Summer of Code projects for GNU
Please read the GNU Project's guidelines for Summer of Code projects.
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.
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: http://developer.classpath.org/mediation/GoogleSoC2013.
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: http://www.azulsystems.com/events/javaone_2007/2007_LockFreeHash.pdf 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 GObjectIntrospection.
Gnucap is a modern post-spice circuit simulator with several advantages over Spice derivatives.
Gnucap maintains a list of ideas here: http://gnucap.org/dokuwiki/doku.php?id=gnucap:projects.
Contact:Al Davis (email@example.com)
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: https://gnunet.org/gsoc2013.
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.
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
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: firstname.lastname@example.org (to subscribe, see the list-info page).
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: http://libreplanet.org/wiki/LibreDWG/SummerOfCode
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: http://wiki.mediagoblin.org/GSOC_2013
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 portable.
The SoC ideas for Octave can be found in the following webpage: http://wiki.octave.org/Summer_of_Code_Project_Ideas
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.
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 email@example.com 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 info.
- 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 guidelines.