Summer of Code projects for GNU

This page has the project suggestions for GNU's participation in Google Summer of Code 2018. (Project proposals for 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, and 2018 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| CLISP| wget| Guix| Shepherd| Gnucap| Social| Taler| GNUnet| libmicrohttpd| Kawa| GNUstep| GNU Hurd|


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

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 its list of ideas and other GSoC related information on their GitLab Wiki: GNU Wget2 GSoC Information

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

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.

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.

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

GNU Social

GNU social is a social communication software used in federated social networks. It is widely supported and has a large user-base being already used by the Free Software Foundation.

GNU social maintains a list of GSoC 2019 project suggestions on https://go.diogo.site/gsoc2019.

GNU Taler

Store integration for Taler merchants

Implement Taler payment support for a free software 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 Taler Wallet for Android and/or iOS

The current wallet only supports integration with browsers that have the WebExtension API. The biggest part of the wallet's code base is plaform-agnostic and written in TypeScript.

The goal of this project is to add support for new platforms. Instead of starting from scratch, the existing code should be ported by using a framework such as React Native or Apache Cordova, which allows JS/HTML5 applications to run nearly like a native app. New code must be written for platform-specific integration.

Difficulty: Medium
Mentors: Florian Dold
Skills: Familiarity with JavaScript and the web platform are required, TypeScript and React Native / Apache Cordova are a plus.

Codeless Payment

The goal of this project is to add extensions to GNU Taler's Codeless Payment Component.  

  1. Providing API access to the codeless payment services for the merchants. Currently, the merchant has a simple web interface to manage their interactions. The goal of this task would be to add an additional user interface part in the codeless payment service to generate and manage the API key and ultimately enable one codeless payment instance to be used by multiple merchants.
  2. Notifying the merchant when their inventory goes below the specified limit.

Difficulty: Easy
Mentors: Shivam Kohli, Florian Dold
Skills: Familiarity with Web platform, Python, ideally Django

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://stage.gnunet.org/en/#gsoc2019.

libmicrohttpd

Implement and test support for chunked transfer encoding in HTTP uploads (PUT/POST).

Mentor: Christian Grothoff

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

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.

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

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

Note that the GNUstep project is open to other ideas from students. Please contact them if you have any to discuss the idea and find a mentor.

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

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

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

Port WebKit

Running WebKit on top of GNUstep will solve a lack of a modern web view on the framework's stack as well as contribute to parity with macOS within the project.

As of 2018, a recent revision of WebKit has been successfully built with GNUstep libraries on Arch Linux + clang + libobjc2. JavaScriptCore (WebKit's JavaScript engine) is mostly functional; WebCore and WebKitLegacy.framework are built but a sample browser still crashes. This has been possible through a series of additions to GNUstep as well as some patches to WebKit. For more details, see 2017's project.

The work ahead involves a *lot* of debugging and implementation of Foundation/CoreFoundation/CoreGraphics/QuartzCore functions to support this.

Difficulty: Very High
Experience needed: Expert at C/C++/Objective-C, Runtime and Core* Apple libraries. Debugging skills (e.g. gdb usage) are also highly recommended.
Mentor: Daniel Ferreira

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.

Other links:

Google SoC Page.