Hi there! Answers below
There is a “private swarm” feature which has been stable for quite some time, but is not yet “official” due to lack of docs and reports from beta testers. It would be great if you can give it a try and perhaps even contribute to the main docs. This is the core issue tracking this feature: https://github.com/ipfs/go-ipfs/issues/7086 And here is a unofficial draft of how to get things going: https://github.com/ahester57/ipfs-private-swarm#readme
The design of IPFS is different from something like I2P, by it being a strictly pull-based system, as opposed to a push-based one. That is - content never finds its way to your node on its own. The only way for you to begin storing/providing content is to:
- Add some content to your node (
ipfs add ... )
- Request some content from the network in order to view it. Once you’ve done so, and your node has downloaded the underlying blocks from the network, your node will start responding to DHT queries “yes, I have this content too”. It will keep responding so until your cache is garbage collected.
If you want to become a re-provider for someone elses content indefinitely - you have to actively “pin” it on your node, so that garbage collection never touches it.
The gateway is a node like any other, just with beefier hardware. It periodically runs garbage collection on its own cache, evicting everything folks may have browsed previously ( thus inserting it in the gateway block store )
If you need to persist content on the network while your node is offline: you need to use a 3rd party pinning service (search through the forum for more on this)
There is no functional diffrence: they are maximally-compatible implementations catering to different dev styles/teams.