In recent years fuzzing has become one of the widely used ways of finding complex bugs in your software. Kotlin compiler is not an exception, as it has been successfully fuzzed, resulting in over 200 deduplicated bugs found in different compiler subsystems.
But all good things must come to an end. The previous fuzzer implementation is obsolete and outdated, and it cannot be reasonably evolved further. Instead, we would like to make a new and improved Version Kai of the Kotlin compiler fuzzer from scratch, using our previous experiences and all the tools and techniques available now.
For this internship, our main goal is to establish a solid foundation for the future evolution of the fuzzer. This means that we will focus on the following aspects.
What the proper fuzzer architecture should be, to allow pluggability;
Which tools we should use to input, change, generate and output the Kotlin code;
How we should check for compiler errors;
What the proper ways of handling all found errors are.
As deliverable, we aim to create a prototype implementation of the Kotlin compiler fuzzer which is pluggable and allows for easier future evolution, compared to a monolithic implementation. If the prototype is able to actually find interesting compiler bugs, that would be a great bonus but is not the main focus of the current internship.
If you have any preliminary questions about the project, do not hesitate to contact me via: marat.akhin [at] jetbrains.com
Proficiency with Kotlin or another JVM-based language
Technical English good enough for reading the relevant papers and documents
Basic understanding of compilers
Familiarity with fuzzing or other kinds of program analysis
Hands-on experience with Kotlin compiler (plugins) or IDE tooling (plugins) or other kinds of pluggable systems
Previous greenfield projects in developer tooling
Hands-on experience with (compiler) fuzzing
Better understanding of how one creates (internal) developer tooling
Expertise in designing and developing pluggable systems