Interface
SAC uses the term "interface" broadly, to mean any part of
any specification that defines the interactions among
hardware or software components, between invocations of the
components, or between humans and these components. An
interface normally includes both syntax and semantics.
This includes Graphical User Interfaces (GUIs); commands,
daemons, and their options; functional interfaces such as an
Application Programming Interface (API); data structure or
class declarations shared between components; protocol
specifications; file formats (inputs accepted, configuration
files, and output file formats); mandated file names; defaults;
and package abbreviations. See your ARC's questionnaire.
An implementation of an interface also has behavioral
artifacts, such as performance under certain conditions,
which are not specified, and are therefore not part of the
"interface". The developers of the implementation do not
assume anyone is depending on these undocumented features; a
client should not depend on these artifacts (or should get
their dependencies made an explicit part of the specification).
However, the capacity of an interface or its gross performance
characteristics could be deemed an implicit part of its
interface semantics.
Specification
An interface specification documents the purpose,
syntax, semantics, and limitations of the interface.
The specification's purpose includes understanding the
interface, implementing or maintaining it, determining
compatibility (say, between releases). The specification
may be the same document used by clients, consumers, or
importers of the interface, or a separate document with
that specific point-of-view might be more suitable.
Open specification:
An interface specification is Open if it is published,
customers are free to use it (i.e., build internal or
commercial products that use our implementation of the
interface), and others are free to provide alternative
implementations, without licensing or legal restrictions.
Interfaces with Open specifications may be called "Open
Interfaces".
Closed specification
An interface specification is Closed if we do not want arbitrary
customers (of all types) to build products using it, and we do
not want others to build alternative implementations. Therefore,
specifications for Private interfaces should not be published
to customers. Closed interfaces should only be documented to
limited internal and external audiences. Note that exposing
the source code or participating in an open source project is
not considered "publishing a spec". The question is one of
intent - do we want others to build dependencies on
these interfaces? If so, they should be Open, otherwise they
should be Closed.
Consolidation (aka Component)
A Consolidation is collection of software elements that are
always delivered together as a self-consistant entity.
Consolidations are reusable, sharable things that form the
basis for the complicated software platforms that we deliver.
Consolidations are the unit of software that are integrated
together to form Products, and are exposed as part of Sun PLC
Phase 3 (Develop, Integrate, Test)
Products are made up of one or more Consolidations;
Consolidations are made up of one or more Elements, and
Elements evolve over time as Projects are initiated to change
them.
Consolidations let us take advantage of Software Modularity and
Reuse - in a very real sense, they are the building blocks that
we use to build systems and solutions for our customers.
Changes are made to consolidations. It is the job of a
Gatekeeper to manage the flow of changes as they are integrated
into a consolidation. At the beginning, the first change is to
create a consolidation. However, once a consolidation exists,
it spends the rest of its existance being changed. Bugfixes,
code restructuring, performance improvements and the addition
of new features all impact the evolution of consolidations.
Since a consolidation is presumed to have the means to keep
itself self-consistant and to not deliver broken versions of
itself, the scope of a Consolidation Private change
within a consolidation can be quite large.
Consolidations do not usually live in isolation - they usually
depend on other consolidations, or they do something useful so
other consolidations come to depend on them. This dependency
introduces a risk - the risk that something you depend upon might
change in the future and break your consolidation. Or, more likely,
you may wish to do something to your consolidation that might break
components that depend on you.
Distribution
A collection of software arranged for use by others; consists
of one or more "consolidations" or "products." Sun's Solaris
is one distribution which includes OpenSolaris/ON, JDS/GNome,
CDE, Mozilla, Java as well as other consolidations.
Documentation
This document uses the term "documentation" solely to mean an
interface or product description suitable for customers (i.e.,
those outside Sun who have not signed nondisclosure agreements,
but have purchased our products or perhaps accepted free Sun
software). The terms "product documentation" or "customer
documentation" are often used to stress this meaning.
Element
The persistant thing that remains in a component as a result of
making a change. The term is not a formal definition, but it
exists so that we don't have to overload the term "project" to
mean both the ephimeral process of making a change and the
artifacts that remain as the result of making such a change.
Interface Change
This document defines a "change" to an interface to include
both compatible addition and incompatible change. Except for
Project Private, Consolidation Private, and Internal
interfaces, all interface changes must be ARC reviewed and
approved. A compatible addition is normally permitted in a
minor (X.Y) release; adding features in a micro (X.Y.Z)
release, or in patches makes it hard for ISVs to determine when
they can start depending on the existance of a new feature.
Incompatible change
A change to an interface or its implementation is incompatible if
it can render previously valid programs invalid. "Valid" does
not cover programs which depend on unspecified "artifacts of the
implementation". A bug fix or performance decreases, in extreme
circumstances, could be an incompatible change. The taxonomy
describes the minimum release requirements for an incompatible
change to an interface. (Sometimes, a new interface can be
offered without removing the old one; that would not be
incompatible by this definition.)
Partner
A company, that builds a product that works with and
complements Sun products, with whom we have a formal
contractual relationship.
Private
An interface specification that is private to a group can be
changed in incompatible ways by coordinating such change only
within the group. No other groups need be contacted when
making such an incompatible change. The descriptions in this
document note whether the various flavors of Private
interface require architectural review.
Note that a Private interface might still be visible to or
accessible by other groups. Of course, use of interfaces
private to another group carries great stability risks, so
ARCs do not normally allow a project to use another's private
interfaces.
Private is different than "secret". An interface would be
"secret" if (some) others are *not allowed* to learn about and
use the interface. Sun Private interfaces are probably "secret".
An otherwise-Private interface is "Internal" (the last
classification in this document) if others are (physically or
practically) *unable* to use it. Therefore, there are several
flavors of Private interfaces, depending on who *may* use it; but
only one flavor of Internal.
Product
Software Products are components we provide to customers. We
typically sell them for revenue and support them. But, because
of the wide association with Sun's good name, software provided
to customers for free could still be termed a product. Such
software could be made available to download (e.g., over the
Internet), or might be shipped as a "free" bonus with another
product.
None of the obvious definitions for "product" is an exact fit.
A CD is a product, except that some CDs contain multiple products.
A price list item is a product, except that multiple stocking
units (SKUs) correspond to the same release of the same product
(e.g., basic product, right-to-use, educational price).
Some products contain other components that may also be available
as separate products (e.g., Solaris Workgroup Server includes
Solstice Backup and Solstice AdminSuite products).
A product release (often merely called a release) is a specific
version of a product, such as Solaris Backup 4.2. See "Major,
minor, and micro product releases" definitions below.
Project
A project is an atomic addition or change to Sun's product
components (typically software, but possibly hardware,
documentation, etc.). A product is made up of one or more
projects. A project may depend on other projects, and others
depend on it.
The term "project" is sometimes used to refer to the SDF
Implementation Team (I-Team), though "project team" is
preferred.
Note that even when an ARC approves a project, the project is
still unsuitable for other projects to depend on. Until a
Steering Committee approves the Project's Plan, the project
does not have a commitment to a specific tradeoff of
functionality, schedule, resources, and quality.
Consolidation
Software components that are built and delivered together.
Products are often composed of multiple consolidations; for
example, Solaris has an OS/Net ("ON") consolidation, the Open
Windows ("OW") and/or CDE consolidation, Admin consolidation,
and others (Platform Support, Diag, Docs, L10n, Graphics?).
For very complex products, we bundle multiple Consolidations
together to make a "Wad of Stuff" (WOS), also known as a
W-Consolidation.
Developer Products delivers various compilers and tools (sold
and licensed separately and in various combinations) on a
single installation medium, which allows their cross-product
consolidation(s) to avoid inter-product version incompatibility
for their Consolidation Private interfaces.
Import and Export
This document doesn't use the terms Import and Export, but
ARC opinions list the interfaces of a project, along
with the stability classification from this Taxonomy, sorted by
Import or Export.
The project that defines an interface is said to "export" it,
and other projects that can use the defined interface but
cannot add to or modify it are said to "import" it. In
particular, note that it is not critical which project
produces data in a particular format, and which consumes it.
For example, a file format may be defined by the project that
writes it (e.g., a log file) or reads it (e.g., a Makefile).
End of Feature (EOF) policy
Before removing a committed feature from the system, a project
must first reclassify the feature or interface as Obsolete (see
below) and warn customers. After those steps, a later project
can actually remove the feature, but not before a period of one
year from the customer warning. Both projects must be ARC
approved.
Major, minor, and micro product releases; and patches
A major release is versioned with a .0 suffix (form x.0 or
x.0.0), such as 2.0 or 11.0. A minor release has a nonzero
suffix (form x.Y or x.Y.0 for nonzero Y), such as 2.1 or 3.12.
Changes suitable for a minor release may also be made in a major
release. A micro release has two suffixes (form x.y.Z for
nonzero Z), such as 1.0.1 or 11.3.2. Changes suitable for a
micro release may also be made in a major or minor release.
See the Release Taxonomy.html
for more information.
Most interfaces do not have version numbers. And we do not
release "interfaces"; we release products that include
Consolidations that contain Elements that export interfaces
(and import other interfaces). An incompatible change to a
Committed interface, if allowed at all, would require a Major
Consolidation release. The ARC opinion approving the project to make
the incompatible change would say (in Section 2, Decision and
Precedence Information): This project is suitable for
delivery in a major release of <consolidation name>.
Interface versioning
If an interface's producer and consumer are not always built
and delivered in unison, the interface should generally be
versioned by adding version numbers that are exchanged between
the parties. Versioning an interface allows an interface
incompatibility to be detected. A multi-part version number
(akin to the product release versioning above) is recommended.
Sometimes, a fall-back to an earlier interface level (common
between the provider and the consumer) is possible. For example,
a client newer client attempts to speak protocol 1.1, but a
down-rev server answers that it can only handle 1.0, so the
client must limit itself to that compatible subset. It has often
been helpful for *both* ends to know the version number of the
other end, so they can adapt appropriately.
Interface version numbers do not undergo a major or minor
increment merely because the product that ships it does so.