Developers have asked for clarifications with respect to what and how the OSS through JavaTM specifications can be enhanced or extended. The OSS through JavaTM specifications were developed under the Java Community Process and are subject to the terms of the Specification License included with the specification(s). In order to facilitate further development and contributions to OSS through JavaTM the following clarifications are provided.
The Java platform is defined for the most part in the packages 'java' and 'javax'. The OSS through JavaTM APIs, for example, are at least mostly defined in the 'javax.oss' package. Additional proprietary or product APIs that are not normally included in the Java platform are strongly encouraged to be defined according to the "reverse domain" naming convention outlined in The Java Language Specification. For instance, a product written in the Java programming language by company <vendor> might use some subpackage of the 'com.<vendor>' package.
The goal of the restrictions against subsetting, supersetting, and modification is to ensure that all implementations of the platform are compatible, and in particular that with respect to the platform namespace they contain the public API their spec defines, no more and no less.
In the case of OSS through JavaTM APIs, the word 'platform' above shall be understood as the original core specifications which are all defined under javax.oss.
Examples of a disallowed OSS through JavaTM APIs subsetting:
Examples of valid OSS through JavaTM APIs Extensions:
[You should have permission from <vendor> to add packages that the reverse domain naming convention defines as being in <vendor>'s name space.]
[You should have permission from <vendor> to extend packages that the reverse domain naming convention defines as being in <vendor>'s name space.]
[Breaks the reverse domain naming convention]
Examples of disallowed platform modifications and allowed modifications can be derived by treating a modification as first deleting the element to be modified and then adding the modified version of the element. If both the deletion and the addition are OK, then the net modification is OK. Otherwise it's not.