JMLX42 opened a new issue, #7004: URL: https://github.com/apache/opendal/issues/7004
### Summary Add a new OpenDAL backend that leverages the [`wasi:filesystem`](https://github.com/WebAssembly/wasi-filesystem) interface for file operations. This enables OpenDAL to access the host filesystem when running as a WebAssembly component, with the host runtime (e.g., wasmtime, wasmer) providing the actual filesystem implementation. ### Motivation Currently, the `services-fs` backend cannot compile to `wasm32-wasip2` because it depends on tokio's filesystem features, which are not supported on WASM targets. However, WASM components can access the host filesystem through the standardized `wasi:filesystem` interface. A `wasi-fs` backend would: 1. **Enable filesystem access in WASM components** — Components could read/write files preopened by the host runtime 2. **Complement existing backends** — `memory` and `s3` work on WASM, but there's no local filesystem option 3. **Leverage existing WASI ecosystem** — Runtimes like wasmtime already implement `wasi:filesystem` ### Proposed Implementation A new `services-wasi-fs` feature/backend that: - **Imports** `wasi:filesystem/types` and `wasi:filesystem/preopens` interfaces - **Uses** `wasi:io/streams` for read/write operations - **Works with** preopened directories provided by the host - **Compiles to** `wasm32-wasip2` target only (or conditional compilation) ### Use Case We're building WASM components that expose storage capabilities. We want to: 1. Create an OpenDAL-based storage component 2. Export `wasi:filesystem` interface for downstream consumers 3. Support multiple backends (memory, S3, **and host filesystem**) Without a `wasi-fs` backend, components cannot access files that the host runtime preopens for them. ### Research Notes | Backend | WASM-compatible | Notes | |---------|-----------------|-------| | `services-memory` | ✅ | Works out of the box | | `services-s3` | ✅ | Works with reqwest/reqsign | | `services-fs` | ❌ | Requires tokio fs (not WASM-compatible) | | `services-wasi-fs` | 🆕 | **Proposed** — uses `wasi:filesystem` imports | ### Related - WASI filesystem spec: https://github.com/WebAssembly/wasi-filesystem - Preview 2 (Component Model): https://github.com/WebAssembly/WASI/blob/main/preview2/README.md -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
