= 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 [http://desktopcon.org/2005 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 [http://www.law.yi.org/~sfllaw/talks/#uniconf source].) = See Also = - Get the code: http://code.google.com/p/wvstreams (see WvStreams) and 'unity' (KDE, Gnome, MailDir, and [DBUS] plugins) - The WvStreams documentation, which includes UniConf. - UniConfFeatures - UniConfArchitecture - UniConfPlugin - UniConfGen - UniConfDaemon - UniConfSecurity - UniConfForMessagePassing - TransactionalUniConf - The WindowsRegistry, which is suspiciously similar in many ways (and dissimilar in others). - WvConf and UniConfHistoricalDiscussion = 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. :) - [http://elektra.sf.net Elektra Project] - Supported by UniConf via ProjectUnity - [http://www.freedesktop.org/Standards/config-spec FreeDesktop.org Configuration Specification] which may eventually have some code in the [http://www.freedesktop.org/Software/CFG Config4Gnu] project. - [http://asg.web.cmu.edu/acap/ ACAP], Application Configuration Access Protocol, used at CMU - [http://yaml.org YAML, not a markup language], an interesting file format we should consider supporting. - GConf (Gnome) and KConfig (KDE), of course - Supported by UniConf via ProjectUnity - DBUS, a good basic protocol for exchanging various requests, including config requests. - Supported by UniConf via ProjectUnity