Starlink subroutine libraries should be viewed as separate items of software which are intended to work together, as part of a complete programming environment. To function together effectively they must adhere to various conventions, and the ease with which they can be integrated into a single application will depend on the extent of the conventions which they share.
In some situations, a highly “Starlink-specific” implementation of a library may be required. By making full use of Starlink conventions, such a system can be made particularly easy to use in a Starlink environment. In other situations, however, a more general-purpose implementation might be better, especially if it may need to be used on non-Starlink machines where other supporting software will not be available. To satisfy these requirements, it is anticipated that many Starlink libraries will be made available in two “compatibility levels”.
The “stand-alone” version of a library will be a general-purpose implementation which is intended for use on its own, separate from any pre-defined programming environment. Such a library may call the stand-alone versions of other Starlink libraries, but this dependence should generally be kept to a minimum so that the maximum freedom of use and portability is achieved. The stand-alone version of a library is provided for use by applications which do not intend to integrate closely with any particular programming environment.
Conversely, the ADAM version of a library will be closely bound to the Starlink ADAM programming environment, which allows a closer degree of cooperation between separate libraries (in particular through the use of the ADAM parameter system). A more integrated appearance can then be provided for the user, along with additional facilities, so that the ADAM version of a library will usually contain extra routines which are not available in the stand-alone version. This version of a library should always be used by applications which make use of ADAM facilities.