Summer of Code projects for GNU

This page has the project suggestions for GNU's participation in Google Summer of Code 2020. (Project proposals for 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, and 2019 are archived.)


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

GNU poke| GNU Astronomy Utilities| GNU Social| Lilypond| Guix| GnuCOBOL| XaoS| wget| GNUnet| Taler| libmicrohttpd| Gnucap| TeXmacs| Emacs


GNU poke

GNU poke is an interactive, extensible editor for binary data. Not limited to editing basic entities such as bits and bytes, it provides a full-fledged procedural, interactive programming language designed to describe data structures and to operate on them.

GNU poke maintains a list of ideas here:


GnuCOBOL is a free software COBOL compiler. cobc translates COBOL source code to native executable using intermediate C, designated C compiler and linker.

Eclipse plugin for use with GnuCOBOL

Many developers use Eclipse as their IDE. The possibility to use its framework and plugin ecosystem is one of the reasons for this and different proprietary COBOL implementations therefore provided COBOL plugins. Despite of normally being proprietary and "only-for customers-with-a-license" they are very tight coupled to their "products".

This project is about creating a plugin for GnuCOBOL featuring:

Skills required: Knowledge of Java, ideally knowledge of the Eclipse plugin system. Knowledge of COBOL and possibly the GnuCOBOL package is welcome but not mandatory.
Contact address for interested students:

Extension of screenio interface (curses based)

GnuCOBOL uses curses (ncurses/pdcurses) to create a portable "extended" screenio.

This project is about extending the runtime parts handling this.

Skills required: Knowledge of C, knowledge of the curses API. Basic knowledge of COBOL and the GnuCOBOL package along with building a package from source is mandatory.
Contact address for interested students:

GNU Astronomy Utilities

GNU Astronomy Utilities (Gnuastro) is an official GNU package consisting of various programs and library functions for the manipulation and analysis of (astronomical) data. All the programs share the same basic command-line user interface for the comfort of both the users and developers, some complete tutorials are available to help getting started or obtaining a general view. Gnuastro is written to comply fully with the GNU coding standards so it integrates finely with the GNU/Linux operating system. This also enables astronomers to expect a fully familiar experience in the source code, building, installing and command-line user interaction that they have seen in all the other GNU software that they use.

Gnuastro's proposed projects for this summer-of-code are listed below. More generally, you can also see the full list of open tasks and open bugs (for all programs/libraries) and suggest a different project for us to consider. The preferred way to get in touch is through Gnuastro's "Support tracker" on Savannah and in particular sr #110195. You can also see previous discussions there on tips for getting started. In case you need to have private discussions, you can also contact the given email.

Improving Image Processing tools in GNU Astronomy Utilities

Gnuastro's programs already contain many image processing tools for professional (research quality) usage. However, there are still many tools that remain to be added are are necessary for a complete workflow. For example image registration (finding the warp necessary to match images), non-linear warping (for example correcting optical distortions or gravitational lensing) or de-blending tools (for example to separate galaxies that are in one line of sight). If you are interested in image processing, programming in C (astronomical datasets are large and thus need to be efficient) and in the meantime learning some astronomy and working with major telescope data, please get in touch.

Required Skills: C programming, basic knowledge of image processing concepts.
Contact: sr #110195 or

Python/R/Julia API for GNU Astronomy Utilities C library

Gnuastro is primarily written in C because astronomical datasets are large and thus need to be efficient. Its most commonly used interface are its command-line programs, but it also has an extensive set of installed C/C++ libraries, which the programs also use. However, many data science operations are today done in the high-level language environments of Python, R or Julia. All three languages have low-level and well-defined interfaces for communicating with installed C libraries. Gnuastro therefore has a task to define a low-level wrapper infra-structure which will allow easy usage in these higher-level languages also. We welcome anyone interested in managing this task for one of these languages as part of GSoC. This will be a wonderful chance to master any of these high-level languages (which are almost fully written in C themselves), while also working on real-world data science/analysis.

Skills required: C programming, C interface of Python or R or Julia (whichever you are better at!).
Contact: sr #110195 or

GNU social

GNU social is a social networking platform often 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 project suggestions on


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

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:


GNU XaoS is an interactive fractal zoomer. It allows the user to continuously zoom in or out of a fractal in a fluid, continuous motion. This capability makes XaoS great for exploring fractals, and it's fun!

Enhance export to support high quality output

Render very large size images as TIFF files to print artworks as e.g. 1 x 2 metre 400 dpi CPrints. Wide colour gamut e.g. ProFoto and Adobe1998 colour profiles. Cropping/in-proportion sizing. Batch output using previous files in native XaoS format. As an example please see the output option in e.g. Capture One Pro.

