rust-ipfs icon indicating copy to clipboard operation
rust-ipfs copied to clipboard

Make rust-ipfs more platform agnostic

Open dariusc93 opened this issue 2 years ago • 2 comments

From where it stands, it seems that rust-ipfs is not exactly platform agnostic in a sense where it could run on every platform without an issue (mostly around wasm). rust-libp2p is platform agnostic, although testing may need to be done around wasm, wasi, etc., but have not seen many reports of issues on those platforms while rust-ipfs, being directly tied in with tokio, which does not support wasm completely, would likely have trouble running on such platforms.

Platforms that rust-ipfs can run on:

  • [x] PC (Works on Windows, Linux, Mac. For FreeBSD, OpenBSD and NetBSD, testing coming soon)
  • [x] Android [1]
  • [ ] WASI (Not tested)
  • [x] WASM (tested, ~~bug in relay protocol, see https://github.com/libp2p/rust-libp2p/issues/5305~~)
  • [ ] iOS (Not tested)

What should be done in the future:

  • [ ] Make rust-ipfs less dependent on tokio to give the user option to choose between different libraries (eg smol, async-std, etc)
  • [x] Gate any IO operations behind features not to conflict with platforms that cannot perform direct IO (eg WASM)
  • [x] Test official protocols against WASM in rust-ipfs to determine what does and doesnt work
  • [ ] Test interop with js-ipfs and go-ipfs

Notes:

  1. ~~Under default configuration, DNS would not operate on android due to its attempt to locate /etc/resolve.conf. As a result, we have to check for the target os and use the following lines to use the default dns (which I believe would be google dns)~~
  2. We can use idb, or gluesql for the data and block store when targetting wasm to make it easier on us.
  3. We may want to utilize send_wrapper when handling any wasm32 libraries as many of them that interact with bindings will not support Send or Sync.

dariusc93 avatar Sep 25 '22 20:09 dariusc93