blob: 01801de43f55748574477a47a9ca4ade2e7ea684 [file] [log] [blame] [view]
# [FTP](deprecated-ftp-process.md)-NNN: Your Boring Title
Note: This process was deprecated in [RFC-0017](/docs/contribute/governance/rfcs/0017_folding_ftp_into_rfc.md).
FTP proposals should now use the [Fuchsia RFC process](/docs/contribute/governance/rfcs/rfc_process.md).
_(optional) Your Witty Title_
Field | Value
----------|--------------------------
Status | Draft
Authors | *your emails*
Submitted | *leave blank until submitted*
Reviewed | *leave blank until reviewed*
## 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.
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.
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 [RFC 2119][ietf-rfc2119].
## Implementation Strategy
How will you go about making this change? Some FTPs will not involve breaking
changes, and might happen as a single CL. Others might be sweeping changes.
Either way, think about how you would break down the implementation into tasks.
For more complex implementations that are likely to change, we recommend writing
an Intent-to-Implement ("I2I") doc and linking to it in this section. The I2I
can then serve as a living, separate design doc that may be updated
independently, so that this document isn't constantly re-edited as details
change. This also enables your FTP to focus on the high-level important
concepts, rather than implementation and execution.
## Ergonomics
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.
## Documentation and Examples
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][fidl-tutotials]? 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?
## Backwards Compatibility
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][ftp-024.md] restrictions on the generated language bindings, list
those here.
## Performance
What impact will this proposal have on IPC performance? On build performance?
## Security
How will your feature impact security? Will your feature be easy to use safely
in non-memory-safe languages? Does your feature make it easy to accidentally
leak details of a process's address space?
## Testing
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][conformance-suite].
If your change affects source compatibility, plan to update the [source
compatibility test suite][source-compatibility-suite.
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?
## 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 serialization or IPC systems address the same
problem this proposal addresses?
<!-- xref -->
[ietf-rfc2119]: https://tools.ietf.org/html/rfc2119
[conformance-suite]: /src/tests/fidl/conformance_suite/
[source-compatibility-suite]: /src/tests/fidl/source_compatibility/
[fidl-tutorials]: /docs/development/languages/fidl/tutorials/overview.md