/* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.org.glassfish.external.arc; /** Taxonomy values. See http://opensolaris.org/os/community/arc/policies/interface-taxonomy/

Policy

@author llc */ public enum Stability { /**
    +----------------------------------------------------------------------------+
    | Committed (formerly Stable, Public; encompasses Standard, Evolving)        |
    |----------------------------------------------------------------------------|
    |   | Specification       | Open                                             |
    |   |---------------------+--------------------------------------------------|
    |   | Incompatible Change | major release (X.0)                              |
    |   |---------------------+--------------------------------------------------|
    |   | ARC review of Specs | Yes                                              |
    |   |---------------------+--------------------------------------------------|
    |   | Examples            | Compiler command line options,                   |
    |   |                     | hardware  (SBus, PCI, USB), RPC, POSIX utilities |
    +----------------------------------------------------------------------------+
    
We publish the specification of these interfaces, typically as manual pages or other product documentation. We also tell customers we will remain compatible with them. (Scott McNealy's principle that "Compatibility is a constraint, not a goal") The intention of a Committed interface is to enable arbitrary third parties to develop applications to these interfaces, release them, and have confidence that they will run on all releases of the product after the one in which the interface was introduced, and within the same Major release. Even at a Major release, incompatible changes are expected to be rare, and to have strong justifications.

Committed interfaces are often proposed to be industry standards, as was the case with RPC. Also, interfaces defined and controlled as industry standards are most often treated as Committed interfaces.

These are interfaces whose specification is often under the provider's control or which are specified by a clearly versioned document controlled by a well-defined organization. If the interface specification is not under the implementation provider's control, the provider must be willing to fork from the interface specification if required to maintain compatibility. In the case of interface specifications controlled by a standards body, the commitment must be to a clearly identified version of the specification, minimizing the likelihood of an incompatible change (but it can happen through formal spec interpretations).

Also, if the interface specification is not under the control of the interface implementation provider, then the controlling body and/or public, versioned document must be be noted in the documentation. This is particularly important for specifications controlled by recognized standards organizations.

Although a truely exceptional event, incompatible changes are possible in any release if the associated defect is serious enough as outlined in the EXEMPTIONS section of this document or in a Minor release by following the End of Feature process. */ COMMITTED( "Committed" ), /**

    +--------------------------------------------------------------------------+
    | Uncommitted (formerly Unstable)                                          |
    |--------------------------------------------------------------------------|
    |   | Specification       | Open                                           |
    |   |---------------------+------------------------------------------------|
    |   | Incompatible Change | minor release (x.Y) with impact assessment     |
    |   |---------------------+------------------------------------------------|
    |   | ARC review of Specs | Yes                                            |
    |   |---------------------+------------------------------------------------|
    |   | Examples            | SUNW* package abbreviations, some config utils |
    +--------------------------------------------------------------------------+
    
No guarantees are made about either source or binary compatibility of these interfaces from one Minor release to the next. The most drastic incompatible change of removal of the interface in a Minor release is allowed. Uncommitted interfaces are generally not appropriate for use by release-independent products.

Uncommitted is not a license for gratuitous change. Any incompatible changes to the interface should be motivated by true improvement to the interface which may include justifiable ease of use considerations. The general expectation is that Uncommitted interfaces are not likely to change incompatibly and if such changes occur they will be small in impact and should often have a mitigation plan.

Uncommitted interfaces generally fall into one of the following subcategories: