KDE Core/Platform 11/Settings

From KDE Community Wiki

Warning

This page contains rough working notes from discussion sessions at Platform 11, the contents of which may not accurately reflect any decisions made. Please do not infer anything from these notes, official summaries of the conclusions reached will be made available for discussion as soon as possible.


KConfig x New config as a library support

Replace KConfig with a Qt only based config library, with native backends for target operational systems. This new library will be suitable for even Qt only apps. It will be a solid/phonon like library for backends

Among cited characteristics desired

  • Remove all global config usage ( as <KDEDIR>/share/config in Linux ). All configs are user based and Kiosk is of course respected, so no user or distro will be afflicted
  • kcfg and defaults not deployed anymore by a separated file. Defaults can be included in binary through headers for example, and are generated on the fly on first run from user. Distros still can have their tree with configs. Maybe a description generated by a tool to provide automatically which configs are available on the app to help distros.
  • New library would be wrote from scratch and a kconfig new code will be as the direct glue to make kde compile it without change current implementations. In future, apps can use directly the new library as kconfig wrapper will not be needed anymore. KConfig will be a transitory stage

Helio wants to try to implement it.

Current pointed implementation issues open questions

  • Multiple instances of same app and concurrent write/read
  • Desire of config change notification related to backends, not all can have this available. Since we're not look deep on other platforms config systems, we assume that dconf is the only one that has it.
  • Migration from kde4 configs. Proposal of a tool to make the process. This is feasible, only will relies on create a parser or use kconfig to read ini files, and will take some time to write. Using kconfig itself will create an undesirable dependency.

Configuration systems

DConf

DConf as a backend for KConfig would offer some nice features.

Unlike the current .ini files it creates one or multiple binary settings files that is used by all applications. A shell tool exists as well as a gtk settings editor. This multiple files can be used in a form of list, with the benefits of locks as well, making a must for kiosk or at least not breaking the functionality.

Reading of settings is done via one mmaped file (read only). Therefor reading is fast. Writing happens via dbus.

There are notifications for changes of settings.

It features a hierarchy of settings like KConfig where user settings take precedence compared to system settings. The concept of locking is very similar to Kiosk immutable settings. In addition there are notifications if the locked state changes - that means activating a Kiosk immutable on a setting could immediately reflected in the UI.

There is an existing Qt library: https://gitorious.org/dconf-qt/dconf-qt

See also: http://live.gnome.org/dconf/SystemAdministrators


Problems could be: There is no win/mac support. This requires keeping the old way with ini files a live or some investment to make dconf work or write other kconfig backends.

We can't use change notifications as that would assume use of dconf as a backend which makes an application unportable to windows/mac (currently).

DConf stores its config in xdg dirs (.config).

Current state to compile

Core dconf It requires quite new version of glib and vala, the visual registry editor requires Gtk 3 ( not needed for us now ) and dconf-qt made by Canonical requires a new vendor patch for Qt, included only in Qt 4.8

Windows Native

TBD

OSX Native

TBD

QDesktopServices

It may make sense to split between application state and actual configuration settings. DConf and other backends could then handle the real settings whereas application state (unread mails in kmail) could be handled by the traditional ini files.


General

  • Having a dconf backend to KConfig is nice but doesn't mean a huge change. For application developers nothing would change due to this. The implementation of a current KConfig backend is far from simple, and banging on current implementation add more code will not help in any thew goals of a new modern configuration system.
  • What about QSettings? big problems with settings-groups, not power full enough for KDE. Can KConfig be merged with this ? The short answer is no, most the fact that even Trolls decided not support it anymore, and current KConfig architecture is way to different and for sure we don't want create an Unmaintainable Frankenstein.