blob: 2526d6bede2bcd0148464103652114b1237e001d [file] [log] [blame] [view]
<!-- mdformat off(templates not supported) -->
{% set rfcid = "RFC-0133" %}
{% 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 -->
## Summary
A set of long-term goals for the Software Delivery area.
## Motivation
The Fuchsia Software Delivery system needs to prioritize the requirements of our
customers and will continue to do so, but we also need to set long-term
direction to keep in mind as we do design. Even though we don't have explicit
customer requirements for many of these goals, they are nonetheless goals that
we should design for and keep in mind as we evolve the system. This list may
change over time, and that's fine. However, this represents the desired state of
the world today.
## Stakeholders
_Facilitator:_
hjfreyer@google.com
_Reviewers:_
* abarth@google.com - FEC
* amathes@google.com - Product
* computerdruid@google.com - SWD
* ampearce@google.com - Security
_Consulted:_
* kitlane@google.com
* mckillop@google.com
* hjfreyer@google.com
* Software Delivery team
_Socialization:_
This RFC went through a review in doc form with the Software Delivery team, as
well as with the contributors.
## Design
### Goals
1. **Prioritize customer requirements**: We shouldn't be afraid to revisit
existing implementations or change strategy if we have a compelling customer
need, as long as we don't preclude long-term goals.
2. **One update protocol in production**: All devices in production use the same
update stack and protocol for platform [OTA][glossary.ota]s as we recommend
to our customers for updating other software.
3. **Platform and non-platform updates have the same features**: Platform OTAs
and updates for independent modules have the same capabilities (channels,
staged rollouts, stepping stones, etc.), and it should be possible for OSS
users to use these capabilities.
4. **Minimize monoliths**: Over time, we intend most parts of the platform to be
independently updatable.
5. **Provide recovery options for attacks which can modify persistent state**:
The SWD stack should be able to perform an update automatically at boot with
minimum dependence on mutable data and other software in order to maximize
recovery potential from serious vulnerabilities, including ones which give an
attacker the ability to modify persistent state.
6. **Update reliability is paramount**: We should prefer updating software as
long as we can prove that it doesn't compromise security requirements. We
should prioritize simple and reliable code, even at the cost of reasonable
performance impact; we aim to create the simplest system that can perform
updates correctly, securely, and that meets other performance requirements.
We should bias towards designs that fail safely, and allow another chance at
an update, rather than possibly corrupting state for another attempt.
7. **[Product owners][glossary.product-owner] decide policy for their
[products][glossary.product]**: The platform defines what software update
policies are expressible and recommends initial policy. The product owner can
choose their configuration of policies, and change their policy choices at
any time, even when devices are in the field.
8. **All software is verified against an intentional policy**: All software is
checked against a policy defined for that type of software. These policies
could include provenance checking for executable code, integrity checking,
sandboxing, etc. No software can be run without a predefined policy regime
under which to run it.
9. **Software source policy is a product concern**
1. The platform does not restrict who can publish software, or what
approvals are required. Centralized vs. decentralized software sources
are a product policy, not a platform policy. As long as software is
published with appropriate metadata like a publisher signature, the
platform should be capable of running it.
2. The platform will create mechanisms for enforcing software policy, but
the decision of what software sources are available is up to product
owners. Product owners can restrict available software sources through
policy, but the platform will not.
3. The platform should be capable of producing products that can install
arbitrary software, including the ability for a user to allow software
from arbitrary publishers to run on their device.
## Implementation
We'll link to this RFC from the Software Delivery [documentation][swd-readme],
and keep it in mind during design processes for the Software Delivery area.
## Performance
No performance impact.
## Security considerations
The implementation of this RFC has no immediate security impact. Long term, we
expect substantial collaboration with the security team as we execute on these
goals, as the SWD update mechanism is our primary method to secure
vulnerabilities in the field.
## Privacy considerations
The implementation of this RFC has no privacy impact. Long term, we expect
substantial collaboration with the privacy team as we execute on these goals.
## Testing
The implementation of this RFC has no testing impact.
## Documentation
We'll link to this RFC from Software Delivery [README][swd-readme].
## Drawbacks, alternatives, and unknowns
There are nearly limitless goals we could set for the Software Delivery area.
These are the goals we feel represent both the current state of the stack and
our desired state most accurately.
There are many unknowns, for instance how we'll integrate with any possible
third party publishers of software. Once we have customer requirements for
possible features, we'll be better able to reason about those unknowns.
## Prior art and references
Very little has previously been published about the SWD roadmap. However, many
previous iterations of package management and software supply chain security
exist. Here is a selection of prior art:
* [Debian software repositories](https://wiki.debian.org/DebianRepository)
* [Debian package signing](https://www.debian.org/doc/manuals/securing-debian-manual/deb-pack-sign.en.html)
* [Omaha protocol](https://github.com/google/omaha/blob/ebc25b2b3d77eed3d9a122bcfd89a66f6f192e4b/doc/ServerProtocolV3.md)
* [The Update Framework specification](https://theupdateframework.github.io/specification/latest/)
[glossary.ota]: /docs/glossary/README.md#ota
[glossary.product]: /docs/glossary/README.md#product
[glossary.product-owner]: /docs/glossary/README.md#product-owner
[swd-readme]: /src/sys/pkg/README.md