blob: 39b0c5dcc735b36690a76d2fa2701ac82d20a2c2 [file] [log] [blame] [view]
<!-- mdformat off(templates not supported) -->
{% set rfcid = "RFC-0103" %}
{% include "docs/contribute/governance/rfcs/_common/_rfc_header.md" %}
# {{ rfc.name }}: {{ rfc.title }}
<!-- SET the `rfcid` VAR ABOVE. DO NOT EDIT ANYTHING ELSE ABOVE THIS LINE. -->
<!-- mdformat on -->
<!-- This should begin with an H2 element (for example, ## Summary).-->
## Summary
Criteria for changes which require RFCs in the Software Delivery area.
## Motivation
The [Software Delivery][swd] (SWD) system has wide scope over system behaviors,
including over the air (OTA) system updates, development and testing flows,
device security, and eventually package updates without a system update. Changes
to the SWD stack can modify behavior of the system in subtle ways and incur cost
to the Fuchsia program. To best adhere to the
[Fuchsia-wide RFC process][rfc-process], we seek to disambiguate the changes
which have 'broad impact' in the SWD area by putting forth a set of clear
criteria. These criteria are an attempt to achieve a balance between execution
velocity and proper stakeholder communication and approval processes.
## Design
### Changes which require an RFC
* **Changes to the system update flow which add restrictions or gates, or new
error conditions to the OTA process.** For example, adding additional checks
before completing an OTA, or making OTA downgrade checking more strict. This
is important because these changes have the potential to reduce the
reliability of the OTA process.
* **Changes to how we use package repositories, or the [structure of package
repositories we expect][tuf-structure].** We expect that both internal and
external developers may create or host their own TUF servers, and we should
provide appropriate notice of changes to the expected format.
* **Changes to the Fuchsia package format**. Anything that modifies the
[schema for Fuchsia packages][package-schema] or the [Fuchsia Archive
format][far-format]. This is important because many different tools interact
with the package format and we should provide appropriate notice of changes.
* **Adding or removing requirements for a product or build type to support OTA
system updates**. For example, requiring vbmeta to OTA successfully, or
removing a requirement for vbmeta. This is important because these changes
may incur costs for product developers.
* **Modifications to enforcement of security policies**. For example, changing
executability restriction strategies. This is important because these
changes have the potential to impact the security of Fuchsia.
* **Changes which may make old systems fail to update to newer system
versions, or require stepping-stone builds.** This is important because
stepping-stone releases incur a long-term cost. When a device is set up for
the first time, or reconnected after a long time, it must update through
every stepping-stone release, costing additional time and network traffic
for the end user. A bug in a stepping-stone release has the potential to
impact the security or availability of devices moving through it even years
after the original release, meaning that stepping-stone releases must be
tested and maintained for significantly longer than regular releases.
* **Changes which will substantially increase resource usage.** Whether
memory, disk, CPU, network, etc. This gives broader visibility to changes in
the use of shared device resources.
* **Modifications to privacy policies or their enforcement.** This is
important because these changes have the potential to impact the privacy
Fuchsia offers to users. We don't have much ability to transact PII in the
codebase today, but if we someday want to, that should go through an RFC.
### Examples: past changes which would now require an RFC
* [OTA backstops][ota-backstops]; changes to the OTA process.
* Post-OTA health checks; changes to the OTA process.
* Changes to the package format, like a `meta/contents` overhaul.
* Migrating to channel in vbmeta; changes to OTA process and requirements for
OTAs.
### Examples: past changes which would still not require an RFC
* CFv2 migrations; they are covered by other artifacts.
* Blob download resumption; optional feature unobservable outside of
pkg-resolver, risks were mitigated in code review process.
* Changes to metrics or inspect emitted by the SWD stack.
* Additions of channels for products.
* Reliability improvements, like making `fx ota` work well for kernel
developers. PSAs are sufficient here if the risk of regression is small.
* Deprecating `amberctl` and moving developers over to `pkgctl`. This should
be handled by the LSC process, as the workflows and goals of the tools are
almost entirely the same.
## Implementation
Ongoing work that already has design approval through other processes and is in
implementation will not be _required_ to submit retroactive RFCs in order to go
ahead. However, we should submit retroactive RFCs for portions of the Software
Delivery stack which are sufficiently direction-setting and are under-documented
in other places. We'll evaluate ongoing or nearly-landed work on a
project-by-project basis to determine if we should write a retroactive RFC for
it.
Work which is not yet past the design stage will be required to adhere to
these guidelines.
These guidelines will be effective as of their RFC publication date, and we'll
add them to the [current process page][current-process] in the RFC
documentation. If we update these guidelines, we'll do so as an addendum to this
RFC in a subsequent CL.
If a contributor wishes to work with the SWD team on an RFC, they should feel
free to reach out to <pkg-dev@fuchsia.dev> and we'll assign them a designated
contact.
## Performance
No impact, process-only change.
## Ergonomics
We'll revisit these criteria if we find that changes are going through which
would have been better communicated by RFCs, or if we find in some other way we
need to modify these criteria. We need to strike a balance of execution velocity
and communication, regardless of the criteria.
## Backwards Compatibility
No impact.
## Security Considerations
Changes to the SWD area which modify security strategy will require an RFC,
per these criteria.
## Privacy considerations
Changes to the SWD area which modify privacy considerations will require an RFC,
per these criteria.
## Testing
No impact.
## Documentation
We'll update the [current RFC process documentation][current-process] if this
RFC is accepted.
## Drawbacks, alternatives, and unknowns
There are many alternative criteria we could use. We should amend this list if
we find that too many "small" changes require RFCs based on this criteria, or we
find that not enough "large" changes are going through the RFC process.
## Prior art and references
* [Zircon RFC criteria][zircon-criteria]
* [FIDL RFC criteria and process][fidl-criteria]
[current-process]: /docs/contribute/governance/rfcs/rfc_process.md
[far-format]: /docs/development/source_code/archive_format.md
[fidl-criteria]: 0049_fidl_tuning_process_evolution.md#criteria
[ota-backstops]: /docs/contribute/governance/rfcs/0071_ota_backstop.md
[package-schema]: /docs/concepts/packages/package.md#structure-of-a-package
[rfc-process]: /docs/contribute/governance/rfcs/0001_rfc_process.md
[swd]: /docs/contribute/governance/areas/README.md#software-delivery
[tuf-structure]: /docs/concepts/packages/software_update_system.md#merkle-root
[zircon-criteria]: 0006_addendum_to_rfc_process_for_zircon.md