diff --git a/.buildinfo b/.buildinfo index ac7836b..7e2ca6a 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 510e8cf7dc018d55484ca34d156c14ec +config: 843c5348da5f51068358c85baca3c995 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_sources/chapter_1.md.txt b/_sources/chapter_1.md.txt deleted file mode 100644 index b743fda..0000000 --- a/_sources/chapter_1.md.txt +++ /dev/null @@ -1 +0,0 @@ -# Chapter 1 diff --git a/_sources/comparison.md.txt b/_sources/comparison.md.txt deleted file mode 100644 index 91b652e..0000000 --- a/_sources/comparison.md.txt +++ /dev/null @@ -1,44 +0,0 @@ -# Comparison - -All of this is TODO. Comparison to existing protocols and projects (just to situate in context, not talk shit obvs) - -## "The big ones" - -- BitTorrent -- IPFS - -## "The research ones" - -- Dat -- Hypercore - -## Social - -- ActivityPub/Fediverse -- Secure Scuttlebutt -- Matrix - -## Semweb/LD - -- SOLID -- Nanopubs - -## To be categorized - -- Agregore -- Arweave -- CAN -- Chord -- Earthstar -- Freenet -- Manyverse -- P2panda -- SAFE -- Storj -- Swarm - - -## Points of comparison - -- not append-only -- metadata \ No newline at end of file diff --git a/_sources/comparison/activitypub.md.txt b/_sources/comparison/activitypub.md.txt new file mode 100644 index 0000000..9a83a0d --- /dev/null +++ b/_sources/comparison/activitypub.md.txt @@ -0,0 +1 @@ +# ActivityPub diff --git a/_sources/comparison/at_protocol.md.txt b/_sources/comparison/at_protocol.md.txt new file mode 100644 index 0000000..5606e8a --- /dev/null +++ b/_sources/comparison/at_protocol.md.txt @@ -0,0 +1,16 @@ +# AT Protocol/Bluesky + +```{index} Identity +``` +```{index} Bluesky +``` +```{index} Identity; DID +``` + +We aren't too concerned with billionaires cosplaying as altruists and the technologies they produce, but the AT Protocol has a few ideas, particularly related to [identity](https://atproto.com/guides/identity), that are interesting. + +Specifically, AT protocol differentiates between *handles* and *identities*, where DNS entries are used as short handles that resolve to a [DID](https://www.w3.org/TR/did-core/). + +That's about it, the rest of the handling of DID's is extremely centralized (see [did:plc](https://atproto.com/specs/did-plc) which requires resolution against a single domain), and the requirement of all posts to be funneled through [Big Graph Services](https://blueskyweb.xyz/blog/5-5-2023-federation-architecture) rather than directly peer to peer is transparently designed to ensure a marketing and advertising layer in between actors in the network. + + diff --git a/_sources/comparison/bittorrent.md.txt b/_sources/comparison/bittorrent.md.txt new file mode 100644 index 0000000..2fb68a2 --- /dev/null +++ b/_sources/comparison/bittorrent.md.txt @@ -0,0 +1 @@ +# BitTorrent diff --git a/_sources/comparison/dmc.md.txt b/_sources/comparison/dmc.md.txt new file mode 100644 index 0000000..b321088 --- /dev/null +++ b/_sources/comparison/dmc.md.txt @@ -0,0 +1,5 @@ +# DMC + +Distributed Mutable Containers + +https://inqlab.net/projects/dmc/ \ No newline at end of file diff --git a/_sources/comparison/eris.md.txt b/_sources/comparison/eris.md.txt new file mode 100644 index 0000000..a3366d8 --- /dev/null +++ b/_sources/comparison/eris.md.txt @@ -0,0 +1,5 @@ +# ERIS + +Encoding for Robust Immutable Storage (ERIS) + +https://eris.codeberg.page/spec/ \ No newline at end of file diff --git a/_sources/comparison/hypercore.md.txt b/_sources/comparison/hypercore.md.txt new file mode 100644 index 0000000..3396fa3 --- /dev/null +++ b/_sources/comparison/hypercore.md.txt @@ -0,0 +1 @@ +# Dat/Hypercore diff --git a/_sources/comparison/index.md.txt b/_sources/comparison/index.md.txt new file mode 100644 index 0000000..375f4a2 --- /dev/null +++ b/_sources/comparison/index.md.txt @@ -0,0 +1,62 @@ +(comparison)= +# Comparison + +All of this is TODO. Comparison to existing protocols and projects (just to situate in context, not talk shit obvs) + +```{toctree} +:caption: P2P + +bittorrent +ipfs +hypercore +spritely +``` + +```{toctree} +:caption: Social + +activitypub +ssb +matrix +at_protocol +nostr +xmpp +``` + +```{toctree} +:caption: Linked Data + +solid +ld_fragments +nanopubs +``` + +```{toctree} +:caption: Data Structures + +eris +dmc +``` + +## To be categorized + +- Agregore +- Arweave +- CAN +- Chord +- Earthstar +- Freenet +- Manyverse +- P2panda +- SAFE +- Storj +- [Swarm](https://www.ethswarm.org/swarm-whitepaper.pdf) + - not interesting, based around coins and smart contracts + - kademlia routing + - chunks stored by nodes close in hash space + + +## Points of comparison + +- not append-only +- metadata \ No newline at end of file diff --git a/_sources/comparison/ipfs.md.txt b/_sources/comparison/ipfs.md.txt new file mode 100644 index 0000000..0084900 --- /dev/null +++ b/_sources/comparison/ipfs.md.txt @@ -0,0 +1,24 @@ +```{index} IPFS +``` +# IPFS + +If IPFS is {index}`BitTorrent` + {index}`git`, and {key}`ActivityPub` is {key}`Distributed Messaging` + {key}`Linked Data`, then p2p-ld is IPFS + ActivityPub. We build on IPFS and are heavily inspired by its design and shortcomings revealed by practical use. + + +## Problems + +- Slow access! +- No identity misses the social nature of infrastructure. Where bittorrent had trackers, there is no similar concept in IPFS to organize archives. + - Hence the need for filecoin, an exogenous incentive to store, but then it becomes transactional which generates its own problems. + - Trust! eg. its use in phishing attacks is because there is no way to know who the hell a given CID is owned by. It needs to be possible to do social curation, or at leats know when something is riskier or not. +- Lack of metadata means having to build a lot of shit post-hoc, like IPLD and multihashes and codecs and whatnot. + +## IPLD + +## Overlap + +- {index}`Merkle DAG`s + +## Differences + +- Not permanent storage! Identities retain custody and control over objects in the network. diff --git a/_sources/comparison/ld_fragments.md.txt b/_sources/comparison/ld_fragments.md.txt new file mode 100644 index 0000000..5fdf61d --- /dev/null +++ b/_sources/comparison/ld_fragments.md.txt @@ -0,0 +1,49 @@ +```{index} Linked Data; Fragments +``` +# Linked Data Fragments + +## Summary + +[Linked data fragments](https://linkeddatafragments.org/publications/) are designed to "fill in the middle" between entirely serverside ({index}`SPARQL`) or clientside (downloading a triple store) usage of linked data triples. SPARQL queries are notorious for being resource intensive, as queries can become much more complex than typical relational algebra and the server needs to resolve a potentially enormous number of resources. Placing all the logic on the server, rather than the client, is an architectural decision that has a complex history, but descends from the idea that the web should work by having "agents" that work on the web on our behalf[^semwebagents]. + +Linked data fragments (LDFs) split the difference by placing more of the work on clients, with the server providing pre-computed sets of triples for a given selector. "Selector" is a purposefully general concept, but the LDF authors focus primarily on [Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/) that are composed of: + +- A **Triple Pattern**, a `?subject ?predicate ?object` that defines the contents of the fragment +- **Metadata**, specifically a `triples` predicate indicating the estimated total number of triples in the fragment since large fragments need to be paginated, and +- **Hypermedia Controls** that can be used to retrieve other related fragments. For example, a triple pattern corresponding to `s:people` `p:named` `o:tom` would have links to retrieve all the related combinations including each field being unspecified, eg. any triplet whose subject is a `person`, predicate is `named` and so on. + +The hosting server then partitions all of the triples in a given dataset into all the possible combinations of subjects, predicates, and objects. + +## Overlap + +p2p-ld follows Linked Data Fragments in that it emphasizes clientside logic rather than query logic on the network. Executing distributed complex queries adds substantial complexity to the protocol and would potentially import a lot of the problems with SPARQL like heightened resource requirements and potential for abuse for denial of service. + + + +## Differences + +- re: linked data platform, p2p-ld also concerns "leaf" nodes with binary data accessed via codec, rather than represented as triplets. The results of queries are thus not necessarily imagined to be single factual assertions, but datasets, images, documents, posts, etc. -> So the container concept is less rigidly defined than an LDF host with a completely partitioned triplet graph. + +Additionally, by being an explicitly *social* system, p2p-ld is unconcerned with arbitrary query execution time on anonymous data systems - the expectation is that individual peers and {index}`peer federations ` + + +```{admonition} To be very clear! +:class: attention + +p2p-ld does not attempt to replace or improve SPARQL. There are a number of philosophical and practical differences in the design of the greater semantic web, and particularly its instantiation as bigass corporate knowledge graphs. We will do what we can to integrate with RDF and RDF-like technologies, but p2p-ld is *not* a distributed SPARQL endpoint. +``` + +There are a number of philosophical + + + +[^semwebagents]: See the history of the early to middle semantic web, discussed in {cite}`saundersSurveillanceGraphs2023` + + +## References + +- Homepage: https://linkeddatafragments.org/ +- Papers: + - Original conference paper: {cite}`verborghWebScaleQueryingLinked2014` + - {cite}`verborghTriplePatternFragments2016` +- Specification: [Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/) \ No newline at end of file diff --git a/_sources/comparison/matrix.md.txt b/_sources/comparison/matrix.md.txt new file mode 100644 index 0000000..f417dac --- /dev/null +++ b/_sources/comparison/matrix.md.txt @@ -0,0 +1 @@ +# Matrix diff --git a/_sources/comparison/nanopubs.md.txt b/_sources/comparison/nanopubs.md.txt new file mode 100644 index 0000000..59b4209 --- /dev/null +++ b/_sources/comparison/nanopubs.md.txt @@ -0,0 +1 @@ +# NanoPubs diff --git a/_sources/comparison/nostr.md.txt b/_sources/comparison/nostr.md.txt new file mode 100644 index 0000000..d32033a --- /dev/null +++ b/_sources/comparison/nostr.md.txt @@ -0,0 +1,41 @@ +# Nostr + +Again, though we have a general distrust of the anarcho-capitalists, it's worth a comparison. + +Nostr is an extremely minimal protocol: https://nostr.com/the-protocol . There just isn't a lot there worth speaking of. + +## DNS identity + +Like [AT Protocol](at_protocol), there is a NIP (noster implementation possibility) for using {index}`DNS` to map keys: https://github.com/nostr-protocol/nips/blob/master/05.md + +It seems to be Webfinger-like, using a .json file under a `.well-known` path on a domain. An identity issues an event indicating a `nip05` type: + +```json +{ + "pubkey": "b0635d6a9851d3aed0cd6c495b282167acf761729078d975fc341b22650b07b9", + "kind": 0, + "content": "{\"name\": \"bob\", \"nip05\": \"bob@example.com\"}" +} +``` + +and then does a GET to `https://example.com/.well-known/nostr.json?name=bob`. If the response looks like this: + +```json +{ + "names": { + "bob": "b0635d6a9851d3aed0cd6c495b282167acf761729078d975fc341b22650b07b9" + } +} +``` + +then the identity is considered verified. + +## Petnames + +And a notion of {index}`Petnames`: https://github.com/nostr-protocol/nips/blob/master/02.md + +## Not so good + +- Just a client-server architecture: clients must talk to relays, relays do not talk to one another. +- Very very little in the way of a formalized spec for relays +- Made by a bunch of bitcoin guys \ No newline at end of file diff --git a/_sources/comparison/solid.md.txt b/_sources/comparison/solid.md.txt new file mode 100644 index 0000000..b26f8ce --- /dev/null +++ b/_sources/comparison/solid.md.txt @@ -0,0 +1 @@ +# SOLID diff --git a/_sources/comparison/spritely.md.txt b/_sources/comparison/spritely.md.txt new file mode 100644 index 0000000..9cc2695 --- /dev/null +++ b/_sources/comparison/spritely.md.txt @@ -0,0 +1,30 @@ +# Spritely/Goblin + +The Spritely Institute is likely the closest in spirit and design to what we are considering with p2p-ld, and have significant experience having previously worked on [ActivityPub](activitypub). The primary point of departure is their focus on building applications and running code, rather than structuring and sharing data --- so their work is largely complementary. + +Overlapping design choices include +- Emphasis on making a social, rather than a technological system! +- Capability security vs ACLs - Containers of other identities might be a useful way of coordinating who gets capabilities, but implementing them as capabilities rather than access checks makes for a much richer space of interaction and mutation. +- `Goblins` as "addressable entities with encapsulated behavior" are similar to {index}`Container`s +- Distributed objects: we imagine containers as being instantiated in multiple places at once and being acted on by multiple actors. Spritely's use of the "Unum Pattern" focused on distributed behavior rather than distributed data is something we plan on following up on and re-evaluating some of our designs. One place we may diverge is in our emphasis of 'forking' and activity that doesn't need to be explicitly approved: actors need not necessarily operate on the same shared object, but might make their own assertions, links, and so forth that don't directly change the object as owned by the original actor. + +Stuff we can learn from +- A lot +- Promise Pipelining to reduce roundtrips +- Implementation of protocol agnosticisim in OCapN +- Discussion of safety of computing base and evaluation environment + +Their description of *portable encrypted storage* ({index}`Storage; Portability`) is also extremely useful: + +> 1. Documents must be **{index}`Content Addressed `** and **location agnostic.** In other words, the name of the particular resource is based on information stemming from the content itself rather than a particular network location. Generally this name is the hash of the corresponding document in the case of immutable documents and a public key (or hash thereof) in the case of mutable documents. +> 2. Both **{index}`immutable and mutable documents `** must be supported, with the latter generally being built upon the former. +> 3. Documents must be **{index}`encrypted `** such that the documents can be stored in locations that are oblivious to their actual contents. Only those possessing read capabilities should be able to access the documents' contents. +> 4. Documents should be **chunked** so that they are not vulnerable to sizeof-file attacks. +> 5. Reading (and, in the case of mutable documents, writing) documents must be accessed through abstract **capabilities.** +> 6. Files must be network agnostic, meaning that they are not only location agnostic but agnostic even to a specific network structure. peer-to-peer, client-to-server, and sneakernet networks all should be supported with the same object URIs between them. + +## References + +- {cite}`lemmer-webberHeartSpritelyDistributed` +- OCapN - https://github.com/ocapn/ocapn +- Golem - https://gitlab.com/spritely/golem/blob/master/README.org \ No newline at end of file diff --git a/_sources/comparison/ssb.md.txt b/_sources/comparison/ssb.md.txt new file mode 100644 index 0000000..edab114 --- /dev/null +++ b/_sources/comparison/ssb.md.txt @@ -0,0 +1 @@ +# Secure Scuttlebutt diff --git a/_sources/comparison/xmpp.md.txt b/_sources/comparison/xmpp.md.txt new file mode 100644 index 0000000..d7accf9 --- /dev/null +++ b/_sources/comparison/xmpp.md.txt @@ -0,0 +1,7 @@ +# XMPP + +Stuff we like about XMPP +- Resources like `username@domain.com/resource` for indicating different accounts and contexts. +- Service discovery + - https://xmpp.org/extensions/xep-0030.html +- Protocol interoperability \ No newline at end of file diff --git a/_sources/data_structures.md.txt b/_sources/data_structures.md.txt index 566c119..8808eba 100644 --- a/_sources/data_structures.md.txt +++ b/_sources/data_structures.md.txt @@ -15,13 +15,13 @@ Triplet graphs similar to linked data fragments with envelopes. decoupling conte - Permissions scope - Signature - Anything that can be directly referenced without local qualifier is a container. - - Triplets within a container can be referenced with the [query syntax](querying.html#Location) + - Triplets within a container can be referenced with the [query syntax](qlocation) - Containers also behave like "feeds" - Eg. one might put their blog posts in `@user:blog` or - The account identifier is the top-level container. - Ordering: - Every triple within a scope is ordered by default by the time it is declared - - A container can declare its ordering (see [vocabulary](vocabulary.html#Container)) + - A container can declare its ordering (see {term}`Container`) - Naming: - Each container intended to be directly referenced SHOULD contain a `name` so it can be referenced w.r.t its parent: `@:` - Each container can also be indicated numerically @@ -29,6 +29,9 @@ Triplet graphs similar to linked data fragments with envelopes. decoupling conte - Format: A container can specify one or several ways it can be displayed - Capabilities: A container can specify different capabilities that another account can take (eg. "Like", "Upvote", "Reply") - Capabilities should also contain a permissions scope, if none is present, the global scope is assumed. + - Since Identities are just a special form of container, they too can advertise different actions that they support with capabilities. + +Re hashing a graph: the container always has one root node that is the container's identity from which a graph traversal starts. A {index}`Merkle DAG` is then constructed starting from the leaves. diff --git a/_sources/definitions.md.txt b/_sources/definitions.md.txt index 57e5bd9..4e05921 100644 --- a/_sources/definitions.md.txt +++ b/_sources/definitions.md.txt @@ -1 +1,19 @@ # Definitions + +Putting there here to remind me to use the glossary directive... (these are not real definitions yet, just placeholders) + +```{glossary} + +Identity + A unique cryptographic identity. One person may have multiple identities. One identity may have one or several {term}`Petname`s and {term}`Beacon`s + +Petname + A short name used to refer to a {term}`Identity`. Petnames are always contextual: `@Alice` referring to `@Bob` has the status of "The person that @Alice knows as @Bob." A petname can be declared by the identity being referred to as a "canonical" petname, but since they are potentially nonunique they should always be dereferenced against the Identity making the reference. + +Container + Stub to check cross-references + +Beacon + Stub to check cross-references + +``` \ No newline at end of file diff --git a/_sources/design.md.txt b/_sources/design.md.txt new file mode 100644 index 0000000..29e6def --- /dev/null +++ b/_sources/design.md.txt @@ -0,0 +1,28 @@ +# Design Decisions + +A scratchpad for keeping track of the specific choices that we are making so that we know they are choices lol. + +## Cultivate Abundance + +Much of the focus and energy in p2p and decentralized systems has been vaccuumed up by cryptocurrency and other blockchain scams. These technologies intrinsically generate artificial scarcity rather than the abundance of p2p systems like bittorrent. Much of the thinking in these systems is oriented around self-sovereignty, but p2p-ld is intended to cultivate mutualism and the radical mutual responsibility to each other that any truly autonomous social system outside of libertarian fantasies requires. We don't design the *system* to be maximally efficient and make *system-level* guarantees about reliability or persistence, but design systems for people to organize these things among themselves, voluntarily. We are *not* interested in making a self-sustaining system that is "out there" and needs to be maintained by some blockchain economy. We are interested in making tools *for us* to make our own digital life online + +## Permanence is Impossible + +{attribution="Octavia Butler, Parable of the Sower"} +> Every one knows that change is inevitable. From the second law of thermodynamics to Darwinian evolution, from Buddhism's insistence that nothing is permanent and all suffering results from our delusions of permanence to the third chapter of Ecclesiastes ("To everything there is a season"), change is part of life, of existence, of the common wisdom. But I don't believe we're dealing with all that that means. We haven't even begun to deal with it. + +There is no such thing as a [Cool URI that doesn't change](https://www.w3.org/Provider/Style/URI), and there is no such thing as a persistent identifier that lasts forever {cite}`kunzePersistenceStatementsDescribing2017`. All things change. Change can be because of practical reasons like running out of funding and shutting down the server, cultural reasons like shifting meanings of words, or larger shifts that render the entire domain that a thing is fixed in irrelevant. No matter how many layers of abstraction and redirection we want to create, there is no system that will for all time be able to unambiguously identify something on the web or elsewhere. + +The appearance of persistence is a *social* phenomenon rather than a *technological* one. `Archive.org` continues to exist because many people actively keep it existing, not because of the architecture of their archive. Designing for permanence makes systems *fragile.* Instead we should design for *adapting* to change. Adapting to change is also a social phenomenon - I might misplace things, change how they are named, and tell you that the same URL means something different, or the same page goes by a different URL now. A newspaper might go out of business and its website might go offline, but someone might save a PDF of the original page and rehost it on their personal website. The tools we need look more like systems for renaming, declaring equivalence, translation, change, than they do an unalterable, permanent append-only blockchain thing. + +## Ambiguity is Natural + +The [original vision](https://www.w3.org/DesignIssues/LinkedData.html) for Linked Data on the web imagined every concept having a single unique URI, but unambiguous identifiers are fictional for the same reason that unambiguous concepts are fictional. Information is contextual. The same set of words has a different meaning in a different context. Multiple sets of words can have the same meaning. + +Names and locations are *linguistic* not *mathematical.* Rather than trying to design ambiguity out of the system so that web crawlers can deterministically generate algorithmic restaurant reservations, we should design systems that explicitly incorporate context to reference and use. + +## Autonomy *and* Convenience Can Coexist + +We should neither sacrifice control of the internet to platform giants nor should we insist that self-hosting is the only alternative. If the alternative to using Google Docs or Slack requires me to be a professional sysadmin, or even to keep a raspberry pi plugged in and online at all times, it isn't an alternative for 95% of people. + +It should be possible to share resources such that relatively few people need to maintain persistent network infrastructure, and it should be possible to accomodate their leaving at any time. It should also be very difficult for one or a few actors to make a large number of other peers on the network dependent on them, claiming de-facto control over an ostensibly decentralized system (lookin at you mastodon.social). \ No newline at end of file diff --git a/_sources/discovery.md.txt b/_sources/discovery.md.txt index 332fca2..6b84d94 100644 --- a/_sources/discovery.md.txt +++ b/_sources/discovery.md.txt @@ -5,3 +5,16 @@ How do we find people and know how to connect to them? - Bootstrapping initial connections - Gossiping - Hole punching + + +# Scraps + +https://xmpp.org/extensions/xep-0030.html + +> There are three kinds of information that need to be discovered about an entity: +> +> - its basic identity (type and/or category) +> - the features it offers and protocols it supports +> - any additional items associated with the entity, whether or not they are addressable as JIDs +> +> All three MUST be supported, but the first two kinds of information relate to the entity itself whereas the third kind of information relates to items associated with the entity itself; therefore two different query types are needed. diff --git a/_sources/encryption.md.txt b/_sources/encryption.md.txt index ebfc72c..65cd0f7 100644 --- a/_sources/encryption.md.txt +++ b/_sources/encryption.md.txt @@ -1,3 +1,8 @@ # Encryption -How can we make it possible to have a protocol that is "open" when it is intended to, but also protects privacy and consent when we need it to? \ No newline at end of file +How can we make it possible to have a protocol that is "open" when it is intended to, but also protects privacy and consent when we need it to? + + +# TODO + +- https://en.wikipedia.org/wiki/OMEMO \ No newline at end of file diff --git a/_sources/identity.md.txt b/_sources/identity.md.txt index 632cb19..adf180c 100644 --- a/_sources/identity.md.txt +++ b/_sources/identity.md.txt @@ -22,7 +22,7 @@ A given identity can have 0 or many bidirectional links indicating that the iden - Subscribers to a given identity MUST store and represent the known aliases and treat them as equivalent - Other accounts can give an alias to an identity that MAY be accepted (by issuing a backlink) or denied (by ignoring it). -### Succession +### Rotation An identity has a specific field indicating whether it is "active" or "retired," and can issue a special top-level link with given permission scope indicating the identity that succeeds it. - eg in the case of harrassment, one can hop identities and only tell close friends. diff --git a/_sources/index.md.txt b/_sources/index.md.txt index ef09590..9ae263f 100644 --- a/_sources/index.md.txt +++ b/_sources/index.md.txt @@ -3,18 +3,25 @@ All of this is very work in progress :) plz do not rely on any of the descriptions or statements here, as they are all effectively provisional. This site describes the implementation of the p2p linked data protocol in {cite}`saundersDecentralizedInfrastructureNeuro2022` + +## Document Status + +**23-06-08** - Populating the [Comparison](comparison) section first to refresh myself on other projects, and starting to sketch diagrammatically in [Sketchpad](sketchpad). The rest of the pages are just stubs to keep track of ideas before fleshing them out. ```{toctree} :caption: Introduction +:hidden: overview -comparison +comparison/index p2p_concepts out_of_scope -``` +``` ```{toctree} :caption: Protocol +:numbered: +:hidden: definitions protocol @@ -31,6 +38,7 @@ evolvability ```{toctree} :caption: Ecosystem +:hidden: triplets translation @@ -38,17 +46,20 @@ translation ```{toctree} :caption: Drafting +:hidden: +design sketchpad ``` ```{toctree} :caption: Meta +:hidden: genindex references ``` - + Indices and tables ================== diff --git a/_sources/p2p_concepts.md.txt b/_sources/p2p_concepts.md.txt index 998a9bd..b97b60f 100644 --- a/_sources/p2p_concepts.md.txt +++ b/_sources/p2p_concepts.md.txt @@ -2,17 +2,17 @@ Overview of the various concepts that p2p systems have to handle or address with links to the sections where we address them! -- [Definitions](definitions.html) - Terms used within the protocol spec -- [Protocol](protocol.html) - The protocol spec itself, which encompasses the following sections and describes how they relate to one another. -- [Identity](identity.html) - How each peer in the swarm is identified (or not) -- [Discovery](discovery.html) - How peers are discovered and connected to in the swarm, or, how an identity is dereferenced into some network entity. -- [Data Structures](data_structures.html) - What and how data is represented within the protocol -- [Querying](querying.html) - How data, or pieces of data are requested from hosting peers -- [Evolvability](evolvability.html) - How the protocol is intended to accommodate changes, plugins, etc. +- [Definitions](definitions) - Terms used within the protocol spec +- [Protocol](protocol) - The protocol spec itself, which encompasses the following sections and describes how they relate to one another. +- [Identity](identity) - How each peer in the swarm is identified (or not) +- [Discovery](discovery) - How peers are discovered and connected to in the swarm, or, how an identity is dereferenced into some network entity. +- [Data Structures](data_structures) - What and how data is represented within the protocol +- [Querying](querying) - How data, or pieces of data are requested from hosting peers +- [Evolvability](evolvability) - How the protocol is intended to accommodate changes, plugins, etc. Additionally, p2p-ld considers these additional properties that are not universal to p2p protocols: -- [Vocabulary](vocabulary.html) - The linked data vocabulary that is used within the protocol -- [Encryption](encryption.html) - How individual messages can be encrypted and decrypted by peers -- [Federation](federation.html) - How peers can form supra-peer clusters for swarm robustness, social organization, and governance -- [Backwards Compatibility](backwards_compatibility.html) - How the protocol integrates with existing protocols and technologies. +- [Vocabulary](vocabulary) - The linked data vocabulary that is used within the protocol +- [Encryption](encryption) - How individual messages can be encrypted and decrypted by peers +- [Federation](federation) - How peers can form supra-peer clusters for swarm robustness, social organization, and governance +- [Backwards Compatibility](backwards_compatibility) - How the protocol integrates with existing protocols and technologies. diff --git a/_sources/querying.md.txt b/_sources/querying.md.txt index 92aac2b..4900310 100644 --- a/_sources/querying.md.txt +++ b/_sources/querying.md.txt @@ -4,6 +4,7 @@ How do we find peers that have subgraphs that are responsive to what we want? ## Syntax +(qlocation)= ### Location How to refer to a given [container](data_structures.html#Containers), eg. diff --git a/_sources/references.md.txt b/_sources/references.md.txt index ab49843..d902336 100644 --- a/_sources/references.md.txt +++ b/_sources/references.md.txt @@ -2,4 +2,4 @@ ```{bibliography} -``` \ No newline at end of file +``` \ No newline at end of file diff --git a/_sources/sketchpad.md.txt b/_sources/sketchpad.md.txt index 536fe82..b80ffac 100644 --- a/_sources/sketchpad.md.txt +++ b/_sources/sketchpad.md.txt @@ -6,7 +6,7 @@ Dummy change to check that we don't invalidate the rust cache on CI. Just a stub to check if mermaid works -```mermaid +```{mermaid} erDiagram IDENTITY { string hash diff --git a/backwards_compatibility.html b/backwards_compatibility.html index 8ae2769..9545382 100644 --- a/backwards_compatibility.html +++ b/backwards_compatibility.html @@ -3,11 +3,11 @@ - + - Backwards Compatibility - p2p-ld 0.1.0 documentation + 12. Backwards Compatibility - p2p-ld 0.1.0 documentation @@ -158,23 +158,42 @@

