Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal: Symbiosis Protocol #18

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Conversation

Gozala
Copy link

@Gozala Gozala commented Feb 17, 2021

proposals/Symbiosis Protocol.md Outdated Show resolved Hide resolved
proposals/Symbiosis Protocol.md Show resolved Hide resolved
proposals/Symbiosis Protocol.md Outdated Show resolved Hide resolved
_What specific deliverables should completed to consider this project done?_

- Have at least one collab adopt symbiosis protocol.
- IPFS Desktop providing services that enhances in-browser node capabilities.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this possible?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, if implemented. But question suggest maybe we need to elaborate more on this ?

Comment on lines +325 to +331
## Symbiosys protocol

> Protocol draws it's inspired from [DNS Service Discovery (DNS-SD)][DNS-SD] a [zero-configuration networking][] technique.

Wire protocol that is agnostic of transport and representation (message encoding) _(This makes it a good fit for cross thread communication and a cross network interface)_.

At the high level protocol allows IPFS nodes to announce services they can provide to other nodes on the network, which can be requested by connected nodes to overcome their limitations.
Copy link
Member

@lidel lidel Feb 18, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel the "Limited Relay" concept from @aarshkshah1992's Project Flare proposal (#23) could fit here.
Worth mentioning it as potential use case.

@alanshaw alanshaw changed the title Symbiosis protocol pitch Proposal: Symbiosis Protocol Feb 22, 2021
@mikeal mikeal added ease:low Ease rating is 5 or below. impact:high Impact rating is 6 or above. labels Mar 24, 2021
@mikeal
Copy link
Contributor

mikeal commented Mar 24, 2021

The proposal looks good but I question the confidence. Once we start implementing this I’d expect to surface many unknown unknowns.

Copy link
Member

@Stebalien Stebalien left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is going to need a lot of careful design work, but I think this is a great idea. Really, I think this is critical for PMF because:

  1. It allows users to extend IPFS without having to fork it.
  2. It allows users to use IPFS within their application without having to bundle it.


## Services

Protocol does not prescribe specific set of services with an assumbtion that they could be developed as needed. That said below are couple of examples:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: Just be careful to not fall into the "permissions" trap like Android did. There are two reasons to limit access:

  1. Resource Limitations: Denial of service/abuse.
  2. Information Security: data security, privacy, etc.

Course-grained "services" work great for enforcing resource limitations (i.e., I might want to route requests for some nodes, but only act as a bitswap "friend" for others). However, they don't work well for enforcing information security.

E.g.:

  1. If a parasite (?) wants to listen on a libp2p protocol, it should get its own (delegated) peer ID.
  2. if a parasite wants to pin something, those pins should be scoped to the parasite and not be global.


Protocol defines:

1. Interface enabling host node to announce services it can provide / lease.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would love to see this as a libp2p protocol.

- Local area network access
- Remote pinning
- Content routing
- Content caching
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, bitswap "friends" and/or graphsync relay.


Protocol does not prescribe specific set of services with an assumbtion that they could be developed as needed. That said below are couple of examples:

- Enhanced dialability (tunneled through the host)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can also leverage the host to offload encryption (when trusted).

Copy link
Contributor

@vasco-santos vasco-santos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This proposal is really interesting and I think it might make sense to a lot of use cases, and also to solve some of the pain points of our stack.

This will be a massive project full of uncertainty. Perhaps, the plan of action should be decoupled in smaller end to end projects for experimentation, like the delegate protocol on libp2p.

- Neither embedded IPFS node nor IPFS client provide an adequate solution for building products in constrained environments.
- OS level node sharing with existing building blocks is impractial.
- Lack of generalized delegation protocol between nodes leads ad-hock stop-gap solutions.
- Teams are unable to plug domain specific extensions without having to fork our stack.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What type of domain specific extensions we are describing here? Dapp developers should create libp2p protocols

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are bunch cases where domain specific replication strategy would be far more effective than bitswap is. In fact IPLD selectors is one example where that could be expressed a service. Another one I was thinking is textile threads, where communicating the a head you've seen is enough for other participants to know all the blocks they need to send you.

I think libp2p protocols are indeed relevant here. I think of this as a bit more higher level equivalent and designed with asymmetry in mind.

-->

- Large
- Uncertainty on discovery implementation until several services are implemented.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We will probably need to rely on manual configuration first, even though we can add some defaults like trying default IPFS Desktop address port pair

@BigLep
Copy link
Contributor

BigLep commented May 26, 2021

Assigning to grants since it won't get worked on in the short term with current program structure. @mikeal is going to evaluate grant possibility.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ease:low Ease rating is 5 or below. impact:high Impact rating is 6 or above.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants