Summer of Code projects for GNU

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

STUDENTS - BEFORE YOU SUBMIT YOUR PROJECT PROPOSAL:

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 summer-of-code@gnu.org (list info here).


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.

- Autotools - Classpath - CLISP - Denemo - FM - GDB - Gnash - GNOWSYS - GNUStep - Guile - Hurd - Iced Robot - JACAL - Kawa - LibreDWG - Linux-libre-firmware - Prolog for Java - SLIB - XaoS -

Autotools

Automake is a tool for automatically generating `Makefile.in' files compliant with the GNU Coding Standards. Automake requires the use of Autoconf. Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual user intervention.

Contact: automake@gnu.org (to subscribe, see list-info page)

Interfacing with a test protocol like TAP or subunit

Currently, Automake's simple tests as well as Autoconf's Autotest each use their own testing output. Automake-generated Makefiles could be consumers of the protocol for third-party testsuites. Automake-generated simple testsuites (TESTS) and Autoconf-generated Autotest testsuites could be producers.

This project would entail both investigating the possible protocols, advantages of either step, prototyping an implementation, and getting it ready to merge into the code. Each step on its own would already be useful on its own, and small enough to be completed within the given time frame.

Exploit more features of GNU make in Automake

Automake could (optionally) exploit more features of GNU make, with an eventual goal of reimplementing some of the functionality in GNU make, both for efficiency and for more ease of use. When a project using Automake requires GNU make anyway, it would be nice if Automake could play along better with GNU make-specific notation in the Automake special variables (like foo_SOURCES etc).

Non-recursive Automake project

Demonstrate that automake can be used to produce a non-recursive Makefile implementation for nontrivial projects. Document how to do this in the Automake manual. Consider how to handle "nested" packages. Support building any normal automake target while in an arbitrary subdirectory of the package. Harlan Stenn of The NTP Project volunteers to co-mentor this, assuming this proof-of-concept for this project.

Classpath

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.

CLISP

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

Contact: clisp-devel@sf.net
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.

Denemo

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: denemo-devel@gnu.org (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.

GNU FM

GNU FM is free software for running music community websites, allowing users to keep track of their listening habits whilst retaining full ownership of their data. It is the software behind Libre.fm which helps to promote freely licensed music.

Contact: Students should get in contact via the librefm-discuss mailing list.
Mentors: Mike Sheldon, Jørgen Bøhnsdalen

Please see the separate ideas page for GNU FM.

GDB

GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed.

Contact: gdb@sourceware.org (to subscribe, see list-info page).

Please see this separate ideas page for GDB.

Gnash

Gnash is a free player for the SWF file format, also known as "Flash."

Contact: gnash-dev@gnu.org (to subscribe, see the list-info page).
Mentors: Sandro Santilli (strk)

Please see this separate ideas page for Gnash.

GNOWSYS

GNOWSYS is a kernel for semantic computing.

Contact: Students desirous of joining should join gnowsys-dev@gnowledge.org 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.

Speed Optimization of writing and reading of GNOWSYS store

Benchmarking gnowsysApp_rc1 to detect bottlenecks and designing and implementing alternative parellelization of processing to enhance performance of GNOWSYS as a triple store. Very good knowledge of Python, postgresql, file system, and experience with handling large sets of data are preferred. Database optimization techniques like memcache and pgpool will be an additional asset.

Visual Computing Studio

Developing a visual computing studio (IDE) based on the heterogeneous distributed computing model of GNOWSYS. We intend to develop a educationally useful programming workspace as found in Turtle Activity . Exposure to web service architecture, pyGTK and metaknowledge of structure of programs will be useful.

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 RDF based data exchange. Good understanding of serialization of data, XML, RDF, and file transfer protocols, agent oriented services with good working knowledge in Python required.

GNUstep

The GNUstep project is a GNU project that aims to create a free and open version of the Cocoa (formerly known as NeXTSTEP/OpenStep) APIs and tools for as many platforms as possible.

Contact:discuss-gnustep@gnu.org (to subscribe, see the list-info page).

Please see this separate page for our project ideas.

Guile

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

Contact: guile-devel@gnu.org (to subscribe, see the list-info page).
Mentors: Andy Wingo

CPAN for Guile

Guile needs a [http://cpan.org 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.

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

Hurd

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: bug-hurd@gnu.org (to subscribe, see the list-info page).

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

IcedRobot

IcedRobot is an attempt to bring the Android API to the GNU/Linux Desktop.

Please see this separate ideas page for IcedRobot.

JACAL

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.

Contact: agj@alum.mit.edu

Idea

Finish "Decomposition of Algebraic Functions".

Idea

Add support for Mathematical Markup Language

Idea

Resolve some long-standing JACAL bugs.

Kawa

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

Contact: kawa@sourceware.org
Mentors: Per Bothner (maintainer), Helmut Eller, Jamison Hope

Please see this separate ideas page for Kawa.

LibreDWG

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

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

Please see this separate ideas page for LibreDWG.

Linux-libre-firmware

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.

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: info-gnuprologjava@gnu.org (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.

SLIB

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.

Contact: agj@alum.mit.edu

Idea

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

Idea

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

XaoS

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.


Submitting ideas to this page


Links