# Opera Core from the inside

## Architecture diagrams

An over-simplified diagram of the Core architecture is here. (Just joking.)

The architecture is most conveniently described by multiple views that focus on different parts of the architecture as well as at different levels. So far we've focused mostly on the source code component level. If you have Poseidon for UML installed you can look at the UML diagrams. Otherwise, they have been snapshotted as GIFs here:

- Product line architecture view
- Core structural view (API)
- Core component view (internal structure)
- Diagram of documented feature dependencies

## Conceptual frameworks

Right now I'm working on erecting a conceptual framework for a more comprehensive architecture description. To that end, there is a concepts document that approaches this from a number of angles. As my guide I am using the book "Software Architecture for Product Families", by Jazayeri, Ran, and van der Linden. One must read it slowly, but it appears to fit Opera well.

## Module documentation

The Opera code is divided into separately maintained source modules, each stored in a separate CVS module. Each module is owned by a named developer and maintenance privileges are only extended to a small number of the developers. Modules fall into four groups: core modules, adjunct modules (large pieces of code that are not properly core but are platform-independent, like M2 and Quick), platform modules, and finally the Opera module. The latter is steadily shrinking as it is being split into core and platform modules.

Information about the current and past releases of each module, as well as links to documentation that is not yet in the source tree, is normally available in the module repository on the Wiki.

Class diagrams normally require that you install the Poseidon for UML tool. The community edition is sufficient. The links to the diagrams may not be clickable; you may have to start Poseidon separately and open the pertinent file. The diagrams should all be in the source tree.

adbrowser: Documentation.
autoproxy: Documentation.
datastream:
debug:
defplug:
doc:
dom:
ecmascript: Documentation.
ecmascript_utils:
encodings: Documentation; doxygen API docs.
expat:
hardcore:
img: class diagram.
java: Documentation; class diagram.
jsplugins: background paper (Wiki); how-to; design.
lea_malloc:
libart:
libjpeg:
libopeay: Documentation directory.
libopenpgp:
libpng:
libssl:
locale: Documentation; doxygen API docs.
memtools:
minpng:
ns4plugins:
olddebug:
opplugin:
pi: Class diagram.
prefs: Documentation; doxygen API docs; Preference documentation (auto-generated).
prefsfile: Documentation; doxygen API docs.
regkey:
selftest: Documentation.
skin:
spatial_navigation:
svg:
url:
User-Agent handling. util:
wand:
widgets:
windowcommander: Documentation.
zlib: