Back to GSoC 2026
Mentors:Till KamppeterTill KamppeterJiongchi Yu
GSoC 2026Project Idea

Fuzz/Test go-cpython

2 minute read

Introduction

Security-related project

1 contributor, large-size (350 hours), Level of difficulty: Intermediate

The go-mfp project includes its own implementation of a CPython binding for Go, which enables Python scripting to be embedded into Go programs.

While other bindings exist, this implementation offers several unique features:

  • It utilizes the host Python installation and is highly tolerant to Python version upgrades, even for compiled binaries, greatly simplifying deployment.
  • It provides a simple API for using multiple independent, isolated virtual Python interpreters (known as sub-interpreters) within the same process.
  • Python objects (values) on the Go side are automatically garbage-collected, eliminating the need for manual memory management.

Currently, this package is part of the go-mfp project, but due to its independence and broader utility, it is planned to be moved into a separate repository — similar to what happened with go-avahi. Once this occurs, OpenPrinting will maintain its own official Go-to-CPython binding.

Should this package attract community interest after the move, it could be widely adopted as a generic embedded scripting engine across many applications, potentially becoming part of critical Linux infrastructure. At that stage, ensuring the absence of serious bugs and vulnerabilities will be essential.

The goal of this project is to fuzz and test the package, as has been done with go-avahi. Given that the CPython interpreter internals can change significantly even between minor versions, it is important to conduct this testing across a range of Python versions, from 3.8 up to the latest available.

Mentors

Till Kamppeter, organization lead OpenPrinting (till at linux dot com), Jiongchi Yu, PhD Candidate, Singapore Management University (jiongchiyu at gmail dot com), TBD

Desired Knowledge: Programming in C and Go, Fuzz testing

Code License

BSD 2-Clause "Simplified" License