Required skills: Good knowledge of C++ programming.
Contact address:

Support for arbitrary precision

XaoS currently cannot support very deep zooms because the 80-bit floating point arithmetic used runs out of precision before too long. It should be possible to add arbitrary precision to XaoS using the MPFR library (, or a different one if it is not fast enough to support real-time zooming. See also, in particular

Required skills: Good knowledge of C++ programming.
Contact address:

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


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:

GNU Taler

Integrating the GNU Taler merchant backend with business logic via MQTT

GNU Taler is a new electronic online payment system that provides privacy for customers and income transparency for merchants. To accept GNU Taler payments, merchants need to run the GNU Taler merchant backend. Currently this component has no notion of inventory tracking and does not integrate well with the existing business logic or ERP system of a merchant. The goal of this project is to implement basic inventory tracking in the GNU Taler merchant backend component and to design/implement the interface for integration with existing enterprise backends using the MQTT protocol.

Skills required: Good knowledge of C, prior knowledge of MQTT is a plus.
Contact address for interested students:,

Web-based graphical user interface for LibEuFin

LibEuFin is a software package that provides access to (currently mainly European) banking APIs via a simplified interface. The goal of this project is to develop a graphical interface to the functionality that is currently only exposed via a RESTful HTTP API. The functionality of the UI should include setting up access to accounts, querying/displaying the transaction history of bank accounts and initiating payments.

Skills required: Kotlin, Web development, UX/UI design.
Contact address for interested students:,

Implementation of an extended core banking system sandbox for LibEuFin

LibEuFin is a software package that provides access to (currently mainly European) banking APIs via a simplified interface. To allow developers to easily test FinTech-software that accesses banks via LibEuFin, there is a LibEuFin sandbox component that emulates the functionality of a real banking backend. Currently the functionality of this sandbox is quite limited. The goal of this project is to extend the sandbox with some of the functionality of a core banking system, such as creating new bank accounts, storing/processing bank transfers, transaction histories and processing/providing ISO 20022 messages such as camt.053/camt.052/pain.001/pain.002.

Skills required: Kotlin, Databases.
Contact address for intersted students:,

Integrate GNU Taler payments with the Pretix ticketing system

Pretix is a popular platform to sell event tickets. The goal is to add a payment backend to Pretix which processes payments via GNU Taler.

Skills required: Python, Web programming (REST API)s, Web design
Contact address:

Title: Configuration generator for Taler Point-of-Sale

The Taler POS Android App is configured using a JSON configuration that must follow a particular syntax. The goal of the project is to develop a Gtk+ or Web App that allows people to load, edit and save/generator such JSON configurations. The App must enable users to modify all aspects of the configuration, detect and prevent inconsistencies in the configuration, and enable internationalization (both in terms of itself being translated, but also enabling translation of strings in the generated JSON). The result should be integrated with our CI.

Skills required: TypeScript (or JavaScript), or portable C/Gtk+/Glade
Contact address for interested students:


Python binding for libmicrohttpd

libmicrohttpd is a C library implementing an HTTP 1.x Web server. The objective of the project will be to make libmicrohttpd's C API easily accessible from Python by writing an equivalent nice Python wrapper.

Skills required: Python, Python C-bindings, basic C knowledge
Contact address:

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:

GNU TeXmacs

GNU TeXmacs is a free scientific editing platform designed to create beautiful technical documents.

Converters (Easy)


C++ and Scheme

Further improvement of bibliographic tools (Medium)


Improve GNU TeXmacs for academic purpose


C++ and Scheme

A Jupyter plugin (Medium)


Enrich the TeXmacs plugin ecosystem on top of Jupyter


C++, Scheme and Python

Contact address for interested students:

GNU Emacs

Improving Traceback Information in ELisp Bytecode

The GNU Emacs Lisp Bytecode interpreter plays an important role in GNU Emacs, possibly moreso than say javascript is to Firefox. The bytecode compilation system and runtime system which go back to the earliest days of Emacs could use improvement.

Currently, when there is an error in bytecode, the bytecode offset where the error occurs is not recorded. Currently this information is in a register containing a memory pointer rather than a usable bytecode offset.

Therefore, the first task would be to get the bytecode offset make that available and added to the call stack.

After this, there are several possibilities for turning the offset back into a source-code location, or failing that, displaying the location next to a disassembly of the bytecode. Getting a source-code location from a bytecode object will most likely involve chainge the bytecode compiler to save this information and there are several possibilites here.

Links to resources:


Required skills: Proficiency in C and Emacs Lisp
Contact points: (primary), (secondary)

Other links:

Google SoC Page.