No LLMs were involved in the process of writing this blog post.
Stunted Ecosystem Development#
The Rust ecosystem has a fundamental problem with how it’s developing.
Foundational crates such as serde define foundational traits such as Serialize , and then every crate in the ecosystem needs to implement the Serialize traits for their own types. If a crate doesn’t implement serde ’s traits for its types then those types can’t be used with serde as downstream crates cannot implement serde ’s traits for another crate’s types.
Worse yet, if someone publishes an alternative to serde (say, nextserde ) then all crates which have added support for serde also need to add support for nextserde . Adding support for every new serialization library in existence is unrealistic and a lot of work for crate authors.
As a user of these crates if you want to use a new serialization library you’re forced to fork all of these crates and patch them with support for nextserde . This makes it significantly harder for alternatives to foundational crates such as serde to be made and propagate throughout the ecosystem.
There are strong incentives for old crates that “got there first” to stick around in the ecosystem regardless of whether better alternatives exist or not just because its artifically difficult to replace them.
This is not the fault of any library or people writing Rust code. Instead, this problem is forced onto the ecosystem by the language itself through coherence and the orphan rules.
See also Niko’s explanation of how coherence harms the rust ecosystem in Coherence and crate-level where clauses - nikomatsakis.
Coherence and the Orphan Rules#
... continue reading