The Big Leap and the Step Back
In the last part we saw Python become a community's project through written rules and an independent foundation. But growth brings debt too. Small decisions that made sense in the 1990s became stones in the road over the years. This part is the story of two hard decisions: breaking the past to build the future, and the creator stepping back from decision-making.
Breaking the past on purpose
Python's official page on sunsetting Python 2 says: "We realized a few years later that we needed to make big changes to improve Python. So in 2006, we started Python 3.0."
Python 3.0 was released on 3 December 2008 and, according to its release page, was deliberately incompatible with the 2.x line. The language was mostly the same, but many details, especially how strings and dictionaries work, changed considerably, and long-deprecated features were removed. To help the move, a tool for automatically converting old code shipped with it.
A twelve-year transition
The problem was that millions of lines of code had been written in Python 2. The same official page says: "Many people did not upgrade, and we did not want to hurt them." So the maintainers kept both versions going for years.
In 2008 they announced that Python 2 would be sunset in 2015. Some upgraded, many did not; so in 2014 the deadline was extended to 2020. Finally, 1 January 2020 was declared the sunset date, and the last release, 2.7.18, bundling only the remaining fixes, came out in April 2020.
"A permanent vacation"
In the middle of those years something else happened. In July 2018, after a very heated debate over one enhancement proposal, van Rossum sent a short message titled "Transfer of power" to the Python core developers' mailing list.
He wrote that he didn't "ever want to have to fight so hard for a PEP and find that so many people despise my decisions". He was giving himself "a permanent vacation from being BDFL", and then the line that surprised everyone: "I am not going to appoint a successor." He left the future to the community itself, asking: would they create a democracy? A federation? He ended: "I'm tired, and need a very long break."
A community that decided for itself
The core developers wrote governance proposals and debated them. The result was a five-member Steering Council. According to the official document for the first election, nominations ran from 7 to 20 January 2019 and voting until 4 February. Of 96 eligible voters, 69 cast ballots.
Five were elected: Barry Warsaw, Brett Cannon, Carol Willing, Alyssa (Nick) Coghlan and Guido van Rossum himself, who, remarkably, received the most votes, 45. The creator who had stepped back returned, this time not as a ruler but as one elected member.
The turning point
The turning point of this story was the project separating from the person. Python showed that a big project becomes truly sustainable when it can carry on without one person's decisions.
Lesson for businesses
First, sometimes old debts must be paid, even when it hurts; but give customers a migration path and enough time, and announce deadlines clearly.
Second, an organisation that depends on one person is fragile. Build shared decision-making before you are forced to.
Third, leader burnout is real. Share the hard work among several people so no one carries everything alone.
End of series. From a Christmas holiday project to a language run by community vote: Python's story shows that good code is only the start, and clear rules and handing decisions to the community are what make it last.
Sources
"Sunsetting Python 2", Python.org, n.d. — https://www.python.org/doc/sunset-python-2/
"Python 3.0 Release", Python.org, 2008-12-03 — https://www.python.org/download/releases/3.0/
Guido van Rossum, "Transfer of power", python-committers mailing list, 2018-07-12 — https://mail.python.org/pipermail/python-committers/2018-July/005664.html
"PEP 8100 – January 2019 Steering Council election", peps.python.org — https://peps.python.org/pep-8100/
"PEP 13 – Python Language Governance", peps.python.org — https://peps.python.org/pep-0013/