$LastChangedDate: 2005-04-08 14:55:44 +0200 (Fr, 08 Apr 2005) $
Copyright © 2005 SUSE Linux Products GmbH
Abstract
This document describes the initial concept of a flexible system management library for Linux. Everything which is described here, can change on the way to it's implementation.
Unpublished Work of SUSE LINUX AG. All Rights Reserved.
This work is an unpublished work and contains confidential, proprietary, and trade secret information of SUSE LINUX AG. Access to this work is restricted to SUSE employees who have a need to know to perform tasks within the scope of their assignments. No part of this work may be practiced, performed, copied, distributed, revised, modified, translated, abridged, condensed, expanded, collected, or adapted without the prior written consent of SUSE LINUX AG. Any use or exploitation of this work without authorization could subject the perpetrator to criminal and civil liability.
General Disclaimer
This document is not to be construed as a promise by any participating company to develop, deliver, or market a feature or a product. SUSE LINUX AG makes no representations or warranties with respect to the contents of this document, and specifically disclaims any express or implied warranties of merchantability or fitness or any particular purpose. Further, SUSE LINUX AG reserves the right to revise this document and to make changes to its content, at any time, without obligation to notify any person or entity of such revisions or changes.
Table of Contents
Novell now has three different kinds of System Management Tools: YaST, iManager/CIM and Zenworks/ZMD. To keep the management of the operatingsystem consistent and to prevent multiple development of solutions for the same problem, a generic interface to the operation system should be used by all tools (clients). That's what this is all about.
LiMaL is a library written in C++, which provides a documented and unique programming interface to the operation system. It allows the execution of system init scripts and the configuration of system software components. It is designed to be able to add interfaces to other programming languages later on. Each feature, that LiMaL provides, must be implemented by a so called Pluglib (see Section 3.1, “Plug-in-Libraries (Pluglibs)”). Pluglibs developers have to follow some defined rules like e.g. how to handle errors or how to provide system logging and LiMaL provides some basic functionality for Pluglib developers to help archiving that. LiMaL is designed that way, that both, Pluglib developer and system management developer will have a documented and unique way to use LiMaL.
LiMaL consists about several components, which are described here.
Pluglibs are the most important part of the framework as they contain the code doing the real work. Pluglibs must be programmed in C, C++ or Perl (see Section 3.6, “Embedding perl PLUGLIBS”). Pluglibs must follow some basic requirements in order to integrate into the LiMaL framework:
They must follow the LiMaL logging conventions
They must follow the LiMaL locking conventions
They must follow the LiMaL error handling conventions
They must use Namespaces following the convention XXX (WIP)
FIXME: more to come
LiMaL infrastructure needs to be threadsafe because it will be used by multithreaded applications and will get bindings to languages with thread support (Java, Python, etc.).
PLUGLIBS must not use global/static variables.
There might be PLUGLIBS which require initialisations, that could take very long, like the packagemanager reading all packages and resolving dependencies before any action can be performed. To prevent these initialisations from beeing done with every operation, their results can be kept somewhere until every operation has been finished.
To simply hold the state of initialisations inside a process, objects can be used.
Example:
MyInterface *i = new MyInterface(); i->init(); i->doThis(); i->doThat(); i->writeItBack(); delete(i);
SWIG will be used to create different language bindings.
The PLUGLIBS have to provide the interface.
LiMaL will not provide a runtime evaluable interface, e.g. some kind of object format.
As LiMaL can be used by closed source components, it must have a license compatible to that requirement. It has to be evaluated whether LGPL is sufficient to fulfill that requirement.