Google Summer of Code 2019
Below you can find a
list of selected project ideas for GSoC,
categorized according to our main development projects.
If you are searching for more topics or want to propose your own,
there is a list with more ideas available.
You can also take a look into the tickets for the specific projects on the corresponding
The assigned mentors listed below are not fixed yet and might be changed.
If you have any questions, please contact us!
CPAchecker is an award-winning open-source framework for the verification of software. It is written in Java and based on a highly modular architecture that allows to develop and combine a wide range of different analyses. CPAchecker is used for verification of the Linux kernel and has helped to find more than 50 bugs in the kernel.
At the moment, there are two ways to use CPAchecker: Locally through the command-line, and in the cloud through a web interface. Both options require C developers to leave their IDE everytime they want to run CPAchecker, which disrupts their workflow. The goal of this project is to build an IDE plugin that provides a seamless experience of using CPAchecker (our IDE recommendations: Eclipse CDT or CLion). We would like the plugin to focus on ease of use and immediate feedback that is easy to comprehend. The plugin should:
- allow developers to run CPAchecker on their current project,
- provide some options for customization (e.g., whether to run CPAchecker locally or in the cloud), and
- provide useful feedback (e.g., if a possibly failing assert-Statement was found by CPAchecker)
Mentor: Thomas Lemberger
JavaSMT is a common API layer for accessing various SMT solvers. It was created out of our experience integrating and using different SMT solvers in the CPAchecker project. JavaSMT can express formulas in the theory of integers, rationals, bitvectors, floating-points, and uninterpreted-functions, and supports model generation, interpolation, formula inspection and transformation.
Integrate more SMT solvers
There are plenty of SAT and SMT solvers out there that can be integrated into our library. This project aims to integrate several of them and provide bindings. We want to have an automated build process, integration tests, documentation, etc. Possible candidates are CVC4, Boolector, or Yices2.
Requirements: Java, JNI, C/C++
Mentor: Karlheinz Friedberger
SMT in the Cloud
Sometimes a local machine is too weak to solve a big SMT problem, or many SMT queries are nearly identical. The task is to implement a server-client infrastructure for solving of SMT queries with JavaSMT. To be efficient, we need normalization of formulas, caching, etc. More details can be communicated with the maintainers of JavaSMT.
Requirements: Java, Network
Mentor: Karlheinz Friedberger
BenchExec is a benchmarking framework for Linux (written in Python) that is aimed at a high reliability of the results. It can measure the CPU-time and peak memory usage of whole groups of processes. To do so, it makes use of modern Linux features such as cgroups and namespaces, effectively creating a benchmarking container whose resource usage is measured. The concepts and architecture of BenchExec are described in a paper.
Make use of the Intel Cache Allocation Technology
If several benchmarking runs should be executed in parallel on the same system, the memory usage of one run can influence the performance of others (because CPU caches and the memory bandwidth is shared), even if each run gets its own reserved share of the memory. Recent Intel CPUs have a cache allocation technology, which allows to control the usage of caches and memory bandwidth and reduce the influence that parallel benchmarking runs have on each other. The goal of this project is to add support for using this technology to BenchExec (corresponding GitHub issue with more information).
Requirements: Python, knowledge of hardware architectures, maybe C
Mentor: Philipp Wendler
Modern architecture and tests for HTML tables
Mentor: Philipp Wendler
Instructions for Students
Students wishing to participate in Google Summer of Code must realise that this is an important professional opportunity. You will be required to produce code for an award-winning tool chain or parts of its infrastructure. Therefore, we seek students who are committed to helping our tools long-term and are willing to both do quality work, and be proactive in communication with their mentors.
You don't have to be a proven developer - in fact, this whole program is meant to facilitate joining our group and take a look at open source communities. However, experience in coding is welcome and should be mentioned in your proposal.
You should take a look at the tools that you plan to work on before the start date. The timeline from Google reserves a lot of time for bonding periods; use that time wisely. Good communication is important. The group members are available via mail (or in person, if needed). You should communicate with your mentor, and formally report progress and plans weekly.
- Join the mailing list of a project of your choice, introduce yourself, and meet your fellow developers
- Read Google's instructions for participating and the GSoC Student Manual
- Take a look at the list of ideas
- Come up with project that you're interested in
- Write a first draft proposal and get someone to review it
- Submit your proposal using Google's web interface ahead of the deadline
Student Proposal Guidelines
Proposals are the basis of the GSoC projects. Write a clear proposal on what you plan to do, the scope of your work, and why we should choose you to do it. The proposal the basis of our decisions of which student to choose.
Students can use the following application template:
- Introduction and Background: You can either choose a problem from the list of ideas or state a new problem for our group. Before offering the solution (your GSoC project), you should first define the problem. What is the current state of things? What is the issue you wish to solve and why? What is your solution?
- Project Goals: Propose a clear list of deliverables, explaining exactly what you promise to do and what you do not plan to do.
- Implementation: Describe what you plan to do as a solution for the problem you defined above. Include technical details, showing that you understand the technology.
- Timeline: Show that you understand the problem and have a solution. Divide the solution into manageable parts (estimated work items, milestones) and describe a detailed realistic plan on how to accomplish your goal. Include time for searching and fixing bugs, and communication. Do not promise what you can’t keep. Other commitments during GSoC, such as a job, vacation, and exams should also be mentioned. GSoC should be treated like a full-time job, and we will expect approximately 30 hours of work per week. Explain how you will work around conflicts. Describe your plans for communication. You will need to participate on weekly communication such as detailed email or personal meeting with your mentor or the team.
- About Me: Provide your contact information (address, email, phone) and write a few sentences about you and why you think you are the best for this job. Previous contributions to our projects are appreciated. Name people (other developers, students, professors) who can act as a reference for you. Mention your field of study if necessary. Tell us if you are submitting proposals to other organizations, and whether or not you would choose our group if given the choice. If your native language is not German or English, you should be able to communicate in one of those languages.
Your primary responsibility is finishing your project under the guidance of your mentors. To do that, you must submit code regularly and stay in frequent communication with your mentor and our team. For the evaluation, you must succeed with communication, coding, and documentation.
- Submit your proposal early! Early submissions will be read and discussed by mentors more eagerly.
- Keep it simple! Be concise and precise. Provide a clear, descriptive title.
- Know what you are talking about! Do not submit ideas that cannot be accomplished realistically or that are not related to our projects.
- Aim wide! You can submit more than one proposal, with different ideas. If you do submit more than one proposal, tell us which of them you would prefer, if more were selected.