// the find
apache/opendal
Apache OpenDAL: One Layer, All Storage.
Apache OpenDAL is a Rust library that gives you one `Operator` abstraction over essentially every storage backend you'd encounter — S3, GCS, Azure Blob, local filesystem, Redis, Postgres, HDFS, Dropbox, and around 60 others. It's Apache-incubated, actively maintained, and ships bindings for 15+ languages on top of the Rust core. If you're building something that needs to be storage-agnostic, or you're tired of writing per-backend glue code, this is the serious option.
The layer system is the genuinely clever part — retry, timeout, tracing, metrics, throttle, and concurrency limits are all composable middleware that work identically across every backend, so you're not reimplementing that for each service. The backend coverage is unusually wide and actually tested: the CI matrix runs behavioral tests against real services (MinIO, etcd, Redis cluster with TLS, multiple HDFS configs), not just mocks. The 'capability' system lets backends advertise what they actually support so callers don't hit surprises at runtime. Having a proper Apache project with a threat model document and a security disclosure process is a meaningful signal for production use.
The non-Rust bindings are FFI wrappers over the Rust core, which means debugging a Python or .NET issue often requires reading Rust — the abstraction leaks when things go wrong. Several backends are listed but have `disable_action.yml` in CI, meaning they're not actively tested (Dropbox, FTP, R2, TiKV, Ceph RADOS) — use those in production and you're on your own. The unified `Operator` API necessarily targets the lowest common denominator, so backend-specific features (S3 multipart upload lifecycle, GCS object versioning settings, Redis pipelining) are either hidden or awkward to reach. Version numbers between the Rust core and each language binding are independent and not synchronized, which makes compatibility tracking across a polyglot project genuinely annoying.