Usually they are reasonably general purpose, but somewhat less so than the top-level crate. Sometimes sub-crates are interface-only (as a lightweight alternative if you want to bring your own implementation), or a sub-crate may expose a lower-level API that works without the std library.