Seth Larson
sethmlarson.dev · Personal blog · on HN since 2019
Seth Larson, a Python security developer and urllib3 maintainer, writes about open source security, supply chains, and maintainer funding.
What HN saysHN commenters cite his posts on AI-generated slop security reports and on why deprecation warnings fail in Python libraries, finding the arguments interesting.
47HN people shared it
9linked it in comments
114stories submitted
2.2Kstory points
3 months agolast shared
2019people per year2026
Most-shared posts
- 1Deprecations via warnings don't work for Python libraries4 people · 71 points · first shared 2025 · 89 comments on HN
- 2New era of slop security reports for open source4 people · 34 points · first shared 2024 · 15 comments on HN
- 3Urllib3 is fundraising for HTTP/2 support4 people · 12 points · first shared 2024 · discussion on HN
- 4Security for package maintainers3 people · 50 points · first shared 2022 · 17 comments on HN
- 5Open source package urllib3 raised $15,000 in 20213 people · 24 points · first shared 2021 · 2 comments on HN
- 6People in your software supply chain3 people · 22 points · first shared 2022 · 4 comments on HN
- 7Hand-Drawn QR Codes3 people · 14 points · first shared 2025 · discussion on HN
- 8Help us test system trust stores in Python3 people · 9 points · first shared 2022 · discussion on HN
- 9Urllib3 v2.0.0 is now generally available3 people · 6 points · first shared 2023 · discussion on HN
- 10Add Animal Crossing events to your digital calendar3 people · 6 points · first shared 2026 · discussion on HN
- 11Scream cipher2 people · 302 points · first shared 2025 · 102 comments on HN
- 12How do I pay the publisher of a web page?2 people · 89 points · first shared 2024 · 134 comments on HN
- 13Don't bring slop to a slop fight2 people · 13 points · first shared 2025 · discussion on HN
- 14Winning a bet about "six", the Python 2 compatibility shim2 people · 9 points · first shared 2025 · 1 comments on HN
- 15The vulnerability might be in the proof-of-concept2 people · 7 points · first shared 2025 · discussion on HN
What HN people wrote when they linked it
nitwit005 · 2025-12-11
I found the referenced article linked at the top interesting: https://sethmlarson.dev/deprecations-via-warnings-dont-work-for-python…
The underlying complaint seems to be about libraries, rather than user behavior.
SethMLarson · 2025-08-19
You can disable YouTube Shorts (kinda) by disabling history: https://sethmlarson.dev/youtube-without-youtube-shorts
Nicook · 2025-06-24
Open source maintainers have been complaining about this for a while. https://sethmlarson.dev/slop-security-reports. I'm assuming the proliferation of AI will have some significant changes on/already has had for open source projects.
fargle · 2024-12-06
> "I suspect this report is (AI-generated|incorrect|spam). Please respond with more justification for this report. See: https://sethmlarson.dev/slop-security-reports"
could an AI bot be trained to recognize low-quality security reports and automatically respond as such?
at the risk of escalating the inevitable arms race, of course.
neilv · 2025-12-11
> What if we intentionally made deprecated functions return the wrong result … sometimes? Every time it intentionally returns the wrong result, it logs the deprecation warning.1
What if we found that a highway overpass construction material was suboptimal, and we want people to use superior materials, so, every now and then, we send a chunk of concrete plummeting down to the ground, to kill a motorist?
Thanks to deprecating like we mean it, they're going to replace that overpass sooner than they would otherwise. You'll thank me later.
From the https://sethmlarson.dev/deprecations-via-warnings-dont-work-for-python… that the post opens with:
> This API was emitting warnings for over 3 years in a top-3 Python package by downloads urging libraries and users to stop using the API and that was not enough. We still received feedback from users that this removal was unexpected and was breaking dependent libraries.
Entirely predictable.
Even many of those who saw the deprecation logging, and bothered to make a conscious decision, didn't think you'd actually break the API.
> We ended up adding the APIs back and creating a hurried release to fix the issue.
Entirely predictable.
Save yourself some anguish, and don't break API unnecessarily. Treat it like a guarantee, as much as possible.
If it's a real problem for ongoing development, consider using SemVer and multiple versions, like the linked article suggests. (With the deprecated branch getting minimal…
zahlman · 2025-10-03
No, changing this breaks the world. A huge fraction of PyPI becomes completely invalid overnight, and the rest fails the expected version checks. Not to mention that the language is fundamentally designed around the expectation that modules are singleton. I've written about this at length before but I can't easily find it right now (I have way too many bookmarks and not nearly enough idea how to organize them).
Yes, you absolutely can create a language that has syntax otherwise identical to Python (or at least damn close) which implements a feature like this. No, you cannot just replace Python with it. If the Python ecosystem just accepted that clearly better things were clearly better, and started using them promptly, we wouldn't have https://pypi.org/project/six/ making it onto https://pypistats.org/top (see also https://sethmlarson.dev/winning-a-bet-about-six-the-python-2-compatibi…
codingglass · 2024-01-31
This a a great example of good work getting 'upstreamed.' The go-to solution for using requests and urllib3 in the browser had been Koen Vossen's 'pyodide-http' package, which you'd install in PyScript/Pyodide and then call 'pyodide_http.patch_all()`. It monkey-patched requests and urllib3 to use the browser API's. [1]
Then 'pyodide-http' got adopted into the Pyodide-included packages[2], so you didn't have to specify it for install, just import it and run patch_all().
And now a similar technique has been incorporated directly into urllib3. (Not a direct port - as far as I know Joe Marshall and others did a full reimplementation so that urllib3's API's would be maintained as much as possible). [2]
Very cool.
Edit: Looks like there's a note to this same effect on Seth Larson's post about urllib3's future. [3]
[1] https://github.com/koenvo/pyodide-http
[2] https://pyodide.org/en/stable/usage/packages-in-pyodide.html
[3] https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support#suppo…
tenacious_tuna · 2022-02-01
I'm a bit surprised at the vitriol here for even just type hints, much less even static typing. I'll admit that static typing is probably more pain than most python devs are willing to pay, but I will die on the hill of type hints being an essential contribution to the language that vastly improves its capabilities.
But don't take it from me, take it from the people who wrote urllib3 [1], who insist that typing is even more powerful than unit tests--and they're the developers of a wildly popular library. "People are making it harder to develop without [type hints]" you say, completely ignoring the productivity boon that the type hints have provided to many other people. (I'm also not clear on how the existence of type hints makes it harder to develop without them.)
In my personal experience, adding type hints and enforcement to our code has eliminated entire classes of runtime errors, and I find that developing with them makes my life significantly easier. I'll admit some of that may be because dev tools are leaning on the hints, but I ask what's the alternative? You can't static-analysis your way to a definitive type in a dynamic language.
I'll try to respond point by point:
> I don't want ugly rust-like typing. [...] It looks horrible in Python.
You don't want a feature because... it looks bad? I could understand if it's "confusing" or "unclear syntax" or "makes it harder to read", but just "ugly" I have trouble both believing and understanding.
> 2. Requires…
westurner · 2022-10-24
WebAuthN: https://en.wikipedia.org/wiki/WebAuthn
FIDO2: https://en.wikipedia.org/wiki/FIDO2_Project
Arch/WebAuthN:
https://wiki.archlinux.org/title/WebAuthn
U2F/FIDO2:
https://wiki.archlinux.org/title/Universal_2nd_Factor
TPM: https://wiki.archlinux.org/title/Trusted_Platform_Module#Other_good_ex…
Seahorse: https://en.wikipedia.org/wiki/Seahorse_(software)
GNOME Keyring: https://en.wikipedia.org/wiki/GNOME_Keyring
tpmfido: https://github.com/psanford/tpm-fido
"PEP 543 – A Unified TLS API for Python" (withdrawn*) https://peps.python.org/pep-0543/#interfaces
> Specifying which trust database should be used to validate certificates presented by a remote peer.
certifi-system-store https://github.com/tiran/certifi-system-store/blob/main/src/certifi/co…
truststore/_openssl.py:
https://github.com/sethmlarson/truststore/blob/main/src/truststore/_op…
"Help us test system trust stores in Python" (2022)
https://sethmlarson.dev/blog/help-test-system-trust-stores-in-python :
python -m pip install \
--use-feature=truststore Flask