Discover YaST development
Discover YaST development
YaST consists of several pieces that work together despite being distributed among several packages and repositories. In order to be proficient in YaST development, it's crucial to understand what is the role of every component, how they relate to each other and where they live in the GitHub infrastructure. That is explained in the YaST architecture document.
That complex system is translated into files and folders in a consistent way all along the full set of YaST repositories and therefore in the installed system, as detailed in the YaST code organization description.
The core system of YaST is implemented using a mixture of languages, but the whole functionality is easily accessible from Ruby, the language used to implement almost all modules. The documentation of YaST Ruby bindings contains comprehensive information not only about the way to access SCR or WFM from Ruby, but also about the legacy modes used during the transition from the YCP language to Ruby, like Ops or Builtins.
YaST provides a basic API to access several aspects of a Linux system configuration, from network to packages management and from hardware status to systemd. YaST basic libraries provide access to that API and to several YaST specific mechanisms and concepts. Full documentation can be found on the yast-yast2 page on Rubydoc.
At lowest layers, almost every operation in YaST relies on one or several agents. The GitHub of yast-core documents the full range of agents that are available through the SCR interface.
YaST interface relies on libYUI, an engine that provides abstraction from graphical user interfaces (Qt, Gtk) and text based user interfaces (ncurses). The YaST code interacts with the underlying libYUI system through the UI bindings. Some shortcuts are provided by the abovementioned Ruby bindings in order to make the usage of UI bindings even more straightforward.
Even if libYUI is used through the very convenient wrappers, the UI reference documentation and the UI layouts and events guide from the original C++ API are still the best sources of information to know how every class and method works under the hood. Currently there is also new experimental on the fly generated documentation for this API.
YaST is not only the Swiss Army knife of Linux configuration, it's also a very flexible and configurable installer used in all versions of openSUSE and SUSE Linux. In order to understand how the different pieces interact during the installation process, from Linuxrc to the final steps of installation, including configuration proposals or partitioner, it's highly recommended to read the documentation of the yast-installation module.
Those willing to take their first steps into YaST development can follow the tutorial titled "creating the YaST journalctl module". The document, targeted to developers with no prior experience with YaST, presents a very simple example of a YaST module developed from scratch and provides a good overview of the YaST architecture and development tools.
When developing or debugging YaST, there are several gotchas that can be extremely useful. Some of them are not only targeted to developers but also to users and are collected in the YaST tricks page at the openSUSE wiki.
In addition to those tricks, you can find several bits of useful information in the YaST development tips and tricks document.