blob: 988e1c7b463342948541f0bfdb9b935c690bb66c [file] [log] [blame] [view]
# [FIDL Tuning Proposal](README.md) 001
A Modest Proposal
Field | Value
----------|--------------------------
Status | Accepted
Authors | kulakowski@google.com
Submitted | 2018-07-17
Reviewed |
[TOC]
## Summary
The FIDL Tuning Proposal (FTP) process is designed to provide a
uniform and recorded path for making changes to the [FIDL] language,
bindings, and tools.
## Motivation
There are several motivations for creating such an FTP system.
[FIDL] (the Fuchsia IPC system) is subject to a number of design
constraints. These include performance, safety, and ergonomics. These
are often at odds with each other, and the requirement to support IPC
bindings in various target languages adds further tradeoffs. The FTP
proposal system provides a way to litigate and to record decisions
about these tradeoffs.
Recording decisions is valuable for several reasons. First, it
provides a way to prevent revisiting the same decisions over and over
when nothing has changed, while still allowing revisiting decisions
when underlying assumptions actually have changed. Second, it provides
new team members, or new clients of Fuchsia, some context into how
FIDL has evolved and why certain decisions were made.
Finally, FIDL, as a sort of programming language, invites bikeshedding
at a scale only [Wadler's law] can enable. This provides a place for
such things to occur that isn't a several hundred person email list.
## Design
An FTP (FIDL Tuning Proposal) goes through several stages. These
stages correspond to the Status: field of the heading of the template.
NB: The template is currently Google-internal.
### Draft
One or more people get excited about a change! They make a copy of the
tuning template, and start writing and designing. The proposal should
address each of the section headings in the template, even if it is
only to say "Not Applicable".
At this stage they may start soliciting feedback on the draft from impacted parties.
### Comment
At this stage, the FTP is formally circulated for commentary to the
Fuchsia engineering organization. The authors of the proposal should
solicit feedback from those especially likely to be impacted by the
proposal.
For now, proposals should be left open for comment for at least one
week, subject to reviewer discretion. It may be reasonable to be
shorter for less controversial FTPs, and longer to wait for feedback
from a particular person or group to come in.
Anyone may make a blocking comment on an FTP. Blocking comments do not
prevent a particular accept-or-reject outcome from the review process,
but reviewers are required to acknowledge the feedback given in the
comment as part of the final FTP.
### Review
At this point the FTP, along with all outstanding commentary, is
reviewed.
The proposal is reviewed by members of the Fuchsia FIDL team
(unofficially know as luthiers), and anyone they see fit to include or
to delegate to in the process. For example, they may include a
particular language expert when making a decision about that
language's bindings. If necessary, controversial decisions can be
escalated like any other technical decision in Fuchsia.
The review can ultimately have three outcomes.
First, there may be outstanding questions or feedback required to make
a decision. In this case the FTP is moved back to the Comment stage.
Second, the proposal may be Rejected, with reviewers providing a
rationale as to why.
Third, it may be Accepted.
### Rejected
Rejected FTPs are valuable records of engineering decisions. When
rejected, the rationale for rejected should be added to the FTP. The
FTP will then be copied to the public record of all FTPs for
posterity.
The given rationale should be actionable in the following two senses.
First, what would have to change about the world to have accepted this
proposal?
Second, the rationale should address any blocking comments raised
during the Comment period.
### Accepted
Accepted FTPs will also have a rationale section appended to them
after review, and will receive a tracking bug.
The same constraints apply to the acceptance rationale as the
rejection rationale. In particular, any blocking comments need to be
addressed.
Then it's off to the races to implement the change.
### Implemented
At this stage, the proposal is landed. All the code has been
changed. The [tutorial] has been updated. The bug is marked
done. [FIDL] is in a more perfect tuning.
The final step of the process is landing a markdown-ified version of
the FTP into the Fuchsia tree. This applies whether or not the
proposal was accepted, as being able to point at already considered
but rejected proposal is a substantial part of the value of this
process.
## Documentation and Examples
This document (FTP-001) is the first such example of this process.
Ideally the template, plus the final version of this proposal, are
sufficient documentation for the process.
## Backwards Compatibility
n/a
## Performance
n/a
## Security
I believe this plan will have the modest benefit of providing a place
for security review to happen. Currently all changes to FIDL are
discussed via chat or code review. There's no paper trail, prior to
the FTP process.
## Testing
It feels easier to talk about success than about testing for this
plan.
The immediate success criteria for this process will be whether the
several outstanding ideas for changing FIDL go through the process
without it being onerous.
One long term success metric would be whether old FTPs are regularly
pointed at.
## Drawbacks, Alternatives, and Unknowns
There's a small cost to serializing changes to FIDL through a slightly
formal process. I believe that the cost is in fact small, in
comparison to the engineering work needed to implement any change
(especially as our ABIs harden and breaking changes get harder), and
to the payoff of recording these decisions.
The biggest alternative I considered was a more open
version. Currently, the comment and review process is currently only
visible or open to Googlers. I believe that this is the correct
decision for now, with an eye towards re-evaluating in the future.
I also wonder if there is a better way to capture commentary than a
Google Doc, especially at the point of "freezing" the FTP into an
accepted or rejected state.
I suspect we may want a version of this that captures decisions made
about FIDL prior to the adoption of this process.
Finally, I wondered about how formal to be about acception or
rejection criteria. I believe that this can evolve into something more
formal over time, if needed, with the help of early FTP's decision
rationales.
## Prior Art and References
Several open source programming languages have enhancement proposals
or RFC mechanisms.
In particular, I looked a lot at the [Python PEP] process and the
[Rust RFC] process while drafting this document.
[FIDL]: ../../README.md
[Python PEP]: https://www.python.org/dev/peps/
[Rust RFC]: https://github.com/rust-lang/rfcs
[tutorial]: ../../tutorial/README.md
[Wadler's Law]: https://wiki.haskell.org/Wadler's_Law