Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions rfc-rfc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# RFC: Storacha RFCs
Status: Informational

## Authors

- [Travis Vachon](https://github.com/travis), [Storacha Network](https://storacha.network/)

## Introduction

The Storacha "Request For Comments" process is modeled after the ["Internet Engineering Task Force" (IETF) process of the same name](https://www.ietf.org/process/rfcs/) both as an homage to this legendary standards body and in recognition of the fact that our team aspires to create open source, standardized protocols for decentralized data storage and authorized upload and retrieval that have the potential to outlast our team and organization. Despite this aspiration, however, our team is both culturally and practically very different from the IETF and as such the customs and practices of the IETF's RFC process are not necessarily well suited to our needs.

This document lays out guidelines for the creation of Storacha RFC documents. We describe the purpose of a Storacha RFC, discuss the various types of RFCs and provide templates and guidelines for RFC authors to both aid in their creation and help provide consistency between them. We also discuss both existing and desired processes for managing RFCs through their lifecycles and building consensus across our team toward the concrete actions RFCs propose.
Copy link
Member

Choose a reason for hiding this comment

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

Are there templates here? I don't see them. Should there be templates here?

(like I imagine a simple RFC for: informational, exprimental, proposed standard)


## The Purpose of Storacha RFCs

Storacha RFCs serve a variety of purposes including:

1) Building consensus on courses of actions that could face blocking issues from other team members
2) Inviting brainstorming of ideas that solve underlying issues in a simpler or more elegant way
3) Ensuring everyone on the team is aware of decisions and techniques so they can apply them in their own work
4) Laying groundwork for ideas that will eventually become formal specifications
5) Discussion of decisions that "ripple across our architecture"
6) Discussion of new patterns we expect to use in more than one service in our system
7) Documentation of existing patterns and practices in use by our team
8) Proposing potential externally-facing standards
9) Documenting "Storacha Standards" - protocols to which our team is committed to maintaining backwards compatibility indefinitely

The bar for these purposes does not need to be high - if you suspect it may serve one or more of the purposes above, please feel free to create an RFC to drive discussion forward.

## Should I Write an RFC?

Some criteria to consider when deciding whether to write an RFC include:

1) Does this decision commit our work to a path that we may not be able to easily walk back in the future?
2) Am I proposing a protocol, where once something is in the world we will need to deal with backwards compatibility?
3) Is this an architectural decision that will impact multiple parts of our system?
4) Will this work need to be parallelized and therefore require multiple team members to work in close synchrony?
5) Is the proposed change too complex for a quick spike that could de-risk the decision?
6) Is there a large degree of ambiguity, where several different approaches might work?
7) Is this intended to become a Storacha Standard?

If you answer "yes" to one or more, consider writing an RFC.

## RFC Status

> It is a regrettably well spread misconception that publication as an RFC provides some level of recognition. It does not, or at least not any more than the publication in a regular journal. In fact, each RFC has a status, relative to its relation with the Internet standardization process: Informational, Experimental, or Standards Track (Proposed Standard, Draft Standard, Internet Standard), or Historic. This status is reproduced on the first page of the RFC itself, and is also documented in the periodic "Internet Official Protocols Standards" RFC (STD 1). But this status is sometimes omitted from quotes and references, which may feed the confusion.

https://datatracker.ietf.org/doc/html/rfc1796

Inspired by the IETF, we give RFCs a "status" that helps reviewers contextualize information in the RFC. RFCs can and should change status over time - an Informational RFC may become an Experimental RFC if it has moved into prototyping, and may become "Standards Track" if it becomes widely used and appropriate for external use. Statuses include:

- Informational
- Experimental
- Best Current Practice
- Standards Track
- Historical

"Standards Track" is broken down into 2 sub-statuses:

- Proposed Standard
- Published Standard

With heavy inspiration from https://www.ietf.org/process/rfcs/ the statuses are described below.

### Informational

Informational RFCs are published for the general information of the Storacha community, and do not represent consensus or recommendations for our team or community, nor any kind of (even potential) process or standard which could be followed. The are simply a statement of facts published to make information more broadly known. As in the IETF's guidelines, "[If it can't be practiced, it's Informational.](https://www.ietf.org/process/process/informational-vs-experimental/#:~:text=If%20it%20can%27t%20be%20practiced%2C%20it%27s%20Informational.)"

### Experimental
Copy link
Member

Choose a reason for hiding this comment

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

Is Experimental a precursor to Proposed Standard? @Peeja comment below suggests you would make a new RFC, but I don't know if that makes sense.

I'm trying to imagine the development lifecycle here:

"I'm about to implement a big thing and need feedback on architecture" -> Experimental
"Ok my thing is implemented and seems to work, let's make the public facing part a standard" -> Proposed Standard
"Alright we all agree it will be a standard, here's the final doc" -> Published Standard


