httpx2 swap breaks Anthropic and OpenAI SDK tracers, SELF hides ELF in SQLite
Every URL the pipeline pulled into ranking for this issue — primary sources plus the supporting and contradicting findings each Researcher returned. Inline citations in the issue point back here.
Sources
Your executable is a SQLite database simonwillison.net
Your executable is a SQLite database Farid Zakaria describes a neat Linux pattern for creating a SQLite database file that can be directly used as an executable binary. The trick sets the SQLite file format’s 4-byte application ID (68 bytes into the file) to SELF, standing for Structured Executable & Linkable Format. The various components of the ELF executable format are then arranged into a number of different SQLite tables, using this schema . Their self-exec interpreter ( C code here ) can…
llm-anthropic 0.27 simonwillison.net
Release: llm-anthropic 0.27 This release of the Anthropic plugin for LLM mainly provides compatibility with the recently released anthropic v1.0.0 Python library, which switches from httpx to httpx2 . OpenAI made the same change in their v3.0.0 release two weeks ago. Anthropic provide this migration guide for upgrading to 1.0, so I prompted Fable 5 in Claude Code with: Upgrade to anthropic>=1 - read https://raw.githubusercontent.com/anthropics/anthropic-sdk-python/refs/heads/main/MIGRATION.md a…
References
Pydantic httpx2 migration docs pydantic.dev
httpx2 defaults to using the operating system’s trust store via truststore instead of the certifi bundle… Support for Python 3.9 was dropped, requiring Python 3.10+… httpx2.Response is type-incompatible with the original httpx.Response, making isinstance checks fail across library boundaries.
ecorpit.com — Anthropic SDK v1 breaking changes writeup ecorpit.com
Anthropic has significantly ‘cleaned’ the SDK surface by removing sampling parameters—temperature, top_p, and top_k—from core methods like messages.create()… newer generations, such as Claude Fable 5, return a 400 error for non-default sampling values.
Simon Willison (Aug 2025) — earlier warning on httpx split simonwillison.net
Splitting the library into two distinct packages (httpx vs httpx2) exacerbates Python’s inability to install multiple versions of the same dependency, leading to a ‘miserable’ transition period similar to the Pydantic V1-to-V2 leap.
manueltgomes.com — httpx2 ecosystem impact manueltgomes.com
A major conflict occurred when the Anthropic Python SDK v1.0 migrated to httpx2, causing immediate runtime crashes for users of Pydantic AI (v2.32 and earlier) who had not yet updated to support the new client.
Anthropic release notes / migration guide (claude.com) platform.claude.com
The SDK documentation prescribes calling httpx2.alias_httpx() at startup… however, this workaround may not satisfy all tracing tools, leading to cases where outbound calls ‘quietly stop’ appearing in observability dashboards without raising errors.
securityarsenal.com — LLM 0.33 dependency-churn security review securityarsenal.com
Security researchers noted that such ‘rapid dependency churn’ is a significant change-control trigger, as dependency swaps are a common vector for supply-chain attacks.
Farid Zakaria — ‘Your executable is a SQLite database’ (author blog) fzakaria.com
Two processes running the same SELF binary do not share text pages the way a normally-mmap’d ELF does, because the bytes are copied out of the b-tree rather than mapped.
Tildes.net discussion (~comp) tildes.net
SELF binaries copy data out of the SQLite B-tree into memory… system monitors like ps and top mistakenly display the interpreter (self-exec) as the running process rather than the application itself.
fzakaria/selfdb GitHub — benchmarks github.com
Packing an entire Linux userland (723 executables and 400 libraries) into one database reduced total size from 644.4 MiB to 611.9 MiB due to natural deduplication of symbols and strings; a stripped single SELF is within 1% of the original ELF (1.79 MB vs 1.76 MB).
selfdb README — tooling as SQL github.com
ldd is a view that joins the symbols table with segments to find required shared libraries, while strip is implemented as a simple DELETE transaction followed by a VACUUM; a proof-of-concept dynamic linker self-ld performs symbol resolution and relocation patching entirely through SQL queries.
LWN — kernel developer commentary on binfmt_misc lwn.net
Manipulating kernel paths to facilitate custom loaders is ‘ripe for malicious loader injection attacks.’