How to fix the Unix configuration nightmare

Matthew Arnison maffew@cat.org.au
composed January 2002
revised March 2002

As seen on freshmeat.net and slashdot. Some of the comments are excellent. There was quite a bit of discussion on sourceforge too. Update June 2003: Hiveconf 0.2 has been announced, a project which has similar goals to those I describe below.. A fair bit of design work has been done, and basic features implemented in python.

Summary: Unix configuration has plenty of room for improvement. Various attempts have been made to close the gap with the popular desktop operating systems, but the right recipe is yet to be found. I propose an approach for combining free software with easy configuration, making it easier for developers to get it right without losing diversity.


Unix is steadily evolving into something much easier to use. The trick is to find tools that make things more friendly, but fit in well with existing tools and are easier for people to take and use for new projects.

The Linux distributions and the BSD ports system are like this, taking an existing wealth of software and working with its quirks to streamline the installation and upgrading of applications and system software.

GNU have done a lot of good work in standardising the compilation of software on different operating systems (automake and configure), parsing command line options (getopts), and internationalisation (gettext).

One area that's still a mess, however, is configuring applications

There are useful general trends, like putting system-wide configuration in /etc, and personal preferences in files beginning with . in your home folder.

However, there is a complete zoo of configuration file formats. Some use the old Windows .INI format. Others use simple variable assignments. And some use natural language style syntax.

Now a certain amount of diversity is healthy. But in this case it makes it a bit of a black art to build user-friendly and powerful configuration tools for all the software on a machine.

There have been various noble attempts to make it all easier to get a handle on.

Some popular packages, like apache and samba, have had point-and-click front-ends built for them. But each front-end works differently. Other packages, notably the linux kernel and Debian debconf, have a range of different interfaces depending on the user's taste, from a raw text file and vi, to a text-based menu system, to graphical point-and-click.

Another approach is to custom build a consistent set of front ends for a lot of different software configurations, such as the GNOME and KDE control panels, the linuxconf project, and dotfile.

And then there's the Microsoft way. I don't think I need to go into much detail here as to what a mess the Windows registry is from a Unix geek's perspective. It does provide a certain amount of power for graphical applications, but the text-level access is shoddy and cryptic, the naming system opaque, and a binary database seems to be an inherently unstable and inflexible way of storing configuration data.

A new approach

All of the free software efforts to make things easier to configure have made things better. But none of these projects have got close to the kind of overall accessibility that Windows and MacOS have.

But despite an apparently messy situation, I think that Unix may not be very far off from a workable solution.

Obviously it's possible - reports are that MacOS X has pulled off a very nice graphical front-end to Unix [*]. However, that front-end is the bit they're keeping closed, so the other Unix systems are going to need to build something free.

The solution I think lies in combining the best of the approaches I listed above. It's vital that it be something that can work with existing programs, but also is attractive to developers to incorporate into new versions and new projects. Without integration into the applications, it's always going to be a bit of a dodgy hack that makes it difficult to change the configuration files in a diversity of ways.

Like previous successful Unix evolutions, it needs to plug into current technology in a way that gives something back to the developer pretty quickly, and make it easy and inviting to be used in both existing and new projects. Getting the developer involved is crucial for making sure the configuration manager keeps up to date with changes in the application, which I believe is a big part of the success of standards like gettext and configure.

It needs to accomodate diversity (the opposite of the One Registry approach, which I think will never fly on Unix). And it needs to be tenacious: it should be useful even with minimal information, but take good advantage of as much information as is given.

It needs to help both the user and the developer. It helps the developer by automating and cleaning up the their configuration handling and documentation. That's a big load off their plate. It helps the user by providing both flexibility and consistency.

Here's an outline of how it might work:

With such a system Unix could go even further than Windows and Mac, providing the ease-of-use of graphical configuration, with the flexibility and security of remote text-based configuration, and the power of programmatic access to read and change configurations throughout the system.

If this seems like a good idea, then all we need is a team of programmers and documenters to write it. It seems like a lot of work, but with the right touch, and strategic initial energy, it would be something that attracted contributions from a lot of different angles. Personally I can go no further than making this description. So if this approach inspires you, please take it and run with it!


Footnotes:

[*] Dig a little deeper into MacOS X and you find that only the very basic parts of the Unix daemons (such as apache and samba) are configurable through pretty point-and-click dialogs. For more advanced apache settings, you need to work with the usual text configuration files.

[*] My original version of this piece implied that linuxconf still keeps some sort of internal registry. In fact they got rid of that behaviour about 4 years ago. My apologies to the linuxconf developers for displaying my obsolete knowledge in a way that made their work look bad.


A bio: Matthew Arnison <maffew@cat.org.au> is passionate about science, activism and media. He has played a major role in the setup and running of activist media projects cat.org.au, active.org.au and indymedia.org - all of which rely on free software. Matthew first installed GNU/linux in 1995, and since then has helped setup and maintain several internet servers, including plenty of seat-of-the-pants action during live indymedia webcasts. When programming, Matthew tends to concentrate on user design, and he likes to think an emphasis on usability in the active software is part of the success of indymedia.

$Id: unix-config.html,v 1.9 2003/06/24 22:23:26 maffew Exp $