Experimental RFCs are published as part of some research or development effort. Such a specification is published for the general information of the Storacha community and as an archival record of the work. As in the IETF's guidelines, "[If the IETF may publish something based on this on the standards track once we know how well this one works, it's Experimental.](https://www.ietf.org/process/process/informational-vs-experimental/#:~:text=If%20the%20IETF%20may%20publish%20something%20based%20on%20this%20on%20the%20standards%20track%20once%20we%20know%20how%20well%20this%20one%20works%2C%20it%27s%20Experimental.)"

### Best Current Practice

Best Current Practice RFCs document *existing* Storacha processes as agreed to by our community and are intended to help our team and community members follow some common guidelines for policies and operations.

### Proposed Standard

The first stage of our standards process. All Storacha protocols intended to serve as externally facing standards start here. Moving an RFC into "Proposed Standard" suggests we would like third parties to engage and potentially implement the RFC and represents a commitment on our part to sheparding this process.

### Published Standard

The second and final stage of our standards process. Moving an RFC to this stage represents a commitment on the part of our team to maintain backwards compatibility with the published standard indefinitely.

### Historical

The Historical status is for RFCs that are no longer current - this may mean we have dropped support for a standard or that the information in the RFC is either no longer used or no longer best practice.

## RFC Tooling

In order to ensure that RFCs are widely and consistently reviewed and don't get lost or stalled during review, we maintain a number of team and community processes and practices. These include:

### GitHub Pull Requests

RFCs should be submitted as Pull Requests to the https://github.com/storacha/rfc repository. The `storacha/developers` team should be added as a reviewer. Additionally, the RFC author should add individual developers from whom they would like especially close review as reviewers.

Discussion of an RFC should take place in the Pull Request using standard GitHub Pull Request tooling.

Developers SHOULD indicate their signoff on an RFC by "approving" the PR.
Copy link
Member

Choose a reason for hiding this comment

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

Some discussion about whether it is necessary to merge the PR and when that should be done?

Copy link
Member

Choose a reason for hiding this comment

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

issue (blocking): Also, what "signoff" means. Does signing off on an Informational RFC mean simply acknowledging it? Does signing off on a Proposed Standard RFC mean approval of the proposal, or of adopting it? What's the difference between a PR for a Proposed Standard RFC, a merged Proposed Standard RFC, and a PR for a Published Standard RFC? What does the status change process look like?

Blocking because I think we'll be immediately stymied by not having some clear procedure here. We certainly don't have to get it right on the first go, though; we can always RFC the RFCs again.

Proposal:

(✅=approved, ❌=changes requested, 🔀=merged)

  • Informational:

    • ✅: Read and acknowledged
    • ❌: Clarification required
    • 🔀: Acknowledged by a quorum
  • Experimental:

    • ✅: Read and acknowledged
    • ❌: Clarification required
    • 🔀: Acknowledged by a quorum
  • Best Current Practice:

    • ✅: Confirmed as description of best current practice
    • ❌: Disagreement about being best, or about being current practice, or clarification required
    • 🔀: Confirmed by a quorum
  • Proposed Standard:

    • ✅: Read, acknowledged, and agree worth proposing as written
    • ❌: Disagreement over details, or that idea is worth discussing further, or clarification required (entirely separate proposals are not a ❌, but a separate Proposed Standard RFC)
    • 🔀: Confirmed by a quorum as a presentable proposal
  • Published Standard: (almost(?) always a PR to promote an existing RFC from Proposed Standard to Published Standard)

    • ✅: Agreed ready to become a standard
    • ❌: Disagreement that proposal is ready (details and clarification is usually already hashed out in Proposed Standards)
    • 🔀: Confirmed as a standard which should be followed until Obsoleted by a new Published Standard
  • Historical: (always a PR to move an existing RFC to Historical)

    • ✅: Agreed the RFC is now historical (no longer a going concern)
    • ❌: Disagreement that RFC is historical
    • 🔀: Confirmed as historical

Additionally:

  • The only permissible status changes are Proposed Standard → Published Standard and → Historical. This does not involve changing the body of the RFC, only the status (but small exceptions are acceptable if agreed in the PR).
  • Otherwise, a new RFC is created rather than the existing one being updated.
  • A standards-track RFC which adds to a prior standard should be marked Updates: XXX. A PR promoting that RFC to Published should amend the updated RFC to be marked Updated by: XXX. These annotations should be hyperlinks.
  • Likewise, a standards-track RFC which entirely replaces a prior standard should be marked Obsoletes: XXX, and a PR promoting that RFC to Published should amend the updated RFC to be marked Obsoleted by: XXX. Again, these annotations should be hyperlinks.

Notably, the list of RFCs is not a list of (solely) standards, or even a list of (solely) current information or practices. "All current published standards" could be defined by a query over the information in the RFCs, if we had such a tool, but since that seems unlikely, we may want to keep some sort of manual list of them up to date in the repo.

Copy link
Member

Choose a reason for hiding this comment

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

I am also struggling with the relationship between the RFC process and https://github.com/storacha/specs

What is that other repo if not Published/Proposed Standards?


### Stakeholder Notifications

Developers SHOULD configure GitHub PR notifications so they receive updates about PRs they care about. Developers MAY mute discussions they are not interested in participating in.

We maintain an [#rfcs](https://discord.com/channels/1247475892435816553/1431314866475634739) channel in Discord where notifications about activity in the https://github.com/storacha/rfc repository are posted. Developers MAY opt to receive notifications about Pull Requests in Discord by configuring their Discord notifications for that channel.