For many engineers who are interested in contributing to CPython, the biggest challenge is often not a particular technical problem, but simply knowing where to begin. With a large codebase, complex internals, and years of accumulated design decisions, making the first step into CPython can feel intimidating.
In this talk, I will share my experience contributing to CPython's Free-Threading work and discuss how I started from concrete, observable problems, gradually dived into the source code, built my understanding of the system, and developed my own ways of reading code and analyzing problems through debugging, validation, and community collaboration.
Free-Threading, introduced through PEP 703, provides a particularly interesting entry point into CPython. Concurrency issues often make object lifetimes, shared state, synchronization boundaries, and relationships between different parts of the interpreter more visible. This makes it possible to explore the implementation through real problems without first needing a complete understanding of the entire interpreter architecture.
I hope to discuss not only how to complete an individual contribution, but also a broader way of approaching large open-source projects: building local understanding from concrete problems, continuously validating and expanding that understanding through contribution, and gradually moving from understanding implementation details toward understanding the design behind the system.
I hope this talk can help more developers find their own entry point into CPython, gradually build a broader understanding of its architecture, and continue contributing to CPython and the wider Python ecosystem.