blob: 5e6e6e2ace0971ef7366b20e3a19ec399c2bb443 [file] [log] [blame] [view]
# Starboard API Review Process
## Why do we need a process?
The Starboard API is the contract between Starboard applications and
implementors of the Starboard API. Changing existing APIs and adding new
required APIs breaks that contract and increases the cost of implementors
keeping their Starboard port up-to-date. Pushing a release to the Open Source
repository signals to Starboard implementors that any non-experimental APIs in
that version will not change for as long as that version of Starboard is
supported by the Starboard applications. We cannot change those newly frozen
APIs without causing a potentially significant disruption to any partners who
have already implemented them, or are in the process of implementing them.
While having a process may make it harder to add new things to Starboard, it is
much harder to remove or change things that are already there.
Thus we need to give special focus to changes to the Starboard API to ensure its
consistency with existing APIs design principles. Unnecessary churn on the
Starboard API creates more work for Starboard application developers and may
discourage porters from keeping Starboard applications up-to-date on their
platforms. This process is intended to save time and effort for both Starboard
application developers and Starboard implementors in the long run, and
illustrates the complexity of dealing with a wide variety of platforms
simultaneously.
## So you want to add a new API?
Historically, we have done API review as a part of the Code Review process using
Gerrit. This works well for small-ish changes. For larger changes, consider
writing a design document up front before defining the new API.
### Who does the review?
Send a message to the public cobalt-dev group to request a review.
### What is the process?
Developers are strongly encouraged to create the interface and upload that to
Gerrit for review before spending time on stubs and tests. Iteration on the
interface will necessarily result in changes to the stubs and tests, which can
result in more work for the implementer of a new API.
1. Upload a .h file with Module Overview and (optionally) initial function
prototypes
* New APIs should be declared in the experimental version, as described in the
starboard versioning doc.
2. Discuss the new API with whoever is performing the review, and address
comments.
3. Iterate.
* As a part of the review process, the reviewer will work with you to ensure
that the new API adheres to the starboard principles.
4. Finalize function declarations.
5. Implement tests and stubs.
* Existing platforms on trunk should not break as a result of this change.
* At this point, you may submit the interface, tests, and stubs with your
reviewers +2.
6. Implement the interface for at least one platform.
7. Iterate
8. It may be that implementation of the API reveals things that were overlooked
during the earlier stages of the review.
Ideally most major points of feedback will be caught early in the review process
before much time has been spent on implementation.
In the case that the platform in (6) is an internal platform, provide a
reference implementation for at least one external reference platform. This can
be in a follow-up CL, but must be implemented before the new API is frozen
(see [versioning.md](versioning.md)).
## How to design a new API
See [principles.md](principles.md) for a guide on how to design a good Starboard
API.