Building internet applications often involves writing code that is tightly integrated with the choice of communications transport, for example, one has to make the design decision to use either WebSockets or WebRTC, and then all other design decisions are driven by that.
Bifrost aims to allow developing applications without knowing or caring which protocols are used under the hood. The app can just say "Open a stream with peer X" and whatever configured transport(s) make that happen.
I'm still working to improve the docs and new user experience, if you have any suggestions on how I can make it easier to understand, I'd greatly appreciate it!
Do you have some examples of _concrete problems_ that would be easily solved with this? If so, mention them.
Telling folks about technical aspects doesn’t help advertise your work unless you can help a new reader relate it with their own experiences or problems.
Does it include discovering peers on a local network or around you?
Do it handle signaling?
local_app_1--->Bifrost Client1-->Bifrost Daemon0-->OS0-->//network//->> same in reversed order
local_app_2--->Bifrost Client2-->Bifrost Daemon0-->OS0-->//network//->> same in reversed order
instead of:
local_app_1--->OS0-->VPN0-->//network//->> same in reversed order
local_app_2--->OS0-->VPN0-->//network//->> same in reversed order
That is, each application has its own client tunneling to a common daemon which then tunnels using the usual network stack to a similar arrangement on the remote machine.
At a glance, it looks pretty much like libp2p (https://libp2p.io/) but seems to integrate with libp2p as well (meaning you should be able to use Bifrost on one end, and libp2p on the other), so I'm guessing there is at least some fundamental difference, but I cannot spot it. Seems to use slightly different terminology compared to libp2p.
Why is this needed, who is this for (target audience), why did you build it, which gap is it closing, which problems does it solve in a homelab, or startup, or enterprise, i.e. "what's in it for me", how is it different than alternatives?
Bifrost seems to be a great contender. Client code looks a bit convoluted, but that probably can be improved over time. Will keep an eye on this!
One of the examples seems relatively easy to grasp if you're a web developer, about how to do HTTP forwarding: https://github.com/aperturerobotics/bifrost/blob/master/exam...
Like my ideal readme is:
- 1 screenshot, even if it's a CLI app or web server or something
- 2 sentence elevator pitch
- pip install / cargo install line
- Command line examples
I doubt this engine makes this guarantee, since it supports TCP.
Besides quantum entanglement I mean.
Obviously you're limited by PCI-Express bandwidth then Ethernet bandwidth. There is also a bit of jitter tied to the underlying protocols but those delays aren't really significant for most applications.
Meanwhile, TCP can queue data indefinitely, based on how the other end is sending acks and the size of the window.
Where do you draw the line? At one point, you have to accept that some projects require deep and context-specific knowledge. I can't be expected to be handheld if I dive deep into some math libraries without knowing the prerequisites. And if I do anyway, it's up to me to figure out at least the basics on my own.
The README has the examples and explanations you're looking for, they're just using the language common in the peer-to-peer ecosystem, as it's a peer-to-peer library/cli/daemon.
Peer discovery is not implemented at the moment but could easily be added (and will be soon). Here's how: any controller can resolve EstablishLinkWithPeer. A peer discovery controller could compare the list of discovered peers with the list of desired connections and initiate connections via UDP when there's a match.
Signaling is managed by the Link implementation. For UDP we use quic-go.
You fire it up, it scans things around. Local network? It uses that. Not local but internet, it uses that. Nothing but BT, you can still detect people around, chat and exchange files.
People could be identified by public keys and that's it, not need for an account, signaling done by zeroconf/bt-scanning/bittorent.
Basically a solution to the current chat nightmare.
But the amount of work is overwhelming, even with this.
What a strange thing to require. It comes off a bit like X-Y. You seek high performance. But you state it as wanting zero copy networking. There’s a lot more to performance across the overall system than that.
Edit: Ah looks like this company is no longer active unfortunately. On the plus side now the name Bifrost is available!