Introduction

UniConf is the glue that binds configuration systems together. We used to claim it was the One True Configuration System, but that's a bit dogmatic. The whole point of it is to tie applications together, so that they can co-operate and share their user-preferences.

We've tried to keep UniConf as simple as we could possibly make it. And we tried to make it as extensible as we could possibly make it. By combining these two things, we've got the nice property that you can probably implement any configuration system out of it, and plug in to existing configuration systems as well.

The basic building block of the UniConf system is the UniConfTree?. That's a hierachical tree of key-value pairs. Every key and every value is a string, which is what most people store in configuration systems anyway. You can retrieve pairs, store pairs, and enumerate pairs, which is all you really need to something simple.

But you can get a lot more out of it, which is why you should continue reading.

Why you want UniConf

Depending on who you are and what you do, UniConf offers some compelling advantages, if only you'd look into it. Here, let's give some examples:

Application developers

Say you're a developer that's writing a new application. Unless it's a really trivial application, you're going to want to let users save some form of preferences. What you do nowadays is fire up the text editor and start writing a configuration system. You say to yourself, "I need to store some data in a file. I need to read and write some stuff. I need to write another parser? Maybe I'll just use XML and libexpat?" If you're going to link in a library that does this, you could probably use UniConf that's designed for this sort of thing.

Maybe you've already got an application that you've written before you heard of UniConf. Well, we're happy to let you play as well. By using UniConf instead of your own hand-rolled configuration system, you can save on maintaining a pile of code. To support your old configuration files, you can write a plugin that lets UniConf use them as your backing store. And if you don't want to link in our library, you can talk the UniConfProtocol?.

System administrators

The applications for system administrators are just wonderful. The nice feature about UniConf that I haven't told you about is that it's distributed. So you can setup a whole bunch of client machines that will talk to one UniConfDaemon and get group configuration settings that way. UniConf supports a notion of policy inheritance and access control, so you can centrally control and entire cluster of servers. Or a network of workstations.

Distributors

Do you want to write configuration files with sane defaults? Maybe give users an interface to choose defaults on install? It's easy to configure any UniConf-aware application because there's a common interface to retrieve and store configuration information. So you no longer have to write parsers to extract data and transform it safely.

Users

Do you own more than one computer? Maybe you have a desktop and a laptop? It sure would be nice to keep the settings on your laptop synchronized with the settings on your desktop. With UniConf-aware applications, this is definitely possible.

If you have a house full of computers, you can keep them all synchronized. And once it's setup, it should happen automatically so you don't have to worry anymore. How cool is that?

Presentation Slides/Paper

apenwarr sometimes presents a UniConfPresentation. (Download the slides: Attach: uniconf-presentation.pdf )

He also wrote a paper about UniConf: Attach: uniconf.pdf (20 pages).

  • NOTE This presentation and paper was written in 2003, and thus contains statements that are no longer accurate. It is still included here for historical purposes.

sfllaw and ppatters went to the 2005 Desktop Developers' Conference where they presented a talk on why UniConf is a good universal configuration system: Attach: uniconf_universal.pdf . (You can also get the source.)

See Also

Related Projects

There are also other projects that purport to have similar goals, but will end up being/have been UniConf enabled anyway since we subsume them. :)