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

Initial process upgrades for Multiformats registry group and org #65

Merged
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
bf8c973
initial process upgrade for multiformats repo
Jul 14, 2023
77007bb
list out well-known registry policies from RFC8126
Jul 14, 2023
5a365ef
minor tweaks and github templates
Jul 17, 2023
5eab8d0
add new issue template
bumblefudge Jul 17, 2023
6a703d7
update issues
bumblefudge Jul 17, 2023
924721b
yml typos how embarassing
bumblefudge Jul 17, 2023
fc4f4e8
yml typos how embarassing
bumblefudge Jul 17, 2023
8b00470
yml typos how embarassing
bumblefudge Jul 17, 2023
9e53696
oh wait it was gh specific syntax
bumblefudge Jul 17, 2023
05887e9
oh man
bumblefudge Jul 17, 2023
f322d3e
oh man
bumblefudge Jul 17, 2023
ff1f407
last tweak
bumblefudge Jul 17, 2023
6c19228
Update contributing.md
bumblefudge Jul 21, 2023
1ab4da9
Update contributing.md
bumblefudge Jul 21, 2023
2ea1271
Update README.md
bumblefudge Jul 21, 2023
87d1427
change example per vmx suggestion
bumblefudge Jul 24, 2023
0d5ccdc
Update contributing.md
bumblefudge Jul 24, 2023
f8b38ef
Update contributing.md
bumblefudge Jul 24, 2023
f37b62e
Update .github/ISSUE_TEMPLATE/BUG-REPORT.yml
bumblefudge Jul 24, 2023
dab4d59
add implementation announcement issue template
bumblefudge Jul 24, 2023
f75eb98
reverse hardwraps as per vmx request
bumblefudge Jul 24, 2023
e4064af
move out some templates to discussions
bumblefudge Aug 31, 2023
40bff07
move over templates from pr#65
bumblefudge Aug 31, 2023
edecea2
template updates
bumblefudge Aug 31, 2023
4644edd
oops wrong branch
bumblefudge Aug 31, 2023
8e6d769
remove two templates
bumblefudge Oct 24, 2023
9bd83ec
address last remaining comments
bumblefudge Oct 24, 2023
963024d
address missing links
bumblefudge Oct 24, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE/BUG-REPORT.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: "Bug Report - documentation or registries"
description: Report possible bugs in multiformats spec, process docs, and/or the multiformats-wide registry.
title: "🐛 [DOC/PROCESS BUG] - <title>"
labels: [
"bug"
]
body:
- type: textarea
id: description
attributes:
label: "Description"
description: Please enter an explicit description of your issue,
placeholder: Short and explicit description of your incident, ideally with commit-specific link to lines
validations:
required: true
- type: input
id: reprod-url
attributes:
label: "Reproduction URL"
description: Please enter your GitHub URL to provide a reproduction of the issue
placeholder: ex. https://github.com/multiformats/multiformats/
validations:
required: true
- type: textarea
id: context
attributes:
label: "Context"
description: Please provide additional context
placeholder: "Context or external links needed to explain the possible mistake"
validations:
required: true
37 changes: 37 additions & 0 deletions .github/ISSUE_TEMPLATE/IMPLEMENTATION-REGISTRATION.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: "Register multi- Multi- Implementation"
description: Register a completec and conformant implementation of 2 or more multiformats
bumblefudge marked this conversation as resolved.
Show resolved Hide resolved
title: "📚 [NEW PROJECT] - <title>"
labels: [
"implementation"
]
body:
- type: input
id: name
attributes:
label: "Name"
description: Under what name can developers find this multi-XX implementation (say, as a library in package managers)
placeholder: (language/framework)-Multi(projects) is the default template
validations:
required: false
- type: checkboxes
attributes:
label: "Have read contributing"
description: I have read the [contributing](./contributing.md) document
options:
- label: I read it!
validations:
required: true
- type: checkboxes
attributes:
label: "Tests complete and passing"
description: I have tested it against existing libraries using test cases in each multi repo
options:
- label: Tests pass!
validations:
required: true
- type: textarea
id: solution_and_rationale
attributes:
label: "Unique properties"
description: Unique strengths, properties, or use-cases supported compared to other implementations.
placeholder: Details welcome!
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Protocol Labs Vulnerability Disclosure Team
url: mailto:security@ipfs.io
about: Please do NOT open issues related to security of implementations or spec here without contacting the IPFS security team first.
99 changes: 55 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,23 @@

