Requirements and pre-analysis for a cross desktop configuration infrastructure

Philip Van Hoof spamfrommailing at freax.org
Thu Mar 10 22:15:00 EET 2005


Hi there,

I did a little bit research by reading mailinglists and even a little
bit of studying existing applications. Using the gathered information
I've tried putting together a compressed list of requirements for a
configuration system. Some of the requirements are probably duplicates
of something that already exists (yes, I know of the existence of
GConf). Others might make it bloat. 

I know it isn't by far complete. I know I still have to investigate lots
of other applications. In time, I will.

I did take a look at, for example, KConfig. Mozilla (and firefox) and
some GNOME applications. I haven't yet looked at the configuration needs
of, for example, OpenOffice.org.

I would be very thankful to software developers who append their needs
and or append thoughts to this document they might have about such a
configuration system. 

Once a version of the document is somewhat acceptable for most important
desktop applications; I'd like to propose putting it or another document
like this on the wiki of freedesktop.org.


Requirements
============

A configuration management  and  storage  system   that  can be used  on
multiple platforms (for  example Linux,  *BSD,  Windows,  Mac,  etc). It
needs  to  be  very  easily  to  integrate  existing  applications  and 
technologies with  it. Making this difficult will hinder the acceptation
by developers of existing applications.

It needs support  for  notification of key/value changes. This basically
means that applications  who  can  run  in a main-loop (so called, event
based applications -- most  applications with a userinterface --) can be
notified about configuration changes. A good example: when  you  change 
the global proxy settings in a KDE  application,  both  firefox  and the
weather-applet on your GNOME panel can easily take action on  behalf  of
that  specific event. Of course  only  in  case  those applications are 
interested in that specific event. There's  many applications  who share
interest in certain configuration  keys.  (Other  examples:  The default
applications to use like the default E-mail client)

In a future somewhere on the island Utopia  could  such  a  notification
system notify  panel  applets  and  other  applications about the screen
resolution  being  changed,  or  monitors  being  added to the dual-head
configuration. But perhaps are such events better handled by X11 signals
and atoms. I'm not sure a configuration system should be responsible for
notifying  applications  about  this  type of events. Whether it should,
needs investigation and lots of talking with the people involved.

It should support two types of  acknowledgment  of  settings:  Immediate
acknowledgment  on  a  per - setting  basis.  And setting  multiple such
settings in one action.  The  so  called  "applying"  of new settings or
setting a group of settings.

It would be nice to have some sort of transaction support.  But  so  far
I haven't  seen something  like this being used by desktop applications.
It can make it  more easy  for developers  to  create  so  called "undo"
actions and to make sure that a  group of settings  have indeed happened
before notifications are being send to interested clients.

Creating and restoring  offline  backups of the configuration-data  is a
must  have.  Applications  need  access  to  an  API  for exporting  and
restoring   their   settings.  Not  just some  commandline  tool.  Many 
applications    implement   dialogs   and   wizards (druids) to ease the
migration of settings to an other desktop computer. Or to let  the  user
store it's data and configuration on a removable device.

Some "geeks" use a source control system for managing changes  in  their
home directory. I don't see this  as a  required  something  to support.
Perhaps the  ability  to  freeze  writing  to the backend so that backup
applications  can  instruct the configuration daemon not to write for a 
certain amount of time or until the unfreeze command is given.

Some applications want the ability to "forget"  all  settings.  Therefor
deleting a  complete  tree  should  also  be possible using the API. For
example gnomemeeting has the possibility to reset your configuration. It
will, at this moment, try to delete the xml-files from the storage after
killing  the  daemon. It shouldn't  be  a  necessity  to do that. And we
should ask the gnomemeeting-team  why  it's done  that way  and  how  to
improve this situation for them.

$ gnomemeeting-config-tool --clean
...
Removing /home/username/.gconf/apps/gnomemeeting
Shutting down GConf daemon
$

It  doesn't  need  to  support  multiple backends out of the box. But it
should allow  the  creation  of  new  storage-backends. A  good  default
storage-backend can, for example, write  out XML files. The usage of XML
might,  however,  make  it  more   difficult   to   correctly  implement
transactions.

The backend  needs to support default settings which are stored on a for
the users  read-only  location. For  example: the  user  settings go  in
$HOME/.dconf/ and the defaults go in /etc/dconf/default/.

It looks like GConf has support for read-only keys. But I  haven't  seen
it being used.

It needs support for some meta information per key. Like the description
and whether this is a default-value or a by-the-user set value. And  the
date it has been touched last time.

I'm not  sure  whether  it  should support saving  keys  when  they  are
overwritten (so that you can undo/restore the configuration to a certain
date). This might have a privacy (and security) impact.

Preloading all the keys from a specific directory-key in a library-cache
could  be  useful  because  most  applications  tend to  load  all their
configuration data at startup. This could  improve the  startup time  of
many desktop applications. Whether it will be significantly  improved by
such a enhancement should be investigated. It shouldn't, however, be the
default.



The current GConf system
========================

Advantages
o. Has notifications
o. Can use multiple backends
o. The daemon will be shut down after a certain amount of time

Disadvantages
o. Comes with only xml as available backend
o. Needs a daemon running
o. Is using ORBit-2, a CORBA implementation in C
o. Stores a list of connections of clients who are interested in 
   notifications
o. The build-environment needs some work

Nice to know
o. Depends on GLib
o. Depends on ORBit-2
o. Depends on libxml-2
o. Has a C++ wrapper

GConf's gconf-dbus branch
=========================

Advantages
o. Has notifications
o. Can use multiple backends
o. The daemon will be shut down after a certain amount of time

Disadvantages
o. Comes with only xml as available backend
o. Needs a daemon running
o. Isn't using the full potential of DBUS 
o. Stores a list of connections of clients who are interested in 
   notifications. with DBUS this isn't necessary anymore.
o. The build-environment needs a lot work

Nice to know
o. Depends on GLib
o. Depends on DBUS
o. Depends on libxml-2
o. Has a C++ wrapper

-- 
Philip Van Hoof, Software Developer @ Cronos
home: me at freax dot org
gnome: pvanhoof at gnome dot org
work: philip dot vanhoof at cronos dot be
junk: philip dot vanhoof at gmail dot com
http://www.freax.be, http://www.freax.eu.org




More information about the xdg mailing list