MCML2 Project

This is our project logo. Picture comes from Czech TV series Návštěvníci and shows computer (that big glass cube with wires inside) called Centrální mozek lidstva – Central brain of mankind, which has the same abbreviation as CML language we use in our project. The man crouching in front of the CML is Mr. Vlastimil Brodský and he is just trying to repair it.

Abstract

Imagine you have quite a large system with a lot of options and one option suppresses or constraints a value of another one. And you want to set up some options to accomplish your demands but not to break any of the "global" requirements. An excellent example is a Linux kernel configuration (btw. this was the reason for creation MCml2). If you don't know it, imagine this very simple example: you want the rules MATH_COPROCESSOR implies not MATH_EMULATION to be always true, but you don't want to check it every time by yourself.

Maybe you are capable to remeber one rule, but consider a problem where you have about fifty or more rules intersecting on variables! That's really out of human power and here comes MCml2 to hold all the rules for you.

You may expect even a bit more than a simple rule checking of such en engine. MCml2 also should try to "correct" a rule when your change violates it. As well, you may expect it to show you the data in some ordered (and better structured) form, for it's really annoying to say ten times that you don't want the Links browser and the Netscape browser, if you once said you didn't want any browser at all. You would definitely want your program to be fast too.

Lots of the configuration problems have one similar - they are once specificated, but used many times. A perfect example is Linux kernel. Here a small group of specialist once specify all rules and structures of the problem and then thousands of common linux users just use it. That means we can divide our "users" - the MCml2 users - into two groups:

Following this, we could expect a good program to be able to offer a powerful and easy device for creating the problem specification and concurrently to present a transparent solution based on this specification for the final users.

There are much more qualities you may expect (e.g. multilanguage and multiplatform support) and MCml2 is here to try to grant them.

MCml2 - getting closer

As a specification format for configuration problems we've chosen CML2+. It is our extension of original CML2 made by Eric Raymond for purposes of Linux kernel configuration. Check chapter CML2+ specification for detailed information about this language.

To grant wishes of both groups (specialists, who develop new CML2+ databases, and the final users) we designed our project as a "program generator". That means that MCml2 works as a black box. A domain specialist puts a CML2+ code inside and gains a program for the final user. This program is generated as a source code in an programing language chosen by the specialist. Such a source code is then just compiled by an appropriate compiler and an application is ready to be used.

Although the MCml2 program is in C labguage, it is able to generate programs also in other programming languages. For the beginning we support a choice of Java and C, but adding a new language is not a difficult task. The language modularity allows a simple change between a window-based application and a web-based application with HTML interface.

MCml2 supports command-line, curses and X Window System interface. Any other interface could be easily implemented. For a web design we strongly recommend to compile CML2+ into a Java class and run it as a servlet.

The task of final users is very simple. They receive from their specialists just an application. It is supposed to be distributed as a source sode (C-like programs) or as a byte-code (Java), but it's just upon the specialist to distribute it as a binary executable files.

The specialists have (obviously) a bit more difficult task. They have to specify the problem in terms of CML2+ language. Then they just choose a target language and a final application user interface (one of the supported) and let MCml2 to generace the desired source code.

The advantages of this attitude are simply to be seen. The specialist does just the same job as it would have to anyway and the final user has got an application made excatly just for his needs. Furthemore, various input-specific optimalization could be performed in the generation-time, because the problem specification doesn't vary during the configuration.

The advantages of this attitude are simply to be seen. The specialist does just the same job as it would have to anyway and the final user has got an application made excatly just for his needs. Furthemore, various input-specific optimalization could be performed in the generation-time, because the problem specification doesn't vary during the configuration.

The most important basic features of MCml2 are summarized in following points:

The following part describes the instalation of MCml2 for all potential users. The final users do not actually need to worry about it, because they needn't to come in touch with MCml2 at all.