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

Blog post on implementations and principles #550

Merged
merged 10 commits into from
Mar 31, 2023
Merged

Conversation

darobin
Copy link
Contributor

@darobin darobin commented Mar 29, 2023

No description provided.

Copy link
Contributor

@BigLep BigLep left a comment

Choose a reason for hiding this comment

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

Awesome work @darobin and team!

It would be ideal to see a preview link. https://bafybeierff7qj3s3ur2eqtpitprn5zkx5cib3jivs6qpec5g3cphpyexfu.on.fleek.co/2023-ipfs-thing-content-tracks/2023-03-implementation-principles/ didn't work for example and the thumbnail isn't showing up on the blog landing page. Maybe because the date is in the future?

During 2023-03-23 discussion, there was talk of a diagram showing the components that can make up an IPFS implementations and that there's lots of options. I know I haven't helped drive that. I assume it's deliberate not to include (where deliberate may be "not enough time")

Again - good stuff - thanks a lot.

src/_blog/2023-03-implementations-principles.md Outdated Show resolved Hide resolved
src/_blog/2023-03-implementations-principles.md Outdated Show resolved Hide resolved
src/_blog/2023-03-implementations-principles.md Outdated Show resolved Hide resolved
@darobin
Copy link
Contributor Author

darobin commented Mar 30, 2023

Thank you @BigLep!

I added a ToC, good idea.

During 2023-03-23 discussion, there was talk of a diagram showing the components that can make up an IPFS implementations and that there's lots of options. I know I haven't helped drive that. I assume it's deliberate not to include (where deliberate may be "not enough time")

Yes — "not enough time" is a big part of it, also diagrams are not my strength. I played around with some which you can see at the bottom of the draft but they're not good and don't match what I think the intent was. The goal here is to ship (what I hope is) "good enough" for Thing, and then iterate on the Principles doc as much as we need to (and if we make big changes, we can blog about them too).

@BigLep
Copy link
Contributor

BigLep commented Mar 30, 2023

Ack - thanks @darobin . I think it would be good to check the final rendering before we publish. I'm not seeing it under https://bafybeihjbirldotramezb3shzyf4lzwdw6ca2kgxaa6p37e2clac6x52la.on.fleek.co/

@darobin
Copy link
Contributor Author

darobin commented Mar 30, 2023

Agreed @BigLep, worried about the same thing. I'm setting up to test locally with the wrong date, will make updates as needed.

@darobin
Copy link
Contributor Author

darobin commented Mar 30, 2023

Screenshots (with fake date to get it to show):

ipfs-blog-front

ipfs-blog-page

Copy link
Member

@lidel lidel left a comment

Choose a reason for hiding this comment

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

I've built and eyeballed locally, lgtm. Thank you!
Also, since the date is today, preview on the PR works:

Pushed small tweak, details inline.

@@ -88,7 +88,7 @@ IPFS implementations vary widely, from OS-level daemons living long and fulfilli

