Summer of Code projects for GNU

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

CLISP| MediaGoblin| Guix| Taler| GNUnet| Texinfo| GNUstep| Kawa| LibertyEiffel| Gnucap| Shepherd| Guile| Hurd| GCC| Lilypond| Libffcall

GNU CLISP

GNU CLISP maintains their list of ideas for GSOC in an external webpage: http://clisp.org/wanted.html.

GNU MediaGoblin

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

GNU Guix

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

The GNU Shepherd

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

GNU Guile

Project ideas for GNU Guile are kept in an external webpage: https://libreplanet.org/wiki/Group:Guile/GSoC-2016.

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).
Mentors: Marcello Stanisci

Auto-pay tokens in Taler

Implement the auto-pay tokens specification for Taler. Intended to help Tor users circumvent CloudFlare CAPTCHAs with CloudFlare's eventual cooperation.
Mentors: Jeff Burdges

GNUnet

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

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.

Keyboard-centric UI in JavaScript for GNU HTML documentation

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:

The focus of this project is writing logic and event handlers in JavaScript. You may also want to make some tweaks to how the Texinfo tools generate HTML so the HTML is cleaner and easier to work with.

Once we have a good basic browser-based documentation reader (hopefully by the mid-term), there are some possible enhancements. One is to generate on-the-fly a navigation bar. 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 enhancement is to use the DomTerm web-based terminal emulator. The idea that a modest front-end wrapper would locate the HTML files, and send a request to DomTerm to load the HTML in an iframe of the DomTerm browser window. If the user selects some other manual, the JavaScript could send a request to the front-end to locate and load the manual.

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

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.

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.

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

Contact: kawa@sourceware.org

Kawa maintains a list of ideas here: http://www.gnu.org/software/kawa/Ideas-and-tasks.html.

LibertyEiffel

LibertyEiffel is the GNU compiler for the Eiffel programming language. We have several ideas for the Summer of Code for different levels of Eiffel experience. Find the full list, contact data, mentors and additional infromation on the external website in our wiki. Here we have a short overview of the proposals.

Eclipse integration

Summary: Integrate LibertyEiffel into Eclipse with Syntax highlighting, compilation (and parsing the output) and the sedb debugger
Difficulty: Easy
Skills: Java knowledge, basic Eiffel knowledge or interest, experience with Eclipse (plugin development) would be good
Notes: Target is to have a Liberty integration similar to the CDT for C. A few years ago the the project Eclipse Eiffel Development Tools (EDT) was started, which could be used as starting point, but this project targeted the commercial ISE compiler.

Standard C11 conform C code

Summary: Make the LibertyEiffel compiler emit C11 compatible C code without warnings even on the higher warning levels of gcc
Difficulty: Advanced
Skills: Deep experience in C programming, basic Eiffel knowledge
Notes: The target is not to make the code requiring a C11 compatible compiler (e.g. by using new features) but to remove warnings in strict std modes. Can be extended to apply additional static checkers like pclint, MISRA rules, etc.

Windows Support

Summary: LibertyEiffel in theory is running several platforms, but recent development was limited to a GNU/Linux environment and for Microsoft Windows no compiler is known to work. Target is to integrate a free C compiler (e. g. PellesC), including necessary fixes to generate accepted C code, add missing implementations for plugins (exec, net), run test suite on MS Windows.
Difficulty: Easy
Skills: Experience with C programming on Windows, basic Eiffel knowledge or at least interest to learn it
Notes: Would be great if a installer package would be one of the outcomes.

ECMA conformance

Summary: many ECMA features are already supported, implement the missing ones (beside No-variant agent conformance, which is not planned to be included in LibertyEiffel)
Difficulty: Advanced
Skills: Deep Eiffel knowledge, willingness to dig into the ECMA standard document
Notes: obviously test cases shall also be derived (integrated into the test suite and passed) for the new features

EiffelTest-NG

Summary: Implement a new version of the tool eiffeltest, to execute the test suite
Difficulty: Advanced
Skills: Good Eiffel knowledge, interest in Software testing
Notes: the features should include: parallel test execution, time/progress monitoring and estimation, improved test status (ET integration), Coverage measurement (different criteria like Branch, MC/DC)

Embedded Systems Readiness / Static Memory Allocation

