[LWN Logo]

Date: Sat, 18 Mar 2000 01:25:48 -0500
From: "Eric S. Raymond" <esr@snark.thyrsus.com>
To: linux-kbuild@torque.net
Subject: [KBUILD] Time for a bullet?

I've been examining the existing kernel configuration system, and I
have about concluded that the best favor we could do everybody
involved with it is to take it out behind the barn and shoot it
through the head.

Mind you, this is not intended as any sort of putdown of the people
who did it; mec and others have clearly labored heroically to adapt
the original design as the complexity of configuration has increased
and the three different configuration modes were implemented.  I bow
respectfully in their direction.

Unfortunately, the end result of their heroism is a brittle,
over-complex mess.  It's a mess of a very characteristic kind.  I
believe it was Alan Perlis who said that all programs that grow long
enough become first rococo, then rubble.  The present kbuild system
is, but definitely, in the rococo stage.  I think the collapse to
rubble can be expected sooner rather than later.

I found this out when I tried to add a facility for progressive
disclosure, based on the user's report of his/her level of expertise,
so that non-expert users could configure kernels without having to see
every single configuration panel for every single obscure feature set.
I gave up.  It was just too hard to change anything without breaking 
everything.

I think I may be able to solve this problem with a couple of weeks' 
work.  I've sketched a design, and implemented some sample code,
for a purpose-built configuration language that escapes the
limitations of the pseudo-bash that kbuild now uses.  Among other
things, the language would support 

(a) Optional use of checks against the output of dmesg(1) and lspci(1)
    to eliminate many questions in the common case where we are
    configuring on the same machine that will run the kernel.

(b) A common parser/configurator engine usable by multiple front ends
    (I expect to write two initially, one line-oriented like configure
    and one to run under X like make xconfig).

(c) Progressive disclosure.  By specifying some information about the
    goal of the configuration and his/her level of expertise, a
    relatively unskilled user will be able to get away with seeing
    fewer than 25% of the questions now presented.

Now for the hard question.  If I do a competent job at this, is it 
going to get used?  My path forward will lead to the obsolescence 
and complete scrapping of the present system.  There are three reasons
I can see why people might resist this:

1. Transition costs.  Some people may not want to learn a new config
   language, even though it will be less spiky and more expressive than
   the present one (that much I can already guarantee!).

2. Territoriality.  Some people with a lot of time invested in the
   present implementation may resist having it scrapped.

3. Implementation prejudices.  My incomplete protype is written in
   Python; I expect the full system will be as well, if I complete
   it.  I can imagine objections to this, though I'd think they would
   apply about equally to the use of tcl/wish in the present system.

So I'd like some feedback on these problems.  If the members of this
list are not willing to back a radical rethink of the problem, I doubt
I'll be able to sell it elsewhere.  Please tell me if you think I
would be likely to regret committing myself to this effort.
-- 
		<a href="http://www.tuxedo.org/~esr">Eric S. Raymond</a>

Our society won't be truly free until "None of the Above" is always an option.

--  To unsubscribe, send mail to: linux-kbuild-request@torque.net --
--  with the single word "unsubscribe" in the body of the message. --