blob: 57012d8c42ce5bcf81f04eba22c3e4a7871bfd87 [file] [log] [blame] [view]
{% set rfcid = "RFC-0000" %}
{% 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. -->
<!-- This should begin with an H2 element (for example, ## Summary).-->
## Summary
A one paragraph description of the rest of the proposal.
## Motivation
What problem does this proposal solve?
## Design
This is the technically detailed version of your proposal.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [IETF RFC
2119](https://tools.ietf.org/html/rfc2119).
_Area: FIDL_
One important high-level bit of your proposal is what part of FIDL your proposal
modifies. This includes at least:
* The FIDL source language
* The FIDL wire format
* The first-class language bindings (C, C++, Dart, Go, Rust)
* The FIDL style guide and API rubric
* The FIDL tuning process
Your proposal should talk about all the relevant areas. For instance, if your
proposal adds a new type to the FIDL language, it also needs to discuss the
style guide for that feature, and how to implement it in the bindings.
## Implementation
How will you go about implementing this design? Can the change be made in a
single Gerrit change or does the change involve a complex migration of
third-party dependencies? Do you plan to structure the implementation
into phases? What dependencies exist at each phase?
## Performance
What impact will this proposal have on performance? What benchmarks should we
create to evaluate the proposal? To evaluate the implementation? Which of those
benchmarks should we monitor on an ongoing basis?
## Ergonomics
_Area: FIDL_
Does your change make FIDL easier to use, and simpler to understand? Does it
make the bindings easier to use? If it doesn't, what's the justification for the
complexity?
Focus on both the end-user API and the cognitive effort required to understand
the concept.
## Backwards Compatibility
_Area: FIDL_
Backwards compatibility comes in two flavors: FIDL file source compatibility,
and ABI or wire format compatibility. This section should speak to both. Over
time, the ability to make backwards-incompatible changes will get harder.
If you are introducing a new data type or language feature, consider what
changes you would expect users to make to FIDL definitions without breaking
users of the generated code. If your feature places any new source compatibility
restrictions on the generated language bindings, list those here.
## Security considerations
What impact will this proposal have on security? Does the proposal require a
security review?
A good starting point is to think about how the system might encounter untrusted
inputs and how those inputs might be used to manipulate the system. From there,
consider how known classes of vulnerabilities might apply to the system and what
tools and techniques can be applied to avoid those vulnerabilities.
## Privacy considerations
What impact will this proposal have on privacy? Does the proposal require a
privacy review?
A good starting point is to think about how user data might be collected,
stored, or processed by your system. From there, consider the lifecycle of such
data and any data protection techniques that may be employed.
## Testing
How will you test your feature? A typical testing strategy involves unit,
integration, and end-to-end tests. Are our existing test frameworks and
infrastructure sufficient to support these tests or does this proposal require
additional investment in those areas?
If your system defines a contract implemented by other people, how will those
people test that they have implemented the contract correctly? Consider, for
example, creating a conformance test suite for this purpose.
_Area: FIDL_
How will your feature be tested? For instance, do you need to write new tests
for `fidlc`, or for the C++ bindings?
If your change affects encoding or decoding, plan to update the conformance test
suite.
If your change affects source compatibility, plan to update the [source
compatibility test suite](/src/tests/fidl/source_compatibility).
How will uses of your new feature be tested? If you add a language feature, how
will you test it in each language's bindings?
## Documentation
Do we need to create or update any documentation to cover this feature? For
example, do we need to add or remove an entry from the project roadmap? Do we
need to change the architecture document? Would end-developers benefit from
documentation related to this proposal?
_Area: FIDL_
There are potentially several kinds of documentation to address.
How would you write or change a tutorial for this feature, in the style of the
various FIDL tutorials? Imagine explaining your feature to someone new to
Fuchsia.
How would you write reference documentation? For example, suppose your proposal
extends the FIDL wire format. How would you update the documentation of the wire
format? Imagine explaining your feature to someone in sufficient detail that
they could implement it.
What are important examples or use cases of your proposed feature?
## Drawbacks, alternatives, and unknowns
What are the costs of implementing this proposal?
What other strategies might solve the same problem?
What questions still need to be resolved, or details iterated upon, to accept
this proposal? Your answer to this is likely to evolve as the proposal evolves.
## Prior art and references
Is there any background material that might be helpful when reading this
proposal? For instance, do other operating systems address the same problem this
proposal addresses?