When developers have maximal control of an environment, they can implement IPFS to match the ideal of the vision articulated in the [original white paper](https://ipfs.io/ipfs/QmR7GSQM93Cx5eAg6a6yRzNde1FQv7uL6X1o4k7zrJa3LX/ipfs.draft3.pdf). When the deployment environment is very far from being able to achieve that ideal, or when the use case at hand is too different, implementing IPFS often means reliably getting content-addressed data in or out of that system by whatever means necessary.

The diversity this demands can be seen in our implementation ecosystem. For instance, we have implementations in [Go](https://github.com/ipfs/kubo), in [Java](https://github.com/Peergos/nabu), and in [JavaScript](https://github.com/ipfs/helia), as well as [one in Rust](https://github.com/n0-computer/iroh) that optimizes for extreme efficiency. We have some targeting [clusters](https://github.com/ipfs/ipfs-cluster) or [Filecoin](https://github.com/filecoin-project/lotus), meant to work in [mobile](https://github.com/ipfs-shipyard/gomobile-ipfs) or in other [embedded environments](https://github.com/ipfs-rust/ipfs-embed) as well as [for the cloud](https://github.com/ipfs-elastic-provider/ipfs-elastic-provider). And [the list keeps growing](https://docs.ipfs.tech/concepts/ipfs-implementations/).
The diversity this demands can be seen in our implementation ecosystem. For instance, we have implementations in [Go](https://github.com/ipfs/kubo), in [Java](https://github.com/Peergos/nabu), and in [JavaScript](https://github.com/ipfs/helia), as well as [one in Rust](https://github.com/n0-computer/iroh) that optimizes for extreme efficiency. We have some targeting [clusters](https://github.com/ipfs-cluster/ipfs-cluster) or [Filecoin](https://github.com/filecoin-project/lotus), meant to work in [mobile](https://github.com/ipfs-shipyard/gomobile-ipfs) or in other [embedded environments](https://github.com/ipfs-rust/ipfs-embed) as well as [for the cloud](https://github.com/elastic-ipfs/elastic-ipfs). And [the list keeps growing](https://docs.ipfs.tech/concepts/ipfs-implementations/).
Copy link
Member

Choose a reason for hiding this comment

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

ℹ️ @darobin some repos got moved, updated links

FYI https://ipfscluster.io has a nice website, if you prefer to link to that instead.

@@ -115,15 +115,15 @@ These principles provide detail to the key characteristics which we listed at th

### Content Addressing

Addressing is such an elementary part of any communication protocol that it is easy to overlook how its properties define the properties of a protocol. IP addresses are assigned based on a hierarchical authority delegated by IANA and RIRs to network administrators for local assignment. HTTP builds atop `http` URLs, which are predicated on the domain name system delegating authority to a server, and then that server's operator having full ownership of the names in that space and of the resources they map to. This idea of hierarchy and ownership is deeply ingrained in the web's fundamental architecture documents and it has consequences for how the web works: not only is everyone dependent on DNS, but when visiting a URL you are interacting with a name and a resource that are explicitly defined as someone else's property. In turn, this gives that entity power in the relationship it has with its users.
Addressing is such an elementary part of any communication protocol that it is easy to overlook how its properties define the properties of a protocol. IP addresses are assigned based on a hierarchical authority delegated by [IANA](https://www.iana.org/) and [RIRs](https://en.wikipedia.org/wiki/Regional_Internet_registry) to network administrators for local assignment. HTTP builds atop `http` URLs, which are predicated on the domain name system delegating authority to a server, and then that server's operator having full ownership of the names in that space and of the resources they map to. This idea of hierarchy and ownership is deeply ingrained in the web's fundamental architecture documents and it has consequences for how the web works: not only is everyone dependent on DNS, but when visiting a URL you are interacting with a name and a resource that are explicitly defined as someone else's property. In turn, this gives that entity power in the relationship it has with its users.
Copy link
Member

Choose a reason for hiding this comment

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

💭 just in case reader does not know what RIR is


IPFS's first defining characteristic is content addressing, and this is reflected in the foundational role that it gives to [CIDs](https://github.com/multiformats/cid). IPFS is, at heart, the space of resources that can be interacted with using a CID.

This already has multiple consequences. To begin with, CIDs are defined using [multiformats](https://multiformats.io/), which makes them future-proof, self-describing, and extensible. If, for instance, a powerful new hash algorithm surfaces then we aren't either stuck in the past or forced to find a way to upgrade everything. We can progressively roll it out on the IPFS network. Endpoints that need to produce or consume it will need to be upgraded, but the rest of the network won't care.

This approach also means that IPFS can interoperate with existing content-addressed systems, usually with little more work that what is required to convey whatever hash they use to a CID.

CIDs form a powerful and load-bearing foundation, while nevertheless being quite simple: Juan's original [CIDv1](https://github.com/multiformats/cid#how-does-it-work) spec is detailed enough for implementation but barely runs to half a page of Markdown, including an enthusiastic parting comment about its simplicity: "*That's it!*"
CIDs form a powerful and load-bearing foundation, while nevertheless being quite simple: Juan's original [CID](https://github.com/multiformats/cid#how-does-it-work) spec is detailed enough for implementation but barely runs to half a page of Markdown, including an enthusiastic parting comment about its simplicity: "*That's it!*"
Copy link
Member

Choose a reason for hiding this comment

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

💭 we want people to default to v1, so we usually omit v1 for now.

@@ -177,3 +177,4 @@ The [table of implementations at docs.ipfs.tech](https://docs.ipfs.tech/concepts
| [ipfs-lite](https://github.com/hsanjuan/ipfs-lite) | go | Minimal library oriented ipfs daemon building on the same blocks as Kubo but with a minimal glue layer. |
| [ipfs-nucleus](https://github.com/peergos/ipfs-nucleus/) | go | Minimal IPFS replacement for P2P IPLD apps. |
| [js-ipfs](https://github.com/ipfs/js-ipfs) | javascript, typescript | Javascript implementation targeting nodejs and browsers. [Development of js-ipfs is being discontinued](https://github.com/ipfs/js-ipfs/issues/4336). |
| [bifrost-gateway](https://github.com/ipfs/bifrost-gateway) | go | A lightweight [HTTP+Web Gateway](https://specs.ipfs.tech/http-gateways/) daemon backed by a remote data store. [Verifies CIDs](https://docs.ipfs.tech/reference/http/gateway/#trustless-verifiable-retrieval) and enables trusted (local) use of untrusted (remote) gateways. |
Copy link
Member

Choose a reason for hiding this comment

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

@darobin we've been working on this most of Q1, I've added it to the list so community can benefit from that, but feel free to remove if it does not fit.

(It supports proxy mode that provides people with means to run "local CID verifier" without having to run entire p2p stack, which passes the bar for being IPFS Implementation. )

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, great addition, this should have been here.


In order to help clarify both this foundation and everything that sits on top of it we've progressively been [developing better specs](https://github.com/ipfs/specs/), including a [fresh evolution of the IPIP process](https://github.com/ipfs/specs/commits/main/IPIP_PROCESS.md) and a [brand new specs site](https://specs.ipfs.tech/) (and [a IPFS Thing 2023 track to go with](https://2023.ipfs-thing.io/#Standards-Governance-and-DWeb-Policy)!)

Part of that specification work is this proposal for [a standardized description of the principles that define IPFS](https://github.com/ipfs/specs/pull/390). If you are curious to read a more detailed description of the principles described in this post, I encourage you to read it.
Copy link
Member

Choose a reason for hiding this comment

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

💭 merge ipfs/specs#390 and then update this link?

@lidel lidel merged commit 1e998df into ipfs:main Mar 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
No open projects
Archived in project
Development

Successfully merging this pull request may close these issues.

3 participants