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.)
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:
- Keyboard-centric UI
- Fast, responsive UI
- Index search
- Search a manual with regular expressions. Optionally, only within a chapter or section.
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:
- The GNU Multiple Precision Arithmetic Library
- MPFR: multiple-precision floating-point computations with correct rounding.
- Mpc: complex numbers with arbitrarily high precision and correct rounding of the result.
- Multi precision intervals
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
- If you are an eligible student and have an idea that is not listed here, you should propose it normally through the Google Summer of Code web site (after applications are open). Please discuss it with the package maintainers.
- If you are a GNU package developer, have an idea for a Summer of Code project for your own package, and can mentor it yourself, please email the idea at summer-of-code@gnu.org and one of the administrators will add it. (Simple HTML fragment in plain text preferred.) Please also recruit a backup mentor and tell us who that will be. Make sure that the description of your idea contains enough information (perhaps in the form of pointers to other information or mailing lists) for students to research the feasibility of them implementing your idea. More info.
- In all other cases (e.g., you are a developer with an idea for another package), please contact the maintainer for the package. If you can find a mentor for the project (or, hopefully, can mentor it yourself), then we will add it if it is feasible. The project must meet the Summer of Code criteria; see the guidelines.
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.orgThe 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
- Google SoC Page.
- Several GNU packages register separately in the Google Summer of Code. These include: