Year 1: A small but vocal subset of the Python/Django community pops up in every thread: "It's not actually a problem." or "It's not an issue that my project would ever encounter so limited resources shouldn't be expended on it."
Year 2: People are choosing other solutions because Python/Django isn't addressing the problem.
Year 3: We'll form a committee. The committee doesn't think it's a problem.
Year 4: The community has a problem. Fine. Why doesn't the community write a Python Enhancement Proposal/Django Enhancement Proposal (PEP/DEP)?
Years 5-10: PEP/DEP ignored.
Year 11: The community has a problem. PEP/DEP implemented and released.
Year 12-22: Major packages refuse to support the change.
Year 23: Last version not supporting the change deprecated.
Year 23+1 day: Fork of last deprecated version Python not supporting change created and released.
I have 15 years of code in Python still running but spend a little more than 50% of my time in other stacks. I don't notice as many people arguing against basic features, like a REST API package in Django, in non-Python/Django communities. The precursor to a Django REST API package, content negotiation, has been a draft DEP since early 2014 (https://github.com/django/deps/blob/main/draft/content-negot...). That's going on 12 years of stalled progress for a feature that needed to be released in 2010.
With Python/Django you learn not to wait because nothing is going to change.
And yes, Python/Django are open source. And yes agin, I donate over $1,000/year to support F/OSS projects that I depend on.
My uninformed impression of the Python steering committee has always been like the C/C++ one. Ponderously bureaucratic, trying to find solutions that work for every competing interest, by the time they get to an agreement the real world has already moved on and solved things in their own way, which makes fragmentation and intercompatibility worse.
I know that Guido isn’t around any more, but this is what a BDFL is useful for. To have the final say when, inevitably, the squabbling parties are unable to find a compromise.
It's not a rant. It's a man with several burned fingers and a drifter beard muttering warnings from a corner.
How was the Python 2 to Python 3 migration for you? How many Python libraries are you responsible for packaging? Has that been fun for the past 15-20 years? How heavily do you rely on async?
Almost a decade for Django+major libraries to support Python 3. More than a decade for Django async support. I'm not ungrateful. And, I wish that I believed that throwing money at the problem would solve it.
Python has a large and diverse user base. That brings unique challenges that I don't see in other stacks.
Around 2018 I was struggling with Python builds and worked out most of the theory for something like uv, except I was going to write it in Python which introduced a terrible bootstrapping problem because if some Python dev corrupts the environment that it depends on then it is game over.
It was really clear to me at that time that the resolution algorithm used by pip wasn't sound and that it worked most of the time if your systems were simple but if you added enough stuff the failure rate of your build would start creeping up.
When I started talking to people on forums I found there was little awareness that pip was broken or that it was worth doing anything about, so because of that disinterest I decided not to do anything.
As I've mentioned to you before, it isn't difficult for the tool to exist in its own environment and install cross-environment. I have proof of concept for this and my own tool will work this way, compatible back to 3.6 (pathlib and f-strings are just too nice to avoid, and then there's the SSL support issue) and using things that have existed even longer.
Pip did fundamentally change its resolution algorithm in IIRC 2020 but yes it was bad before that. This is the hard part (I've been looking around for libraries that aren't as arcane as the `resolvelib` that was extracted from pip's internal logic) so the first announced release of PAPER will be focused on the other stuff.
I had a sense back then that pip was not great, but I had very little idea of what was wrong with it or why. My ire was more focused on Setuptools because of bootstrapping problems with setup.py and the general idea of using arbitrary code for building even just to specify metadata. So I largely ignored pip, and I regret that. What I'm making now I could have done years ago with that knowledge. (And even then I'm struggling just to make myself put in the work, since everyone will just use uv anyway.)
It’s not difficult in theory to have a clean Python somewhere but when I was trying to get some data scientists to do the right thing I found they had an uncanny ability to screw things up. Same for ordinary devs, if you have a clean environment somewhere some of them will find it, activate it and pip install into it or mess with the files or mess with the environment variables, etc. That job taught me to be incredibly [1] paranoid.
Poetry would try to run out of a clean Python but I found my poetry environment would get somehow corrupted every few weeks back when I used Poetry.
In contrast if you want to mess up uv it is just one file and a frickin’ binary, patching it purposely would be a challenge, messing with the source means installing a rust toolchain, maybe if you worked that hard to screw it up you know what you’re doing.
Maybe we are all just ranting into the void when posting on HN. Are you ranting into the void as well? Where should we demark this classification's borders.
I felt the post you replied to was valuable, as it provided a general (but not grounded strictly in the facts of a specific example) outline of how these work.
I will corroborate the details. I learned Django 15 years ago, still use it, and use about 30% of its functionality. I don't think I do anything with it now I couldn't have in the earlier versions.
Year -1: The community has a problem.
Year 0: Proposal to fix the problem.
Year 1: A small but vocal subset of the Python/Django community pops up in every thread: "It's not actually a problem." or "It's not an issue that my project would ever encounter so limited resources shouldn't be expended on it."
Year 2: People are choosing other solutions because Python/Django isn't addressing the problem.
Year 3: We'll form a committee. The committee doesn't think it's a problem.
Year 4: The community has a problem. Fine. Why doesn't the community write a Python Enhancement Proposal/Django Enhancement Proposal (PEP/DEP)?
Years 5-10: PEP/DEP ignored.
Year 11: The community has a problem. PEP/DEP implemented and released.
Year 12-22: Major packages refuse to support the change.
Year 23: Last version not supporting the change deprecated.
Year 23+1 day: Fork of last deprecated version Python not supporting change created and released.
I have 15 years of code in Python still running but spend a little more than 50% of my time in other stacks. I don't notice as many people arguing against basic features, like a REST API package in Django, in non-Python/Django communities. The precursor to a Django REST API package, content negotiation, has been a draft DEP since early 2014 (https://github.com/django/deps/blob/main/draft/content-negot...). That's going on 12 years of stalled progress for a feature that needed to be released in 2010.
With Python/Django you learn not to wait because nothing is going to change.
And yes, Python/Django are open source. And yes agin, I donate over $1,000/year to support F/OSS projects that I depend on.