Summer of Code projects for GNU

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

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. Many packages have more than one suggestion, or even their own ideas page.

Lilypond| Guix| Sheperd| GNUstep| CLISP| MediaGoblin| Kawa| GNUnet| Taler| Gnucap| Texinfo| Wget| Classpath/OpenJDK| GNU Hurd| GNU Ring|


Links

Lilypond

LilyPond is a music engraving program devoted to producing the highest-quality sheet music possible. Users describe the music in a high-level text input format, which LilyPond processes to produce pdf, png, svg, and/or midi files. LilyPond is written in C++ and Guile (the GNU project’s Scheme interpreter), with Guile also serving as user-level extension language.

LilyPond maintains a list of GSoC project suggestions on http://lilypond.org/google-summer-of-code.html.

GNU Guix

GNU Guix is the GNU package manager. GNU Guix provides state-of-the-art package management features such as transactional upgrades and roll-backs, reproducible build environments, unprivileged package management, and per-user profiles. It uses low-level mechanisms from the Nix package manager, but packages are defined as native Guile modules, using extensions to the Scheme language—which makes it nicely hackable.

It maintains their list of ideas for GSOC in an external webpage: https://libreplanet.org/wiki/Group:Guix/GSoC-2017

The GNU Shepherd

The GNU Daemon Shepherd or GNU Shepherd, formerly known as GNU dmd, is a service manager that looks after the herd of system services. It provides a replacement for the service-managing capabilities of SysV-init (or any other init) with a both powerful and beautiful dependency-based system with a convenient interface.

Project ideas for the GNU Shepherd are kept in an external webpage alongside those for GNU Guix: https://libreplanet.org/wiki/Group:Guix/GSoC-2017

GNUstep

GNUstep is a console, desktop and web application development framework for development using Objective-C. It is based on OPENSTEP specification, and is today interested in achieving compatibility with Apple's Cocoa set of frameworks. GNUstep consists of gnustep-base (classes for strings, arrays, dictionaries, timers, sockets, et al), gnustep-gui (classes for windows, buttons, textboxes, et al), gnustep-make (a build system) as well as an assortment of development utilities and bonus libraries.

Improve Core Animation implementation and integrate it into AppKit

During summer of code 2012, Core Animation has been implemented for GNUstep. During summer of code 2013, Core Graphics backend has been implemented for GNUstep using our library Opal. In order to improve compatibility with Cocoa, as well as make it easier to implement modern-looking applications for GNUstep, a student should integrate CALayer with NSView and improve Core Animation where required.

This would also make it possible to use Chameleon, an implementation of UIKit, with GNUstep.

Required Skills:Good understanding of Objective-C (language syntax and behavior), especially pre-Automatic Reference Counting. Excellent understanding of Foundation and its concepts such as key-value coding. Decent understanding of and some experience with OpenGL. Decent understanding of AppKit.
Preferred Skills: Some experience with building and installing GNUstep
Difficulty: Medium
Mentor: Ivan Vučica
Contact: discuss-gnustep@gnu.org, gnustep-dev@gnu.org

Improve Core Animation implementation and implement UIKit

During summer of code 2012, Core Animation has been implemented for GNUstep. During summer of code 2013, Core Graphics backend has been implemented for GNUstep using our library Opal. In order to attract more developers to free platforms, as well as expand availability of touch-enabled applications, a student should create a UIKit-compatible user interface library and improve Core Animation implementation where necessary.

Required Skills:Good understanding of Objective-C (language syntax and behavior), especially pre-Automatic Reference Counting. Excellent understanding of Foundation and its concepts such as key-value coding. Decent understanding of and some experience with OpenGL. Excellent understanding of UIKit and the underlying architecture.
Difficulty:Hard
Mentor:Ivan Vučica
Contact:discuss-gnustep@gnu.org, gnustep-dev@gnu.org

Note that the GNUstep project is open to other ideas from students. Please contact them if you have any.

In addition you can find more ideas on this page: http://wiki.gnustep.org/index.php/Summer_Of_Code_Ideas

Contact: discuss-gnustep@gnu.org, gnustep-dev@gnu.org

Improve Core Animation implementation and implement UIKit

During summer of code 2012, Core Animation has been implemented for GNUstep. During summer of code 2013, Core Graphics backend has been implemented for GNUstep using our library Opal. In order to attract more developers to free platforms, as well as expand availability of touch-enabled applications, a student should create a UIKit-compatible user interface library and improve Core Animation implementation where necessary.

Contact: discuss-gnustep@gnu.org, gnustep-dev@gnu.org

Note that the GNUstep project is open to other ideas from students. Please contact them if you have any.

There is also a wishlist for new apps on GNUstep's wiki.

GNU CLISP

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

GNU CLISP maintains their list of ideas for GSOC in an external webpage: http://clisp.org/wanted.html.
The most pressing issue is making the long-overdue release.

GNU MediaGoblin

