Video summary
The CPython Core Developer Panel at EuroPython 2026 highlighted significant structural and technical shifts within Python over the last decade, including a larger core team with increased funding, a governance transition from the Benevolent Dictator For Life to a Steering Council that prioritizes community consensus, and the migration of issue tracking from bugs.python.org to GitHub. The discussion also addressed the growing influence of AI on development workflows while tackling complex technical topics such as free threading requirements for thread-safe implementations, ongoing debates regarding virtual threads versus async-await syntax, and the decision to retain reference counting over mark-sweep garbage collection due to performance demands in NumPy and GPU contexts. Panelists further explored challenges like managing borrowed references in the C API, maintaining diversity through active mentorship despite bandwidth limitations, moderating PEP discussions to avoid excessive conflict, ensuring build system compatibility across diverse platforms, and balancing innovation with stability within Python's release cycle constraints.
Key technical conversations centered on the desire for a redesigned C API that eliminates manual reference management, improves sub-interpreter efficiency, and offers better packaging integration similar to Rust's Cargo, alongside reducing reliance on external libraries by keeping only core algorithms in the standard library. The panelists noted historical innovations such as tokenizer-level detection of 'async def' patterns and stack-frame inspection in typing module backports, while emphasizing that debugging often still relies heavily on print statements due to limitations with IDE debuggers for thread issues. Although large-scale redesigns are discouraged in favor of starting small with tasks like typo fixes, contributors were reminded that code reviews remain difficult even when assisted by LLM-generated code but serve as essential learning tools within the community ecosystem.
For those interested in contributing beyond writing code, speakers advised companies to fund PSF developer positions and encouraged volunteers to engage through activities such as code reviews, bug triage, supporting other developers, or organizing conferences based on personal enjoyment rather than obligation. Participants were urged not to fear joining discussions on discuss.python.org despite the presence of dominant minority opinions and directed to explore resources like devguide.python.org before time runs out for the panel session. The overarching conclusion emphasized a future direction defined by cautious evolution driven by community feedback loops, such as input from the Typing Council, and the pragmatic adoption of external innovations whenever they provide tangible benefits without compromising Python's core stability or ecosystem health.
Read the full video transcript
Greetings to everyone. Welcome to the C
Python Core
Developer
Panel.
C
Python has evolved a
lot over the past few years
, thanks to the
contributions of many
people who have
brought new ideas and perspectives
and overcome many
challenges.
So today
we'll discuss
where Python is
headed,
how these
ideas are
turning into reality,
and how
anyone can get inspired to
shape the future of Python.
But
before we begin
and
take questions, I would
like the
panelists to
introduce themselves.
If you could briefly
tell us who you are,
how long have you been
contributing to C Python
,
what
aspects of C Python are you working on,
and
what is the most exciting aspect of this project right now? Do
you
want to start first? Of
course.
Yes. My
name is Eric Snow
and I
work on runtime internals. I've been
contributing to Python since probably 2010
,
working as a committer since 2012. I am very excited about the impact Python is having on
our
community and the
technology
world.
Hi, I'm Kengen.
I have been
a core
developer since August 2021 and
I love working on controversial
topics.
I am Peter
Burma. I've been
contributing for about two years
and
working as a core developer for about a year.
I mainly
work with the C API and the Python runtime. And
speaking of excitement
,
it
was pretty good until the steering council shut it down. I am
Alex.
I've been contributing to C Python
since probably 2021
and
became a core developer shortly after that. I
mainly work with typing
and
documentation
,
and yes, I'm
Mark Shannon.
I
started working since 2011
, but I didn't become a
core developer until 2018
because I was
a bit lazy and there was
n't a good CI system back then. So I didn't
want to go to the trouble of downloading the patch and testing it myself.
If by exciting you
mean scary,
then that's free
threading. In my
opinion, this is free
threading. And
if by exciting you
mean something fun, then it's
quite enjoyable to work on.
Working with JIT spores,
but currently
there is an opportunity to do some cool work with GC.
I am Yuri
Salvanov. I am
a sleeper
Python core
developer. I
joined this position in 2013.
My most
exciting
contribution is probably the async
await
syntax.
And
my initial work with async.io.
Recently I've
become interested in ruining the typing system for everyone. There
is PEP 58 there. Pep 827
, which I co-wrote with Michael
Sullivan.
If you have
n't seen it, check it out.
Okay.
Thank you.
Well, I would
like to ask a question at the beginning of the discussion. Cython
has changed a lot in the last few years,
and these
changes are
happening much more frequently than they were 10 years ago. So the
question is, what are the differences today compared to 10
or 15 years ago
?
What will someone say?
Yes, now free
threading has arrived. Anything else
?
Now,
when implementing something, you have to think
about thread safety.
Okay. There have been many changes in the
composition of the core team, the
size of the contribution,
and the
number of contributors. There have been
changes to the PEP process.
You
know,
we used to have a
BDFL
, now
we have a
steering
council
which has
changed the dynamics there. There is
now a lot of emphasis
on community consensus when it comes to change.
Python's
codebase has become
much more complex than before.
And
with the development of Python in the world of technology,
various
trade-offs have had to be made. Does
anyone else have any
older opinions
?
I think the
biggest
change since I joined the project was the
move from bugs.python.org to GitHub, which has
greatly increased the accessibility of the project to outside contributors.
And also for the outside
triagers.
Now
we are clearly in the
age of AI
, and perhaps
we have gone too far down that path
, which is why we are
now struggling to handle the
PR
and issues sent by AI bots.
So where to draw this
line is
an
excellent question.
One of the big
changes I've noticed is the
increase in its size and the amount of money involved. A
funny example
is, when I
first went to Python
conferences
,
people would say, "I
work on Java during the day
, but I
come to Python conferences because I
love Python." And
now I
hear people at conferences
saying, "Yeah,
I don't really
like Python that much.
" "I want to program with Rust
or something
,
but my
employer
makes me work with Python."
So, this is
a really
interesting
change. But the
good thing is,
now there's a lot
more money involved.
I don't know
exactly how many Cython
core developers are
working full-time on a paid basis, but I
think there must be at least
seven.
Maybe close to 10 people
, but
before there was
n't even one. Well,
maybe there
was one. Guido
probably always
got paid for it, but
that
number
wasn't much higher than in 2010.
Yes, there
were very few people then.
Okay, great.
Before asking the next question, let me say something.
We have
two
microphones. There's
one
there,
and there's a microphone there for people far away
, because
you
can't come down.
So
if you want to ask any
questions
,
go there; I also created
a thread on S2. On
our
Discord
channel.
You can
type your question there
and
I will monitor that
thread.
So if
you want,
I will ask the question.
Eric,
you mentioned earlier the
transition from BDFL to the Steering Council.
In fact, while talking to someone this morning,
I
got feedback that
Python's
trajectory seems to be
a little
different since that change. Do
you
feel that way
because you've been
here longer than many in the community
?
I think there is a
difference.
I would
n't say it's bad.
It's just
different. I
think it's only
natural that
such
changes will lead to
variations in the workflow
, especially
when the consistency decreases slightly from year
to year.
Hmm. It doesn't matter
who is making the decisions
, but I
think the
steering
council
now has
much more responsibility than Guido.
Yes.
Many
additional features have been
added to the core development.
Python is also now in the next phase of its
life.
So it
changes the dynamics of the content and the
steering
council is
very
aware of that, and with that in mind,
they are
a bit
cautious in making decisions. Okay,
thank you.
Does anyone else
want to comment on this?
What do you think about the trajectory of Python technically since the change from BDFL to the Steering Council model
?
Anyway, this
transition
was very chaotic,
but in the end
Python is
much bigger now.
And it is being used in
more
cases than ever before.
15 years is
not an ordinary thing.
And I think
Python has now
reached a point where it's
not possible for one person to handle the whole thing alone. So I
think it was ultimately important for us to eliminate the differences
and the
bus factor. No matter how it happens.
So I think
it's a
natural
process.
Okay.
Thank you. Is
there anyone else? I can't
really see.
Yes, there is someone.
Yes. Start.
Just now
and this morning, you
talked about community consensus, and
I was reminded of a quote by Henry Ford.
He said, when
people asked what they wanted,
they would
say fast horses,
but we
got cars.
So you are
certainly
not asking through a referendum whether
we should accept the APE or
not.
But if you do
n't,
what's the point of getting community consensus? How much
consensus?
What does this mean in practice? And do
you ever
go against that,
sorry? This is exactly what I
wanted to know.
I think the
steering
council
wants the consensus of the core developer community rather than the wider community, but
perhaps they will take that into account as well.
However, it is
better to ask the steering council about this;
Some of them are right
there.
From my perspective, there is no
single community for Python.
For example,
FastAPI community,
NumPy
community,
etc. So
what the steering council usually does
—if I'm not mistaken
—is that when there's
a
change
proposal related to typing or the scientific community,
they
try to get feedback from the people involved.
Finally, it is
hoped that the
Typing
Council knows what the
position is on typing
and that they can convey that
opinion
to the Steering Council. That
is, the opinions of all
communities
ultimately
flow upward.
Okay,
thank you.
We
have two questions from Discord. I'm
saying the first one.
If you could
wave a magic wand and
make any change to Python without any consequences—
even a breaking
change—and all
users
would accept it like magic,
what would it be?
I know what you mean.
No, no, no. It's
not what you think.
I would change the C API.
Yes. So, it's
nearby.
Yes.
Let's give some context: The C API
is what allows
C extensions like NumPy or pandas to
communicate with the Python interpreter.
I'm
not belittling anyone by saying the
C API is
bad or
anything, but I
think the
new API could
be much better with what we've learned from Python over the last 30+ years
, and
if everyone could make changes to it
, that would be
great.
Yes, this is my
magic wand. To
say more about this.
Especially the issue of borrowed references in the C API.
For those who don't know,
Python
uses reference counting.
And when functions in the C API
return an object,
they
usually increment its
reference
count.
However,
there are some functions like pi-list get item,
which is used to get an item from a list.
This returns a
borrowed reference
, which
means you are
reusing the same reference that is already in the list.
So if someone in another
thread
deletes that list
, that
reference
becomes invalid
and you
encounter a 'use after free' error.
Oh, your magic
wand is very
conservative. I
want everything,
not just that.
You can break everything.
Yes. I
want to break all of these.
Yes. Okay. Wait.
No, do
n't capture it on camera. Sorry.
I'm saying this
mainly to see Yuri's
reaction.
I think
the way async works is,
we
started with generators
and
added different parts to them,
then came co-routines
which have
additional debugging
features,
and then
tasks were added on top of that, and
so on. I
think Java
did it right, because
Java
saw the work of others and
since Java
was very slow, they were
able to make the right decision
and move
towards virtual threads.
So
I want to eliminate all
async
mechanisms and
replace them with
virtual
threads. Okay
, it looks like
I have 46
minutes and 5
seconds.
To give the correct answer to this. My
personal
opinion is that there is a reason why programming languages
without the GIL have
async-
await
, even in
languages that do
n't have threading problems like ours. And
that reason is
readability. I
fundamentally
believe that
humans are incapable of writing proper
multi-
threaded code
, and
I
certainly ca
n't.
And I think
async-
await makes that
a lot easier.
So,
maybe we
should do a separate panel, just you
and me.
In a ring,
and then we
can discuss it.
I
can leave if you want,
I'll leave it at that.
If I
had the chance to change one thing in Python, personally,
maybe this will
sound controversial, but
I would make all
strings act like F-
strings.
That is, the
F prefix
or prefix
was not needed.
Okay.
Any other opinions?
Any other
uses for a magic wand?
I am talking about a small
matter.
Okay.
Maybe how to
write an empty dictionary.
Hmm.
So that empty sets can be
written with curly braces,
and empty
dictionaries...
yes.
I don't know.
Something else.
Yes. Maybe
square and
angular
brackets.
Okay.
Shall we go next time or
not? Well,
oh, I mean it's
not a very controversial feature actually.
I'm still
not a fan of the Walrus operator. I
mean,
I
wasn't a big fan of type checkers before I wrote them
, but when
you write a type
checker, it's
hard to overstate how many strange situations it creates.
You
can tell how many
rules it
breaks, where
you say all
definitions are
associated with a statement,
except for definitions made in the walrus operator,
and all definitions are
associated with its local scope,
except for definitions in the walrus operator.
Okay, thank you. Is
anyone
standing there?
Yes
wave your hand because I ca
n't see anything,
yes
start. My
question is,
some tools are
written in Rust.
I'm
thinking about Astral's UV, I'm
curious
what you
think about it, do you
use it
, and does it
bother you
that so many
important
tools are written in
Rust instead of Python
?
I like it.
Yes, I
work on the Astral Team,
so I think
I should
refrain from this discussion.
I'm primarily a C
programmer,
so I do
n't use it.
I think the
tools written in Rust are great.
Extensions written in Rust are
great. We are
thinking about writing some parts of C Python in Rust, and
are also experimenting with it. Therefore,
Python has always
embraced technologies that
make sense for the community.
So if some parts of it
rust, that's
great.
Yes. I don't care
what language your tool is
written in
,
as long as it works.
We try to make it work. Right.
Thank you. Is
there anyone else?
Yes. Yes.
Start.
My question is
about garbage collection and the magic wand that can change anything.
About free trading. Have you
considered using the concurrent mark-sweep method instead of the reference counting concept altogether,
which seemed crazy 20 years ago
but was successfully done by the Go
language
people? Have
you
thought about this?
We thought,
what do you mean
...
yes. Mark
and Sweep. The
problem with Mark and Sweep is that
you have to
collect everything together.
So you
need incremental and generational approaches
and everything becomes
increasingly complex.
Reference
count gives us
instant
reclamation or
recovery
facilities in many cases and
many things
depend on it.
For example,
all the huge
tensors in NumPy
need to be reclaimed very quickly. If there are
hundreds of such things
lying around and
each one is a gigabyte in size,
that will become a
big problem.
Especially if
they use GPU
memory or any other
specific
resources. There
are many C APIs that
rely on reference counting behavior.
They
hide the reference count in such a way that there are
no real references anywhere. This is a kind of
implied
reference or
reference to something else,
but the
reference
count is
explicitly
incremented and
then decremented. The
C code is correct,
but even a
C heap scan with a conservative collector
might
not find everything. Yes,
this is a big
change.
I mean,
even with a magic wand and vast resources,
maybe there are better
performing
collectors,
but I don't see any way to get there from
where we are now. I understand.
Thank you. What I meant was
,
reference
counting is very
useful for wrapping C++ libraries, like
standard
shared
pointers, because
that is also
reference
counted and
changing it to something else would be much
harder
, and we
want Python to be
extensible.
Oh, and
another
thing in favor of reference counting in free-threading Python is local
references.
Most
objects that are
created and
lost are
local objects
that are
created inside a function
and used during the function call.
They have
very limited scope, so
having local reference counts between objects, I
mean, okay,
this is a little...
this, this, this,
this is even
faster. This is
more efficient, because
as you
said,
the references
go away very quickly.
It's a little
complicated, okay,
it's
like different levels of ref counting, but
it's also
pretty good to have for free threading. I'm
going to the next question on Discord. What advice do you have for preventing PEP
discussions
from turning sour
?
As pep writers,
should we actively steer the discussion, or should we let the
discussion
flow naturally
? What should be done when
people
who have
no responsibility control the discussion
?
There are many questions. Yes.
About the pap process.
We were
saying earlier that
we
want community participation and representation. So I do
n't think we
should filter or limit our discussions. If
there
are thousands of comments,
it will be
quite
uncomfortable for the person who has to filter them.
However,
you can use AI
Summary if you want.
Anyone else have anything to
say?
I
agree with Mark.
I mean, there's a lot more engagement in the pep
talks
than there used to be
, but I do
n't know, at least in
my
experience, the
discussions haven't gotten too
heated. Do
you see any patterns in the opacity
of different Peps
? I mean, in
terms of the content of Pep.
I
have my own opinion, but there can be
different
ideas about different perspectives and approaches.
Yes. And at
the end of the day, everything
depends on resolving those
differences
and
making the final decision, which
rests with the decision-maker on the proposal.
So,
basically that's the
most
important
thing, reaching a
conclusion.
Decision.
Yes,
I agree that
we must
allow people to have free and frank discussions and
allow everyone who wants to contribute to do so.
I think in
some
cases the
pattern is such
that the discussion tends to wander, especially in the
case of hot topics.
I think
some moderation
or control is
needed in those situations.
In this case,
you are
not censoring anyone, because people have
already said what they want to say.
I think it's
just an attempt to defuse the heat
and give a voice to others
who
may be feeling
overwhelmed by the pressure of the discussion.
Yes, I think
moderation is
definitely
effective. I
think it's important to distinguish between people
and their
ideas. It
can be difficult to separate yourself from your own ideas,
but it
shouldn't be difficult to separate others from theirs.
Yes,
any
criticism of the individuals involved
should be stopped quickly,
but
everyone should have the freedom to criticize ideology.
Okay, I have
another
controversial
question. Out of
curiosity
, would you
give a different answer than the Steering Council?
What are your thoughts on the recent major experimental changes to the language, such as free threading and JIT?
Would you like to see more or less of this kind of
change
?
What changes would you
like to make to this process in the future?
Yes, contrary to what I said
earlier and
popular
belief
, we do
not experiment with C-Python for the sake of breaking it. We
do this because we
believe that
language needs to
evolve in certain ways
, so we
experiment
and continue if it succeeds.
What
needs to be changed? In fact, there
are many disagreements about whether C-Python should be
constantly
evolving
or
stabilized
; But
if you think
it
needs continuous evolution, then
we need a
better system for running tests in C-Python.
This is
an open
question, as
most
mature
languages have more than
one way to do this.
So I'm
not sure.
Yes. Can anyone else say
something about this
?
Tell me.
Actually,
I have
many opinions on this
, but
basically we should have
complete
freedom to try new things.
If
we
run the test on the main branch,
it might
not be right. Python is
no longer at the point where
what was meaningful 15 years ago will still be. It does
n't work like it did 15 years ago, right? But
we have to be careful in considering the impact
, which
we do, and
I think
we sometimes get a
little too
conservative
, but that's
probably the right thing to do.
But
as long as
we're
trying new things
and seeing what works best for language
users
, that's
fine.
Okay.
Thank you. I
think there's
someone standing there.
Tell me.
Hello,
thank you all for coming. My
question is,
what has the C-Python team
learned about increasing diversity and what are the
most difficult
problems
?
Difficult question.
I...so
as a core team
we worked on this
, but we didn't
get very good results. That is, there
is still a lot of room for improvement.
I think
everyone is
aware of the importance of diverse groups, different ideologies, and people from different backgrounds.
But it's easy
for a group to
remain homogeneous,
especially
because of human nature. Therefore, it
requires active effort.
I have seen that it takes
active initiative to change this.
We
can't just talk.
This
requires personal work, because it is
really
difficult to enter a group from the outside. This is very
uncomfortable.
This is a
challenge for most people.
So usually it's the
people inside who have to
pull others along.
Otherwise,
you will only
find those
who are not hesitant to mingle
with new people.
This has become a challenge
for us as the main team.
Guido has challenged us on this issue in the past
and
set a good example, and
we have made
many strong
efforts to increase diversity.
But it's
hard to hold on to. I
wish it were
easy. I am
always
open.
I think
everyone is
open to suggestions,
especially those who are
eager to encourage and support diversity in our or any team.
Yes. In my
opinion, the
most
effective way to bring in new contributors from diverse backgrounds
is to mentor them.
But the
problem is, it's also
very difficult to provide mentorship. We do
n't have enough people to mentor us at CPython, because everyone is
struggling under the pressure of reviews and triage.
I was
really
lucky that at
that time I had
two wonderful
mentors like Guido and Pablo.
But not everyone
gets it anymore, and
I don't know
how it can be
improved.
I
know this is
n't a good answer,
but
sometimes it just
depends on luck.
Yes.
Okay. Can
I
say something about this? Do
you have something to
say?
I can say that
I am a little less involved in Python
core
development
than I used to be.
From my comfortable position outside of core development, it
seems like there are a lot of efforts going on to make Python more diverse in the community, both
within the team and
outside.
My
personal
opinion is that
Python is in a pretty good
position as a language.
Python's
operating
system is
open to everyone.
Ah, anyone can become a
Python
core developer if they want to,
if
they put in the time
and effort.
And I know that
Python core
developers are
always
ready to welcome newcomers.
Um. It's
clear that we do
n't work in the same building and
are scattered across different time zones.
Sometimes,
not working full-time
or other
reasons
create communication challenges and this
makes the job difficult. But
I
definitely
see that everyone is
trying.
I haven't
met a single person, at least in
my acquaintances or
other
groups, who
says that
diversity does
n't need to improve.
Everyone understands that there is
always room for improvement
, and I
agree that
mentoring is a
very
important
thing. And I've
tried many times over the last 15 years
, but it's
really
hard to mentor someone. It's very challenging to not only promise "I'll
mentor you,
"
but also to
answer emails
and make time for them even in the midst of their busy schedules when
they
need help.
So, it's
really difficult.
But it's also
enjoyable.
I think
we should
encourage mentoring,
although this is where
I
see the limitations of our work.
We know it's
necessary,
but
unfortunately
we do
n't always have the time to do it. The
next
question related to this topic is,
what is the easiest way for someone to make their first meaningful contribution to this project?
Meaningful for the project.
Of course,
for themselves too. In
my opinion, the
way to make a meaningful contribution for the first time is to
make small or simple contributions first, because
you
need to build inspiration and momentum
so that you can
make a big, good contribution later.
I also agree with this statement.
My first
contribution was
a very small
bug fix in Funk Tools.
I think
I probably figured that out myself.
It was
just a change of one or two
lines
,
with tests, it
took a few weeks and
finally
Sir approved it and
merged it
, which
was great fun.
This encouraged me to continue working.
I
think
your first contribution should not aim to
do something big or
redesign the entire language or
create a huge API
, but rather
start by solving your own problems. If
something is
n't working properly,
fix it.
I
will talk about reviews,
because
reviewing is a big
obstacle now. LLMs
can produce code very quickly, but
they are
not very good at reviewing it. The
problem with reviews is that
we
can understand the quality of the code by looking at it.
But when it comes to
reviews, it's
very difficult to understand how much attention someone has paid or how much thought they have put into them.
However,
if there is
a change to a module
that you
know well or
use frequently, you can
try reviewing it.
Reviews are a
great way to learn how the codebase is organized and what a good contribution should look like.
Okay,
thank you. Another question
about this code.
What's the weirdest hack or trick you've added to C Python that
you ca
n't believe you've made it to the mainstream or stable version? I'm also
interested in hearing this. A
hack that
one of us contributed to.
Yes, which has actually been
released.
I
thought this was a very nice solution,
for example...when
I added 'async await'
,
I wanted the
user
not to have to write something like 'from future import async await' separately.
So my
weird
hack was to
go to the tokenizer level and
check if there is a space after the word 'async'
and if there is a word 'def' after that. When
this happens,
a special
boolean
flag is set,
indicating that
'async await' can be used at this indentation level.
And
people still
blame me for that hack today. Any
other
hacks?
It's not entirely a
C Python
standard
library,
but at one point we
added a feature to the typing module
and had to
backport it to a third-party typing extension library. The
only
way to backport that feature—and
that hack
still exists—was to
use the system's 'get frame' to
go up two levels of the stack and check if there was a
variable with a specific value in that frame.
This is a very
disgusting
method. Yes,
really. Quite.
Hmm. Let's now
discuss the future of Python.
This morning
we
heard about the features of version 3.15. How excited are you about the
changes coming in version 3.16,
and I'd
like to expand the question a bit and ask about the future.
What
kind of
changes would you
like to see in the next five years?
We have 24
minutes,
so I'll
give someone else a chance first. It would be great
if it was an operator for non-.
Anyone else have anything to
say?
I do
n't want to be that person, but in the end, that's who I am.
I want my
PEP to be successful
and Python's
typing to be
stronger.
So that the typing
language capabilities are
essentially
compatible
with the dynamic nature of the Python language itself.
So that we can get
better and
dynamic
APIs
and reduce the bowlerplate code for fast
API code or
such tasks.
I really
believe that
this is a good
idea. So I will
spend some time pitching this idea to the steering council and other key developers.
This is going to be great.
I
might be pronouncing the name wrong, if there is a
French person please
correct me.
Antoine de
Saint-
Exupéry
has a famous quote:
Perfection is
achieved not when there is nothing left to
add
, but when there is nothing left to
take away.
So
I think instead of thinking about what to
add,
we should think about what to
remove.
As I
mentioned, remove all async operations through virtual threads.
That is a
possibility.
The other is to
bring parallelism, single threaded, and multiple interpreters into a single model that
we
can implement quickly and
then people can gradually
move towards parallelism.
Um...and
architecturally
speaking, better integration of memory
management,
GC,
object model,
and
other such
parts is
needed. It
didn't take 24 minutes,
but I can go into
more detail.
Sure, tell me.
I want sub-
interpreters to become
more popular
, but for that to happen,
their
current
inefficiencies need to be addressed.
Which means
someone has to
solve those problems.
Moreover,
I agree with many of Mark's comments.
I also want
Python to expand into
more areas.
Anything we can do to make Python easier to embed will
make a big difference.
I think there is
a lot of room for improvement in that area.
Okay,
thank you.
One of us is
standing there.
Yes. There
are other open source communities that may
work a little differently.
Do you
see or
want to adopt any methods or technologies that are available from these
communities in
reality
or with the
wave of a magic wand
,
or something
that you
wouldn't adopt at all
because it's
not a good idea?
So, this may be a matter of accepting good ideas from outside
or
examining and rejecting which ones are good.
Does anyone
have any ideas about this? Do
you
have any examples?
For example, some things
we've always
seen in Python were
quite
open-ended.
I think the Pi
project
toml is probably
inspired by Rust,
if I'm not mistaken.
This
Tomcat
configuration
issue could be
an example from a technical perspective.
I'm
not sure if there is
such a thing
, maybe there is
nothing out there
, that's okay too.
However,
other
communities
work differently
; Their
work style is
different. Just like
we
have a steering council,
other
communities
may have a different
model.
Do you
see anything
that is
worth considering, or
something that
maybe
wasn't a good idea
and ultimately the
right
decision was to reject it?
Well, we
took async away,
look
where we are now. But
seriously, I
think it
happens all the time,
languages borrow good ideas
from each other. The
same applies to frameworks and ecosystems.
I think this is
a
natural
process. Uh.
This
happens completely naturally. Don't let anyone dare
mention packaging.
I think it's already heading in that direction
,
because other
languages like
Rust are an
example. Their
packaging is
included in the language,
while Python
packaging is
something external.
That's why
our
packaging
system is so
diverse
, with things like conda,
pip, and
others that have evolved over time.
And in the
case of Rust, I
think they
learned from Python
and made
it part of the language from the beginning
, which
made it much more integrated and simpler.
Because in Rust there is no
confusion
, just
use Cargo. In
Python
you have
many options
that hopefully
will be integrated soon, because
installing packaging or stuff is
a big part of the user experience, which has been
parallelized in Python in the past
, this
might be an
example. Is
there an answer,
or should we move on
?
Like Yuri, I
think
we will take things as needed. I
mean,
I
avoid the packaging issue. Um.
But yeah, I
think if something
makes sense
and
if someone is interested in working on it
,
it will probably be
added to Python.
Just one thing, it's
not that we do
n't think about the issue or do
n't consider packaging important.
The thing is,
we are not experts on this subject.
Okay.
Next
question on the core. Many
times, big changes are made based on the idea that 'it
works on my machine
'
, which later
causes problems for various distributors or buildbots or those trying to compile with older versions of Autoconf.
What is your opinion on this? Is it
possible to improve it somehow?
One minute,
sorry. Did you
say autoconf?
Autoconf. There aren't many people
working in the build system
who are comfortable with it
or
brave enough. So.
Someone just
needs to come forward. Many people have been talking about
changing our build system for a
long time.
Yes.
But it is quite a
difficult and complicated
task. I think the
change I
wanted to make to the Python build script, at least on the make side, that could have
ruined everything
, was to
pass GNU make's job server to the subprocess
, which
Thomas stopped me from doing.
Anyway,
who really knows or
cares?
But yes,
we are quite conservative in our
build
changes.
If
we break something
, we try to put it back together as
quickly as possible.
I don't think
we
want to intentionally ruin anyone's build.
Yes.
Question. There
are many buildbots. I
hope so.
We actually have a
lot of
buildbots.
I think
no one likes the C-Python build system at the moment,
but we're
all afraid
to change it.
It is
very big and
complex. Could
you
come to the microphone
, please
? For recording. There is
a microphone there.
Okay. I have
a question
,
not just about the build system, but
about all major or intrusive changes in general.
Oh, and
speaking of buildbots, I maintain
20 buildbots for Python CI.
So.
Okay.
Thank you, I mean
thank you for maintaining the buildbots.
But
can you give an example of a major change that
ruined everything
? There could be
changes,
jets or something like that to increase speed.
They are
usually
not done to destroy anything.
But they
ruin it.
We
have CI. So if
we make any
changes,
it passes CI
, then it is
merged.
This makes build
bots
useless.
Uh, usually if
it makes a build
bot unusable
, it's often
due to some configuration
and needs to be patched again to fix it.
If there
is a bigger problem,
we
usually
revert.
Um, yeah
, the problem with build bots is that they're
a bit
slow. So
yes,
sometimes
it can be quite
uncomfortable
and it
takes a while to revert, but
usually
they are reverted quickly.
Uh, if someone is on
vacation,
Peter or
Sergey
reverts things.
And we have
an answer for me.
Yes. Okay,
great.
Hi,
thanks for maintaining the billboard.
Uh yeah, I mean
I've ruined your
billboards
several times.
Uh,
but it's your
job, so you do it.
Uh, I mean,
honestly,
if I'm
on Mac OS
and I
make a change
and it does
n't work on Windows, it's
unreasonable to expect every contributor to test on all operating systems.
Our build
system, you
know, is under a lot of pressure right now with the
amount of build
bots we have for everything.
So that's what
we have.
This is how we
understand that
any small part of our ecosystem is being
affected by any change.
And to be
honest, the
CPython test
suite is largely
a test
suite for the industry; We are
finding bugs in many places, including the Linux kernel, Linux, and Windows.
So, uh,
yeah, I wish
we
could always submit perfect code,
but I think
builds
are our
way of making
sure that
when they finally
stabilize,
everything is fine.
I do
n't think we have much to do with Solaris or the
others you're talking about,
because very
few people have
them.
Linux is
Linux,
but then
there are things like FreeBSD, which are
not very popular. There are actually many
more combinations.
I
think it's not very realistic to expect everyone on this stage to know about
all the
operating
systems we have to
support.
Okay.
Thanks for the answer. Can we
move forward?
Do we have any more
questions
?
Yes, I mean
Python
was once, or
still is, a brand whose
slogan was '
Batteries
Included'. '
Batteries
included', but
I think there are now
many more
libraries
coming out that are basically the
same as the standard libraries, because everyone
installs them at the first opportunity.
I mean,
libraries like Requests, HTTPX
, or whatever new ones come to mind.
Do you
think it's a good development that these
things are made
outside of the main team
,
or do you think
they should be
'
batteries
included' or
all-
inclusive
?
Personally,
I think this is a
very good
development. Hmm,
libraries used for network requests
like
Requests or
HTTPX
require a lot of domain logic that
most of the cpython core team doesn't have.
We are a large
team, but there is
still a lot of
work to be done on the standard library
, which is a lot.
I think there are
many modules
that have at
most one or
two
maintainers. There
are many modules
that
currently have
no maintainers. Hmm, and
they're
usually
maintained by regular programmers,
if they have the
time. I
think it's a great development that
these
libraries are
maintained by experts on PyPI.
Moreover, it is much easier to provide
a new release of HTTPX on PyPI than to fix security bugs by releasing a new Python release.
So
some
decentralization is
actually a good
idea. I
think the
standard
library should be
mainly for low-level
batteries, data
structures,
core
algorithms, or
perhaps async.
IO
may be
too big for the standard library,
but it's already
there.
Maybe it would be better if it was
on PyPI.
Um,
yeah, I
mean, having a library without a
maintainer is
bad,
but I do
n't think that
means
we
should or
shouldn't remove it from the standard library. This
means that if
they
are in the standard library,
we need to
make sure
they have
maintainers.
Yes.
But
code outside the standard library also
often
loses maintainers
and
becomes unmaintainable. Therefore, it is
difficult to say for sure which is best. We always
say that the
standard
library is where
code
dies. So
for code that has any kind of development potential, the
standard
library is
probably
not the best place. Essentially,
this adage does
n't mean that
we do
n't want to maintain some of the standard library,
but rather that it's
due to the nature of being distributed with Python. This
means that
Python's
evolution is very
slow because it is locked into its release cycle.
So if I
want to add a new Python asyncio function or something like that,
I have to wait a
year or two for it to be released. It would be
much
more
convenient for me to publish directly to PyPI.
So, the
standard
library is
really nice.
It's really
great that
we have this.
But adding all the
necessary
things to the
standard
library is
not the only solution.
Generally, only
specific
and
universally
necessary
topics
should be kept in the standard library.
That's the goal, right
? Thank you. Let's move on to the
next question.
Speaking of performance:
can Python do more optimizations? Like
function
inlining before generating byte code, maybe
through an opt-in feature like O2?
Kenjun,
will you say 'no', or shall
I? The
short
answer is no.
Yes, I'm interested in hearing the reason for your '
no'.
So, keep going. Of
course.
It's
much more
dynamic at that stage.
Byte code
compilers
can only analyze based on syntax, nothing else.
We
can do some things, like if there's a
'raise' somewhere,
we
can say that
it probably
won't happen often,
because
people don't usually do that.
So we can slightly improve performance by refactoring the byte
code a bit and
moving that code out of the main stream
,
but it's hard to do much more
than that in byte code.
IT (JIT)
has a lot of information. It can
see live type
, know
how often each is being used,
etc. So
yes,
we have left all this to
either the
Specializing
Adaptive
Interpreter
or the JIT.
Okay,
thank you.
Any questions from the audience? Of
course. There seems to be a lot of effort being put into getting
new contributors to C Python.
Last year there
was a great discussion about
how to
contribute without being a compiler engineer.
I am
a
compiler
engineer myself,
yet I
find it quite difficult to contribute to C Python.
If there
is a lack of maintainers—I
haven't tried yet—
what other
way is there to become a C Python contributor? Come and
talk to me after this discussion. Of
course I will.
Yes. But
...yes. Does anyone else
want to answer this?
I'm repeating what I said before.
Just
keep your first contribution. Correct
any
typos or
minor mistakes in one line
,
then maintain that
consistency.
Okay. Maybe,
my question
is, is adding new
contributors a
big problem for you,
and do you know of any way to overcome this obstacle
?
Of course, you have to start with some
work.
You can't just
come and say, "
Here I am."
I am
interested in working, please employ me. It does
n't usually work like this. The
way it usually works is that
you
start making small contributions.
You
start helping out sometimes and
then people
find you
, cooperation
increases and you
better understand
what to do
and what not to do.
I think that while the "
I'm here,
use me
"
mentality works in a
company's
hiring
process
, it doesn't work very well in the open
source
community.
Okay,
thank you.
Quite. Let's move on to the next
question. That's a
pretty
interesting
question. Is
there any part of C-Python that
you're
afraid to touch?
I usually
stay away from compilers.
Yes, it's
better to stay away from the compiler. I
mean, it's okay
, but it's
hard to wrap my head around the whole thing. And
I rarely
touch on it,
remembering everything
or finding out where everything is is
quite
time-consuming.
Of course, this is
not the case for everyone. You
know, to Pablo it's
like his beloved child.
However, in my
case,
yes, the
compiler.
Anyone else? C-
What part of Python are
you afraid to touch
?
Parser. Because
if I
touch the purse, it
means millions of
people will be angry with me.
Like, are
you
talking about people or
just...
yeah, like
syntax
changes, you
know. So,
usually if you
do something like that, it's
very controversial.
So, I'm
not going to touch that.
Test suite.
Oh, really? Okay,
okay.
I mean
,
the argument could be a
parser.
There
are so many private classes that
everyone
imports, it's impossible to change
any
implementation
details without breaking anyone's code.
This is
quite scary.
I'm surprised no
one is
talking about makefiles. Or about the
build
system as a whole.
Okay, we're
almost out of time.
I wonder if
anyone from the audience
has any questions? Not yet.
Well,
another interesting
question.
Statement as expression.
Yes or no?
Yes.
No. Does anyone else
have any opinions?
I need to think about it a bit.
I've
always liked the idea
, but
I'm not sure if it's
possible to incorporate it into Python syntax.
There are many
complex
situations or
corner cases. I
mean,
that's how Rust works,
and I
love Rust, but
it's a completely
different
language. I think it's
too late to add this to Python
,
but Python should remain as it is.
Yes, that would
be great.
Yes. Didn't you
say a little while ago that
you don't like converting assignment statements to expressions?
That's different.
That's something special.
Yes, I am for
continuity.
It has worked for years
and I wait.
We are approaching the end.
Maybe
one last small
question. Um,
how do you debug C Python?
Do you
use a debugger? Do
you
use print statements?
Both?
What is your way to debug C Python?
I have never
used a debugger.
I only
use print.
I also
come from medieval times.
I also use print.
Sometimes when a
situation does
n't make sense at all,
I
resort to the debugger.
But usually,
after a while
you become so
experienced
that one or
two print
statements make
the point
clear.
So the
extra hassle of running the debugger or setting break points
seems too much.
Um,
C
Python often
crashes with the changes I make.
So a
debugger is definitely
needed, because
then it's
too late for the print statement.
And
once we understand
where it's
crashing, we
can add a print statement.
I
use GDB,
but when it comes to
threads
,
and I have to
work with it a lot
,
it can be really
painful
. There
are some tools that
help debug thread related issues, but
um,
it's a
pain in the ass in most cases.
What
um, I used to
use printf and my IDE debugger a lot,
but
recently my
IDE debugger has been
broken, I do
n't know why.
So recently
I tried leaving it directly
to AI.
Yes
sorry, that's basically
it, but yes
mostly
printf.
Another thing I use a
lot in Python is
debugging through the REPL. Just
hold and
test each statement.
This is great.
Claude. Right.
We
have two minutes. One
last
question for each of you,
as a closing statement. What is one practical thing that
everyone in this room can do to help the Python
project
? Um,
ask your company to fund the PSF so that
another
developer in
residence or
someone like that can be
hired.
Agreed.
Yes, that's what I
wanted to say too.
Then, you have to
think of something else.
You
can't add plus one anymore. I would
say, if people
feel comfortable,
they can be
more involved in contributing.
There are many different ways to contribute,
and
many of them do
n't even require writing code.
It can be very simple
, like
supporting someone to contribute
, because
sometimes someone needs a little
support
to
have the strength to contribute. People can do many small
things to contribute
, like code
reviews, which someone
mentioned earlier.
I mean,
it would be a huge
help.
Bug triage or
similar
tasks are
great ways to help,
because everyone here is a
volunteer.
Therefore, not
everyone has
enough time to do many things.
The
more hands you raise,
the better.
Yes.
Thank you. I
would say that instead of thinking about what you can contribute to Python—
which is a great thing to do,
and thank you for that
—you
should instead think about:
What do
you enjoy doing for Python
? For example,
if you
enjoy doing things like organizing conferences,
then do that.
At the end of the day,
your own
happiness is what matters
most.
Yes.
Yes. I
agree too. Yes. What
I was actually going to say is
that
we are all
contributors.
Many of us are
professionals,
but you are not.
So contribute to the work
you
enjoy doing
and
leave the boring tasks to us.
I would say, don't be
afraid to join discuss.python.org.
I
think there's a tendency in these
types of forums
where
people with very strong opinions tend to
post their opinions repeatedly, even though they're usually in the minority.
And
there may be a
silent
majority
who are in
favor of change, but
their views are
not reflected in the discussion. So, do
n't be afraid to get involved even if you don't have a strong opinion on something,
and especially if you
feel positive about a proposal, do
n't hesitate to participate.
Yes.
If I could
add anything to this
,
there is a dev guide. So
if you're interested in contributing
,
as a first step,
check out devguide.python.org,
which has a detailed guide to the entire contribution process, including how to
compile or
checkout Python.
If you are
interested in contributing to Cython,
I think this is
a great
starting point,
and if you have
any suggestions
, the entire
code is on GitHub
, so you
can also improve the dev guide. And
I think
our time is
almost up.
Thank you very much for today
and
thank you all for the questions. I'm
sorry that I
couldn't read all the questions in this code, but
we tried our
best.
Our time is
limited. Thank you very much.
Thank you all for participating.
Thank you.