Software systems themselves adapt when things go wrong, diagnosing and responding to problems by taking an alternative approach, rolling back to a consistent state, or taking another corrective action. Conversely, software systems are adaptable . They can be customized easily to meet individual user needs and to take advantage of newly published software. Oxygen's software architecture relies heavily on abstraction to support change through adaptation and customization, on specification to support components that use these abstractions, and on persistent object stores with transactional semantics to provide operational support for change. Abstraction Computations are modular, as is storage.
Abstractions characterize components that carry out computations and objects used in computations.
Specifications Specifications make abstractions explicit, exposing features to other system components. In Oxygen, specifications support adaptation and change by providing information about system configurations, to determine what modules and capabilities are available locally, module repositories, to provide code over the network for installation on handheld and other devices, module dependencies, to support complete and consistent installations or upgrades, module capabilities, to support other components and applications in scripting their use, and module behavior, to support their safe use through a combination of static and runtime checks. Object-orientation helps maintain the integrity of the store by restricting updates to those performed by methods in the store. The store has transactional semantics, which enables concurrent access, rollback and recovery, and consistent updates to modules and data. It also operates efficiently, using techniques such as optimistic concurrency, pre-fetching, and lazy updates and garbage collection, which defer the costs of modifying the store as long as possible or until there is time to spare.