In the following Public Contracts denote public APIs, protocols and similar things. These rules do not apply to internal protocols and interfaces (they are not public).

  1. All Public Contracts SHALL be documented.
  2. All Public Contracts SHOULD have space for extensibility and experimentation.
  3. A patch that modifies a stable Public Contract SHOULD not break existing applications unless there is overriding consensus on the value of doing this.
  4. A patch that introduces new features SHOULD do so using new names (a new contract).
  5. New contracts SHOULD be marked as "draft" until they are stable and used by real users.
  6. Old contracts SHOULD be deprecated in a systematic fashion by marking them as "deprecated" and replacing them with new contracts as needed.
  7. When sufficient time has passed, old deprecated contracts SHOULD be removed.
  8. Old names SHALL NOT be reused by new contracts.