Chapter 3. Introducing YaST

YaST is the installation program used by SUSE Linux™ to install Linux on a system and to administer this installed system thereafter. The notation “program” is a bit misleading here because in fact YaST consists of many components and layers. Therefore one may as well regard YaST as an installation and administering environment.

Among the most important components in this environment are the YaST-modules which are usually written in a YaST-specific language called YaST Control Language (YCP). With exception of some rare cases the whole high-level functionality of YaST is formulated in YCP. When YaST is running, the YCP-modules are interpreted by the low-level YaST-components and the YCP-code makes use of the infrastructure provided by them. The possibility to add such modules at any time realizes the concept of extensibility that is inherent in YaST.

This concept of extensibility by means of modules has been designed into YaST from the very beginning. In fact YaST-modules are the layer of YaST the user comes in contact with. Nearly every dialog on screen during the installation is realized as a YaST-module and there are also modules that act behind the scenes to care of specific pieces of hardware, e.g. the keyboard.

The YaST-modules mentioned so far come ready-made with the distribution and provide the core functionality to install and administer a SUSE Linux™-system, but this need not and should not be the end. The extension facility is intended to be also used by “third party people”, e.g. hardware vendors, who want to contribute YaST-functionality in some way.

To pave the way for this intention to come alive this document will provide some insight into the inner mechanics of YaST. The primary goal of the following elucidations is to make available the information that is needed to write YaST-modules that conform to the programming paradigm imposed by YaST.

What This Document Is.  This document explains in some detail how to extend the functionality of YaST by means of modules. Of course every module of more than trivial functionality will have to make use of the features that are provided by the YaST-core-components and other YaST-modules. While the official YaST developers documentation is the primary knowledge base for all YaST related information, it is a bit overwhelming for everyone who tries to get into the matter for the first time. Therefore this document tries to provide a gentle introduction by explaining things rather explicitly in the beginning and getting more and more concise towards the end. By providing very many references to the developers documentation this document can be thought of as a “guided index” to this voluminous material.

What This Document Is Not.  This document will not explain the “binary” particularities related to YaST, i.e. there will be no implementation notes on how the low-level machinery of YaST is realized. Because YaST implies the module concept for extensibility, only this approach is promoted here. The “engine” that executes these modules and how it is assembled is subject to the following explanations only in so far as it is necessary to understand the interaction of the various components.

The Audience Of This Document.  So this document is intended for all people who want to make use of the YaST-functionality by providing modules for a specific task. Additionally the information presented herein might be interesting for all those who want to adept something about the whys and wherefores related to YaST as such. Furthermore, to get most out of this reading, the reader is supposed to have some programming experience in a structured programming language, ideally C/C++. Some expertise in functional programming could also be helpful but is not really necessary.