[braindump] How to improve the mounting of go-ipfs as a regular filesystem #448
Description
Hi,
Just the other day i had a very interesting discussion with @Jorropo and @RubenKelevra on discord about improving mounting of IPFS folders on your system natively.
This is a large braindump-like post. Any feedback you can provide is very much appreciated!
We, in the discussion, all have our own very different reasons for wanting this so i hope i'm writing this down in the most appropiate and complete way. If not, please feel free to tell me what i should add.
The current limitations
- The mounting is very limited in terms of metadata properties (UnixFS v1.5 is supposedly fixing this?)
- If you have, in your own network, a server that runs IPFS, you cannot easily mount IPFS folders from there on another PC
- If you want a "cloud drive" on IPFS, say akin to OneDrive/Dropbox/..., then you currently need to have all your data publicly and unencrypted to even remotely make it possible.
- (yes this was a reason) You cannot boot from IPFS
- File permissions
Wishes
These are just the ideas we had. There likely is a whole lot more.
- Mount IPFS folder over network
- Make it possible to boot from IPFS
- Have file encryption support, making a dropbox like service with private data possible
- Saturate network card speed for local network traffic. If you have a 1Gbit network and your IPFS node has the data you want locally (on it's host storage) then the network speed should be 1Gbit or close to the theoretical limit. Protocols like SMB and NFS struggle with this too.
- Allow to browse NFS files on the web too, again like dropbox. This means securing your files (aka, encryption). The best example for this in the IPFS world is probably Peergos
There are much more limitations and wishes when you keep brainstorming about this. Those are about the most prominent ones we discussed.
So, let's solve these! :) I'm going to ignore UnixFS v1.5 for the rest of this post as i'm assuming that to be in place for any of the future solutions.
Potential solutions
Disclaimer: there is no easy solution. Anything you can imagine is at the very best a huge task and at the very worst a monstrous task.
NFS server
A potential solution to this would be to write an NFS server application that can expose IPFS data via NFS. Internally the verver would use the IPFS API to get all the data it needs.
Pros
- Make use of NFS clients (any) to mount IPFS shares hosted by an NFS server.
- Allows you to boot from IPFS
- Wide support (windows, mac, linux and even android)
- Lots of server applications out there to take inspiration from
Cons
- A very old protocol with a lot of legacy
- Tremendously huge to implement
- Difficult to get performant (in terms of network throughput)
- Lacks encryption though NFS over TLS is possible.
Personally, i like the concept of NFS but not the complexity. It has grown over the decades and isn't of this time anymore. Perhaps it's time for something new?
Invent a new network protocol
In other projects this would sound insane. In IPFS, where the whole protocol is reinvented, this doesn't sound so strange to me. This definitely is a huge task on it's own but it does allow to make something extensible and for today's desires. The following is again a braidump list of concepts it should support, it's far from anywhere near complete. I'm not daring to write a list of features for this as it would only be sorely incomplete.
How to proceed from here on forth?
What i would really like to do is have a braindump session somewhere with the people involved in this. Just brainstorm a little about the features we want to have an how we can get there. So if you are interested, let it be known in the comments and if you're willing to attend! For example, this could tie in very nicely with this 2021 theme proposal from @obo20.
From there one, once we have a global idea of what we want, it's much easier to see if someone can make a proof of concept from something. Right now it's so broad and so vague that it's difficult to start anywhere at all.
So i'm just tagging the people here that could be interested. Please add more in comments if you think someone else should be aware of it.
@lidel @Stebalien @aschmahmann @autonome @momack2
Let's get this ball rolling, get some clarity on where we want to go and perhaps make some proof of concepts :)
Cheers,
Mark