WTP API Policy
WTP API Policy
In previous releases WTP did not have enough API to meet our adopter's needs and was causing repeated breakage to adopters as we changed our internal code. This led to the adoption of an internal usage scan policy - if an adopter was willing to supply usage data for WTP, we agreed not to change any of the internal code used by the adopter.
This policy was required at the time to stabilize WTP and encourage widespread adoption. However, continuing this policy indefinitely hampers innovation in WTP and makes it difficult to create API. This document provides a new API policy that will allow us to innovate while still encouraging widespread adoption.
Declared API is public API that WTP has committed to supporting for several releases.
New API must be reviewed by the project lead. It must be frozen by the release API freeze date and will not change throughout the remainder of the release or the corresponding maintenance stream.
In following releases, API may sometimes be deprecated due to the normal evolution of WTP. Deprecations must be approved by the project lead and must contain information on a migration path for existing adopters. Deprecated API may not be removed for at least 2 major releases, **
Provisional API is tentative/interim API. It is marked as provisional in the class javadoc comments, and is still under development and likely to change. It is used to provide temporary API and request feedback from the community.
Provisional API must be finalized by the regular API freeze date of a release and will be treated like declared API for the remainder of the release and the corresponding maintenance releases. In the next release, provisional API will typically evolve in one of the following ways:
- Declared as API (possibly with change).
- Modified to reflect feedback and remain as provisional API in the next release to get additional feedback.
- Removed (and usually replaced by new API or different provisional API).
- Deprecated and removed in the next release.
It is our intention that provisional API should not stagnate. Its purpose is to obtain feedback from the community and evolve in the next release.
Protected Internal Usage
Grandfathering of Internal Usage Scans
As of Nov 30th, 2007, WTP will no longer accept internal usage scans. We will continue to respect the latest usage scan from all adopters received before Nov 30th.
Legitimate Internal Usage
By their nature, internal usage scans include both legitimate usage (code required because equivalent API does not exist) and illegitimate usage (internal code used without good reason). WTP will not respect any illegitimate references in usage scans.
What this means is that any obvious illegitimate usage may be removed from usage scans or flagged as errors in the WTP build. In cases where the usage is questionable, WTP project leads are free to question the adopter for the reason the code is being used. If the reason is not acceptable after a reasonable discussion, the reference may once again be removed from the usage scan data.
The following are some examples of illegitimate internal usage:
- Use of messages, icons, logging or tracing methods from another plugin.
- Use of internal methods where equivalent API exists. (In cases where new API is declared, reasonable time should be given for porting)
- Use of internal utility classes unrelated to the purpose of the plugin.
Components or projects that believe they have adequate API coverage and minimal legitimate internal usage may request 'graduation' from the internal usage scan policy. The method for doing this is not yet defined (PMC review or discussion on wtp-dev?), but if there are no serious issues raised, this project will no longer have to respect internal usage scans. As with other Eclipse projects, internal code may change at any time and adopters would open enhancement requests for any new API or remaining internal usage.
Legitimate internal usage reported in adopter usage scans must be maintained and deprecated as true API. There are three possibilities for this code to be evolved:
- Declared API - If equivalent API has been created, the code may be deprecated and removed after one full release.
- Project graduation - If the project has graduated from the usage scan policy, the code may be deprecated and removed after one full release.
- Illegitimate usage - If the code is declared as illegitimate internal usage, it may change at any time.
-becomes API in 2 releases -three options: declare as API, provisional, or get agreement with adopter to drop it ** -no breakage after API freeze -provisional + reasonable notice (new API, migration path, etc.)
All internal code that is accessible by adopters (i.e. internal public and protected classes and methods) should not be modified or removed in a maintenance stream. While the likelihood may be low, it is not worth the risk of breaking our adopters if we can find other ways to make fixes. Exceptions must be approved by the project lead.