Tim Peters returns to the Python community
In the past, suspensions of Python core developers have effectively been permanent because the recipients of the punishment chose not to return. Things have played out quite differently after Tim Peters was suspended for three months back in August; Peters has been posting to the Python discussion forum since his suspension ended in early November and, generally, getting back to work as usual. That does not mean that he—or others in the community—have accepted the way he was treated, but he has largely made his peace with it. The incident is still reverberating through the Python world, however.
Back
On November 1, Peters posted
in the thread that announced his suspension, noting that his "ban is history now
" and that he
did not plan to post further about the ban in that topic; "I'll pick
over its bones in my blog instead.
" He did link to an apology of sorts on
his blog, though in another post
said that the "mea culpa" does not "apologize for claimed violations I
also find baseless
".
The violations that he refers to show up in the announcement
of his suspension by the steering council (SC); it is a list of ten
items specifying "repeated violations of the following behaviors
expected by the Code of Conduct
". That list is controversial, at best;
so far, no real evidence for, or defense of, most or all of those claimed
violations has been offered. While Peters said that he had changed his posting style in
light of the suspension, that list still clearly sticks in his craw:
Instead I've totally changed my posting style, which I agree was taken far too often in unintended ways, which I was oblivious to for reasons explained there.So I too think the ban had some good outcomes. But they could have been achieved far more easily with far less community-damaging drama, and with no broadcasting of shrill, demonizing defamations. Those were raw assertions, with no links to supporting evidence at all. Like it or not, "just trust us" is broken now for a much larger share of the community.
During the suspension, especially right after it, there was quite a bit of discussion in the announcement thread, much of it centered around requests to clarify or explain the list of "charges". The SC as a whole has never commented on those requests or the uproar around the suspension in general, though some individual members have posted thoughts in that thread along the way, including Gregory P. Smith (twice) and Emily Morehouse, who was quoted in our earlier article. But things soon died down.
On October 1, the topic was raised again when Ethan Furman posted
a link to a blog post from
Peters that set out "to eliminate the 'information asymmetry' that
usually accompanies a ban, by disclosing my interactions with PSF [Python Software Foundation]
representatives in full
". It paints a damning picture of the actions
of various bodies, though it is
obviously one-sided. The facts it lays out are seemingly not in dispute—or
at least have not been disputed publicly—and indicate that the Code
of Conduct Work Group (CoC WG) may not have even followed its own procedures.
From what Peters says on that page, the only contact he had during the
entire process leading up to his ban was a single message from the SC,
which Morehouse also mentioned in her post; "we did discuss this
directly with the person first as an initial corrective measure where the
feedback was not received and no willingness to listen or improve was
indicated (in fact, doubling down on issues we were trying to address
occurred)
". As might be guessed, Peters has a significantly different
take on what was said, though he does admit to being dismissive of that
message, in part because the specific example given "didn't pass a
'reasonable person' test to me
". He will not release the email
exchange without SC permission, but he claims that the message was fairly
vague other than the one example:
Without specificity, the best I could make of it was "we're not objecting to what you're saying, we're objecting to who you are - become someone different, in ways you must already know we have in mind". It left both sides unmoved, but they didn't reply to my reply, so there was no "discussion". It was a one-time exchange of monologues.
Unsurprisingly, Furman's post led to more outcry, some of which was flagged by readers, thus hidden by the Discourse forum software until moderators could change that status if it is warranted. The volume of complaints caused the thread to automatically be shut down for four hours on two occasions as well. When he returned, Peters posted in the thread and encouraged others to politely do so as well; when the topic of his ban came up in other threads, he tried to head them off and suggest that the discussion stay in that one thread.
Changing CoC enforcement
One of those other threads was started on November 21 by Marc-André Lemburg to discuss moving enforcement of the CoC away from the SC. It is an idea that he raised in the thread on Furman's call for a vote of no confidence in the SC back in August. Two SC members, Pablo Galindo Salgado and Barry Warsaw, seemed favorably inclined toward the idea. The SC is only involved in enforcement for core developers; the CoC WG and PSF board do that work for other members of the Python community. As part of his note, Warsaw revealed that he had abstained from the vote on the suspension, in part because he did not feel he could be unbiased; similarly, CoC WG members Brett Cannon and Łukasz Langa abstained from the vote to recommend the suspension to the SC.
Lemburg's proposal to change PEP 13 ("Python Language
Governance") would make a few small changes to clearly move CoC enforcement
away from the SC. What it did not do, however, was to indicate who would
be in charge of CoC enforcement for core developers instead, which many saw as a fatal flaw. Lemburg acknowledged
that problem and shortly thereafter put
the proposal on hold "until we have fleshed out a better proposal to fill in the gap that is created by removing the CoC responsibility from the SC
".
As might be guessed, though, Peters's suspension came up in that thread.
Langa suggested
that the proposal was solely in reaction to the suspension of Peters,
though Mark Hammond pointed
out that he (and likely others) are responding to a few different
incidents over the past six months or so. In response to Langa's
suggestion that "if you feel this decision was incorrect, we should
definitely discuss
", Hammond's reply sums up some of the frustration
that is being felt:
Haven't people been trying to do that? People tried to discuss them but were told there was "information asymmetry", that information individuals were "personally privy" to and respecting the privacy of impacted individuals mean we can't know the full story and we should just trust the [process]. But when other parties shared their side of this asymmetry, directly contradicted the small amount of information which was released and gave their permission to have an open discussion, the response has been either silence or more stonewalling.So yes, we should continue to discuss this - but in my opinion, the onus is now on the SC to directly address some of the responses made by these individuals.
SC member Thomas Wouters, who announced the suspension back in August, said
that he did not respond because "having a he-said/he-said fight would in
no way improve the situation
"; beyond that, neither he nor the SC as a
whole were formally asked for a response. Peters wondered
how he could engage in the discussion that Langa offered; he has made lots
of overtures, but has been repeatedly met with silence.
So you can perhaps understand why I find "we should definitely discuss" disingenuous too. If "we" means PSF representatives, they certainly appear to be utterly determined to never clarify anything about my case.
Smith replied
to Hammond and to
Peters, saying that the SC replying either publicly or to Peters
directly "would be a waste of our precious volunteer time as it was
guaranteed to be taken out of context and satisfy nobody
". Thus
silence:
Silence because it was very clear that many people in the space were not up for a discussion. They had already made up their minds and were just looking for a fight. Repeating many of the same problems that led to the situation in the first place.The only winning move was not to reply.
After a request from Alex Gaynor to take the specific circumstances of the suspension to a more appropriate thread, Peters took the topic to the thread where he had been trying to concentrate the discussion of his ban. Unlike the thread about removing CoC enforcement from the duties of the SC, the suspension discussion is in the PSF category, where anyone can post to it. That can lead to more contentious threads than those where only core developers can post, so some have said they shy away from posts in that category.
Of course, the conversation continued at some length—and rancor. Eventually, the thread was put into "slow mode" by the moderators so that folks could not post more than once per day. Peters said that his goal is not to argue against his ban at this point, but that there are some larger issues that he is pushing:
The only thing I'm still on about is that list of specific claimed "CoC violations". They appear nearly wholly without merit to me, are widely (in & out of PSF members) disbelieved by many, and will follow me the rest of my life. That's wrong, in so many ways, and the processes that let it come to this are dead broken on the face of it. They need to change, not particularly for my sake, but for the future health of this fracturing community.
Langa, who chairs the CoC WG, said
that he had received a request from Peters on November 4 to redact or revise the
list of violations, but the group had not yet had time to consider it.
The next meeting was scheduled for December 6; "We will discuss it, I
doubt it will be controversial. It just takes time.
" At the time of
this writing, the list remains in place in the SC announcement; in truth,
that list has now been quoted, in full or in part, in lots of other places,
including other Python forum posts. That toothpaste is not going back into the
tube.
To work
Since his return, Peters has been busy in other ways too. He proposed
a change to Python syntax in the Ideas category; it would
allow some simplification for search loops by adding an if_break
to loop constructs to handle the "if found" case. As he noted, it is
"just a 'nice to have'
", but could be fairly easily added if someone
wanted to do so. While it does not look like the idea is going anywhere,
it did spark a lively (and polite) discussion of the feature and some
possible alternatives.
In addition, he has been coordinating an effort to standardize the tie-breaking algorithm for the recently adopted Bloc Score Then Automatic Runoff (STAR) voting mechanism that will be used for SC elections starting in 2025. (Lots more information about STAR and Bloc STAR can be found at STAR Voting, which is run by the Equal Vote Coalition). Smith had suggested considering a different voting mechanism for the SC back in August; the approval-voting method that has been used up through 2024 has a number of shortcomings because voters do not get to fully specify their preferences.
It turns out that Peters had continued participating in Python in the background during his suspension. In the voting-mechanism discussion, Guido van Rossum noted that one of the voting-system experts for Python was currently suspended, but that message was hidden by Discourse for some number of hours due to being flagged as "inappropriate". It was only restored after Langa intervened, though apparently another Discourse moderator chose not to restore it because they felt that Van Rossum was not being a good role model in the post; more details are available from Peters.
After that event, Van Rossum evidently decided to educate himself on voting systems and turned to Peters for a crash course. In addition, Smith posted an approval of Bloc STAR from Peters in the thread where the vote to switch was made. All of that took place during the suspension, so it would seem that it was only Peters's ability to post to Discourse and to commit code to the Python repositories on GitHub that were actually prevented by the ban.
Once Bloc STAR had been approved, Van Rossum wanted to find a provider offering that mechanism. He noted that Python core developer Larry Hastings has a starvote package that tabulates votes, but Hastings said that he is not the right person to run a voting service. Van Rossum also found bettervoting.com, which is run by the Equal Vote Coalition; it provides an AGPLv3-licensed star-server project and a site that hosts simple elections, which might be sufficient for an SC election.
Peters was quick to endorse bettervoting.com as the most likely site for their needs. He went on to run a few test elections and engaged with Hastings and Arend Peter Castelein, who is the production lead at Equal Vote, on a standard for breaking ties in a repeatable fashion. Ties are an unlikely, but possible, outcome of STAR voting, but it is important that voters (and observers) can recreate the results from the set of anonymized ballots.
Moving forward
So Peters is back to doing the kinds of things he has always done in the Python community, which is clearly to the good, and the suspension is largely in his rear-view mirror, but the wider Python community is still completely in the dark about a lot of things. As Peters himself pointed out, though, the prolonged, likely everlasting, silence is a common institutional response to incidents of this sort. One hopes that some lessons have been learned, however, by people on all "sides" and at all levels of the power hierarchy. What seems to be lacking, however, is what the community itself should learn from this incident about CoC enforcement, procedures, and reporting, especially as it relates to core developers. Maybe that will come in time, as well.
| Index entries for this article | |
|---|---|
| Python | Community |