Summary: Improve the applicability of LibertyEiffel programs to small embedded systems, by introduction of a mechanism to prevent dynamic memory allocation.
Difficulty: Hard
Skills: Deep understanding of Memory Managment, Eiffel experience

Evaluating, selecting and integrating an Open Source ARM C-compiler into LibertyEiffel's back-end

Summary: In lieu of the project above (Embedded System Readyness) implement an ARM (cross-)compiler backend. As LibertyEiffel generates Std-C code, this project redefines into evaluating and selecting a suitable open source ARM compiler and integrate it in the LibertyEiffel system back-end.
Sifficulty: Easy/Medium
Skills: Understanding of C Compiler and a deep understanding of scripting languages to implement integration of the compiler.

Resurrect the compile_to_jvm compiler

Summary: Back in the SmartEiffel times there was a JVM backend, which compiled Eiffel to Java bytecode. This should be made working again with an example to build an Android App in Eiffel.
Difficulty: Hard
Skills: Good Eiffel experience, Knowledge of Java Bytecode and Compiler technology.
Notes: The option with difficulty "Unmanageable" would be to merge this with Eclipse integration and write the eclipse code plugin in Eiffel ;-)

Verification backend

Summary: generate proof obligations from contracts for formal verification, e. g. by generationg of ACSL specifications from the Eiffel contracts to use Frama-C as "verification backend"
Difficulty: Hard
Skills: background in formal verification, Eiffel experience

C++ support wrappers-generator

Summary: Add C++ support to wrappers-generator
Difficulty: Advanced
Skills: Good C++ knowledge, Good Eiffel experience.
Notes: C++ support could be a boon yet it would pose quite a few tricky problems as C++ object model differs from Eiffel's in some ways.

Scientific wrappers

Summary: Add wrappers for scientific purposes: complexes, intervals, arbitrary precision integers and floats. Interesting libraries could be:

Difficulty: Advanced
Skills: Good Eiffel experience, knowledge in floating point arithmetics
Notes: Several GNU libraries would be a nice addition to Liberty yet their wrappers should be expanded types to be really useful.

JavaScript backend

Summary: Implement an Eiffel to Javascript transcompiler
Difficulty: Easy/Advanced
Skills: Medium Eiffel knowledge, good knowledge of Javascript
Notes: Javascript is the new "write once run everywhere" as it is quickly becoming the new lingua franca of the web. Having an Eiffel to Javascript compiler would widen the usage fields available to Eiffel. A naive compiler would be easy; something that doesn't require writing tons of glue Eiffel libraries would be quite a harder task. Think about what's to provide "usable" wrappers for libraries such as RaphaelJS or Angular. Their design is all but strongly-typed.

Gnucap

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

GNU Libffcall

GNU Libffcall is a collection of four libraries which can be used to build foreign function call interfaces in embedded interpreters.
Contact: libffcall@gnu.org

Avcall cleanup

Library that is to be refactored and its code is to be cleaned up for proper maintainability according to GNU standards. These projects help to reduce the complexity and hence make things better. This project entitles identifying common patterns of duplication throughout the code. Once identified, the code must be carefully refactored into new routines, common functionality, library code etc.
Testing is required to make sure refactoring was correct and functionality was not changed. Test-driven development would be helpful here.

Requirements:
Ability to write regression tests
Ability to refactor C/C++
Familiarity with Assembly Language

Mentor: Avneet Kaur

Vacall cleanup

Library needs refactoring, testing and optimization rework according to GNU standards. Improving maintainability is an active requirement which includes identifying code duplication and refactoring accordingly. This project entitles basic source code cleanup, validation and verification. Test-driven development is a must here.
Requirements:
Ability to write regression tests
Ability to refactor C/C++
Familiarity with Assembly Language

Mentor: Jishnu Jalin

Debug the bugs

Libffcall is a large code base with four different libraries. That means there are guaranteed to be bugs so fixing them is always a priority. Our current BUGS file is included in every distribution which lists more than 15 major bugs. Your project proposal should identify several specific bugs that you intend to fix along with contingency plans for:
a) Bugs that you are able to fix.
b) Identifying additional bugs if you fix all of your initial bugs quickly.
You're welcome to include testing procedures and infrastructure set up (such as automated builds) if it will help you fix bugs faster.
Requirements:
Proficiency with debugging methods
Familiarity with C and debugger
Familiarity with Assembler/Compiler/Interpreters


Submitting ideas to this page

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.

GCC

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

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.


Links