Introduction

Protocol

Ecosystem

    @@ -183,6 +202,7 @@

Drafting

Meta

@@ -224,7 +244,7 @@
-

Backwards Compatibility#

+

12. Backwards Compatibility#

  • HTTP

  • Bittorrent

  • @@ -232,7 +252,7 @@
  • ActivityPub

-

HTTP Servers#

+

12.1. HTTP Servers#

  • Using existing HTTP servers as web-seed like things.

  • Use codecs to indicate the format and metadata of existing files

  • @@ -240,14 +260,14 @@
-

BitTorrent#

+

12.2. BitTorrent#

See BEP 52 - Bittorrent V2

-

IPFS#

+

12.3. IPFS#

-

ActivityPub#

+

12.4. ActivityPub#

-

Versioning#

+

6.5. Versioning#

  • A given container has an identity hash from its first packing

  • A given triple can be contained by

  • @@ -324,7 +346,7 @@
    Next
    -
    Vocabulary
    +
    7. Vocabulary
    @@ -335,7 +357,7 @@ Previous -
    Discovery
    +
    4. Discovery
    @@ -369,12 +391,12 @@
    -

    Definitions#

    +

    1. Definitions#

    +

    Putting there here to remind me to use the glossary directive… (these are not real definitions yet, just placeholders)

    +
    +
    Identity#

    A unique cryptographic identity. One person may have multiple identities. One identity may have one or several Petnames and Beacons

    +
    +
    Petname#

    A short name used to refer to a Identity. Petnames are always contextual: @Alice referring to @Bob has the status of “The person that @Alice knows as @Bob.” A petname can be declared by the identity being referred to as a “canonical” petname, but since they are potentially nonunique they should always be dereferenced against the Identity making the reference.

    +
    +
    Container#

    Stub to check cross-references

    +
    +
    Beacon#

    Stub to check cross-references

    +
    +
    @@ -237,7 +268,7 @@
    Next
    -
    Protocol
    +
    2. Protocol
    diff --git a/design.html b/design.html new file mode 100644 index 0000000..60d264a --- /dev/null +++ b/design.html @@ -0,0 +1,350 @@ + + + + + + + + + + Design Decisions - p2p-ld 0.1.0 documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    + + + + + Back to top + +
    + +
    + +
    + +
    +
    +
    +

    Design Decisions#

    +

    A scratchpad for keeping track of the specific choices that we are making so that we know they are choices lol.

    +
    +

    Cultivate Abundance#

    +

    Much of the focus and energy in p2p and decentralized systems has been vaccuumed up by cryptocurrency and other blockchain scams. These technologies intrinsically generate artificial scarcity rather than the abundance of p2p systems like bittorrent. Much of the thinking in these systems is oriented around self-sovereignty, but p2p-ld is intended to cultivate mutualism and the radical mutual responsibility to each other that any truly autonomous social system outside of libertarian fantasies requires. We don’t design the system to be maximally efficient and make system-level guarantees about reliability or persistence, but design systems for people to organize these things among themselves, voluntarily. We are not interested in making a self-sustaining system that is “out there” and needs to be maintained by some blockchain economy. We are interested in making tools for us to make our own digital life online

    +
    +
    +

    Permanence is Impossible#

    +
    +

    Every one knows that change is inevitable. From the second law of thermodynamics to Darwinian evolution, from Buddhism’s insistence that nothing is permanent and all suffering results from our delusions of permanence to the third chapter of Ecclesiastes (“To everything there is a season”), change is part of life, of existence, of the common wisdom. But I don’t believe we’re dealing with all that that means. We haven’t even begun to deal with it.

    +

    —Octavia Butler, Parable of the Sower

    +
    +

    There is no such thing as a Cool URI that doesn’t change, and there is no such thing as a persistent identifier that lasts forever [Kunze et al., 2017]. All things change. Change can be because of practical reasons like running out of funding and shutting down the server, cultural reasons like shifting meanings of words, or larger shifts that render the entire domain that a thing is fixed in irrelevant. No matter how many layers of abstraction and redirection we want to create, there is no system that will for all time be able to unambiguously identify something on the web or elsewhere.

    +

    The appearance of persistence is a social phenomenon rather than a technological one. Archive.org continues to exist because many people actively keep it existing, not because of the architecture of their archive. Designing for permanence makes systems fragile. Instead we should design for adapting to change. Adapting to change is also a social phenomenon - I might misplace things, change how they are named, and tell you that the same URL means something different, or the same page goes by a different URL now. A newspaper might go out of business and its website might go offline, but someone might save a PDF of the original page and rehost it on their personal website. The tools we need look more like systems for renaming, declaring equivalence, translation, change, than they do an unalterable, permanent append-only blockchain thing.

    +
    +
    +

    Ambiguity is Natural#

    +

    The original vision for Linked Data on the web imagined every concept having a single unique URI, but unambiguous identifiers are fictional for the same reason that unambiguous concepts are fictional. Information is contextual. The same set of words has a different meaning in a different context. Multiple sets of words can have the same meaning.

    +

    Names and locations are linguistic not mathematical. Rather than trying to design ambiguity out of the system so that web crawlers can deterministically generate algorithmic restaurant reservations, we should design systems that explicitly incorporate context to reference and use.

    +
    +
    +

    Autonomy and Convenience Can Coexist#

    +

    We should neither sacrifice control of the internet to platform giants nor should we insist that self-hosting is the only alternative. If the alternative to using Google Docs or Slack requires me to be a professional sysadmin, or even to keep a raspberry pi plugged in and online at all times, it isn’t an alternative for 95% of people.

    +

    It should be possible to share resources such that relatively few people need to maintain persistent network infrastructure, and it should be possible to accomodate their leaving at any time. It should also be very difficult for one or a few actors to make a large number of other peers on the network dependent on them, claiming de-facto control over an ostensibly decentralized system (lookin at you mastodon.social).

    +
    +
    + +
    +
    + +
    + +
    +
    + + + + + \ No newline at end of file diff --git a/discovery.html b/discovery.html index 8846e66..c0b3b9a 100644 --- a/discovery.html +++ b/discovery.html @@ -3,11 +3,11 @@ - + - Discovery - p2p-ld 0.1.0 documentation + 4. Discovery - p2p-ld 0.1.0 documentation @@ -158,23 +158,42 @@

    Introduction

    Protocol

    Ecosystem

      @@ -183,6 +202,7 @@

    Drafting

    Meta

    @@ -224,13 +244,26 @@
    -

    Discovery#

    +

    4. Discovery#

    How do we find people and know how to connect to them?

    • Bootstrapping initial connections

    • Gossiping

    • Hole punching

    +
    +
    +

    5. Scraps#

    +

    https://xmpp.org/extensions/xep-0030.html

    +
    +

    There are three kinds of information that need to be discovered about an entity:

    +
      +
    • its basic identity (type and/or category)

    • +
    • the features it offers and protocols it supports

    • +
    • any additional items associated with the entity, whether or not they are addressable as JIDs

    • +
    +

    All three MUST be supported, but the first two kinds of information relate to the entity itself whereas the third kind of information relates to items associated with the entity itself; therefore two different query types are needed.

    +
    @@ -243,7 +276,7 @@
    Next
    -
    Data Structures
    +
    6. Data Structures
    @@ -254,7 +287,7 @@ Previous -
    Identity
    +
    3. Identity
    diff --git a/encryption.html b/encryption.html index c113039..7ec8817 100644 --- a/encryption.html +++ b/encryption.html @@ -3,11 +3,11 @@ - + - Encryption - p2p-ld 0.1.0 documentation + 9. Encryption - p2p-ld 0.1.0 documentation @@ -158,23 +158,42 @@

    Introduction

    Protocol

    Ecosystem

      @@ -183,6 +202,7 @@

    Drafting

    Meta

    @@ -224,8 +244,14 @@
    -

    Encryption#

    +

    9. Encryption#

    How can we make it possible to have a protocol that is “open” when it is intended to, but also protects privacy and consent when we need it to?

    +
    +
    +

    10. TODO#

    +
    @@ -238,7 +264,7 @@
    Next
    -
    Federation
    +
    11. Federation
    @@ -249,7 +275,7 @@ Previous -
    Querying
    +
    8. Querying
    diff --git a/evolvability.html b/evolvability.html index c8955d2..3b2ae1c 100644 --- a/evolvability.html +++ b/evolvability.html @@ -3,11 +3,11 @@ - + - Evolvability - p2p-ld 0.1.0 documentation + 13. Evolvability - p2p-ld 0.1.0 documentation @@ -158,23 +158,42 @@

    Introduction

    Protocol

    Ecosystem

      @@ -183,6 +202,7 @@

    Drafting

    Meta

    @@ -224,7 +244,7 @@
    -

    Evolvability#

    +

    13. Evolvability#

    @@ -248,7 +268,7 @@ Previous -
    Backwards Compatibility
    +
    12. Backwards Compatibility
    diff --git a/federation.html b/federation.html index 7ba1551..2e1abcb 100644 --- a/federation.html +++ b/federation.html @@ -3,11 +3,11 @@ - + - Federation - p2p-ld 0.1.0 documentation + 11. Federation - p2p-ld 0.1.0 documentation @@ -158,23 +158,42 @@

    Introduction

    Protocol

    Ecosystem

      @@ -183,6 +202,7 @@

    Drafting

    Meta

    @@ -224,18 +244,18 @@
    -

    Federation#

    +

    11. Federation#

    Making supra-peer clusters with explicit governance and policies for rehosting and sharing!

    • Creating federations of peers

    -

    Sharding#

    +

    11.1. Sharding#

    Splitting data across multiple peers within a federation

    -

    Moderation#

    +

    11.2. Moderation#

    Federations MUST maintain a list of

    @@ -250,7 +270,7 @@
    Next
    -
    Backwards Compatibility
    +
    12. Backwards Compatibility
    @@ -261,7 +281,7 @@ Previous -
    Encryption
    +
    9. Encryption
    @@ -295,9 +315,9 @@
    -

    Identity#

    +

    3. Identity#

    How is an individual peer identified?

    • Cryptographic identity

    • @@ -232,13 +252,13 @@
    • External verification/discovery via DNS and other out of band means.

    -

    Instances#

    +

    3.1. Instances#

    A given identity can have 0 or many instances - a manifestation of the peer within a particular server and runtime.

    Each instance indicates a collection of peers

    When connecting to a peer, the peer MUST tell the connecting peer of the instances that are within its permission scope.

    -

    Aliases#

    +

    3.2. Aliases#

    A given identity can have 0 or many bidirectional links indicating that the identity is sameAs another

    • eg. a fediverse account can indicate a cryptographic identity and then be used equivalently.

    • @@ -246,14 +266,14 @@
    • Subscribers to a given identity MUST store and represent the known aliases and treat them as equivalent

    • Other accounts can give an alias to an identity that MAY be accepted (by issuing a backlink) or denied (by ignoring it).

    -
    -

    Succession#

    +
    +

    3.2.1. Rotation#

    An identity has a specific field indicating whether it is “active” or “retired,” and can issue a special top-level link with given permission scope indicating the identity that succeeds it. - eg in the case of harrassment, one can hop identities and only tell close friends.

    -

    Beacons#

    +

    3.3. Beacons#

    Any peer can operate as a “Pub” (in the parlance of SSB) or a bootstrapping node, where a dereferenceable network location (eg. DNS) can be resolved to a

    A given identity can have 0 or many static inbound references that can resolve a network

    @@ -269,7 +289,7 @@
    Next
    -
    Discovery
    +
    4. Discovery
    @@ -280,7 +300,7 @@ Previous -
    Protocol
    +
    2. Protocol
    @@ -314,13 +334,13 @@
    - +
    Previous
    -
    Comparison
    +
    DMC
    diff --git a/protocol.html b/protocol.html index 8cdbfbe..99e029e 100644 --- a/protocol.html +++ b/protocol.html @@ -3,11 +3,11 @@ - + - Protocol - p2p-ld 0.1.0 documentation + 2. Protocol - p2p-ld 0.1.0 documentation @@ -158,23 +158,42 @@

    Introduction

    Protocol

    Ecosystem

      @@ -183,6 +202,7 @@

    Drafting

    Meta

    @@ -224,9 +244,9 @@
    -

    Protocol#

    +

    2. Protocol#

    -

    Connection#

    +

    2.1. Connection#

    • When connecting to a peer, a peer MUST advertise its own connections to other peers whose discoverability permissions allow it

        @@ -236,13 +256,13 @@
    -

    Requests#

    +

    2.2. Requests#

    -

    Sharding#

    +

    2.3. Sharding#

    @@ -258,7 +278,7 @@
    Next
    -
    Identity
    +
    3. Identity
    @@ -269,7 +289,7 @@ Previous -
    Definitions
    +
    1. Definitions
    @@ -303,11 +323,11 @@
    -

    Querying#

    +

    8. Querying#

    How do we find peers that have subgraphs that are responsive to what we want?

    -

    Syntax#

    +

    8.1. Syntax#

    -

    Location#

    +

    8.1.1. Location#

    How to refer to a given container, eg.

    @user:containerName:childName
     
    @@ -241,13 +261,13 @@

    Children

    -

    Version#

    +

    8.1.2. Version#

    How to refer to a specific version of a container

    References without version qualification indicate the most recent version at the time of containerizing the links.

    -

    Query Fragments#

    +

    8.2. Query Fragments#

    Using blank subgraphs to specify queries

    @@ -262,7 +282,7 @@
    Next
    -
    Encryption
    +
    9. Encryption
    @@ -273,7 +293,7 @@ Previous -
    Vocabulary
    +
    7. Vocabulary
    @@ -307,13 +327,13 @@
    diff --git a/search.html b/search.html index 4ff26ea..1d36766 100644 --- a/search.html +++ b/search.html @@ -155,23 +155,42 @@

    Introduction

    Protocol

    Ecosystem

      @@ -180,6 +199,7 @@

    Drafting

    Meta

    diff --git a/searchindex.js b/searchindex.js index ce25a4b..9057ddd 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["backwards_compatibility", "chapter_1", "comparison", "data_structures", "definitions", "discovery", "encryption", "evolvability", "federation", "identity", "index", "out_of_scope", "overview", "p2p_concepts", "protocol", "querying", "references", "sketchpad", "translation", "triplets", "vocabulary"], "filenames": ["backwards_compatibility.md", "chapter_1.md", "comparison.md", "data_structures.md", "definitions.md", "discovery.md", "encryption.md", "evolvability.md", "federation.md", "identity.md", "index.md", "out_of_scope.md", "overview.md", "p2p_concepts.md", "protocol.md", "querying.md", "references.md", "sketchpad.md", "translation.md", "triplets.md", "vocabulary.md"], "titles": ["Backwards Compatibility", "Chapter 1", "Comparison", "Data Structures", "Definitions", "Discovery", "Encryption", "Evolvability", "Federation", "Identity", "p2p-ld", "Out of Scope", "Overview", "P2P Concepts", "Protocol", "Querying", "References", "Sketchpad", "Translation", "Triplets", "Vocabulary"], "terms": {"us": [0, 9, 10, 13, 15], "exist": [0, 2, 12, 13], "web": [0, 9], "seed": 0, "like": [0, 3, 19], "thing": [0, 11], "codec": [0, 10, 11, 17], "indic": [0, 3, 9, 15, 20], "format": [0, 3, 18, 19], "metadata": [0, 2], "file": 0, "backup": 0, "mirror": 0, "behav": [0, 3], "peer": [0, 8, 9, 13, 14, 15, 20], "how": [0, 5, 6, 9, 11, 12, 13, 15, 20], "can": [0, 2, 3, 6, 9, 13, 14, 20], "them": [0, 5, 9, 13, 20], "given": [0, 3, 9, 15, 20], "contain": [0, 10, 15, 17], "see": [0, 3], "bep": 0, "52": 0, "v2": 0, "map": 0, "feed": [0, 3], "all": [2, 10], "thi": [2, 10, 12], "i": [2, 3, 6, 9, 10, 12, 13, 14, 20], "todo": 2, "protocol": [2, 6, 11, 13], "project": 2, "just": [2, 17], "situat": 2, "context": [2, 12], "talk": 2, "shit": 2, "obv": 2, "bittorr": [2, 10], "ipf": [2, 10], "dat": 2, "hypercor": 2, "activitypub": [2, 10], "fedivers": [2, 9], "secur": 2, "scuttlebutt": 2, "matrix": 2, "solid": 2, "nanopub": 2, "agregor": 2, "arweav": 2, "chord": 2, "earthstar": 2, "freenet": 2, "manyvers": 2, "p2panda": 2, "safe": 2, "storj": 2, "swarm": [2, 13], "append": 2, "onli": [2, 9, 20], "graph": [3, 10], "similar": 3, "link": [3, 9, 10, 12, 13, 14, 15, 17, 20], "fragment": [3, 10], "envelop": 3, "decoupl": 3, "content": 3, "address": [3, 13], "from": [3, 9, 13, 14], "merkel": 3, "dag": 3, "type": [3, 20], "object": [3, 14], "packet": 3, "ld": [3, 12, 13], "hash": [3, 17], "encrypt": [3, 10, 13], "info": 3, "applic": 3, "permiss": [3, 9, 14, 20], "scope": [3, 9, 10, 20], "signatur": 3, "anyth": 3, "directli": 3, "referenc": [3, 14], "without": [3, 15], "local": 3, "qualifi": 3, "within": [3, 8, 9, 13], "queri": [3, 10, 13], "syntax": [3, 10], "also": [3, 6, 20], "eg": [3, 9, 14, 15, 20], "one": [3, 9, 13], "might": 3, "put": 3, "blog": 3, "post": 3, "user": [3, 15, 20], "The": [3, 10, 13], "account": [3, 9, 20], "identifi": [3, 9, 13, 14], "top": [3, 9], "level": [3, 9], "order": [3, 20], "everi": [3, 14], "tripl": 3, "default": 3, "time": [3, 15], "declar": [3, 20], "A": [3, 9, 18, 19, 20], "its": [3, 9, 14], "vocabulari": [3, 10, 13], "name": 3, "each": [3, 9, 13], "intend": [3, 6, 12, 13], "should": [3, 11], "so": [3, 20], "w": 3, "r": 3, "t": [3, 17, 20], "parent": 3, "numer": [3, 15, 20], "ident": [3, 10, 13, 17, 20], "uniqu": 3, "specifi": [3, 15, 20], "sever": [3, 19], "wai": [3, 20], "displai": 3, "capabl": 3, "differ": [3, 12], "anoth": [3, 9, 13, 20], "take": 3, "upvot": 3, "repli": 3, "none": 3, "present": 3, "global": 3, "assum": 3, "requir": 3, "shortnam": 3, "hierarch": 3, "index": [3, 10], "includ": [3, 11], "intrins": 3, "notion": 3, "nest": 3, "have": [3, 6, 9, 13, 15], "blank": [3, 15], "position": 3, "children": [3, 15, 20], "rdf": 3, "star": 3, "wikidata": 3, "": 3, "ipld": 3, "platform": 3, "spec": [3, 11, 13], "mean": [3, 9], "interact": 3, "binari": 3, "describ": [3, 10, 11, 13], "ha": [3, 9, 14], "an": [3, 9, 13, 14, 20], "first": 3, "pack": 3, "do": [5, 10, 15], "we": [5, 6, 13, 15, 17], "find": [5, 15], "peopl": 5, "know": 5, "connect": [5, 9, 10, 13], "bootstrap": [5, 9], "initi": 5, "gossip": 5, "hole": 5, "punch": 5, "make": [6, 8, 20], "possibl": 6, "open": 6, "when": [6, 9, 14], "protect": 6, "privaci": 6, "consent": 6, "need": 6, "supra": [8, 13], "cluster": [8, 13], "explicit": 8, "govern": [8, 13], "polici": 8, "rehost": 8, "share": [8, 9, 20], "creat": [8, 19], "split": 8, "data": [8, 10, 12, 13, 19], "across": 8, "multipl": 8, "must": [8, 9, 14], "maintain": 8, "list": 8, "individu": [9, 13], "cryptograph": 9, "trust": 9, "extern": 9, "verif": 9, "discoveri": [9, 10, 13], "via": 9, "dn": 9, "other": [9, 14, 20], "out": [9, 10], "band": 9, "0": [9, 15], "mani": 9, "manifest": 9, "particular": 9, "server": [9, 10], "runtim": 9, "collect": [9, 20], "tell": 9, "ar": [9, 10, 11, 13, 15, 20], "bidirect": 9, "samea": [9, 20], "equival": [9, 20], "backlink": [9, 10], "origin": 9, "subscrib": 9, "store": 9, "repres": [9, 13, 17], "known": 9, "treat": 9, "give": 9, "alia": 9, "mai": 9, "accept": [9, 14], "issu": 9, "deni": [9, 14], "ignor": 9, "specif": [9, 15], "field": 9, "whether": 9, "activ": 9, "retir": 9, "special": [9, 20], "succe": 9, "case": 9, "harrass": 9, "hop": 9, "close": [9, 20], "friend": [9, 20], "ani": [9, 10, 11], "oper": [9, 20], "pub": 9, "parlanc": 9, "ssb": 9, "node": 9, "where": [9, 13], "dereferenc": [9, 13], "network": [9, 13], "locat": [9, 10], "resolv": [9, 20], "static": 9, "inbound": 9, "refer": [9, 10, 15, 20], "veri": 10, "work": [10, 17], "progress": 10, "plz": 10, "reli": 10, "descript": 10, "statement": 10, "here": 10, "thei": [10, 13, 20], "effect": 10, "provision": 10, "site": 10, "implement": 10, "saunder": [10, 16], "2022": [10, 16], "overview": [10, 13], "background": 10, "roadmap": 10, "comparison": 10, "big": 10, "ones": 10, "research": 10, "social": [10, 13], "semweb": [10, 12], "To": 10, "categor": 10, "point": 10, "concept": 10, "definit": [10, 13], "request": [10, 13], "shard": 10, "instanc": [10, 17], "alias": 10, "success": 10, "beacon": [10, 17], "structur": [10, 13], "triplet": [10, 17, 20], "schema": [10, 18], "version": 10, "import": 10, "feder": [10, 13], "moder": 10, "backward": [10, 13], "compat": [10, 13], "http": [10, 16], "evolv": [10, 13], "translat": 10, "sketchpad": 10, "system": [10, 13], "diagram": 10, "model": 10, "ref": 10, "genindex": 10, "modindex": 10, "search": 10, "what": [11, 12, 13, 15], "explicitli": 11, "left": 11, "detail": 11, "up": 11, "defin": [11, 20], "doe": 11, "p2p": 12, "limit": 12, "whom": 12, "develop": 12, "timelin": 12, "variou": 13, "handl": 13, "section": 13, "term": 13, "itself": 13, "which": 13, "encompass": 13, "follow": 13, "relat": 13, "discov": 13, "some": 13, "entiti": 13, "piec": 13, "host": 13, "accommod": 13, "chang": [13, 17], "plugin": 13, "etc": 13, "addition": 13, "consid": 13, "addit": 13, "properti": 13, "univers": 13, "messag": 13, "decrypt": 13, "form": 13, "robust": 13, "organ": 13, "integr": 13, "technologi": 13, "advertis": 14, "own": 14, "whose": 14, "discover": 14, "allow": [14, 20], "desig": 14, "implicit": 14, "owner": 14, "If": 14, "propos": 14, "block": 14, "automat": 14, "drop": 14, "subgraph": 15, "respons": 15, "want": 15, "containernam": 15, "childnam": 15, "qualif": 15, "most": 15, "recent": 15, "container": 15, "sau22": 16, "jonni": 16, "l": 16, "decentr": 16, "infrastructur": 16, "neuro": 16, "scienc": 16, "08": 16, "url": 16, "arxiv": 16, "org": 16, "ab": 16, "2209": 16, "07493": 16, "visit": 16, "2023": 16, "03": 16, "01": 16, "doi": 16, "10": 16, "48550": 16, "dummi": 17, "check": 17, "don": 17, "invalid": 17, "rust": 17, "cach": 17, "ci": 17, "stub": 17, "mermaid": 17, "erdiagram": 17, "string": 17, "ip": 17, "client": 17, "uri": 17, "o": 17, "run": 17, "toolkit": 18, "write": 18, "between": 18, "packag": 19, "manipul": 19, "sko": 20, "stronger": 20, "less": 20, "predict": 20, "alphabet": 20, "weaker": 20, "more": 20, "proxi": 20, "identit": 20, "alt": 20, "correct": 20, "public": 20, "stabl": 20, "abus": 20, "won": 20, "abl": 20, "privat": 20, "relationship": 20, "role": 20, "behalf": 20, "mutual": 20, "independ": 20, "keybear": 20, "kei": 20, "visibl": 20, "associ": 20, "rule": 20, "could": 20, "n": 20, "deep": 20}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"backward": 0, "compat": 0, "http": 0, "server": 0, "bittorr": 0, "ipf": 0, "activitypub": 0, "chapter": 1, "1": 1, "comparison": 2, "The": 2, "big": 2, "ones": 2, "research": 2, "social": [2, 20], "semweb": 2, "ld": [2, 10], "To": 2, "categor": 2, "point": 2, "data": [3, 17], "structur": 3, "contain": [3, 20], "triplet": [3, 19], "schema": 3, "codec": 3, "version": [3, 15], "definit": 4, "discoveri": 5, "encrypt": 6, "evolv": 7, "feder": 8, "shard": [8, 14], "moder": 8, "ident": 9, "instanc": 9, "alias": 9, "success": 9, "beacon": 9, "p2p": [10, 13], "introduct": 10, "protocol": [10, 14], "ecosystem": 10, "draft": 10, "meta": 10, "indic": 10, "tabl": 10, "out": 11, "scope": 11, "implement": 11, "overview": 12, "background": 12, "us": 12, "roadmap": 12, "concept": 13, "connect": 14, "request": 14, "backlink": 14, "queri": 15, "syntax": 15, "locat": 15, "fragment": 15, "refer": 16, "sketchpad": 17, "system": 17, "diagram": 17, "graph": 17, "model": 17, "translat": 18, "vocabulari": 20, "import": 20}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"Backwards Compatibility": [[0, "backwards-compatibility"]], "HTTP Servers": [[0, "http-servers"]], "BitTorrent": [[0, "bittorrent"]], "IPFS": [[0, "ipfs"]], "ActivityPub": [[0, "activitypub"]], "Chapter 1": [[1, "chapter-1"]], "Comparison": [[2, "comparison"]], "\u201cThe big ones\u201d": [[2, "the-big-ones"]], "\u201cThe research ones\u201d": [[2, "the-research-ones"]], "Social": [[2, "social"], [20, "social"]], "Semweb/LD": [[2, "semweb-ld"]], "To be categorized": [[2, "to-be-categorized"]], "Points of comparison": [[2, "points-of-comparison"]], "Data Structures": [[3, "data-structures"]], "Containers": [[3, "containers"]], "Triplets": [[3, "triplets"], [19, "triplets"]], "Schema": [[3, "schema"]], "Codecs": [[3, "codecs"]], "Versioning": [[3, "versioning"]], "Definitions": [[4, "definitions"]], "Discovery": [[5, "discovery"]], "Encryption": [[6, "encryption"]], "Evolvability": [[7, "evolvability"]], "Federation": [[8, "federation"]], "Sharding": [[8, "sharding"], [14, "sharding"]], "Moderation": [[8, "moderation"]], "Identity": [[9, "identity"]], "Instances": [[9, "instances"]], "Aliases": [[9, "aliases"]], "Succession": [[9, "succession"]], "Beacons": [[9, "beacons"]], "p2p-ld": [[10, "p2p-ld"]], "Introduction": [[10, null]], "Protocol": [[10, null], [14, "protocol"]], "Ecosystem": [[10, null]], "Drafting": [[10, null]], "Meta": [[10, null]], "Indices and tables": [[10, "indices-and-tables"]], "Out of Scope": [[11, "out-of-scope"]], "Implementation": [[11, "implementation"]], "Overview": [[12, "overview"]], "Background": [[12, "background"]], "Use": [[12, "use"]], "Roadmap": [[12, "roadmap"]], "P2P Concepts": [[13, "p2p-concepts"]], "Connection": [[14, "connection"]], "Requests": [[14, "requests"]], "Backlinks": [[14, "backlinks"]], "Querying": [[15, "querying"]], "Syntax": [[15, "syntax"]], "Location": [[15, "location"]], "Version": [[15, "version"]], "Query Fragments": [[15, "query-fragments"]], "References": [[16, "references"]], "Sketchpad": [[17, "sketchpad"]], "System Diagram": [[17, "system-diagram"]], "Graph Data Model": [[17, "graph-data-model"]], "Translation": [[18, "translation"]], "Vocabulary": [[20, "vocabulary"]], "Imports": [[20, "imports"]], "Container": [[20, "container"]]}, "indexentries": {"instances": [[9, "index-0"], [10, "index-0"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["backwards_compatibility", "comparison/activitypub", "comparison/at_protocol", "comparison/bittorrent", "comparison/dmc", "comparison/eris", "comparison/hypercore", "comparison/index", "comparison/ipfs", "comparison/ld_fragments", "comparison/matrix", "comparison/nanopubs", "comparison/nostr", "comparison/solid", "comparison/spritely", "comparison/ssb", "comparison/xmpp", "data_structures", "definitions", "design", "discovery", "encryption", "evolvability", "federation", "identity", "index", "out_of_scope", "overview", "p2p_concepts", "protocol", "querying", "references", "sketchpad", "translation", "triplets", "vocabulary"], "filenames": ["backwards_compatibility.md", "comparison/activitypub.md", "comparison/at_protocol.md", "comparison/bittorrent.md", "comparison/dmc.md", "comparison/eris.md", "comparison/hypercore.md", "comparison/index.md", "comparison/ipfs.md", "comparison/ld_fragments.md", "comparison/matrix.md", "comparison/nanopubs.md", "comparison/nostr.md", "comparison/solid.md", "comparison/spritely.md", "comparison/ssb.md", "comparison/xmpp.md", "data_structures.md", "definitions.md", "design.md", "discovery.md", "encryption.md", "evolvability.md", "federation.md", "identity.md", "index.md", "out_of_scope.md", "overview.md", "p2p_concepts.md", "protocol.md", "querying.md", "references.md", "sketchpad.md", "translation.md", "triplets.md", "vocabulary.md"], "titles": ["12. Backwards Compatibility", "ActivityPub", "AT Protocol/Bluesky", "BitTorrent", "DMC", "ERIS", "Dat/Hypercore", "Comparison", "IPFS", "Linked Data Fragments", "Matrix", "NanoPubs", "Nostr", "SOLID", "Spritely/Goblin", "Secure Scuttlebutt", "XMPP", "6. Data Structures", "1. Definitions", "Design Decisions", "4. Discovery", "9. Encryption", "13. Evolvability", "11. Federation", "3. Identity", "p2p-ld", "Out of Scope", "Overview", "P2P Concepts", "2. Protocol", "8. Querying", "References", "Sketchpad", "Translation", "Triplets", "7. Vocabulary"], "terms": {"us": [0, 2, 8, 9, 12, 14, 18, 19, 24, 28, 30], "exist": [0, 7, 19, 27, 28], "web": [0, 9, 19, 24, 31], "seed": 0, "like": [0, 8, 9, 12, 14, 16, 17, 19, 34], "thing": [0, 19, 26], "codec": [0, 8, 9, 26, 32], "indic": [0, 9, 12, 16, 17, 24, 30, 35], "format": [0, 17, 33, 34], "metadata": [0, 7, 8, 9], "file": [0, 12, 14], "backup": 0, "mirror": 0, "behav": [0, 17], "peer": [0, 2, 9, 14, 19, 23, 24, 28, 29, 30, 35], "how": [0, 19, 20, 21, 24, 26, 27, 28, 30, 35], "can": [0, 7, 9, 14, 17, 18, 21, 24, 28, 29, 35], "them": [0, 14, 19, 20, 24, 25, 28, 35], "given": [0, 8, 9, 17, 24, 30, 35], "contain": [0, 4, 9, 14, 18, 30, 32], "see": [0, 2, 9, 17], "bep": 0, "52": 0, "v2": 0, "map": [0, 12], "feed": [0, 17], "we": [2, 8, 9, 12, 14, 16, 19, 20, 21, 28, 30, 32], "aren": 2, "t": [2, 12, 14, 17, 19, 32, 35], "too": [2, 17], "concern": [2, 9], "billionair": 2, "cosplai": 2, "altruist": 2, "technologi": [2, 9, 19, 28], "thei": [2, 14, 17, 18, 19, 20, 25, 28, 35], "produc": 2, "ha": [2, 9, 17, 18, 19, 24, 29], "few": [2, 19], "idea": [2, 9, 25], "particularli": [2, 9], "relat": [2, 9, 20, 28], "ident": [2, 7, 8, 14, 17, 18, 20, 28, 35], "ar": [2, 8, 9, 14, 17, 18, 19, 20, 24, 25, 26, 28, 30, 35], "interest": [2, 7, 19], "specif": [2, 9, 14, 19, 24, 30], "differenti": 2, "between": [2, 9, 14, 33], "handl": [2, 28], "where": [2, 8, 24, 28], "dn": [2, 7, 24], "entri": 2, "short": [2, 18], "resolv": [2, 9, 24, 35], "did": 2, "That": 2, "": [2, 8, 9, 12, 14, 17, 18, 19], "about": [2, 16, 19, 20], "rest": [2, 25], "i": [2, 7, 8, 9, 12, 14, 17, 21, 24, 25, 27, 28, 29, 35], "extrem": [2, 12, 14], "central": 2, "plc": 2, "which": [2, 8, 17, 28], "requir": [2, 9, 17, 19], "resolut": 2, "against": [2, 18], "singl": [2, 9, 19], "domain": [2, 12, 16, 19], "all": [2, 7, 9, 14, 19, 20, 25], "post": [2, 8, 9, 17], "funnel": 2, "through": [2, 14, 31], "big": 2, "graph": [2, 9, 17, 31], "servic": [2, 9, 16], "rather": [2, 9, 14, 19], "than": [2, 9, 14, 19], "directli": [2, 14, 17], "transpar": 2, "design": [2, 8, 9, 14], "ensur": 2, "market": 2, "advertis": [2, 17, 29], "layer": [2, 19], "actor": [2, 14, 19], "network": [2, 8, 9, 14, 19, 24, 28], "distribut": [4, 9, 14, 31], "mutabl": [4, 14], "http": [4, 5, 9, 12, 14, 16, 20, 21, 31], "inqlab": 4, "net": [4, 31], "project": [4, 7, 25], "encod": 5, "robust": [5, 28], "immut": [5, 14], "storag": [5, 8, 14], "codeberg": 5, "page": [5, 19, 25], "spec": [5, 12, 17, 26, 28], "thi": [7, 12, 14, 25, 27], "todo": 7, "protocol": [7, 9, 12, 14, 16, 20, 21, 25, 26, 28], "just": [7, 12, 17, 18, 25, 32], "situat": 7, "context": [7, 16, 19, 27], "talk": [7, 12], "shit": [7, 8], "obv": 7, "bittorr": [7, 8, 19], "ipf": 7, "problem": [7, 9], "ipld": [7, 17], "overlap": [7, 14], "differ": [7, 16, 17, 19, 20, 27], "dat": 7, "hypercor": 7, "sprite": [7, 31], "goblin": 7, "refer": [7, 18, 19, 24, 30, 35], "activitypub": [7, 8, 14], "secur": [7, 14, 31], "scuttlebutt": 7, "matrix": 7, "AT": [7, 12], "blueski": 7, "nostr": 7, "petnam": [7, 18], "Not": [7, 8], "so": [7, 9, 14, 17, 19, 35], "good": 7, "xmpp": [7, 20], "solid": 7, "fragment": [7, 17, 31], "summari": 7, "nanopub": 7, "eri": 7, "dmc": 7, "agregor": 7, "arweav": 7, "chord": 7, "earthstar": 7, "freenet": 7, "manyvers": 7, "p2panda": 7, "safe": 7, "storj": 7, "swarm": [7, 28], "base": [7, 14], "around": [7, 19], "coin": 7, "smart": 7, "contract": 7, "kademlia": 7, "rout": 7, "chunk": [7, 14], "store": [7, 8, 9, 14, 24], "node": [7, 9, 17, 24], "close": [7, 24, 35], "hash": [7, 14, 17], "space": [7, 14], "append": [7, 19], "onli": [7, 14, 19, 24, 35], "If": [8, 12, 19, 29], "git": 8, "p2p": [8, 9, 14, 19, 27], "ld": [8, 9, 14, 17, 19, 27, 28], "build": [8, 14], "heavili": 8, "inspir": 8, "its": [8, 9, 17, 19, 20, 24, 29], "shortcom": 8, "reveal": 8, "practic": [8, 9, 19], "slow": 8, "access": [8, 9, 14], "No": [8, 19], "miss": 8, "social": [8, 9, 14, 19, 28], "natur": 8, "infrastructur": [8, 19, 31], "had": 8, "tracker": 8, "similar": [8, 14, 17], "concept": [8, 9, 19], "organ": [8, 19, 28], "archiv": [8, 19], "henc": 8, "need": [8, 9, 14, 19, 20, 21], "filecoin": 8, "an": [8, 9, 12, 17, 19, 20, 24, 28, 29, 35], "exogen": 8, "incent": 8, "becom": [8, 9], "transact": 8, "gener": [8, 9, 12, 14, 19], "own": [8, 14, 19, 29], "trust": [8, 24], "eg": [8, 9, 17, 24, 29, 30, 35], "phish": 8, "attack": [8, 14], "becaus": [8, 19], "wai": [8, 12, 14, 17, 35], "know": [8, 18, 19, 20], "who": [8, 14], "hell": 8, "cid": 8, "It": [8, 12, 19], "possibl": [8, 9, 12, 19, 21], "do": [8, 9, 12, 19, 20, 25, 30], "curat": 8, "leat": 8, "when": [8, 21, 24, 29], "someth": [8, 14, 19], "riskier": 8, "lack": 8, "mean": [8, 14, 17, 19, 24], "have": [8, 9, 12, 14, 17, 18, 19, 21, 24, 28, 30], "lot": [8, 9, 12, 14], "hoc": 8, "multihash": 8, "whatnot": 8, "merkl": [8, 17], "dag": [8, 17], "perman": 8, "retain": 8, "custodi": 8, "control": [8, 9, 19], "over": [8, 19], "object": [8, 9, 14, 17, 29, 31], "fill": 9, "middl": 9, "entir": [9, 19], "serversid": 9, "sparql": 9, "clientsid": 9, "download": 9, "tripl": [9, 17, 31], "usag": 9, "queri": [9, 17, 20, 28, 31], "notori": 9, "being": [9, 14, 18], "resourc": [9, 14, 16, 19], "intens": 9, "much": [9, 14, 19], "more": [9, 19, 35], "complex": 9, "typic": 9, "algebra": 9, "server": [9, 12, 14, 19, 24], "potenti": [9, 18], "enorm": 9, "number": [9, 19], "place": [9, 14], "logic": 9, "client": [9, 12, 14], "architectur": [9, 12, 19], "decis": 9, "histori": 9, "descend": 9, "from": [9, 14, 17, 19, 24, 28, 29], "should": [9, 14, 17, 18, 19, 26], "work": [9, 14, 25, 32], "agent": 9, "our": [9, 14, 19], "behalf": [9, 35], "1": [9, 31], "ldf": 9, "split": [9, 23], "provid": 9, "pre": 9, "comput": [9, 14], "set": [9, 19], "selector": 9, "purposefulli": 9, "author": 9, "focu": [9, 14, 19], "primarili": 9, "pattern": [9, 14, 31], "compos": 9, "A": [9, 14, 17, 18, 19, 24, 31, 33, 34, 35], "subject": 9, "predic": 9, "defin": [9, 26, 35], "content": [9, 12, 14, 17], "estim": 9, "total": 9, "sinc": [9, 17, 18], "larg": [9, 14, 19], "pagin": 9, "hypermedia": 9, "retriev": [9, 31], "other": [9, 14, 19, 24, 25, 29, 35], "For": 9, "exampl": [9, 12], "correspond": [9, 14], "peopl": [9, 19, 20], "p": 9, "name": [9, 12, 14, 17, 18, 19], "o": 9, "tom": 9, "would": 9, "combin": 9, "includ": [9, 14, 17, 26], "each": [9, 17, 19, 24, 28], "field": [9, 24], "unspecifi": 9, "ani": [9, 19, 20, 24, 25, 26], "triplet": [9, 32, 35], "whose": [9, 29], "person": [9, 18, 19], "The": [9, 14, 17, 18, 19, 25, 28, 31], "host": [9, 19, 28], "partit": 9, "dataset": 9, "follow": [9, 14, 28], "emphas": 9, "execut": 9, "add": 9, "substanti": 9, "import": 9, "heighten": 9, "abus": [9, 35], "denial": 9, "re": [9, 14, 17, 19], "platform": [9, 17, 19], "also": [9, 14, 17, 19, 21, 35], "leaf": 9, "binari": [9, 17], "via": [9, 24], "repres": [9, 24, 28], "result": [9, 19], "thu": 9, "necessarili": [9, 14], "imagin": [9, 14, 19], "factual": 9, "assert": [9, 14], "imag": 9, "document": [9, 14], "etc": [9, 28], "less": [9, 35], "rigidli": 9, "complet": 9, "addition": [9, 28], "explicitli": [9, 14, 19, 26], "system": [9, 14, 19, 28], "unconcern": 9, "arbitrari": 9, "time": [9, 17, 19, 30], "anonym": 9, "expect": 9, "individu": [9, 24, 28], "feder": [9, 28], "doe": [9, 12, 26], "attempt": 9, "replac": 9, "improv": 9, "There": [9, 12, 19, 20], "philosoph": 9, "greater": 9, "semant": [9, 31], "instanti": [9, 14], "bigass": 9, "corpor": 9, "knowledg": [9, 31], "what": [9, 14, 26, 27, 28, 30], "integr": [9, 28], "rdf": [9, 17], "endpoint": 9, "homepag": 9, "linkeddatafrag": 9, "org": [9, 14, 16, 19, 20, 21, 31], "paper": [9, 31], "origin": [9, 14, 19, 24], "confer": 9, "verborgh": [9, 31], "et": [9, 14, 19], "al": [9, 14, 19], "2014": [9, 31], "2016": [9, 31], "earli": 9, "discuss": [9, 14], "saunder": [9, 25, 31], "2023": [9, 31], "again": 12, "though": 12, "distrust": 12, "anarcho": 12, "capitalist": 12, "worth": 12, "comparison": [12, 25], "minim": 12, "com": [12, 14, 16, 31], "isn": [12, 19], "speak": 12, "nip": 12, "noster": 12, "implement": [12, 14, 25], "kei": [12, 14, 35], "github": [12, 14], "blob": [12, 14], "master": [12, 14], "05": 12, "md": 12, "seem": 12, "webfing": 12, "json": 12, "under": 12, "well": 12, "known": [12, 24], "path": 12, "issu": [12, 24], "event": 12, "nip05": 12, "type": [12, 17, 20, 35], "pubkei": 12, "b0635d6a9851d3aed0cd6c495b282167acf761729078d975fc341b22650b07b9": 12, "kind": [12, 20], "0": [12, 24, 30, 31], "bob": [12, 18], "get": [12, 14], "respons": [12, 19, 30], "look": [12, 19], "consid": [12, 14, 28], "verifi": 12, "And": 12, "notion": [12, 17], "02": 12, "must": [12, 14, 20, 23, 24, 29], "relai": 12, "one": [12, 17, 18, 19, 24, 28], "anoth": [12, 17, 24, 28, 35], "veri": [12, 19, 25], "littl": 12, "formal": 12, "made": 12, "bunch": 12, "bitcoin": 12, "gui": 12, "institut": [14, 31], "closest": 14, "spirit": 14, "signific": 14, "experi": 14, "previous": 14, "primari": 14, "point": 14, "departur": 14, "applic": [14, 17], "run": [14, 19], "code": 14, "structur": [14, 28], "share": [14, 19, 23, 24, 35], "data": [14, 19, 23, 25, 27, 28, 31, 34], "complementari": 14, "choic": [14, 19], "emphasi": 14, "make": [14, 18, 19, 21, 23, 35], "technolog": [14, 19], "capabl": [14, 17, 31], "v": 14, "acl": 14, "might": [14, 17, 19], "coordin": 14, "check": [14, 18, 32], "richer": 14, "interact": [14, 17], "mutat": 14, "address": [14, 17, 20, 28], "entiti": [14, 20, 28], "encapsul": 14, "behavior": 14, "multipl": [14, 18, 19, 23], "onc": 14, "act": 14, "unum": 14, "focus": 14, "plan": 14, "up": [14, 19, 26], "evalu": 14, "some": [14, 19, 28], "One": [14, 18], "mai": [14, 18, 24], "diverg": 14, "fork": 14, "activ": [14, 19, 24], "doesn": [14, 19], "approv": 14, "oper": [14, 24, 35], "same": [14, 19], "link": [14, 17, 19, 24, 25, 27, 28, 29, 30, 31, 35], "forth": 14, "don": [14, 19, 32], "chang": [14, 19, 28, 32], "stuff": [14, 16], "learn": 14, "promis": 14, "pipelin": 14, "reduc": 14, "roundtrip": 14, "agnosticisim": 14, "ocapn": 14, "safeti": 14, "environ": 14, "Their": 14, "descript": [14, 25], "portabl": 14, "encrypt": [14, 17, 28], "locat": [14, 19, 24], "agnost": 14, "In": [14, 31], "word": [14, 19], "particular": [14, 24], "inform": [14, 19, 20], "stem": 14, "itself": [14, 20, 28], "case": [14, 24], "public": [14, 35], "thereof": 14, "both": 14, "support": [14, 17, 20], "latter": 14, "built": 14, "upon": 14, "former": 14, "oblivi": 14, "actual": 14, "those": 14, "possess": 14, "read": 14, "abl": [14, 19, 35], "vulner": 14, "sizeof": 14, "write": [14, 33], "abstract": [14, 19], "even": [14, 19], "sneakernet": 14, "uri": [14, 19], "lemmer": [14, 31], "webber": [14, 31], "n": [14, 35], "d": [14, 31], "golem": 14, "gitlab": 14, "readm": 14, "usernam": 16, "account": [16, 17, 24, 35], "discoveri": [16, 24, 28], "extens": [16, 20], "xep": [16, 20], "0030": [16, 20], "html": [16, 20, 31], "interoper": 16, "envelop": 17, "decoupl": 17, "merkel": 17, "packet": 17, "info": 17, "permiss": [17, 24, 29, 35], "scope": [17, 24, 35], "signatur": 17, "anyth": 17, "referenc": [17, 29], "without": [17, 30], "local": 17, "qualifi": 17, "within": [17, 23, 24, 28], "syntax": 17, "put": [17, 18], "blog": 17, "user": [17, 30, 35], "identifi": [17, 19, 24, 28, 29], "top": [17, 24], "level": [17, 19, 24], "order": [17, 35], "everi": [17, 19, 29], "default": 17, "declar": [17, 18, 19, 35], "intend": [17, 19, 21, 27, 28], "w": 17, "r": 17, "parent": 17, "numer": [17, 30, 35], "uniqu": [17, 18, 19], "specifi": [17, 30, 35], "sever": [17, 18, 34], "displai": 17, "take": 17, "upvot": 17, "repli": 17, "none": 17, "present": 17, "global": 17, "assum": 17, "special": [17, 24, 35], "form": [17, 28], "action": 17, "alwai": [17, 18], "root": 17, "travers": 17, "start": [17, 25], "construct": 17, "leav": [17, 19], "shortnam": 17, "hierarch": 17, "index": 17, "intrins": [17, 19], "nest": 17, "blank": [17, 30], "position": 17, "children": [17, 30, 35], "star": 17, "wikidata": 17, "describ": [17, 25, 26, 28, 31], "first": [17, 20, 25], "pack": 17, "here": [18, 25], "remind": 18, "me": [18, 19], "glossari": 18, "direct": 18, "real": 18, "yet": 18, "placehold": 18, "cryptograph": [18, 24], "beacon": 18, "contextu": [18, 19], "alic": 18, "statu": 18, "canon": 18, "nonuniqu": 18, "dereferenc": [18, 24, 28], "stub": [18, 25, 32], "cross": 18, "scratchpad": 19, "keep": [19, 25], "track": [19, 25], "lol": 19, "energi": 19, "decentr": [19, 31], "been": 19, "vaccuum": 19, "cryptocurr": 19, "blockchain": 19, "scam": 19, "These": 19, "artifici": 19, "scarciti": 19, "think": 19, "orient": 19, "self": 19, "sovereignti": 19, "mutual": [19, 35], "radic": 19, "truli": 19, "autonom": 19, "outsid": 19, "libertarian": 19, "fantasi": 19, "maxim": 19, "effici": 19, "guarante": 19, "reliabl": 19, "persist": [19, 31], "among": 19, "themselv": 19, "voluntarili": 19, "sustain": 19, "out": [19, 24, 25], "maintain": [19, 23], "economi": 19, "tool": 19, "u": 19, "digit": [19, 31], "life": 19, "onlin": 19, "inevit": 19, "second": 19, "law": 19, "thermodynam": 19, "darwinian": 19, "evolut": 19, "buddhism": 19, "insist": 19, "noth": 19, "suffer": 19, "delus": 19, "third": [19, 20], "chapter": 19, "ecclesiast": 19, "To": 19, "everyth": 19, "season": 19, "part": 19, "common": 19, "wisdom": 19, "But": 19, "believ": 19, "deal": 19, "haven": 19, "begun": 19, "octavia": 19, "butler": 19, "parabl": 19, "sower": 19, "cool": 19, "last": 19, "forev": 19, "kunz": [19, 31], "2017": [19, 31], "reason": 19, "fund": 19, "shut": 19, "down": 19, "cultur": 19, "shift": 19, "larger": 19, "render": 19, "fix": 19, "irrelev": 19, "matter": 19, "mani": [19, 24], "redirect": 19, "want": [19, 30], "creat": [19, 23, 34], "unambigu": 19, "elsewher": 19, "appear": 19, "phenomenon": 19, "continu": 19, "fragil": 19, "instead": 19, "adapt": 19, "misplac": 19, "tell": [19, 24], "you": 19, "url": [19, 31], "goe": 19, "now": 19, "newspap": 19, "go": 19, "busi": 19, "websit": 19, "offlin": 19, "someon": 19, "save": 19, "pdf": 19, "rehost": [19, 23], "renam": 19, "equival": [19, 24, 35], "translat": 19, "unalter": 19, "vision": 19, "fiction": 19, "linguist": 19, "mathemat": 19, "try": 19, "crawler": 19, "determinist": 19, "algorithm": 19, "restaur": 19, "reserv": 19, "incorpor": 19, "neither": 19, "sacrific": 19, "internet": 19, "giant": 19, "nor": 19, "altern": 19, "googl": 19, "doc": 19, "slack": 19, "profession": 19, "sysadmin": 19, "raspberri": 19, "pi": 19, "plug": 19, "95": 19, "rel": 19, "accomod": 19, "difficult": 19, "depend": 19, "claim": 19, "de": [19, 31], "facto": 19, "ostensibli": 19, "lookin": 19, "mastodon": 19, "find": [20, 30], "connect": [20, 24, 28], "bootstrap": [20, 24], "initi": 20, "gossip": 20, "hole": 20, "punch": 20, "three": 20, "discov": [20, 28], "basic": 20, "categori": 20, "featur": 20, "offer": 20, "addit": [20, 28], "item": 20, "associ": [20, 35], "whether": [20, 24], "jid": 20, "two": 20, "wherea": 20, "therefor": 20, "open": 21, "protect": 21, "privaci": 21, "consent": 21, "en": 21, "wikipedia": 21, "wiki": 21, "omemo": 21, "supra": [23, 28], "cluster": [23, 28], "explicit": 23, "govern": [23, 28], "polici": 23, "across": 23, "list": 23, "extern": 24, "verif": 24, "band": 24, "manifest": 24, "runtim": 24, "collect": [24, 35], "bidirect": 24, "samea": [24, 35], "fedivers": 24, "backlink": 24, "subscrib": 24, "treat": 24, "give": 24, "alia": 24, "accept": [24, 29], "deni": [24, 29], "ignor": 24, "retir": 24, "succe": 24, "harrass": 24, "hop": 24, "friend": [24, 35], "pub": 24, "parlanc": 24, "ssb": 24, "static": [24, 31], "inbound": 24, "progress": 25, "plz": 25, "reli": 25, "statement": [25, 31], "effect": 25, "provision": 25, "site": 25, "2022": [25, 31], "23": 25, "06": [25, 31], "08": [25, 31], "popul": 25, "section": [25, 28], "refresh": 25, "myself": 25, "sketch": 25, "diagrammat": 25, "sketchpad": 25, "befor": 25, "flesh": 25, "ref": 25, "genindex": 25, "modindex": 25, "search": 25, "left": 26, "detail": 26, "semweb": 27, "limit": 27, "whom": 27, "develop": 27, "timelin": 27, "overview": 28, "variou": 28, "definit": 28, "term": 28, "encompass": 28, "piec": 28, "request": 28, "evolv": 28, "accommod": 28, "plugin": 28, "properti": 28, "univers": 28, "vocabulari": 28, "messag": 28, "decrypt": 28, "backward": 28, "compat": 28, "discover": 29, "allow": [29, 35], "desig": 29, "implicit": 29, "owner": 29, "propos": 29, "block": 29, "automat": 29, "drop": 29, "subgraph": 30, "containernam": 30, "childnam": 30, "qualif": 30, "most": 30, "recent": 30, "container": 30, "jonni": 31, "l": 31, "neuro": 31, "scienc": 31, "31": 31, "arxiv": 31, "ab": 31, "2209": 31, "07493": 31, "visit": 31, "03": 31, "01": 31, "doi": 31, "10": 31, "48550": 31, "2": 31, "christin": 31, "randi": 31, "farmer": 31, "juliana": 31, "sim": 31, "heart": 31, "www": 31, "core": 31, "07": 31, "3": 31, "ruben": 31, "sam": 31, "coppen": 31, "miel": 31, "vander": 31, "sand": 31, "erik": 31, "mannen": 31, "pieter": 31, "colpaert": 31, "rik": 31, "van": 31, "wall": 31, "scale": 31, "proceed": 31, "7th": 31, "workshop": 31, "04": 31, "4": 31, "olaf": 31, "hartig": 31, "joachim": 31, "herwegen": 31, "lauren": 31, "vocht": 31, "ben": 31, "meester": 31, "gerald": 31, "haesendonck": 31, "low": 31, "cost": 31, "interfac": 31, "journal": 31, "37": 31, "38": 31, "184": 31, "206": 31, "linkinghub": 31, "elsevi": 31, "pii": 31, "s1570826816000214": 31, "1016": 31, "j": 31, "websem": 31, "003": 31, "5": 31, "surveil": 31, "02t00": 31, "00": 31, "jon": 31, "e": 31, "hc": 31, "54749": 31, "17613": 31, "syv8": 31, "cp10": 31, "6": 31, "john": 31, "scout": 31, "calvert": 31, "jeremi": 31, "debarri": 31, "matthew": 31, "hanlon": 31, "greg": 31, "jan\u00e9": 31, "sandra": 31, "sweat": 31, "sticki": 31, "16": 31, "39": 31, "14": 31, "datasci": 31, "codata": 31, "articl": 31, "5334": 31, "dsj": 31, "039": 31, "09": 31, "dummi": 32, "invalid": 32, "rust": 32, "cach": 32, "ci": 32, "mermaid": 32, "toolkit": 33, "schema": 33, "packag": 34, "manipul": 34, "sko": 35, "stronger": 35, "predict": 35, "alphabet": 35, "weaker": 35, "proxi": 35, "identit": 35, "alt": 35, "correct": 35, "stabl": 35, "won": 35, "privat": 35, "relationship": 35, "role": 35, "independ": 35, "keybear": 35, "visibl": 35, "rule": 35, "could": 35, "deep": 35}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"backward": 0, "compat": 0, "http": 0, "server": 0, "bittorr": [0, 3], "ipf": [0, 8], "activitypub": [0, 1], "AT": 2, "protocol": [2, 29], "blueski": 2, "dmc": 4, "eri": 5, "dat": 6, "hypercor": 6, "comparison": 7, "p2p": [7, 25, 28], "social": [7, 35], "link": [7, 9], "data": [7, 9, 17, 32], "structur": [7, 17], "To": [7, 9], "categor": 7, "point": 7, "problem": 8, "ipld": 8, "overlap": [8, 9], "differ": [8, 9], "fragment": [9, 30], "summari": 9, "veri": 9, "clear": 9, "refer": [9, 14, 31], "matrix": 10, "nanopub": 11, "nostr": 12, "dn": 12, "ident": [12, 24], "petnam": 12, "Not": 12, "so": 12, "good": 12, "solid": 13, "sprite": 14, "goblin": 14, "secur": 15, "scuttlebutt": 15, "xmpp": 16, "contain": [17, 35], "triplet": [17, 34], "schema": 17, "codec": 17, "version": [17, 30], "definit": 18, "design": 19, "decis": 19, "cultiv": 19, "abund": 19, "perman": 19, "i": 19, "imposs": 19, "ambigu": 19, "natur": 19, "autonomi": 19, "conveni": 19, "can": 19, "coexist": 19, "discoveri": 20, "scrap": 20, "encrypt": 21, "todo": 21, "evolv": 22, "feder": 23, "shard": [23, 29], "moder": 23, "instanc": 24, "alias": 24, "rotat": 24, "beacon": 24, "ld": 25, "document": 25, "statu": 25, "indic": 25, "tabl": 25, "out": 26, "scope": 26, "implement": 26, "overview": 27, "background": 27, "us": 27, "roadmap": 27, "concept": 28, "connect": 29, "request": 29, "backlink": 29, "queri": 30, "syntax": 30, "locat": 30, "sketchpad": 32, "system": 32, "diagram": 32, "graph": 32, "model": 32, "translat": 33, "vocabulari": 35, "import": 35}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"Backwards Compatibility": [[0, "backwards-compatibility"]], "HTTP Servers": [[0, "http-servers"]], "BitTorrent": [[0, "bittorrent"], [3, "bittorrent"]], "IPFS": [[0, "ipfs"], [8, "ipfs"]], "ActivityPub": [[0, "activitypub"], [1, "activitypub"]], "AT Protocol/Bluesky": [[2, "at-protocol-bluesky"]], "DMC": [[4, "dmc"]], "ERIS": [[5, "eris"]], "Dat/Hypercore": [[6, "dat-hypercore"]], "Comparison": [[7, "comparison"]], "P2P": [[7, null]], "Social": [[7, null], [35, "social"]], "Linked Data": [[7, null]], "Data Structures": [[7, null], [17, "data-structures"]], "To be categorized": [[7, "to-be-categorized"]], "Points of comparison": [[7, "points-of-comparison"]], "Problems": [[8, "problems"]], "IPLD": [[8, "ipld"]], "Overlap": [[8, "overlap"], [9, "overlap"]], "Differences": [[8, "differences"], [9, "differences"]], "Linked Data Fragments": [[9, "linked-data-fragments"]], "Summary": [[9, "summary"]], "To be very clear!": [[9, null]], "References": [[9, "references"], [14, "references"], [31, "references"]], "Matrix": [[10, "matrix"]], "NanoPubs": [[11, "nanopubs"]], "Nostr": [[12, "nostr"]], "DNS identity": [[12, "dns-identity"]], "Petnames": [[12, "petnames"]], "Not so good": [[12, "not-so-good"]], "SOLID": [[13, "solid"]], "Spritely/Goblin": [[14, "spritely-goblin"]], "Secure Scuttlebutt": [[15, "secure-scuttlebutt"]], "XMPP": [[16, "xmpp"]], "Containers": [[17, "containers"]], "Triplets": [[17, "triplets"], [34, "triplets"]], "Schema": [[17, "schema"]], "Codecs": [[17, "codecs"]], "Versioning": [[17, "versioning"]], "Definitions": [[18, "definitions"]], "Design Decisions": [[19, "design-decisions"]], "Cultivate Abundance": [[19, "cultivate-abundance"]], "Permanence is Impossible": [[19, "permanence-is-impossible"]], "Ambiguity is Natural": [[19, "ambiguity-is-natural"]], "Autonomy and Convenience Can Coexist": [[19, "autonomy-and-convenience-can-coexist"]], "Discovery": [[20, "discovery"]], "Scraps": [[20, "scraps"]], "Encryption": [[21, "encryption"]], "TODO": [[21, "todo"]], "Evolvability": [[22, "evolvability"]], "Federation": [[23, "federation"]], "Sharding": [[23, "sharding"], [29, "sharding"]], "Moderation": [[23, "moderation"]], "Identity": [[24, "identity"]], "Instances": [[24, "instances"]], "Aliases": [[24, "aliases"]], "Rotation": [[24, "rotation"]], "Beacons": [[24, "beacons"]], "p2p-ld": [[25, "p2p-ld"]], "Document Status": [[25, "document-status"]], "Indices and tables": [[25, "indices-and-tables"]], "Out of Scope": [[26, "out-of-scope"]], "Implementation": [[26, "implementation"]], "Overview": [[27, "overview"]], "Background": [[27, "background"]], "Use": [[27, "use"]], "Roadmap": [[27, "roadmap"]], "P2P Concepts": [[28, "p2p-concepts"]], "Protocol": [[29, "protocol"]], "Connection": [[29, "connection"]], "Requests": [[29, "requests"]], "Backlinks": [[29, "backlinks"]], "Querying": [[30, "querying"]], "Syntax": [[30, "syntax"]], "Location": [[30, "location"]], "Version": [[30, "version"]], "Query Fragments": [[30, "query-fragments"]], "Sketchpad": [[32, "sketchpad"]], "System Diagram": [[32, "system-diagram"]], "Graph Data Model": [[32, "graph-data-model"]], "Translation": [[33, "translation"]], "Vocabulary": [[35, "vocabulary"]], "Imports": [[35, "imports"]], "Container": [[35, "container"]]}, "indexentries": {"bluesky": [[2, "index-1"]], "did": [[2, "index-2"]], "identity": [[2, "index-0"], [2, "index-2"], [18, "term-Identity"]], "bittorrent": [[8, "index-1"]], "ipfs": [[8, "index-0"]], "merkle dag": [[8, "index-3"], [17, "index-0"]], "git": [[8, "index-2"]], "fragments": [[9, "index-0"]], "linked data": [[9, "index-0"]], "peer federations": [[9, "index-2"]], "sparql": [[9, "index-1"]], "dns": [[12, "index-0"]], "petnames": [[12, "index-1"]], "container": [[14, "index-0"], [18, "term-Container"]], "content addressing": [[14, "index-2"]], "encryption": [[14, "index-4"]], "mutability": [[14, "index-3"]], "portability": [[14, "index-1"]], "storage": [[14, "index-1"]], "beacon": [[18, "term-Beacon"]], "petname": [[18, "term-Petname"]], "instances": [[24, "index-0"]]}}) \ No newline at end of file diff --git a/sketchpad.html b/sketchpad.html index 7bd4df9..4a0a06b 100644 --- a/sketchpad.html +++ b/sketchpad.html @@ -3,7 +3,7 @@ - + @@ -158,23 +158,42 @@

    Introduction

    Protocol

    Ecosystem

      @@ -183,6 +202,7 @@

    Drafting

    Meta

    @@ -229,7 +249,8 @@

    System Diagram#

    Just a stub to check if mermaid works

    -
    erDiagram
    +
    + erDiagram IDENTITY { string hash } @@ -244,9 +265,7 @@ BEACON }o--|{ INSTANCE : links BEACON }o--|| IDENTITY : represents -
    -
    -
    +

    Graph Data Model#