-
Notifications
You must be signed in to change notification settings - Fork 343
JPF Google Summer of Code 2021
Ideas: GSoC 2021 Project Ideas
The Java Pathfinder (JPF) team will be again a mentor organization for the Google Summer of Code (GSoC) program this year 2021. The GSoC program, is a program where Google sponsors student developers to write code for open source projects at selected mentoring organizations. Each student is guided by a mentor throughout the program. The complete length of the program is about three months, which are done remotely, and it is generally fun. You can learn about the program rules and your eligibility here.
The development of Java Pathfinder (JPF) started at NASA Ames Research Center in 1999. It became an open-source project in 2005, and it is now released under the Apache license, 2.0. JPF's infrastructure is refactored as a Java virtual machine (JVM), and itself is written in Java. JPF is applied directly on the code, and it can be used to verify code that is compiled into Java bytecode.
JPF is a very flexible tool. It offers a highly configurable structure, and introduces numerous extension mechanisms which make it a suitable engine for many existing tools. JPF has been used for a variety of application domains and research topics such as verification of multi-threaded applications, graphical user interfaces, networking, and distributed applications.
Today, JPF is a mature tool with hundreds of active users. It is used as both a research platform and a production tool. Although it has had major contributions from industry and research labs, the main user community is academic - there are contributors from more than 20 universities worldwide.
You can learn more about JPF at the JPF wiki.
You can find existing project ideas on our GSoC 2021 Project Ideas page. If you are interested in a JPF related project which is not listed here, we would love to hear about it. If you have any questions or suggestions regarding JPF and GSoC, use our Google Group: https://groups.google.com/g/java-pathfinder . Please be sure to describe your interests and background. The more we know about you, the better we will be able to answer you questions about JPF and its potential projects.
This list contains only the key deadlines; see here for the full timeline.
- | 03/30 - 04/14 | Student application period |
- | 05/18 | Announcement of accepted students |
- | 05/18 - 06/08 | Community Bonding Period |
- | 06/08 | Coding officially begins |
- | 08/24 | Students submit their final work product |
- | 09/01 | Final results of Google Summer of Code 2021 announced |
JPF is written in Java, and it analyzes Java bytecode, so the minimum skill required is to be familiar with Java and have some development experience with Java (class projects or industry experience). At a minimum you should know there is more to it than just the language - it's the language, the libraries and the virtual machine/bytecodes. Not all projects require a deep understanding of Java or JPF though, please look at the project descriptions to determine which skills are most important.
JPF is a software verification tool. It is a customizable virtual machine that enables the development of various verification algorithms. It will be to your advantage if you are familiar with formal methods, software testing, or model checking. However, JPF is where research meets development, so for many projects it is not a show stopper. We are looking for students who are highly motivated, bright, willing to learn, and love to code.
JPF is a fairly complex system. The first step to start is to get JPF running and configured. This in itself can be a steep learning curve. It also helps if you already know what listeners, bytecode factories and native peers are, but no worries - the mentors will help you there. One thing you have to look at, but what is now surprisingly simple is how to set up JPF projects.
You will need to submit a proposal to Google during the student application phase. Check out the GSoC FAQ page for more information.
A good proposal should contain the following:
-
Title and a short summary or abstract (about 100-150 words).
-
Self-introduction: your education, experience, past projects, and open source usage/involvement. This should include past contributions to open-source software (JPF or other). If you can submit a patch to JPF to fix a small problem, this is the best proof that you can successfully use and modify JPF!
-
Goals. Have multiple, prioritized goals, so that you have alternatives if something does not go as expected.
-
Detailed description and concrete implementation plan. What you plan to implement (what feature is missing). Include initial steps you have already taken and/or an your plan of how to reach the first goal(s). Be as concrete as possible.
-
Tentative timeline. A detailed weekly plan for the first 3 - 4 weeks, and outline the remainder as a list of larger steps ("sprints") for the remaining time, perhaps 1 - 2 weeks as an interval for that. Make sure you have enough time for testing and documentation. Leave open some extra time for unexpected problems.
-
A list of foreseen major challenges, a plan to deal with them, including a back-up plan if something does not work out as intended.
-
Plans for future improvements (and possible future involvement) after GSoC.
-
Any possible conflicts of interest.
-
Scheduling issues. GSoC 2021 increases the flexibility in planning the milestones for each project. If you already know when you will not be available (e.g., due to final exams or personal commitments), you can already highlight this in the proposal. That allows the mentors to plan with you ahead of time to adjust the schedule early during the community bonding period.
Please contact us by creating an issue. We are trying to fix the process below, which no longer works.
-
How to obtain and install JPF
- System requirements
- Downloading
- Creating a site properties file
- Building, testing, and running
- JPF plugins
-
Developer guide
- Top-level design
- Key mechanisms
- Extension mechanisms
- Common utilities
- Running JPF from within your application
- Writing JPF tests
- Coding conventions
- Hosting an Eclipse plugin update site