$Id$
This document describes the common controlled API to the core code of Opera. Its intended audience is members of the Opera engineering department.
The Core API consists of a description of what the core does, plus code to access or activate that functionality. (See a separate section below for many more details.) Its purpose is to make most platform and customer requirements to the core visible in three ways:
The following block diagram shows our working model of the view of the Core code from the outside. It is probably not complete, but it covers a large number of cases. Explanations to the various boxes follow below.
DreamWeaver, +-------------+ +---GUI---+
Teleca UI, ... ---> |Customer code| | Plat. |
+-------------+ | UI |
Linux SDK, +--Opera API--+ | code |
OperaBridge, -----> |Cust adaption| | |
MacroMedia API, ... +-------------+ +---------+
+---Core utils---+-----------Core API upward---------+----Featurettes---+
| +-----------+ | +-------------------------------+ | +-----------+ |
| | Util | | | Prefs WindowCommander | | | JsPlugins ==========> customer code
| +-----------+ | +-------------------------------+ | +-----------+ |
| | | +-----------+ |
| | | | JVM ==========> (Sun) JVM
| | | +-----------+ |
| | | +-----------+ |
| | Contents of core code | | NSPlugins ==========> 3rd party plugins
| | may be controlled by | +-----------+ |
| | settings of FEATURE_* | +-----------+ |
| | | | ES Voice ==========> IBM code
| | | +-----------+ |
| | | +-----------+ |
| | | | VoiceAPI ==========> IBM code
| | | +-----------+ |
| | | +-----------+ |
| | +-------------------------------+ | | MailGlue ==========> M2
| | | Prefs PortingInterfaces | | +-----------+ |
| | +-------------------------------+ | ... |
+----------------+---------Core API downward---------+------------------+
+-----------------------------------+
| Platform support code |
+-----------------------------------+
It is probable that not all of Opera as it is now is representable in this architecture, so the drawing may change (or Opera may change). One example is Opera initialization: it does not obviously belong in WindowCommander or PortingInterfaces; and initialization order differs on different platforms, with platform code sometimes being initialized after some core pieces are ready but before others.
It is the code we produce that we sell, but the core API is mostly not about code. Instead it is about structures that support the development of a reliable product, or in this case, a reliable core component.
The Core API consists of at least these following parts. Note that one can make each of these arbitrarily complex; we aim to make them light-weight. (We have code to write.)