In my view, a bit more hierarchy here would aid understanding of the concepts. It confuses me why we need `Provider` and `FileSystem`. A `Provider` could know how to `CRUD` its buckets and their files. Then for different backends, simply a different provider would be implemented.