JPF is a highly extensible Java virtual machine built for software verification.
The Java Pathfinder (JPF) project was initially conceived and developed at NASA Ames Research Center in 1999. JPF was open sourced in April 2005 as one of the first ongoing NASA development projects to date, and it is now released under the Apache license, 2.0. JPF is an extensible Java virtual machine written in Java itself. It is used to create a variety of verification and debugging tools, ranging from software model checkers to test case generators using symbolic execution. JPF is a research platform and a production tool at the same time. Although JPF has major contributions from companies and government agencies, our main user community is academic - there are ongoing collaborations with more than 20 universities worldwide. The JPF team for GSoC 2021 includes researchers from NASA Ames Research Center, KTH Royal Institute of Technology - Sweden, York University - Canada, Brigham Young University, Carnegie Mellon University, University of Minnesota, Charles University - Czech Republic, and National University of Singapore.
JPF is designed to be highly extensible. There are well-defined extension mechanisms, directory structures and build procedures, which keep the core relatively stable and provide suitable, well separated testbeds for new ideas and alternative implementations. As a consequence, we host a number of such extension projects on our own, public JPF server, together with a Wiki that provides a central location for learning about, obtaining, and contributing to JPF.
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. In addition to its continued presence in academia, JPF has matured enough to support verification of production code and frameworks such as Android. JPF is constantly being extended with support for verification of new types of correctness properties and for new types of application domains.
Java PathFinder 2021 Projects
Improved Integration of String Solvers in SPFTo reason about string manipulating Java programs Symbolic Pathfinder (SPF) employs string constraint solvers. Currently, SPF integrates a limited...
Systematically explore bit-flip faults in user-specified variables in Java programsComputer hardware is susceptible to errors. For example, radiation may induce error to the hardware and some bit might be flipped. It is important to...
Using Lightweight Specifications with Fuzzing and Symbolic Execution to Reveal Security and Semantic BugsSecurity and Semantic bugs exist in software systems, and discovering them is time-consuming, complicated, and challenging. Several static and...