MediaGoblin is a free software media publishing platform that anyone can run. You can think of it as a decentralized alternative to Flickr, YouTube, SoundCloud, etc.

GNU MediaGoblin maintains their list of ideas for GSOC in an external webpage: https://wiki.mediagoblin.org/GSOC_2017.

Kawa

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

Kawa maintains a list of ideas here: http://www.gnu.org/software/kawa/Ideas-and-tasks.html.
The following seem most suitable for GSoC:

Run interactive process in separate Java Virtual Machine:

When developing and testing it is useful for the REPL to support hot-swapping (replacing functions on-the-fly) and debugging. The main goal being able to smoothly reload changed modules (files or functions), and have other modules not break. Debugging (such as setting breakpoints) would not be a priority for this project, but could be a follow-on project.

Skills: Should be experienced with Java, and interested in learning about JVM TI and similar low-level parts of the platform.
Difficulty: Challenging, but you can study how Java-9's new jshell uses the JVM TI.
Mentors: Per Bothner and Jamison Hope

Typed/optimized arithmetic with units:

Kawa support units (such as cm^2 for square centimeters) and quantities (such as 4cm^2). The idea is define a syntax for type for a quantity with a specific unit, for example quantity[cm^2]. The compiler would type-check use of such types, and use them to generate primitive arithmetic.

Skills: Need good Java experience, and somewhat familiar with the Java Virtual Machine. You will need to become comfortable reading javap output.
Difficulty: Modest.
Mentors: Per Bothner and Jamison Hope

Easier access to native code using JNA/JNR:

The traditional way to access native (C/C++) functions is using JNI, but it's very awkward. JNA and JNR are much easier to use. This project would design and implement an easy-to-use Kawa wrapper for for JNR. You should study existing JNR wrappers, such as that for JRuby.

Difficulty: Medium. Need to study existing wrappers and "foreign function interfaces" (in multiple languages) and design one suitable for Kawa. Some Scheme (Kawa) experience would be helpful.
Mentors: Per Bothner and Jamison Hope

Improve IDE support:

There is some IDE support for Kawa, but it is old, incomplete, and/or poorly documented. One possible project would focus on research and documentation: evaluating options (using NetBeans, Eclipse, IntelliJ, or an Emacs package); seeing what if anything works (or can be made to work with modest effort); and documenting it. Alternatively, if you have a favorite IDE/Editor and want to learn how to extend it, you can focus on that.

Skills: Solid experience with Java and at least one IDE for the Java platform.
Difficulty: Modest. This can be very variable.
Mentors: Per Bothner and Jamison Hope

Update XQuery implementation:

Kawa includes a mostly complete implementation of the 1.0 version of XQuery, a functional language for working with XML and similar data. However, XQuery has added major feature since then, including grouping and updates. Adding some of these features to the Kawa-XQuery implementation would be desirable.

Skills: Comfortable with both Java and XML technologies. Interested in learning more about the latter.
Difficulty: Depends on what features you want to tackle.
Mentors: Per Bothner and Jamison Hope

Use MethodHandles and invokedynamic

Java-7's invokedynamic and MethodHandles were intended to improve the performance of dynamic languages. See JSR 292 and the Da Vinci Machine Project. Kawa makes very limited use of these, focusing on compile-time optimizations, but could do more. For example we can start by optimizing arithmetic when the types are unknown at compile-time. They could make implementing generic functions (multimethods) more efficient.

Skills: Very solid Java knowledge, and willing to learn and use complex APIs.
Difficulty: High.
Mentors: Per Bothner and Jamison Hope

Contact: kawa@sourceware.org

GNUnet

GNUnet is an alternative network stack for building secure, decentralized and privacy-preserving distributed applications. Our goal is to replace the old insecure Internet protocol stack. Starting from an application for secure publication of files, it has grown to include all kinds of basic protocol components and applications towards the creation of a GNU internet.

GNUnet maintains a list of ideas here: https://gnunet.org/gsoc-2017.

GNU Taler

Store integration for Taler merchants

Implement Taler payment support for an open source web store, such as Magento(.com), oscommerce(.com), opencart(.com), spreecommerce(.com), prestashop(.com), virtuemart(.net), ubercart(.org) zeuscart(.com), afcommerce(.com), zen-cart(.com), simplecartjs(.com), or tomatocard(.com).

Difficulty: Easy
Required Skills: Depends on the web store used, likely PHP or Python
Mentors: Marcello Stanisci

User-centric improvements to the Taler wallet

