{'fraction_non_alphanumeric': 0.014367816091954023, 'fraction_numerical': 0.0, 'mean_word_length': 5.966666666666667, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Configuration management for highly-customisable software

Customisable operating systems, database systems, and communication subsystems have demonstrated many advantages of customisation, including considerable performance improvements. One common approach for constructing customisable software is to implement it as a collection of modules that can be configured in different combinations to provide customised variants of the software. Typically, ad hoc methods are used to determine which modules may be combined. Such methods require intimate knowledge of the modules and their interactions or the configuration will not behave as expected. In this paper, we present a methodology that simplifies the difficult task of constructing correct custom variants of highly customisable software. The methodology is based on identifying relations between software modules that dictate which combinations are correct. We also introduce a configuration support tool that, based on these relations, allows only correct configurations to be created.