> The main repository for discussing multiformats

Currently, we have the following formats. More formats are being discussed and worked on.
Multiformats is a set of self-describing protocol values.
These values are foundational in that they are low-level building blocks for both data and network layers of the composable protocols making up IPFS, IPLD, libp2p, and many other decentralized data systems.
This repository's issues and pull requests are currently the primary venue for the coordination between the various registries making up the group, each of which is separately being hardened as specifications and public, formal registries over time.
See [contributing.md][./contributing.md] for more details on governance and process.

| Repo | Captain | Status | IETF |
## Current Registries

Currently, we have the following formats, each of which corresponds to a specification and a registry.
More formats are being discussed and may be added over time, but the following are the mature ones to date:

| Repo | Maintainer | Status | IETF |
|------|---------|--------|------|
| [multiaddr](https://github.com/multiformats/multiaddr)| @lgierth | stable | [WIP](https://github.com/multiformats/multiaddr/tree/doc/internet-draft) |
| [multibase](https://github.com/multiformats/multibase) | @jbenet | stable | [W3C DVCG](https://github.com/w3c-dvcg/multibase) |
| [multicodec](https://github.com/multiformats/multicodec)| @jbenet | stable | TODO |
| [multihash](https://github.com/multiformats/multihash)| @jbenet | stable | [W3C DVCG](https://github.com/w3c-dvcg/multihash) |
| [multistream](https://github.com/multiformats/multistream)| @diasdavid | stable | TODO |
| [multigram](https://github.com/ipfs/specs/pull/123) | | WIP | TODO |
| [multikey](https://github.com/ipfs/specs/issues/58) | | WIP | TODO |
| [multibase](https://github.com/multiformats/multibase) | @jbenet | stable | [W3C CCG](https://github.com/w3c-ccg/multibase) |
| [multicodec](https://github.com/multiformats/multicodec)| @jbenet | stable | TBD |
| [multihash](https://github.com/multiformats/multihash)| @jbenet | stable | [W3C CCG](https://github.com/w3c-ccg/multihash) |
bumblefudge marked this conversation as resolved.
Show resolved Hide resolved
| [multikey](https://github.com/ipfs/specs/issues/58) | @protocol | WIP | TBD |
bumblefudge marked this conversation as resolved.
Show resolved Hide resolved

See the project directory, below, for implementations and other related repositories.

Expand All @@ -26,58 +32,67 @@ See the project directory, below, for implementations and other related reposito

## Table of Contents

- [Background](#background)
- [An Example: Multihash](#an-example-multihash)
- [A note on the word Multiformats](#a-note-on-the-word-multiformats)
- [Project Directory](#project-directory)
- [Protocols](#protocols)
- [Protocols in Progress](#protocols-in-progress)
- [Implementations](#implementations)
- [Go Implementations](#go-implementations)
- [JavaScript Implementations](#javascript-implementations)
- [Other Implementations](#other-implementations)
- [Other Repositories](#other-repositories)
- [Contribute](#contribute)
- [License](#license)
- [multiformats](#multiformats)
bumblefudge marked this conversation as resolved.
Show resolved Hide resolved
- [Current Registries](#current-registries)
- [Table of Contents](#table-of-contents)
- [Background](#background)
- [A note on the word Multiformats](#a-note-on-the-word-multiformats)
- [Project Directory](#project-directory)
- [Implementations](#implementations)
- [Multiaddr Implementations](#multiaddr-implementations)
- [Multihash Implementations](#multihash-implementations)
- [Multicodec Implementations](#multicodec-implementations)
- [Other Implementations](#other-implementations)
- [Other Repositories](#other-repositories)
- [Maintainers](#maintainers)
bumblefudge marked this conversation as resolved.
Show resolved Hide resolved
- [Contribute](#contribute)
- [License](#license)

## Background

Every choice in computing has a tradeoff. This includes formats, algorithms, encodings, and so on. And even with a great deal of planning, decisions may lead to breaking changes down the road, or to solutions which are no longer optimal. Allowing systems to evolve and grow is important.
Every choice in computing has a tradeoff.
This includes formats, algorithms, encodings, and so on.
And even with a great deal of planning, decisions may lead to breaking changes down the road, or to solutions which are no longer optimal.
Allowing systems to evolve and grow is important.

Multiformats is a collection of protocols which aim to future-proof systems, today. They do this mainly by allowing data to be self-describable. This allows interoperability, protocol agility, and helps us avoid lock in. Currently, our protocols (both works in progress and implemented) cover the following areas:
Multiformats is a collection of protocols which aim to future-proof systems, today.
They do this mainly by allowing data to be self-describable.
This allows interoperability, protocol agility, and helps us avoid various forms of lock-in.
Currently, these interlocking protocols (both works in progress and implemented) cover the following areas:

- [multiaddr](https://github.com/multiformats/multiaddr): network addresses
- [multibase](https://github.com/multiformats/multibase): base encodings
- [multicodec](https://github.com/multiformats/multicodec): serialization codes
- [multigram](https://github.com/multiformats/multigram): protocol negotiation and multiplexing over datagrams
- [multihash](https://github.com/multiformats/multihash): cryptographic hashes
- [multikey](https://github.com/ipfs/specs/issues/58): cryptographic keys and artifacts
- [multistream](https://github.com/multiformats/multistream): stream wire protocols
- [multistream-select](https://github.com/multiformats/multistream-select): Friendly protocol multiplexing.
Copy link
Member

Choose a reason for hiding this comment

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

multistream-select might still be a thing, so it might make sense to keep it here. @marten-seemann or @mxinden might know more.

Copy link
Member

Choose a reason for hiding this comment

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

Thank you for the ping. I suggest not standardizing multistream-select. I think it is very libp2p specific. If one would want to standardize a protocol negotiation protocol, I suggest starting from scratch similar to libp2p/specs#349.


The self-describing aspects of the protocols have a few stipulations:
Several of the multiformats are stable, and work on the others is ongoing.
Implementers and refiners of the drafts of any one of these registries or their tooling are welcome to [contribute](./contributing.md), without needing to understand deeply or track progress on the others.
Across these otherwise quite different use-cases and mechanisms, the self-describing aspects of the protocols have a few stipulations in common:
bumblefudge marked this conversation as resolved.
Show resolved Hide resolved

- they must be in the value (not passed in out of band, in function calls, implicit choices, or documentation);
- the "prefixes" use to self-describe a value must be inline with the value (not passed out-of-band, in function calls, implicit choices, or documentation);
- they must be compact and have a binary-packed representation (as opposed to a sparser encoding) or they will hinder performance;
- they must have a human readable representation.

Several of the multiformats are stable, and we're working on the others. We are trying to prioritize their usage as soon as possible. What they offer -- protocol interoperability and future-proofing -- would have real-world consequences.

Towards that end, we are encouraging implementations of these protocols; if you know of any, please link them here (or add them to the organization!).
- they must have a human-readable representation.

### A note on the word Multiformats

Multiformats is the name for the organization, but it can also be used to refer to protocols; for instance, in the sentence "Use one of the multiformats". Formats is interchangeable with protocols, here. We try to capitalize Multiformats when it refers to the organization, on GitHub.
`Multiformats` is the name for the community (and the "organization" in GitHub's access control model), but `multiformats` can also be used to refer to protocols; for instance, in the sentence "Use one of the multiformats".
Formats is interchangeable with protocols, here, as each format is designed in tandem with one or more protocols which handle those self-describing values centrally.
We try to capitalize Multiformats when it refers to the organization.
Copy link
Member

Choose a reason for hiding this comment

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

FYI: I didn't know that. I usually capitalize Multiformats in any case as I treat it as a proper noun. But that might only be me. I'd just remove that sentence.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This note dates back to 2016 according to github "blame"/commit-tracing view. I don't mind either way if we remove it or keep it but I have noticed it was at least internally consistent in the other readmes in this org?

Copy link
Member

Choose a reason for hiding this comment

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

@rvagg any thoughts?

Copy link
Member

Choose a reason for hiding this comment

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

don't care enough to have an opinion, I'm more triggered by using ` two sentences up around the words, but not enough to object either


## Project Directory

Below, a list of all of the projects in the Multiformats organization is listed.

**Captains** are the active leads for each project. Their responsibilities are to make sure that issues and pull requests are attended to in a timely manner, and general upkeep. If you have questions about a repository, or need feedback, please contact them as appropriate.
**Maintainers** are the active leads for each project, even if the specification is still under construction.
bumblefudge marked this conversation as resolved.
Show resolved Hide resolved
Their responsibilities are to make sure that issues and pull requests are attended to in a timely manner, and general upkeep.
If you have questions about a repository, or need feedback, please contact them as appropriate.
If any of the specifications defining these formats are formalized and finalized in a standards body, these maintainers may continue on as Registrars of the table of entries which can keep growing after stabilizing the syntax and tooling interfaces.

### Implementations
bumblefudge marked this conversation as resolved.
Show resolved Hide resolved

As well as specifications, we also have some implementations in the organization
As well as specifications, we also have some implementations checked into and maintained through the GitHub organization.
Checking in implementation code here is not a requirement of listing here, unless maintainership is being transferred.

#### Multiaddr Implementations

Expand Down Expand Up @@ -155,15 +170,11 @@ As well as specifications, we also have some implementations in the organization

## Contribute

Please contribute! [Dive into the issues](https://github.com/multiformats/multiformats/issues)!

Check out our [contributing document](contributing.md) for more information on how we work, and about contributing in general. Please be aware that all interactions related to multiformats are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).

If you're interested in proposing a new format (in addition to multihash, multistream, and so on), [open an issue](https://github.com/multiformats/multiformats/issues/new) in this repository, explaining the name of the format, what it is for, and why you think it should become one of the multiformats. Pointing to any existing implementations would also be great, if there are any. If you want to implement a multiformat in a new language, open an issue in the main repository for the relevant multiformat: for instance, if you want to write rust-multicodec, open an issue in the multiformats/multicodec repository. This will allow others to know that you're working on it, and potentially join in the effort.

Small note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification.
Check out our [contributing document](contributing.md) for more information on how we work, and about contributing in general.

## License

This repository is only for documents. All of these are licensed under the [CC-BY-SA 3.0](https://ipfs.io/ipfs/QmVreNvKsQmQZ83T86cWSjPu2vR3yZHGPm5jnxFuunEB9u) license © 2016 Protocol Labs Inc. Any code is under a [MIT](LICENSE) © 2016 Protocol Labs Inc.
This repository is only for documents.
All of these are licensed under the [CC-BY-SA 3.0](https://ipfs.io/ipfs/QmVreNvKsQmQZ83T86cWSjPu2vR3yZHGPm5jnxFuunEB9u) license © 2016 Protocol Labs Inc. Any code is under a [MIT](LICENSE) © 2016 Protocol Labs Inc.

[Code of Conduct]: https://github.com/ipfs/community/blob/master/code-of-conduct.md