After 11 months of painstaking work and testing, CML2 1.0.0 is ready for use, and ready to replace the current kernel-configuration system. You'll find it at . I've made a transition guide available at . (Why this project at all? For those of you who don't remember, it all started when I realized that building kernels is way too hard. I wanted to simplify the configuration task enough to make configuration accessible to non-gurus. It needs to have more policy options. Rather than hundreds of questions like "Include FOOBAR2317 driver?", the novice should see stuff like "Compile in all modular drivers as modules without prompting?") On 30 March 2001 at the Kernel Summit, Keith Owens and I worked out a transition schedule with Linus. Keith's rewrite of the makefile system and my configurator tools are officially slated to replace the present system in the 2.5.1 to 2.5.2 timeframe. That, of course, is contingent on us not screwing up :-). (For those of you who grumbled about adding Python to the build-tools set, Linus has uttered a ukase: CML2's reliance on Python is not an issue. I have promised that once CML2 is incorporated I will actually *reduce* the kernel tree's net dependence on external tools, and I know exactly how to deliver on that promise.) Linus opted for a sharp cutover rather than a gradual transition -- when the new stuff goes into the tree, CML1 will drop dead immediately. Configuration maintainers should be prepared! Right now, any errors in my translation of the CML1 rules are my problem -- but after Der Tag, they will swiftly become *your* problem. We'll all be happier if you have flamed my butt and helped me fix any problems well in advance of the cutover. The rules files in this release have been re-checked against the 2.4.3 tree. While I can't guarantee they are completely correct (that's your job), they at least cover every CML1 symbol. I have written coverage tools to check this. There is still a problem with the CRIS port symbols that lack a CONFIG_ prefix, but the CRIS people say they'll fix that in their next update. The stock CML2 distribution contains an installation script which will drop CML2 in place on a current kernel tree. At most one existing file (your top-level Makefile) will be touched, with new versions of the config/oldconfig/menuconfig/xconfig productions edited in. (The old ones will be kept under variant names, so you can still invoke CML1 if you want.) I've learned, the hard way, that kernel developers are a conservative bunch. So, to help you all feel better about the change, here are some of the improvements CML2 offers over the existing CML1 configuration system: Maintainability: * Where CML1 had three different interpreters, none perfectly compatible with any of the others, CML2 has *one* rule compiler and *one* rulebase- interpreter front end. This will be good for consistency and economy. * As of CML2 1.0.0 and CML1 2.4.3, the combined code and data size in lines of the system (a good indicator of its maintainability) shrank by 38%. For code alone the figure was 43%. Furthermore, where CML1 was written in a weird mix of three languages, CML2 uses exactly one. * CML2 decouples the configuration language from the configuration user interface (they communicate with each other only through the compiled rulebase). This means that it will be relatively easy to improve the UI and the language separately. * CML2 has a track record. It is already being used in other projects, including most notably the Embedded Debian Project. Adam Lock at Netscape is using it to construct a tool for configuring Mozilla builds. Programmer Friendliness: * The rather spiky and cluttered shell-like syntax of CML1 is replaced with a much simpler and more regular format resembling that of .netrc or .fetchmailrc. More importantly, the semantics of the language are declarative rather than imperative -- a better match for the problem domain, and thus more expressive and easier to code in. * CML2 will eliminate (or at least drastically reduce) skew between port configurations. The fact that the top-level CML1 files of the fifteen ports in the kernel tree are separate means there have been plenty of opportunities for the common code in them to drift apart; CML2's design and compilation rules should effectively prevent future bugs of this kind. * CML2 query prompts and menu banners are separated from the symbol dependency declarations. Thus CML2 system definitions can be internationalized and localized. * CML2 has a complete, explicit description. Syntax, language semantics, and user-interface options are all discussed in detail. User Experience: * In CML2 it is impossible to generate a configuration that is invalid according to the rules file(s). You'll get a popup complaining about the constraint that was violated if you try. (This is effect #1 of having a theorem prover in the configurator.) * Whenever CML2 can deduce from a symbol tweak that other changes are required, it does them. And if the change is reversed, so are all those side effects. (This is effect #2 of having a theorem prover in the configurator.) The user interfaces tell you what the side effects are. * All three interfaces do progressive disclosure -- the user only sees questions he/she needs to answer (no more hundreds of greyed-out menu entries for irrelevant drivers!). * The declarative semantics of CML2 makes it much easier to set up and check options for policy-based configuration. I have done only enough of this in the CML1 translation for demonstration purposes (there are new symbols TUNING, EXPERT and WIZARD that change some visibilities). Once CML2 is in place, it should be a relatively small effort to give the user a rich set of policy and don't-bother-me options. * The line-oriented mode of the new configurator is much more powerful than the original Configure. It's possible to move backward or jump around in the configuration sequence. * The new curses mode, unlike the old menuconfig code, has full access to the help texts. * All URLs in the Tkinter version's help windows are now live; if you click on them they'll launch a browser. * Curses and Tk interfaces now use color as a navigational aid -- both in the same way so the user interface is consistent. * And a cool penguin logo when we iconify the X version! :-) Many linux-kernel regulars have helped develop, test, and debug CML2, including Giacomo Catenazzi, David Kamholz, Robert Wittams, Randy Dunlap, Urban Widmark, André Dahlqvist, Drago Goricanec, William Stearns, and Gary Lawrence Murphy.