Richard Stallman started a discussion on integrating subtle forms of financial management advice into the Taler wallet (http://taler.net) to help users manage their spending: http://lists.gnu.org/archive/html/taler/2017-01/msg00004.html http://lists.gnu.org/archive/html/taler/2017-01/msg00005.html We believe this would be a good introduction to the Taler wallet code base, at least the parts written in TypeScript and WebExtensions.

Difficulty: Easy
Required Skills: TypeScript, CSS
Mentors: Florian Dold, Christian Grothoff

GNU Circuit Analysis Package

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.

Gnucap maintains their list of ideas for GSOC in an external webpage: http://gnucap.org/dokuwiki/doku.php?id=gnucap:projects.

GNU Texinfo

GNU documentation is based on the Texinfo source format (conceptually similar to markdown, but better for documentation). There are tools to convert Texinfo into various formats, including PDF, HTML, and Info format. The Info format is used for reading the documentation in a terminal emulator (using the info program) or in the emacs editor.

The tasks below might be worthwhile. If you are interested in working on a project covering some of these (or if you have other ideas for a project) we encourage you to discuss your ideas by contacting either the project mailing list, or the potential mentors (email addresses for these are given below). This will help you to understand the motivation behind these tasks, and give you an idea of what you would need to do to make progress in working on them.

(1) Add new output formats to makeinfo.

Enhance the Perl-based makeinfo program with new output formats xhtml and/or EPub. The xhtml format combines aspects of the existing html and xml formats. The EPub format (used by ebook readers) is basically just xhtml in a zip archive.

(2) JavaScript for info-style navigation

The info program is very bare-bones (no fonts or images). On the other hand, the info program has a number of conveniences for browsing documentation, and the keyboard-centric user interface is very efficient.

Desirable features of the info program that we would like to replicate in JavaScript include:

You would achieve this by writing logic and event handlers in JavaScript. You may also want to change how the Texinfo tools generate HTML so the HTML is easier to work with. See (1) above.

There is an existing JavaScript library for texinfo-generated html/xhtml files. You might want to to enhance this with a keystroke shortcuts (using the standalone info program as a model), including searching through the document.

You may wish to implement other features. One example is to generate a navigation bar on-the-fly. For example see the Kawa homepage, which is generated from Texinfo, but goes through some extra complex processing. It would be nice if it could be done in JavaScript and CSS.

Another example is a feature to search a manual with regular expressions, or to search only within a particular chapter or section of the manual.

Contact: bug-texinfo@gnu.org
Mentors: Per Bothner, Gavin Smith

GNU Wget

GNU Wget is a free software 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. We are working on Wget2 as the next generation of wget, Wget2 is a full rewrite which adds support for multithreading and HTTP/2.0.

GNU Wget2 maintains a separate list of ideas here: https://github.com/rockdaboot/wget2/wiki/GSOC-2017:-List-of-projects

GNU Classpath/OpenJDK

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.

Port OpenJDK Robots API to Wayland

OpenJDK is currently tightly coupled with X11 on Linux, but most of the major Linux distributions are now supporting Wayland. While XWayland provides most of what is needed to support legacy X11 applications, some components of the JDK Robots API do not work properly. The goal of this project would be to create an implementation of the Robots API that ships with OpenJDK to run natively on top of Wayland. NOTE: The goal of this project is not to provide a full implementation of the graphics system for Wayland, only the Robots API.

Expected results: An OpenJDK Robot that uses Wayland directly on Linux.
Difficulty: Medium/High.
Required Skills: This project will require good skills in both Java, JNI and C (as the layer consists of Java code calling native C code which calls the system functions) as well as good knowledge of X11 and Wayland architectures and of the Robot API and the AWT stacks in OpenJDK.
Mentor: Mario Torre.

GNU 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

The Hurd project maintains its GSoC ideas in a separated page.

Ring

Ring is free commmunication software which allows its users to connect in multiple ways.
Ring uses distributed hash tables for establishing communication. Thus, it provides a distributed communication system which respects users' privacy by not having any centralized servers. Ring is evolving in many directions, but the following seem to be more appropriate for the GSoC 2017:

Create a C++ plugin for Ring

Characteristics:
(1) The plugin will read incoming messages and detect a particular sequence (keyword).
(2) The sequence is a written message in some scripting language (to be determined).
(3) The language allows using Ring's API (examples: camera selection, image/video sending, external commands, etc.).

Setting-up unit tests for SIP

The student coding for this subject, should:
(1) Re-establish the unit tests for SIP, in order to check the components of a SIP account in Ring.
(2) Develop an automation strategy to be integrated with Ring's Jenkins compilation and verification system
(3) Increase Ring's existing test coverage.

Create a multi-platform client for Ring

We are investigating the possibility of having a multi-platform client. Thus, we want to know if Electron (https://electron.atom.io/) is a good candidate for this.
Therefore, the student coding for this subject should:
(1) Evaluate the possibility of developing a C++ extension for Electron that will act as a middleware between the Ring API and the Electron/NodeJS client.
(2) Develop a solution for bridging the API and the Electron/NodeJS client.
(3) Write a minimalist UI to make sure that a call is possible using this extension.

Other than that, Ring is in active development phase, so if you have ideas to share with us, feel Free to discuss with us!

Skills: Good abilities on C++ and be interested in the Internet of Things field.
Difficulty: Intermediate.
Mentors: Guillaume Roguez, Adrien Beraud
Contact: ring@gnu.org

Other links:

Google SoC Page.