Release did not happen yet but is expected for today!


\begin{DoxyItemize}
\item guid\+: 190576e0-\/9fef-\/486e-\/b8da-\/c4e75be08329
\item author\+: Markus Raab
\item pub\+Date\+: Fri, 16 Sep 2016 23\+:31\+:27 +0200
\end{DoxyItemize}

\subsection*{What is Elektra?}

Elektra serves as a universal and secure framework to access configuration parameters in a global, hierarchical key database. For a small demo see here\+:

\href{https://asciinema.org/a/cantr04assr4jkv8v34uz9b8r}{\tt !\mbox{[}asciicast\mbox{]}(https\+://asciinema.\+org/a/cantr04assr4jkv8v34uz9b8r.\+png)}

\subsection*{Highlights}


\begin{DoxyItemize}
\item Intercept open syscalls which allows Elektra to dynamically generate config files from its database
\item Experimental version of cryptographic plugins
\item A new zsh completion file (next to the bash completion file)
\item Gitresolver allows to directly read and write config files from git instead of files present in the file system.
\item Survey completed successfully (and debts paid), we now prepare raw data
\end{DoxyItemize}

\subsubsection*{Crypto Plugin}

Gpg is now used to decrypt a master password, which is used by the individual crypto backends.

Furthermore, a new \href{https://botan.randombit.net}{\tt botan} backend was implemented.

\href{http://git.libelektra.org/tree/master/src/plugins/crypto}{\tt See here}

Thanks to Peter Nirschl.

\subsubsection*{Open Interception}

When Elektra directly modifies config files which are on the disc, and applications read the config files without Elektra, Elektra has no control over the access, e.\+g. we cannot dynamically calculate values. To avoid this, we wrote a library that intercepts the {\ttfamily open}-\/call.

Together with the {\ttfamily mozprefs} plugin, we got control over the configuration of Firefox and can dynamically change config values with all possibilities Elektra provides.

For easy setup, we implemented the script {\ttfamily configure-\/firefox}.

\href{http://git.libelektra.org/tree/master/src/bindings/intercept}{\tt See here}

Thanks to Thomas Waser.

\subsubsection*{Resolver}

Resolvers in Elektra are the code that are responsible to determine where content should be read from and stored to. They are independent of the actual configuration file syntax.

The \href{http://git.libelektra.org/tree/master/src/plugins/gitresolver}{\tt gitresolver} allows you to get/store config data in git.

The \href{http://git.libelektra.org/tree/master/src/plugins/blockresolver}{\tt blockresolver} allows Elektra to take control of parts of the configuration file. This is useful for config files such as vim or zsh, which contain program code. The plugin allows you to split config files with special markers into parts containing code and others controlled by Elektra.

\subsubsection*{zsh completion}

Added zsh completion file, and a script ({\ttfamily kdb install-\/sh-\/completion}) that installs bash+zsh completion when the default installation places do not work (e.\+g. for Mac O\+S X).

Thanks to Sebastian Bachmann.

\subsection*{Documentation}


\begin{DoxyItemize}
\item fix kdb-\/import man page, thanks to Kurt Micheli
\item mark key\+Is\+System/key\+Is\+User as internal
\item fix doxygen reference to example
\item better document that {\ttfamily global-\/mount} or {\ttfamily gmount} will overwrite previously mounted global plugins
\item fix spelling mistake, thanks to René Schwaiger
\item Wrote tutorial how to use Elektra-\/python bindings, thanks to Ulrike Schäfer
\end{DoxyItemize}

\subsection*{Quality}


\begin{DoxyItemize}
\item shell recorder test cases now run during {\ttfamily make test}, thanks to Kurt Micheli and René Schwaiger
\item find-\/tools now pep and pyflakes happy, thanks to Kurt Micheli
\item fix bashism, thanks to Thomas Waser and Kurt Micheli
\item better error message for conditionals plugin, thanks to Thomas Waser
\item better error message for augeas plugin, thanks to Felix Berlakovich
\item Many compilation warnings fixed, thanks to Gabriel Rauter, Thomas Waser
\item G\+Settings\+: fix double free, thanks to Gabriel Rauter
\item Fix external links and add an external link checker, thanks to Kurt Micheli
\item Fix openwrt/musl warnings with wrong printf format, thanks to Thomas Waser
\item Fix N\+O\+D\+E\+P metadata, allows you to build all plugins that do not have dependencies.
\end{DoxyItemize}

\subsection*{Compatibility}

As always, the A\+B\+I and A\+P\+I of kdb.\+h is fully compatible, i.\+e. programs compiled against an older 0.\+8 version of Elektra will continue to work (A\+B\+I) and you will be able to recompile programs without errors (A\+P\+I).

\subsubsection*{Libtools}

Libtools got a new major version (S\+O\+V\+E\+R\+S\+I\+O\+N 0 -\/$>$ 1)\+:


\begin{DoxyItemize}
\item resolve\+Recommends was never implemented and was now removed
\item backend/plugin configs are now validated by plugins (needed by gpg plugin, which checks if wrong key I\+Ds are supplied during mount)
\end{DoxyItemize}

\subsubsection*{Plugins}

The plugins conditionals and mathcheck are incompatible because of changes in syntax.

\subsection*{Development}


\begin{DoxyItemize}
\item github descriptions+workflow (showed when creating P\+Rs and issues)
\item new trigger phases for github, see http\+://git.libelektra.\+org/tree/master/doc/\+G\+I\+T.md \char`\"{}doc/\+G\+I\+T\char`\"{} thanks to Mihael Pranjić
\item valgrind suppressions are great again, thanks to Peter Nirschl
\item Plugins get a new namespace {\ttfamily internal} which can be used for meta-\/data that is not relevant for other plugins.
\item kdberrors.\+h is only generated once, which allows us to use other build systems, thanks to René Schwaiger
\item {\ttfamily I\+N\+C\+L\+U\+D\+E\+\_\+\+S\+Y\+S\+T\+E\+M\+\_\+\+D\+I\+R\+E\+C\+T\+O\+R\+I\+E\+S} in add\+\_\+plugin allows you to add a include path where warnings are suppressed (useful for boost).
\item {\ttfamily infos/provides} now allows multiple entries
\end{DoxyItemize}

\subsection*{Packaging}


\begin{DoxyItemize}
\item Plugin-\/provider {\ttfamily C\+R\+Y\+P\+T\+O} can be used to enable/disable all crypto plugin variants.
\item Config option {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+O\+P\+T\+I\+M\+I\+Z\+A\+T\+I\+O\+N\+S}, enable by default\+: trade more memory for speed (can be turned off on embedded systems)
\item {\ttfamily I\+N\+S\+T\+A\+L\+L\+\_\+\+S\+Y\+S\+T\+E\+M\+\_\+\+F\+I\+L\+E\+S} is now off by default on Mac O\+S X.
\item bash-\/completion is installed to where pkg-\/config tells us, thanks to Gabriel Rauter (fallback is now {\ttfamily /usr/share/bash-\/completion/completions/kdb}) was {\ttfamily /etc/bash\+\_\+completion.d/kdb} (removed)
\item zsh is now installed to {\ttfamily /usr/share/zsh/vendor-\/completions/\+\_\+kdb} (except for Darwin)
\item removed /etc/profile.d/kdb.\+sh\+: the script {\ttfamily elektraenv.\+sh} was removed (and is no longer installed)
\item added scripts install-\/sh-\/completion configure-\/firefox elektrify-\/open
\item added plugins libelektra-\/blockresolver.\+so libelektra-\/boolean.\+so libelektra-\/crypto\+\_\+botan.\+so libelektra-\/crypto\+\_\+openssl.\+so libelektra-\/desktop.\+so libelektra-\/mozprefs.\+so libelektra-\/passwd.\+so
\item added tests testmod\+\_\+blockresolver testmod\+\_\+boolean testmod\+\_\+crypto\+\_\+botan testmod\+\_\+crypto gcrypt testmod\+\_\+crypto\+\_\+openssl testmod\+\_\+mozprefs testmod\+\_\+passwd test\+\_\+opmphm\+\_\+vheap test\+\_\+opmphm\+\_\+vstack
\item added test data blockresolver mozprefs passwd
\end{DoxyItemize}

\subsection*{Other}


\begin{DoxyItemize}
\item Conditionals and mathcheck plugins got support to specify relative keys, thanks to Thomas Waser
\item {\ttfamily kdb} command-\/list\+: commands are written in bold
\item G\+Settings backend can be build standalone, thanks to Gabriel Rauter
\item first data structures for order preserving minimal perfect hash map, thanks to Kurt Micheli
\item added a new passwd plugin, thanks to Thomas Waser
\item doc\+\_\+(\href{http:__git_libelektra_org_tree_master_src_plugins_boolean}{\tt http\+:\+\_\+\+\_\+git\+\_\+libelektra\+\_\+org\+\_\+tree\+\_\+master\+\_\+src\+\_\+plugins\+\_\+boolean} \char`\"{}boolean\char`\"{} plugin to normalize boolean values, thanks to Thomas Waser
\item \href{http://git.libelektra.org/tree/master/src/plugins/desktop}{\tt desktop} plugin to detect which desktop currently is running (supports kde, gnome, tde, unity or any other X\+D\+G conformant desktop)
\item {\ttfamily doc/paper} contains some info for \href{https://github.com/openjournals/joss}{\tt joss}
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.18.tar.gz}{\tt here} and also \href{https://github.com/ElektraInitiative/ftp/tree/master/releases/elektra-0.8.18.tar.gz}{\tt here on github}

$<$$<${\ttfamily scripts/generate-\/hashsums}$>$$>$

This release tarball now is also available \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.18.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.18/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt R\+S\+S feed} to always get the release notifications.

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} the issue tracker \href{http://git.libelektra.org/issues}{\tt on github} or by email \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{http://doc.libelektra.org/news/190576e0-9fef-486e-b8da-c4e75be08329.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

\section*{0.\+8.\+17 Release}


\begin{DoxyItemize}
\item guid\+: e6153a39-\/c4bd-\/41c3-\/bc86-\/785d451eb6c5
\item author\+: Markus Raab
\item pub\+Date\+: Tue, 14 Jun 2016 08\+:32\+:44 +0200
\end{DoxyItemize}

\subsection*{Survey}

First off\+: We created a survey questionnaire to gather more knowledge about the relevance of configuration systems. If you are involved in the development of free and open source software (F\+L\+O\+S\+S) you are the person we are looking for.

It would be a great help if you take this survey\+:

\href{http://elektra.limequery.org/625192}{\tt survey}

It will be available till 18.\+07.\+2016 (anywhere on earth).

For every thoroughly and not anonymously finished survey € 40 cent will be donated to one of the following organizations of your choice\+:


\begin{DoxyItemize}
\item Lime\+Survey (Lime\+Service, kindly hosts this survey)
\item S\+P\+I (General Donation\+: 0 A.\+D., Libre\+Office, Debian, Arch\+Linux, …)
\item F\+S\+F\+E
\item G\+N\+O\+M\+E
\item K\+D\+E
\item Mozilla (Firefox)
\item Wikimedia Foundation (Wikipedia)
\end{DoxyItemize}

\subsection*{Why should I use Elektra?}

The three main points relevant for most people are\+:


\begin{DoxyEnumerate}
\item Even though Elektra provides a global keydatabase configuration files stay human read-\/ and writable which allows us to integrate unmodified software.
\item Flexible adoption on how the configuration is accessed via plugins\+: you can run arbitrary code, e.\+g. do a {\ttfamily git commit} or log/notify when configuration files are changed.
\item Elektra allows you to specify configuration values\+:
\begin{DoxyItemize}
\item use the value of other configuration values (symbolic links)
\item calculate the values based on other configuration values
\item validation configuration files
\item \href{https://github.com/elektrainitiative/libelektra/tree/master/src/tools/gen}{\tt generate code based on it}
\item https\+://github.com/elektrainitiative/libelektra/tree/master/src/plugins/\+R\+E\+A\+D\+M\+E.\+md \char`\"{}and much more\char`\"{}
\end{DoxyItemize}
\end{DoxyEnumerate}

Read more about https\+://github.com/elektrainitiative/libelektra/tree/master/doc/\+W\+H\+Y.\+md \char`\"{}\+Why using Elektra\char`\"{}, which also contains since this release unique features, further reasons and limitations.

For a small demo see here

\href{https://asciinema.org/a/cantr04assr4jkv8v34uz9b8r}{\tt !\mbox{[}asciicast\mbox{]}(https\+://asciinema.\+org/a/cantr04assr4jkv8v34uz9b8r.\+png)}

\subsection*{Highlights}


\begin{DoxyItemize}
\item Qt-\/\+Gui reworked mounting and native icons
\item Full Mac O\+S X Support, Build Server improvements and new beginner friendly tasks
\item allows us to mount csv, json and xml (and other common provider names) without needing to know plugin names
\item colored output for kdb tools
\item Experimental G\+Settings support
\end{DoxyItemize}

\subsection*{Beginner friendly tasks}

In this release starting developing Elektra gets easier\+:


\begin{DoxyItemize}
\item {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+D\+E\+B\+U\+G} adds run-\/time checks and makes stack traces as if Elektra would not use plugins
\item {\ttfamily C\+Make\+Lists.\+txt} for plugins got simplified, in most cases it should be not more than calling a single function, even if unit tests and test data are present
\item We prepared \href{https://github.com/ElektraInitiative/libelektra/issues?q=is%3Aissue+is%3Aopen+label%3A%22beginner+friendly%22}{\tt beginner friendly tasks} for you.
\end{DoxyItemize}

For details about {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+D\+E\+B\+U\+G} and cmake, see individual points below.

\subsection*{Find-\/\+Tools}

There is now a fine collection of external scripts which can executed by {\ttfamily kdb + $<$script$>$}. The new script {\ttfamily kdb find-\/tools} provides full text search over the meta data as provided by the scripts.


\begin{DoxyItemize}
\item {\ttfamily kdb find-\/tools -\/b B\+R\+I\+E\+F} to search for a short text.
\item {\ttfamily kdb find-\/tools -\/a A\+U\+T\+H\+O\+R} to search for a author.
\item {\ttfamily kdb find-\/tools -\/d D\+A\+T\+E} to search for a creation date.
\item {\ttfamily kdb find-\/tools -\/e E\+X\+E\+C\+U\+T\+E} to search for a type.
\end{DoxyItemize}

Developers should now https\+://github.com/elektrainitiative/libelektra/tree/master/scripts/\+R\+E\+A\+D\+M\+E.\+md \char`\"{}add Meta\+Data for their scripts.\char`\"{}.

Thanks to Kurt Micheli!

\subsection*{Mac O\+S X Support}

Because of its P\+O\+S\+I\+X support one might think it would be trivial to support Mac O\+S X. Unfortunately there were many small issues, especially in the regular expression handling and the filesystem.

Nevertheless we finally fully support Mac O\+S X and the newly added travis build server makes sure it will stay this way.

A huge thanks to Manuel Mausz and Mihael Pranjić for fixing the issues and setting up travis\+:


\begin{DoxyItemize}
\item jni plugin now can load Elektra (avoids using {\ttfamily .so}) thanks to Mihael Pranjić
\item initial creation of travis.\+yml thanks to Manuel Mausz
\item Add all 3 different X\+Code setups and some Mac O\+S X fixes thanks to Mihael Pranjić
\end{DoxyItemize}

\subsection*{jenkins}

Now (nearly) every build job can be triggered from Pull Requests. For example\+:


\begin{DoxyItemize}
\item jenkins build \href{http://build.libelektra.org:8080/job/elektra-git-buildpackage-jessie/}{\tt git-\/buildpackage-\/jessie} please
\item jenkins build \href{http://build.libelektra.org:8080/job/elektra-git-buildpackage-wheezy/}{\tt git-\/buildpackage-\/wheezy} please
\item jenkins build \href{http://build.libelektra.org:8080/job/elektra-icc/}{\tt icc} please
\item jenkins build \href{http://build.libelektra.org:8080/job/elektra-local-installation/}{\tt local-\/installation} please
\end{DoxyItemize}

For a full list see https\+://github.com/elektrainitiative/libelektra/tree/master/doc/\+G\+I\+T.\+md \char`\"{}here\char`\"{}.

Thanks to Mihael Pranjić for the setup!

\subsection*{Fixes}


\begin{DoxyItemize}
\item fix inconsistency with one excluded compilation variant, thanks to Harald Geyer for reporting \#698
\item fix dynamic searching of installed plugins, needed so that kdb list-\/tools works correctly thanks to Harald Geyer for reporting
\item kdbtimer, {\ttfamily include $<$vector$>$} as needed by some compilers, a big thanks to Andreas Bombe for the non-\/maintainer upload in Debian to fix it for upcoming Debian release
\item also find yajl header files if installed in non-\/standard include directories, thanks to Mihael Pranjić
\item glib\+: make sure we use all definitions returned by pkg-\/config \#719, fixes build on Free\+B\+S\+D now glib bindings need cmake 2.\+8.\+12 thanks to Mihael Pranjić for reporting/testing and Manuel Mausz for fixing
\item fix I\+N\+I for Mac O\+S X (did require some non-\/portable sorting properties of {\ttfamily qsort}.)
\item I\+N\+I makes I\+N\+I-\/specific meta-\/data private by prefixing {\ttfamily ini}.
\item {\ttfamily kdb export} also works under Min\+G\+W, thanks to Gabriel Rauter
\end{DoxyItemize}

\subsection*{Rework Add Plugin}


\begin{DoxyItemize}
\item prefer to link shared
\item add plugin tests when using link shared
\item make A\+D\+D\+\_\+\+T\+E\+S\+T simpler (without calling add\+\_\+plugintest)
\item make installation of test data simpler + honor I\+N\+S\+T\+A\+L\+L\+\_\+\+T\+E\+S\+T\+I\+N\+G option
\item fix installation of test\+\_\+data (do not install whole dir)
\item introduce cache so that it is enough to pass parameters to add\+\_\+plugin$\ast$ once
\item avoid P\+L\+U\+G\+I\+N\+\_\+\+D\+I\+R\+E\+C\+T\+O\+R\+Y\+\_\+\+N\+A\+M\+E and change C\+M\+A\+K\+E\+\_\+\+C\+U\+R\+R\+E\+N\+T\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+D\+I\+R and C\+M\+A\+K\+E\+\_\+\+C\+U\+R\+R\+E\+N\+T\+\_\+\+B\+I\+N\+A\+R\+Y\+\_\+\+D\+I\+R instead
\item add\+\_\+plugin\+: remove unused option S\+H\+A\+R\+E\+D\+\_\+\+S\+O\+U\+R\+C\+E\+S
\item implement a 3rd phase to add test cases\+: correctly handles dependencies of testcases to bindings
\item fix testmod\+\_\+jni
\end{DoxyItemize}

\subsection*{C\+Make}

for maintainers\+:


\begin{DoxyItemize}
\item The cmake variables K\+D\+B\+\_\+\+D\+B\+\_\+\+S\+Y\+S\+T\+E\+M and K\+D\+B\+\_\+\+D\+B\+\_\+\+H\+O\+M\+E are now S\+T\+R\+I\+N\+G and not P\+A\+T\+H.
\item B\+U\+I\+L\+D\+\_\+\+F\+U\+L\+L and B\+U\+I\+L\+D\+\_\+\+S\+T\+A\+T\+I\+C are now O\+F\+F by default
\item building with B\+U\+I\+L\+D\+\_\+\+S\+H\+A\+R\+E\+D is now preferred (for all examples, test cases,...)
\item E\+L\+E\+K\+T\+R\+A\+\_\+\+D\+E\+B\+U\+G\+\_\+\+B\+U\+I\+L\+D and E\+L\+E\+K\+T\+R\+A\+\_\+\+V\+E\+R\+B\+O\+S\+E\+\_\+\+B\+U\+I\+L\+D is not used anymore.
\item E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+U\+G was added\+: it does not add debug symbols but run-\/time assertions.
\item More cmake variables are marked as advanced.
\end{DoxyItemize}

for developers\+:


\begin{DoxyItemize}
\item B\+U\+I\+L\+D\+\_\+\+S\+T\+A\+T\+I\+C and B\+U\+I\+L\+D\+\_\+\+F\+U\+L\+L is now O\+F\+F by default (nearly) all unit tests now also work with B\+U\+I\+L\+D\+\_\+\+S\+H\+A\+R\+E\+D
\item to support shared unit tests, a third phase was added when adding plugins inconsistent adding (across phases) of plugins and unit tests is reported
\item in {\ttfamily add\+\_\+plugin} remove S\+H\+A\+R\+E\+D\+\_\+\+S\+O\+U\+R\+C\+E\+S, and add {\ttfamily A\+D\+D\+\_\+\+T\+E\+S\+T} and {\ttfamily I\+N\+S\+T\+A\+L\+L\+\_\+\+T\+E\+S\+T\+\_\+\+D\+A\+T\+A}.
\end{DoxyItemize}

and fixes\+:


\begin{DoxyItemize}
\item adding plugin tests is now much simpler, simply use {\ttfamily A\+D\+D\+\_\+\+T\+E\+S\+T} in {\ttfamily add\+\_\+plugin}.
\item K\+D\+B\+\_\+\+D\+B\+\_\+\+S\+Y\+S\+T\+E\+M and K\+D\+B\+\_\+\+D\+B\+\_\+\+H\+O\+M\+E are now S\+T\+R\+I\+N\+G and not P\+A\+T\+H because of incorrect resolving of {\ttfamily $\sim$}.
\item lua bindings tests\+: make sure lua executable matches with the lua libraries version thanks to Mihael Pranjić
\item lua bindings\+: do not use hard-\/coded {\ttfamily lua} executable.
\item Fix cmake configure when B\+U\+I\+L\+D\+\_\+\+D\+O\+C\+U\+M\+E\+N\+T\+A\+T\+I\+O\+N is set to O\+F\+F thanks to Kurt Micheli
\end{DoxyItemize}

See more about changes to plugin adding in cmake in the https\+://github.com/elektrainitiative/libelektra/tree/master/doc/decisions/cmake\+\_\+plugins.\+md \char`\"{}plugin decision\char`\"{}.

\subsection*{Experimental G\+Settings support}

As part of the ongoing work of the bachelor thesis {\ttfamily Integration of Elektra into the G\+N\+O\+M\+E desktop environment} we now have experimental support for Elektra as a G\+Settings backend on Linux (We will look into getting O\+S X support on a later date). When installed, applications using G\+Settings default backend will write to Elektra below the {\ttfamily /sw} key. The G\+Settings bindings are intended as a preview version so please do not use them in a production system.

To build the G\+Settings backend you have to explicitly add the binding even if {\ttfamily A\+L\+L} is given. e.\+g. {\ttfamily -\/\+D\+B\+I\+N\+D\+I\+N\+G\+S=gsettings} {\ttfamily -\/\+D\+B\+I\+N\+D\+I\+N\+G\+S=\char`\"{}\+A\+L\+L;gsettings\char`\"{}}

All needed core functionality of a G\+Settings backend is already implemented. This includes notification support if you have your {\ttfamily /sw} mounted with the dbus plugin.

Please report any bugs you encounter.

For further information regarding the status of the implementations please refer to the corresponding \href{https://github.com/elektrainitiative/libelektra/tree/master/src/bindings/gsettings}{\tt R\+E\+A\+D\+M\+E} and \href{https://github.com/ElektraInitiative/libelektra/issues/775}{\tt ticket}.

\subsection*{Common Provider Names}

Mounting now supports to mount commonly known names even if the name is not a plugin. If more than one plugin is available automatically the best one is selected. The selection process works by annotating different qualities of the plugins, see {\ttfamily infos/status} in the R\+E\+A\+D\+M\+E.\+md of individual plugins.

E.\+g. to mount a file using a json plugin (called yajl because of the library's name it build upon) \begin{DoxyVerb}kdb mount file.json json
\end{DoxyVerb}


\subsection*{New Cachefilter Plugin}

stores filtered keys internally so that they do not get accidentally lost and can be written to the storage again without the user having to remember including them in the writeout

The longer term goal is to add such global plugins per default, so that the usage of the A\+P\+I is easier.

For now you can simply add it using\+: \begin{DoxyVerb} kdb global-mount cachefilter
\end{DoxyVerb}


Thanks to Marvin Mall.

\subsection*{Qt G\+U\+I 0.\+0.\+12}

The Qt G\+U\+I receives new features and a better gnome integration. Its version number was updated to 0.\+0.\+12 (beta). Major features\+:


\begin{DoxyItemize}
\item use native icons (Qt G\+U\+I xdg icon theme support rework) thanks to Gabriel Rauter
\item update desktop entry org.\+libelektra.\+elektra-\/qt-\/editor.\+desktop with new symbolic icon of Elektra's logo so that qt-\/gui can nicely started from within Gnome thanks to Gabriel Rauter
\item Add new layout elements to backend wizard and integrate new Backend\+Builder functionality (See Common Provider Names) to qt-\/gui thanks to Raffael Pancheri
\end{DoxyItemize}

Bug fixes\+:


\begin{DoxyItemize}
\item Reset to defaults now reverts back to build-\/in defaults.
\item Make clicks on search icon focus on search textfield.
\item save settings when settings dialog is closed.
\item fix crash of qt-\/gui when crypto plugin was enabled (and added /shutdown option to enable previous behaviour) thanks to Peter Nirschl
\item fix qt-\/gui fails to synchronize because of readonly plugins thanks to Raffael Pancheri
\item Rename desktop file\+: correct reverse url from org.\+elektra to org.\+libelektra.
\item Rename elektra-\/qt to elektra-\/qt-\/editor.
\item Rename Choose\+Color\+Window\+: The Choose\+Color\+Windows will be replaced by a Appearance\+Settings\+Window, all references to Choose\+Color, choose color have been replaced by Appearance\+Settings or choose appearance.
\end{DoxyItemize}

Other improvements\+:


\begin{DoxyItemize}
\item Install {\ttfamily elektra-\/qt-\/editor} binary so both the desktop files Try\+Exec works and people not starting the gui trough {\ttfamily kdb qt-\/gui} have a speaking name in their process list.
\item Replace occurences of {\ttfamily Elektra Editor} with {\ttfamily Elektra Qt Editor} so that we use the same name in all places apart from the tools binary.
\item Introduce Appearance Settings Window\+: Appearance Settings Window contains both color settings as well as a switch to disable or enable the system icon theme. For this to work we had to introduce the setting in {\ttfamily guisettings}. We also added a private function in {\ttfamily guisettings} to get and set settings with a boolean value.
\item Tree reload on Settings close\+: We now synch and refresh the tree view on closing of the settings window if any settings have been changed, so changes can be seen imediatly in the tree.
\item Add qt5 svg module as dependency\+: the qt5 svg module is needed so we can display icon themes that provide svg as icon format.
\item Add and install symbolic icon with the installation of the Elektra Qt Editor.
\end{DoxyItemize}

Thanks to Gabriel Rauter and Raffael Pancheri for the engagement in improving qt-\/gui.

\subsection*{Colored kdb tool}

A big thanks to Gabriel Rauter for improving the user experience with the kdb tool. On errors and in {\ttfamily kdb info} it was often quite hard to find the relevant text.

Now important parts are highlighted by bold or colorful text. This helps to spot the important information immediately without sacrificing information that would be important for a detailed analysis.

Every tool now has the option {\ttfamily -\/-\/color} and {\ttfamily -\/\+C} which is set to {\ttfamily auto} per default. By writing to\+: \begin{DoxyVerb}kdb set user/sw/elektra/kdb/#0/color off
\end{DoxyVerb}


one can go back to previous behavior.

\subsection*{Documentation}


\begin{DoxyItemize}
\item improve documentation about how to pop a key
\item document how to avoid running test cases as root in https\+://github.com/elektrainitiative/libelektra/tree/master/doc/\+T\+E\+S\+T\+I\+N\+G.\+md \char`\"{}\+T\+E\+S\+T\+I\+N\+G.\+md\char`\"{}.
\item document guarantees of {\ttfamily elektra\+Plugin\+Get\+Data}, thanks to Marvin Mall
\item doc mentions that -\/1 should be returned {\itshape always} when an error is set
\item many more spelling mistakes were fixed and useless whitespace was removed, thanks to René Schwaiger
\item describe preferences when plugins are included/excluded
\item improvements in {\ttfamily ks\+Copy}, {\ttfamily ks\+Pop}, {\ttfamily kdb\+Get} and {\ttfamily kdb\+Set} \href{http://doc.libelektra.org/api/0.8.17/html/}{\tt A\+P\+I description}
\item added https\+://github.com/elektrainitiative/libelektra/tree/master/doc/\+W\+H\+Y.\+md \char`\"{}\+W\+H\+Y document\char`\"{}
\item updated https\+://github.com/elektrainitiative/libelektra/tree/master/doc/decisions/cmake\+\_\+plugins.\+md \char`\"{}plugin decision\char`\"{} to include 3rd phase
\end{DoxyItemize}

\subsection*{E\+L\+E\+K\+T\+R\+A\+\_\+\+D\+E\+B\+U\+G build}

E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+U\+G now enables a debug build for Elektra. It has nothing to do with debug symbols, but\+:


\begin{DoxyItemize}
\item it enables assertions
\item it enables \href{http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html}{\tt undefinied behavior sanitizer} for clang
\item plugins will not be closed so that stack traces are more useful (using {\ttfamily R\+T\+L\+D\+\_\+\+N\+O\+D\+E\+L\+E\+T\+E})
\end{DoxyItemize}

{\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+U\+G} is recommended for every developer, even if you are not modifying Elektra itself. The assertions will give you hints on A\+P\+I misusage.

For example, {\ttfamily key\+New} was known to be error-\/prone. {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+U\+G} now will report wrong parameters by an assertion.

The old options {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+D\+E\+B\+U\+G} and {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+V\+E\+R\+B\+O\+S\+E} are not available anymore.

Thanks to\+:
\begin{DoxyItemize}
\item Thomas Waser for pointing to {\ttfamily R\+T\+L\+D\+\_\+\+N\+O\+D\+E\+L\+E\+T\+E}
\item Gabriel Rauter for fixing qt-\/gui with {\ttfamily -\/\+D\+E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+U\+G=O\+N}
\end{DoxyItemize}

The constants plugin was updated to provide {\ttfamily cmake/\+E\+N\+A\+B\+L\+E\+\_\+\+L\+O\+G\+G\+E\+R} {\ttfamily cmake/\+E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+U\+G} and will no longer provide {\ttfamily cmake/\+E\+L\+E\+K\+T\+R\+A\+\_\+\+D\+E\+B\+U\+G\+\_\+\+B\+U\+I\+L\+D} {\ttfamily cmake/\+E\+L\+E\+K\+T\+R\+A\+\_\+\+V\+E\+R\+B\+O\+S\+E\+\_\+\+B\+U\+I\+L\+D}

\subsection*{Other}


\begin{DoxyItemize}
\item Gabriel Rauter is now listed in \href{https://github.com/elektrainitiative/libelektra/tree/master/doc/AUTHORS}{\tt A\+U\+T\+H\+O\+R\+S}
\item constants plugin\+: configure\+\_\+file now uses current binary directory, not cluttering the main build directory.
\item fix ssize\+\_\+t for V\+S2015, thanks to Gabriel Rauter
\item gtest\+: fix linking when using arch systemd-\/nspawn, thanks to Marvin Mall
\item {\ttfamily L\+D\+\_\+\+L\+I\+B\+R\+A\+R\+Y\+\_\+\+P\+A\+T\+H} is added to lua and python bindings needed for Mac O\+S X, thanks to Mihael Pranjić
\item Fix external unit test for Ubuntu 15.\+04 by putting files before the flags, thanks to Marvin Mall
\item symbols in Ni\+\_\+ namespace are now in elektra\+Ni\+\_\+
\item add more ipv4 and ipv6 test cases for I\+P adress validation checker
\item crypto-\/plugin avoid usage of hardcoded error numbers, thanks to Peter Nirschl
\item do not use number for resolver position
\item to fix a compiler warning in Mac O\+S X, we made the printf format specifier of time\+\_\+t more portable, thanks to René Schwaiger
\item many preparations for global plugins and mmap
\item in the constants plugin {\ttfamily cmake/\+B\+U\+I\+L\+T\+I\+N\+\_\+\+P\+L\+U\+G\+I\+N\+\_\+\+F\+O\+L\+D\+E\+R}, {\ttfamily B\+U\+I\+L\+T\+I\+N\+\_\+\+D\+A\+T\+A\+\_\+\+F\+O\+L\+D\+E\+R} and {\ttfamily B\+U\+I\+L\+T\+I\+N\+\_\+\+E\+X\+E\+C\+\_\+\+F\+O\+L\+D\+E\+R} were added.
\item doxygen is only run once during build, thanks to René Schwaiger
\item add script configure-\/home to build Elektra that it will resolve all pathes to home-\/directories
\item add script metaini-\/to-\/c that converts M\+E\+T\+A\+D\+A\+T\+A.\+ini to C-\/code, thanks to Thomas Waser
\item add note that default values must be present for code generation, thanks to Martin Schleiss
\item avoid {\ttfamily seq} as it is not available in some {\ttfamily $\ast$\+B\+S\+D}, thanks to Mihael Pranjić
\item make jni testmod check consistent to others
\end{DoxyItemize}

\subsection*{Compatibility}

As always, the A\+B\+I and A\+P\+I is fully forward-\/ and backward-\/compatible, i.\+e. programs compiled against an older 0.\+8 version of Elektra will continue to work (A\+B\+I) and you will be able to recompile every program without errors (A\+P\+I). This time you can even compile programs against 0.\+8.\+17 and run with 0.\+8.\+16.

For the qt-\/gui the svg module is added as dependency.

New and missing files in the installation\+:


\begin{DoxyItemize}
\item {\ttfamily elektra-\/qt-\/editor} is installed in the path (needed for Try\+Exec in Desktop file)
\item {\ttfamily libelektrasettings.\+so} will be installed if {\ttfamily gsettings} binding is enabled
\item {\ttfamily libelektra-\/cachefilter.\+so} is the new cachefilter plugin
\item {\ttfamily tool\+\_\+exec/testmod\+\_\+cachefilter} is its unit test
\item {\ttfamily tool\+\_\+exec/find-\/tools} is a new python script to find other tools
\item {\ttfamily appdata/org.\+libelektra.\+elektra-\/qt-\/editor.\+appdata.\+xml}
\item {\ttfamily icons/hicolor/scalable/apps/elektra-\/symbolic.\+svg}
\item {\ttfamily share/man/man1/kdb-\/find-\/tools.\+1}
\end{DoxyItemize}

Renamed files\+:


\begin{DoxyItemize}
\item {\ttfamily applications/org.\+elektra.\+elektra-\/qt.\+desktop} got renamed to {\ttfamily applications/org.\+libelektra.\+elektra-\/qt-\/editor.\+desktop}.
\end{DoxyItemize}

Removed files\+:


\begin{DoxyItemize}
\item Some of the installed \char`\"{}test data\char`\"{} actually was source code from Elektra. Test data from the following plugins is affected\+: {\ttfamily hosts}, {\ttfamily ini}, {\ttfamily lineendings},
\end{DoxyItemize}

Temporarily removed files\+:


\begin{DoxyItemize}
\item {\ttfamily testmod\+\_\+lua}, {\ttfamily testmod\+\_\+python} and {\ttfamily testmod\+\_\+python2} do not work in a shared build and are temporarily disabled if {\ttfamily B\+U\+I\+L\+D\+\_\+\+S\+H\+A\+R\+E\+D} is enabled. Also their test data is affected.
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.17.tar.gz}{\tt here} and also \href{https://github.com/ElektraInitiative/ftp/tree/master/releases/elektra-0.8.17.tar.gz}{\tt here on github}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+17.\+tar.\+gz
\item size\+: 2459542
\item md5sum\+: e53efdb9a5e0852c58b21280b1e6c07d
\item sha1\+: a1abcd4ac5aabfc60c34da98a02c4636e4634b5c
\item sha256\+: a6a41afb0160feef84f7d1e0d199da26022ff8cb52ed455a0d306b589838d8f5
\end{DoxyItemize}

This release tarball now is also available \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.17.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.17/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt R\+S\+S feed} to always get the release notifications.

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} the issue tracker \href{http://git.libelektra.org/issues}{\tt on github} or by email \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{http://doc.libelektra.org/news/e6153a39-c4bd-41c3-bc86-785d451eb6c5.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

Best regards, Markus

\section*{0.\+8.\+16 Release}


\begin{DoxyItemize}
\item guid\+: 9c9247ee-\/ee9c-\/4f4a-\/a68e-\/76959def9b82
\item author\+: Markus Raab
\item pub\+Date\+: Fri, 29 Apr 2016 12\+:45\+:39 +0200
\end{DoxyItemize}

In case you do not yet know about it, here is an abstract about Elektra\+:

Elektra serves as a universal and secure framework to access configuration parameters in a global, hierarchical key database. Elektra provides a mature, consistent and easily comprehensible A\+P\+I. Its modularity effectively avoids code duplication across applications and tools regarding configuration tasks. Elektra abstracts from cross-\/platform-\/related issues and allows applications to be aware of other applications' configurations, leveraging easy application integration.

Elektra consists of three parts\+:


\begin{DoxyEnumerate}
\item {\itshape Lib\+Elektra} is a modular configuration access toolkit to construct and integrate applications into a global, hierarchical key database. The building blocks are\+:
\begin{DoxyItemize}
\item language bindings (inclusive high-\/level interfaces)
\item Gen\+Elektra, the code generator for type-\/safe bindings
\item plugins for configuration access behaviour and validation
\end{DoxyItemize}
\item {\itshape Spec\+Elektra} is a configuration specification language that is easy to use and self-\/contained in the same key database (i.\+e. written in any of the configuration file formats Elektra supports).
\item Tools on top of Lib\+Elektra for administrators, such as C\+L\+I tools and G\+U\+Is.
\end{DoxyEnumerate}

See \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

The same text as follows is also available \href{http://doc.libelektra.org/news/9c9247ee-ee9c-4f4a-a68e-76959def9b82.html}{\tt here as html} and https\+://github.com/\+Elektra\+Initiative/libelektra/blob/master/doc/\+N\+E\+W\+S.\+md \char`\"{}here on github\char`\"{}

\subsection*{Highlights}


\begin{DoxyItemize}
\item Elektra now allows applications to support multiple profiles with a plugin, thus {\itshape without code modifications} in Elektra applications. That means a user can select multiple configuration files to use, even if the application has no explicit support for it. It completes the cascading feature (level \$\+H\+O\+M\+E before /etc), to allows us also to select different configuration for the same level.
\item Resolver can now better handle conflicts that happen when files are removed and others that happen within a single time tick (resolution of your clock) and also better handles N\+F\+S and older file systems
\item Default storage and resolver can be changed by symlink. So no need to recompile Elektra to change the default storage from I\+N\+I to dump. I\+N\+I now works quite reliable as default plugin and already used by default by its author Thomas Waser.
\end{DoxyItemize}

\subsection*{Other important features}


\begin{DoxyItemize}
\item shell plugin allows you to execute shell commands on every K\+D\+B access and curlget plugin allows you to download configuration files from a U\+R\+L during K\+D\+B access.
\item Improvements in sync/merge of qt-\/gui with important fix (Usage of 0.\+8.\+15 qt-\/gui is discouraged)
\item Add plugin for dpkg database (read-\/only)
\item Assignment for conditionals using {\ttfamily assign/condition}.
\item Support for multiple and nested statements
\item Support for {\ttfamily condition/validsuffix} which allows you to suffix numbers with signs such as {\ttfamily \%} or {\ttfamily \$}. It does not check if the suffixes are identical.
\item kdb mount now uses topological sorting to always find a dependency solution if there is one, many effort was put in that ordering is as requested, thanks to Thomas Waser for the topological sorting implementation
\item Frontend generated by Gen\+Elektra now also can reload its values with taking the correct context into account.
\item Source is now automatically formatted and formatting is checked on build server
\item More flexible C\+Make syntax for P\+L\+U\+G\+I\+N\+S
\end{DoxyItemize}

\subsection*{Plugins}

Many new or vastly improved plugins are waiting to be explored.

\subsubsection*{curlget}

The plugin curlget fetches a configuration file from a remote host before the configuration is being accessed\+: \begin{DoxyVerb}kdb mount -R noresolver /tmp/curltest.ini system/curltest ini curlget url="https://raw.githubusercontent.com/ElektraInitiative/libelektra/master/src/plugins/ini/ini/plainini"
kdb ls system/curltest  # every get access will redownload the file
\end{DoxyVerb}


Thanks to Thomas Waser!

\subsubsection*{I\+N\+I}

The I\+N\+I plugin is still under heavy development and was again nearly rewritten\+:


\begin{DoxyItemize}
\item fixed key is below hacks
\item fixed ordering
\item custom delimiter
\item use meta array for comments
\item rewritten ordering
\item best effort order
\item fixed array support
\end{DoxyItemize}

Thanks to Thomas Waser!

\subsubsection*{shell}

This plugin allows you to executes shell commandos after kdb\+Get, kdb\+Set and kdb\+Error (failing kdb\+Set)\+: \begin{DoxyVerb}kdb mount /tmp/test.ini system/shelltest ini array= shell 'execute/set=echo set >> /tmp/log,execute/get=echo get >> /tmp/log'
kdb set system/shelltest
cat /tmp/log
\end{DoxyVerb}


Thanks to Thomas Waser!

\subsubsection*{validation}

The validation plugin is not new, but got many new features. It allows you to match values by a regex and set your own error messages in case a validation did not match.

Up to now, the regex was given as is to regcomp, which means that if the regex is contained {\itshape anywhere} in the value, the value is accepted.

Often this is not what we want, thus Thomas Waser added special support for icase, word and line validation. Additionally, flags allow you now to ignore the case or invert the match. This can be changed for every individual value or for the whole mountpoint.

Additionally, {\ttfamily kdb vset} validation was updated to use the new metadata and correctly match against the whole value.

Thanks to Thomas Waser!

\subsubsection*{hosts}

Only minor improvements were necessary for the host plugin but it is quite matured already. The contract was changed so that ipv6 addresses for ipv4 addresses will be rejected\+:

``` \section*{kdb mount --with-\/recommends /etc/hosts system/hosts hosts}

\section*{kdb set system/hosts/ipv4/localhost \+:\+:1}

The command set failed... Reason\+: localhost value\+: \+:\+:1 message\+: Address family not supported \section*{kdb set system/hosts/ipv6/localhost \+:\+:1}

```

You can also comfortably and safely edit the hosts file with\+: {\ttfamily kdb editor system/hosts hosts}, then you have the functionality {\ttfamily sudoedit} for the hosts file.

\subsubsection*{rename}

Again not a new plugin, but the plugin was greatly improved and many test cases were added.

Now you can set upper/lowercase individually for both sides\+:


\begin{DoxyEnumerate}
\item What applications see.
\item What the configuration file contains.
\end{DoxyEnumerate}

For example, if you always want the keys in the configuration file upper case, but for your application lower case you would use\+: ``` \$ kdb mount caseconversion.\+ini /rename ini rename get/case=tolower,set/case=toupper \$ kdb set user/rename/section/key valu \$ cat $\sim$/.config/caseconversion.\+ini \mbox{[}S\+E\+C\+T\+I\+O\+N\mbox{]} K\+E\+Y = value ```

Thanks to Thomas Waser!

\subsubsection*{Resolver}

Resolving by $\sim$ as home directory now also for system and spec namespaces, thanks to Thomas Waser.

Files keep their previous owner, useful when root edits configuration files of others, thanks to Thomas Waser.

The resolver has many improvements to better detect conflicts.

The lock is now extended longer after the commit and already requested in the temporary file.

The warnings were improved when {\ttfamily getcwd} fails.

Resolver now can correctly handle conflicts with empty files. It can also better cope with frequent commits of the same binary. Elektra already reached some limits filesystems have.

\subsection*{Bindings}

\subsubsection*{Java}

Marvin Mall improved the Java binding, fixed the appending of keysets, added lots of documentation, and many unit tests.

\subsubsection*{C++}

Some kind of misusage of vaargs is now detected at compile-\/time instead of crashing at runtime.

\subsubsection*{Generated C++}

Value now supports convenience activations. Values can be used to activate context, no more layers are needed. Topological sorting makes sure that values are activated in the correct order, loops are not allowed anymore.

The {\ttfamily bool operator$<$} is now correctly inline (allows to use it in more than one translation unit)

\subsection*{Documentation}

René Schwaiger$<$sanssecours$>$ reworked most of the documentation and fixed countless spelling mistakes and other problems.


\begin{DoxyItemize}
\item Peter Nirschl updated the status of the crypto-\/plugin and fixed a typo
\item Daniel Bugl wrote a cascading tutorial
\item Daniel Bugl fixed all broken links
\item René Schwaiger also drew a new logo with S\+V\+G. It is already used on github as avatar for the organisation.
\item make all é use the same code point 233.
\end{DoxyItemize}

\subsection*{Testing}


\begin{DoxyItemize}
\item Tests work if the build path contains spaces
\item Tests\+: Fix problems locating memory checker
\item remove obsolete Test\+Script.\+cmake
\end{DoxyItemize}

Thanks to René Schwaiger

\subsection*{Maintainer}

By default now A\+L\+L plugins except E\+X\+P\+E\+R\+I\+M\+E\+N\+T\+A\+L are included. Plugins will be automatically excluded if dependencies are missing.

The P\+L\+U\+G\+I\+N\+S syntax was vastly improved. Now many categories can be intermixed freely and also categories can be used for exclusion.

E.\+g. to include all plugins without deps, that provide storage (except yajl) and are maintained, but not include all plugins that are experimental, you would use\+: \begin{DoxyVerb}    -DPLUGINS="NODEP;STORAGE;-yajl;MAINTAINED;-EXPERIMENTAL"
\end{DoxyVerb}


Details see https\+://github.com/\+Elektra\+Initiative/libelektra/tree/master/doc/\+C\+O\+M\+P\+I\+L\+E.\+md \char`\"{}/doc/\+C\+O\+M\+P\+I\+L\+E.\+md\char`\"{}.

\subsubsection*{Renamed files\+:}

/usr/include/elektra/merging/kdbmerge.hpp -\/$>$ /usr/include/elektra/merging/mergingkdb.hpp

/etc/profile.d/kdb -\/$>$ /etc/profile.d/kdb.\+sh

(So that it works on arch linux, thanks to Gabriel Rauter)

\subsubsection*{removed files\+:}


\begin{DoxyItemize}
\item /usr/lib/elektra/libelektra-\/crypto.so
\end{DoxyItemize}

was only necessary because of limitations of the build system and is now removed. It never had actual functionality, but was only a stub without a crypto provider selected.

\subsubsection*{new files\+:}


\begin{DoxyItemize}
\item /usr/include/kdbease.h
\item /usr/lib/elektra4/libelektra-\/curlget.so$\ast$
\item /usr/lib/elektra4/libelektra-\/dpkg.so$\ast$
\item /usr/lib/elektra4/libelektra-\/profile.so$\ast$
\item /usr/lib/elektra4/libelektra-\/resolver\+\_\+fm\+\_\+hpu\+\_\+b.so
\item /usr/lib/elektra4/libelektra-\/shell.so$\ast$
\end{DoxyItemize}

more new files with A\+L\+L or E\+X\+P\+E\+R\+I\+M\+E\+N\+T\+A\+L\+:


\begin{DoxyItemize}
\item /usr/lib/elektra/libelektra-\/semlock.so
\end{DoxyItemize}

new tests all in folder /usr/lib/elektra/tool\+\_\+exec\+: testcpp\+\_\+contextual\+\_\+update testkdb\+\_\+conflict test\+\_\+keyname testmod\+\_\+curlget testmod\+\_\+dpkg testmod\+\_\+jni testmod\+\_\+profile testmod\+\_\+semlock testmod\+\_\+shell testtool\+\_\+mergingkdb

Following Plugins are excluded on specific platforms\+:


\begin{DoxyItemize}
\item mathcheck on Intel compiler (reason\+: failing test cases)
\item simpleini on non-\/glibc systems (reason\+: not portable printf extension)
\end{DoxyItemize}

\subsubsection*{new symlinks\+:}


\begin{DoxyItemize}
\item /usr/lib/elektra4/libelektra-\/storage.so
\item /usr/lib/elektra4/libelektra-\/resolver.so
\end{DoxyItemize}

\subsubsection*{new releases}

The first release of the libraries libelektratools-\/full, libelektratools and libelektragetenv. They now have S\+O\+V\+E\+R\+S\+I\+O\+N 0.

\subsection*{Development}

You do not need to format the source manually anymore. Make sure that you run scripts/reformat-\/source before creating a P\+R.

{\ttfamily clang-\/tidy} helps you to add blocks to have better maintainable code.

Felix Berlakovich improved the performance of the augeas plugin and also contributed a script to benchmark different host plugin. His thesis can be downloaded from \href{http://www.libelektra.org/ftp/elektra/berlakovich2016universal.pdf}{\tt here}. It contains benchmarks and discussions about augeas.

The C\+Make function {\ttfamily add\+\_\+plugin} was completely rewritten. Now you do not have to register your plugin at multiple points but instead information of R\+E\+A\+D\+M\+E.\+md is parsed to correctly register the plugin to categories as stated by {\ttfamily infos/status} and {\ttfamily infos/provides}.

The code generator for errors also yields macros. This avoids usage of the I\+Ds, which can be problematic if multiple pullrequests are prepared at once.

\subsection*{Compatibility}

This might be the last release supporting wheezy, because it gets more and more time-\/intensive to find workarounds for the old compiler. The C++11 regex do not work at all.

\subsubsection*{Binary Compatibility Test}

When you execute the testcases of 0.\+8.\+15 against Elektra 0.\+8.\+16 following testcases fail. None of them effect the A\+P\+I.


\begin{DoxyItemize}
\item test\+\_\+splitget test\+\_\+splitset .. Internal restructuring
\item testmod\+\_\+crypto .. not included by default now
\item testmod\+\_\+ini .. section handling changed, line 178\+: {\ttfamily nosectionkey contained no comment}
\item testmod\+\_\+rename .. internal A\+P\+I elektra\+Key\+Create\+New\+Name changed
\item testmod\+\_\+resolver .. internal data structure now contains more members to remember uid and gid
\item testmod\+\_\+template .. not present by default
\item testtool\+\_\+backend testtool\+\_\+backendbuilder testtool\+\_\+backendparser
\item testtool\+\_\+specreader .. changes in K\+D\+B tool before release
\item check\+\_\+kdb\+\_\+internal\+\_\+check .. experimental plugins are now excluded
\end{DoxyItemize}

\subsubsection*{Added A\+P\+I}

in libease René Schwaiger added\+: \begin{DoxyVerb}extern char const * elektraKeyGetRelativeName(Key const * cur, Key const * parentKey);
\end{DoxyVerb}


in libmeta Thomas Waser added (partly based on ideas/code from Felix Berlakovich)\+: \begin{DoxyVerb}extern void elektraMetaArrayAdd(Key *, char const *, char const *);
extern KeySet * elektraMetaArrayToKS(Key *, char const *);
extern char * elektraMetaArrayToString(Key *, char const *, char const *);
extern int elektraSortTopology(KeySet *, Key * *);
\end{DoxyVerb}


\subsection*{Tools}

\subsubsection*{Qt-\/gui}

Raffael Pancheri fixed an important issue which broke the synchronization because an key related to Elektra's internal version information was missing.

Felix Berlakovich updated the qt-\/gui so that it uses a newly written sync-\/method added in libtools.

Gabriel Rauter added a desktop file that uses the new svg logo from René Schwaiger.

\subsection*{Portability}


\begin{DoxyItemize}
\item Peter Nirschl fixed code in the resolver that uses E\+B\+A\+D\+M\+S\+G which was not available in B\+S\+D.
\item Peter Nirschl improved detection of librt
\item Felix Berlakovich fixed searching of Find\+Systemd
\item Min\+G\+W64 resolver now handles conflicts correctly and does not ignore them anymore and now also is able to create empty files (but still not directories)
\end{DoxyItemize}

\subsubsection*{Mac O\+S X}

A lot of effort was invested to all test cases also run on Mac O\+S X\+:


\begin{DoxyItemize}
\item .template syntax
\item linking errors
\item fix regex in conditionals plugins
\end{DoxyItemize}

Thanks to René Schwaiger

\subsection*{Bugs}


\begin{DoxyItemize}
\item print null-\/environment correctly with {\ttfamily kdb getenv}
\item key\+Is(\+Direct)Below didn't work with cascading keys
\item fix elektra\+Key\+Get\+Relative\+Name (needed by ni) for cascading keys and move it to libease, thanks to René Schwaiger
\item make nickel tests show correct test name, thanks to René Schwaiger
\item glib\+: replace cursor\+\_\+t with gssize so that G\+Elektra-\/4.\+0.\+gir builds with gobject-\/introspection later than 1.\+47, thanks to Manuel Mausz
\item fixed out-\/of-\/bounds bug in timeofday plugin
\item elektra\+Meta\+Array\+To\+K\+S correctly adds parent key, thanks to Thomas Waser
\item kdb-\/shell\+: Do not abort ks\+Output on binary data.
\item some rework for global hooks, still not stable
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.16.tar.gz}{\tt here} and now also \href{https://github.com/ElektraInitiative/ftp/tree/master/releases/elektra-0.8.16.tar.gz}{\tt here on github}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+16.\+tar.\+gz
\item size\+: 2405443
\item md5sum\+: ef0c138b4a4fda017aa8bb6f812671ce
\item sha1\+: c6a6f9c26addd5fcc274cea635de02ef680cfb1a
\item sha256\+: 3cf0624eb027e533192ca9d612618df3d38ec3674c9cd20474f04ff269fad77e
\item sha512\+: b225e61379907365a423ea75ec7138e5257bb78c526bb05a1ec21f66a52eb4bad9e6f1eb23209d700670b21b86166497b47c3bc46bc9d45f6d366cd544afc326
\end{DoxyItemize}

This release tarball now is also available \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.16.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.16/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt R\+S\+S feed} to always get the release notifications.

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} the issue tracker \href{http://git.libelektra.org/issues}{\tt on github} or by mail \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{http://doc.libelektra.org/news/9c9247ee-ee9c-4f4a-a68e-76959def9b82.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

Best regards, Markus

\section*{0.\+8.\+15 Release}


\begin{DoxyItemize}
\item guid\+: 1ab4a560-\/c286-\/46d2-\/a058-\/1a8e7e208fe8
\item author\+: Markus Raab
\item pub\+Date\+: Tue, 16 Feb 2016 17\+:47\+:00 +0100
\end{DoxyItemize}

In case you do not yet know about it, here is an abstract about Elektra\+:

Elektra serves as a universal and secure framework to access configuration parameters in a global, hierarchical key database. Elektra provides a mature, consistent and easily comprehensible A\+P\+I. Its modularity effectively avoids code duplication across applications and tools regarding configuration tasks. Elektra abstracts from cross-\/platform-\/related issues and allows applications to be aware of other applications' configurations, leveraging easy application integration.

See \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

\subsection*{Overview}

This is one of the largest release up to now. It includes many user-\/visible improvements. Some highlights\+:


\begin{DoxyItemize}
\item Mounting is vastly improved\+: think about Debian's \char`\"{}dpkg\char`\"{} to \char`\"{}apt\char`\"{}-\/like functionality
\item In previous releases you could already specify the structure of the configuration. Now you can also automatically enforce this property.
\item We split the shared library {\ttfamily libelektra} into smaller parts. Now users can link against the parts of the library they need.
\item As always, the A\+B\+I and A\+P\+I is fully forward-\/compatible.
\item The release contains improvements in the https\+://github.com/\+Elektra\+Initiative/libelektra/blob/master/doc/decisions/bootstrap.\+md \char`\"{}bootstrapping process\char`\"{}.
\item We improved the {\ttfamily ini}, {\ttfamily rename} and {\ttfamily crypto} plugins.
\item The tool {\ttfamily kdb} now supports bookmarks and profiles.
\item The new tool {\ttfamily kdb editor} allows you to edit K\+D\+B configuration in your favorite text editor.
\item We are glad of the new packages for Debian, Arch Linux and Open\+W\+R\+T.
\end{DoxyItemize}

The same text as follows is also available \href{http://doc.libelektra.org/news/1ab4a560-c286-46d2-a058-1a8e7e208fe8.html}{\tt here as html} and https\+://github.com/\+Elektra\+Initiative/libelektra/blob/master/doc/\+N\+E\+W\+S.\+md \char`\"{}here on github\char`\"{}

\subsection*{Global Mount}

Sometimes you simply want some functionality for the whole key database. For example, you want to enable logging or notification of configuration changes. In previous versions, you had to change every mountpoint individually. Even more problematic, every mountpoint created its individual logs and notifications, without any way for someone to know if an application has issued its last log/notification.

These problems are now solved by global plugins. The same plugins are reused for this purpose. Also the mounting works nearly in the same way, you only have to omit the configuration file and the mountpoint\+: \begin{DoxyVerb}    kdb global-mount syslog journald dbus
\end{DoxyVerb}


Voilà, from now on every configuration change gets logged to syslog and journald. Additionally, every application gets notified via dbus.

If you want it more verbose for debugging, you can easily do so by\+: \begin{DoxyVerb}    kdb global-mount logchange counter
\end{DoxyVerb}


Which gives you detailed information to standard output which keys were changed/edited/deleted. Additionally, Elektra counts how often the {\ttfamily counter} plugin is invoked.

The underlying work for the global plugins, i.\+e. hooks in the core libraries and the {\ttfamily list} plugin that allows us to use many plugins without bloating the core was done by Thomas Waser.

It was already possible in earlier versions of Elektra to specify the configuration of your program. Until now, this specification could be mainly used to to generate code as described \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/tools/gen}{\tt here}. This release adds two more interesting options\+:


\begin{DoxyEnumerate}
\item the spec plugin, and
\item the spec mount.
\end{DoxyEnumerate}

\subsection*{Spec Plugin}

The most important global plugin that is now newly introduced with this release (thanks to Thomas Waser) is the {\ttfamily spec} plugin. By default it will be added for every global-\/mount. So for a new installation make sure you executed at least once\+: \begin{DoxyVerb}    kdb global-mount
\end{DoxyVerb}


The spec plugin is a global plugin that copies metadata from the {\ttfamily spec}-\/namespace to other namespaces. That means, it reads the specification, and makes sure that the configuration conforms to it. The actual validation is done by the many validation plugins already present.

Lets start by saying a key is a long and must have at least the value 10\+: \begin{DoxyVerb}    kdb setmeta spec/example/longkey check/type long
\end{DoxyVerb}


Then we can create a key in a different namespace and see if the {\ttfamily spec} plugin applies the meta-\/data correctly\+: \begin{DoxyVerb}    kdb set /example/longkey 25
    kdb lsmeta /example/longkey
\end{DoxyVerb}


Should now at least print {\ttfamily check/type}. By itself, this is useful for documentation of keys. For example, the application developer says\+: \begin{DoxyVerb}    kdb setmeta spec/example/longkey description "Do not change"
    kdb setmeta spec/example/longkey example 30
\end{DoxyVerb}


The user can retrieve this documentation by\+: \begin{DoxyVerb}    kdb getmeta /example/longkey description
\end{DoxyVerb}


But we want {\ttfamily check/type} to be not only a documentation, but also enforced.

\subsection*{Spec Mount}

Using {\ttfamily kdb setmeta} extensively and always looking out that all plugins are mounted correctly is error-\/prone. So instead, one can directly mount the plugins as specified. For the example above one simply needs\+: \begin{DoxyVerb}    kdb setmeta spec/example mountpoint example.ecf
    kdb spec-mount /example
\end{DoxyVerb}


Now, when we try to modify {\ttfamily /example/longkey} it will be validated\+: \begin{DoxyVerb}    kdb set /example/longkey a
    > Error (#52) [...] long [not] matched [...] a
\end{DoxyVerb}


Based on the present meta-\/data, the correct plugins (in this case {\ttfamily type} because of the metadata {\ttfamily check/type}) will be loaded.

We can also create a whole specification file, first mount the specification and then the mountpoint according the specification, e.\+g when we have {\ttfamily battery.\+ini} in the folder {\ttfamily \$(dirname \$(kdb file spec))} with following content\+: \begin{DoxyVerb}    []
    mountpoint = battery.ini
    infos/plugins = ini

    [level]
    check/enum = 'critical', 'low', 'high', 'full'
\end{DoxyVerb}


Then we can use\+: \begin{DoxyVerb}    # mount the file itself:
    kdb mount battery.ini spec/example/battery ni
    # make sure all plugins are present (e.g. enum for check/enum):
    kdb spec-mount /example/battery
\end{DoxyVerb}


Now lets verify if it worked\+: \begin{DoxyVerb}    kdb lsmeta /example/battery/level
    # we see it has a check/enum
    kdb getmeta /example/battery/level check/enum
    # now we know allowed values
    kdb set /example/battery/level low
    # success, low is ok!
    kdb set /example/battery/level wrong
    # fails, not one of the allowed values!
\end{DoxyVerb}


The main idea of the spec-\/mount is\+: search a plugin for every specification (meta-\/data) found in the spec-\/namespace.

\subsection*{General Mount Improvements}

In earlier versions {\ttfamily kdb mount} failed when plugin dependencies were not satisfied. Now dependencies will automatically be fulfilled, e.\+g. \begin{DoxyVerb}    kdb mount /etc/modules system/modules line
\end{DoxyVerb}


In earlier versions you would have got an error because of the missing {\ttfamily null} plugin. Now it simply adds the needed plugins.

The plugins given in the command-\/line used to be real plugins. Now also so called providers are accepted.

To make providers useful we need to actually know which plugin is the best candidate. To get the information we added a {\ttfamily infos/status} clause in the contract. In this clause the plugin developer adds many details how well the plugin is tested, reviewed, documented, maintained and so on. Based on this information, the best suited plugin will be chosen. For example, you now can use\+: \begin{DoxyVerb}    kdb mount /etc/security/limits.conf system/limits augeas \
            lens=Limits.lns logging
\end{DoxyVerb}


And the best suitable logger will automatically be chosen.

The configuration variable {\ttfamily /sw/kdb/current/plugins} now allows us to pass plugin configuration with the same syntax as the plugin specification passed on the commandline. A subtle difference is that thus the shell-\/splitting of arguments is missing, it is not possible to include whitespaces in the plugin configuration that way.

Now it is also possible to include the same plugin multiple times and also give them individual names. This feature is essential for script-\/based plugins, e.\+g. you now might add\+: \begin{DoxyVerb}    kdb mount file.x /example/mountpoint \
            lua#resolver script=resolver.lua \
            lua#storage script=storage.lua
\end{DoxyVerb}


Furthermore, {\ttfamily kdb mount} now supports recommendations, which can be enabled with {\ttfamily -\/-\/with-\/recommends}. E.\+g. supplied to the mount command using augeas above, comments will automatically transformed to meta-\/data to avoid cluttering of the real configuration.

\subsection*{Library Split}

Up to now, Elektra consisted only of a single shared library, {\ttfamily libelektra.\+so}. Not all symbols in it were relevant to end users, for example, some were only needed by plugins. Others were only proposed and not yet part of the stable A\+P\+I. And finally, other symbols were not needed in some situations, e.\+g. the plugins do not need the {\ttfamily kdb} interface.

Thus, we split {\ttfamily libelektra.\+so}, so that only coherent parts are in the same library\+:


\begin{DoxyItemize}
\item {\ttfamily libelektra-\/core.\+so} only contains the {\ttfamily Key\+Set} data structure and module loading. Every binary using Elektra should link against it.
\item {\ttfamily libelektra-\/kdb.\+so} contains the missing {\ttfamily K\+D\+B} symbols. Together with the {\ttfamily core} they contain everything declared in {\ttfamily kdb.\+h}. Michael Zehender plans to have multiple variants of {\ttfamily libelektra-\/kdb.\+so} that use different kinds of concurrency. Headerfile\+: {\ttfamily $<$kdb.\+h$>$}
\item {\ttfamily libelektra-\/ease.\+so} adds functionality missing in {\ttfamily core} to make the life for C programmers easier. New headerfile\+: {\ttfamily kdbease.\+h}
\item {\ttfamily libelektra-\/proposal.\+so} adds functionality proposed for {\ttfamily core}. It directly uses internal structures of {\ttfamily core}, thus they always need to have exactly the same version. Headerfile\+: {\ttfamily \hyperlink{kdbproposal_8h}{kdbproposal.\+h}}
\end{DoxyItemize}

The source code is now better organized by the introduction of a {\ttfamily libs} folder. The explanation of every library can be found in \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/libs}{\tt /src/libs/}.

The rationale of the library split is documented https\+://github.com/\+Elektra\+Initiative/libelektra/blob/master/doc/decisions/library\+\_\+split.\+md \char`\"{}here\char`\"{}. Shortly put, it was needed for further evolution and allowing us to grow and enhance without getting a fat core.

Thanks to Manuel Mausz for fixing many bugs related to the library split and also adapting all the bindings for it.

\subsubsection*{Benchmark}

To show that the split does not make Elektra slower, Mihael Pranjić made a small benchmark. The real time of \href{https://github.com/ElektraInitiative/libelektra/blob/master/benchmarks/large.c}{\tt benchmarks/large} and revision 634ad924109d3cf5d9f83c33aacfdd341b8de17a


\begin{DoxyEnumerate}
\item kdb-\/static\+: Median \+:0.\+8800
\item kdb-\/full\+: Median \+:0.\+8700
\item kdb\+: Median \+:0.\+8700
\end{DoxyEnumerate}

So it seems that the split does not influence the time of running elektrified processes.

{\itshape Times were measured with time(1) and the median is calculated for 21 runs of benchmarks/large. This was done using \href{https://github.com/ElektraInitiative/libelektra/blob/master/scripts/benchmark_libsplit.sh}{\tt scripts/benchmark\+\_\+libsplit.\+sh}}

\subsection*{Compatibility}

As always, the A\+B\+I and A\+P\+I is fully forward-\/compatible, i.\+e. programs compiled against an older 0.\+8 version of Elektra will continue to work (A\+B\+I) and you will be able to recompile every program without errors (A\+P\+I).

We added {\ttfamily key\+Get\+Namespace} which allows us to handle all namespaces in a switch and to iterate all namespaces. This is essential, when a new namespace is added, thus then the compiler can warn you about every part where the new namespace is not yet considered. We currently do not plan to add a new namespace, but better be safe than sorry.

The internal function {\ttfamily key\+Compare} now also detects any meta-\/data change.

libtools was nearly rewritten. Even though it is mostly A\+P\+I compatible (you should not use the low-\/level {\ttfamily Backend} anymore but instead use the {\ttfamily Backend\+Builder}), it is certainly not A\+B\+I compatible. If you have an undefined symbol\+: {\ttfamily \+\_\+\+Z\+N3kdb5tools7\+Backend9add\+Plugin\+E\+Ss\+N\+S\+\_\+6\+Key\+Set\+E} you need to recompile your tool. Even the merging part has A\+B\+I incompatibility (different size of {\ttfamily \+\_\+\+Z\+T\+V\+N3kdb5tools7merging14\+New\+Key\+Strategy\+E}). Unfortunately, we still cannot guarantee compatibility in {\ttfamily libtools}, further changes are planned (e.\+g. implementing mounting of lazy plugins).

The python(2) and lua interfaces changed, an additional argument (the plugin configuration) is passed to {\ttfamily open}.

The I\+N\+I plugin was rewritten, so many options changed in incompatible ways.

The default format plugin (e.\+g. for import/export) is no longer hardcoded to be {\ttfamily dump}. Instead K\+D\+B\+\_\+\+D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+T\+O\+R\+A\+G\+E will be used. To get K\+D\+B\+\_\+\+D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+T\+O\+R\+A\+G\+E you can use the constants plugin\+: \begin{DoxyVerb}    kdb mount-info
    kdb get system/info/constants/cmake/KDB_DEFAULT_STORAGE
\end{DoxyVerb}


Thanks to Manuel Mausz plugins do no longer export any method other than {\ttfamily elektra\+Plugin\+Symbol}. It now will fail if you directly linked against plugins and did not correctly use their public interface. Please use the module loading and access functions via the contract.

The C\+Make and Pkgconfig Files now only link against {\ttfamily elektra-\/core} and {\ttfamily elektra-\/kdb}. If you used some symbols not present in {\ttfamily kdb.\+h}, your application might not work anymore.

{\ttfamily libelektra.\+so} is still present for compatibility reasons. It should not be used for new applications. Some unimportant parts, however, moved to the \char`\"{}sugar\char`\"{} libraries. E.\+g. the symbol {\ttfamily elektra\+Key\+Cut\+Name\+Part} is no longer part of {\ttfamily libelektra.\+so}.

\subsubsection*{Bootstrapping}

When you use {\ttfamily kdb\+Open} in Elektra as first step it reads mountpoint configuration from {\ttfamily /elektra}. This step is the only hardcoded one, and all other places of the K\+D\+B's tree can be customized as desired via mounting.

The bootstrapping now changed, so that {\ttfamily /elektra} is not part of the default configuration {\ttfamily default.\+ecf} (or as configured with {\ttfamily K\+D\+B\+\_\+\+D\+B\+\_\+\+F\+I\+L\+E}), but instead we use {\ttfamily elektra.\+ecf} (or as configured with {\ttfamily K\+D\+B\+\_\+\+D\+B\+\_\+\+I\+N\+I\+T}). This behaviour solves the problem that {\ttfamily default.\+ecf} was read twice (and even differently, once for {\ttfamily /elektra} and once for {\ttfamily /}).

To be fully compatible with previous mountpoints, Elektra will still read mountpoints from {\ttfamily default.\+ecf} as long as {\ttfamily elektra.\+ecf} is not present.

To migrate the mountpoints to the new method, simply use\+: \begin{DoxyVerb}    kdb upgrade-bootstrap
\end{DoxyVerb}


which basically exports {\ttfamily system/elektra/mountpoints}, then does {\ttfamily kdb rm -\/r system/elektra/mountpoints} so that {\ttfamily default.\+ecf} will be without an mountpoint and thus the compatibility mode does not apply anymore. As last step it will import again what it exported before.

https\+://github.com/\+Elektra\+Initiative/libelektra/blob/master/doc/decisions/bootstrap.\+md \char`\"{}\+Details are here\char`\"{}

\subsection*{Plugins}

We already highlighted the new {\ttfamily spec} plugin, but also other plugins were improved at many places. Small other changes are\+:


\begin{DoxyItemize}
\item Conditionals now also support {\ttfamily assign/condition} syntax, thanks to Thomas Waser
\item Lua and Python are not tagged experimental anymore. They now correctly add their configuration to the open-\/call.
\item The plugin {\ttfamily yajl} (the json parser and generator) now also accepts the type {\ttfamily string} and yields better warnings on wrong types.
\item Improved error message in the {\ttfamily type} plugin.
\end{DoxyItemize}

Larger changes were done in the following plugins\+:

\subsubsection*{I\+N\+I}

The I\+N\+I plugin was rewritten and a huge effort was taken so that it fully-\/roundtrips and additionally preserves all comments and ordering. Currently, it is brand new. It is planned that it will replace {\ttfamily dump} in the future.

Currently is has some minor problems when used as K\+D\+B\+\_\+\+D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+T\+O\+R\+A\+G\+E. You can avoid most problems by mounting a different file into root\+: \begin{DoxyVerb}    kdb mount root.ini /
\end{DoxyVerb}


Read \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/plugins/ini}{\tt here about the details}.

A huge thanks to Thomas Waser.

\subsubsection*{Rename}

Thanks to Thomas Waser {\ttfamily rename} is now fixed for cascading keys. Additionally, it does not change the {\ttfamily sync} status of the keys so that notification plugins work properly afterwards.

\subsubsection*{Crypto}

The crypto plugin is a facility for securing sensitive Keys by symmetric encryption of the value. It acts as a filter plugin and it will only operate on Keys, which have the meta-\/key „crypto/encrypt“ set.

The key derivation is still work-\/in-\/progress, so the plugin does not work with kdb yet. A planned method for key derivation is to utilize the gpg-\/agent.

For now the plugin requires the following Keys within the plugin configuration in order to work properly\+:


\begin{DoxyEnumerate}
\item /crypto/key -\/ the cryptographic key (binary 256 bit long)
\item /crypto/iv -\/ the initialization vector (binary 128 bit long)
\end{DoxyEnumerate}

Please note that this method of key input is for testing purposes only and should never be used in a productive environment!

Thanks to Peter Nirschl, especially the patience for also supporting different platforms where dependencies need to be handled differently.

\subsection*{K\+D\+B}

A technical preview of a new tool was added\+: {\ttfamily kdb editor} allows you to edit any part of Elektra's configuration with any editor and any syntax. It uses 3-\/way merging and other stable technology, but it currently does not provides a way to abort editing. So you only should use it with care.

The tool {\ttfamily kdb list} now searches in the rpath for libraries and thus will also find plugins not present at compile time (using {\ttfamily glob}). Additionally, it sorts the plugins by {\ttfamily infos/status} score, which can also be printed with {\ttfamily -\/v}. The last plugins printed are the ones ranked highest.

When running as root, {\ttfamily kdb} will now use the {\ttfamily system} namespace when writing configuration to cascading key names.

Long paths are cumbersome to enter in the C\+L\+I. Thus one can define bookmarks now. Bookmarks are key-\/names that start with {\ttfamily +}. They are only recognized by the {\ttfamily kdb} tool or tools that explicitly have support for it. Applications should not depend on the presence of a bookmark. For example, if you set the bookmark kdb\+: \begin{DoxyVerb}    kdb set user/sw/elektra/kdb/#0/current/bookmarks
    kdb set user/sw/elektra/kdb/#0/current/bookmarks/kdb user/sw/elektra/kdb/#0/current
\end{DoxyVerb}


You are able to use\+: \begin{DoxyVerb}    kdb ls +kdb/bookmarks
    kdb set +kdb/format ini
\end{DoxyVerb}


The kdb tool got much more robust when the initial configuration is broken, no man page viewer is present or Elektra was installed wrongly.

The {\ttfamily -\/-\/help} usage is unified and improved.

The new keyname naming conventions are now used for configuration of the {\ttfamily kdb}-\/tool itself\+: {\ttfamily /sw/elektra/kdb/\#0/\%/} and {\ttfamily /sw/elektra/kdb/\#0/current/} are additionally read. The option {\ttfamily -\/p}/{\ttfamily -\/-\/profile} is now supported for every command, it allows to fetch configuration from {\ttfamily /sw/elektra/kdb/\#0/$<$profile$>$/} instead of {\ttfamily current}. K\+D\+B is more robust when it cannot fetch its own configuration due to K\+D\+B errors.

\subsection*{Coding Guidelines}

Thanks to Kurt Micheli the code guidelines are https\+://github.com/\+Elektra\+Initiative/libelektra/blob/master/doc/\+C\+O\+D\+I\+N\+G.\+md \char`\"{}now properly documented\char`\"{}. Thanks to René Schwaiger we also provide a style file for clang-\/format.

Furthermore we unified and fixed the source\+:
\begin{DoxyItemize}
\item only use @ for doxygen commands
\item always use elektra$\ast$ functions for allocation
\item added a file header for every file
\end{DoxyItemize}

\subsection*{C++11 migration}

Since we now only use C++11, we applied {\ttfamily clang-\/modernize} which simplified many loops and replaced many {\ttfamily 0} to {\ttfamily nullptr}. Additionally, we added {\ttfamily override} and {\ttfamily default} at many places.

We removed all places where we had {\ttfamily ifdefs} to use {\ttfamily auto\+\_\+ptr} if no modern smart pointer is available.

Because of these changes there is no easy way to compile Elektra without C++11 support, except by avoiding the C++ parts all together.

The C++ {\ttfamily Key\+Set} now also supports a {\ttfamily get} to retrieve whole containers at once. By specializing {\ttfamily Key\+Set\+Type\+Wrapper} you can support your own containers. Currently only {\ttfamily map$<$string, T$>$} is supported (T is any type supported by {\ttfamily Key\+::get}).

If you haven't removed it from your flags already, there is no use anymore to set {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+C\+X\+X11}.

\subsection*{Documentation}

The documentation was improved vastly. Most thanks to Kurt Micheli who did a lot of editing and fixed many places throughout the documentation Also thanks to Michael Zehender who added two paragraphs in the main R\+E\+A\+D\+M\+E.\+md.

Keynames of applications should be called {\ttfamily /sw/org/app/\#0/current}, where {\ttfamily current} is the default profile (non given). {\ttfamily org} and {\ttfamily app} is supposed to not contain {\ttfamily /} and be completely lowercase. Keynames are documented \hyperlink{md_doc_help_elektra-key-names_doc_help_elektra-key-names_md}{here}. \hyperlink{doc_tutorials_application-integration_md}{See also here}. The main reason for long paths is the provided flexibility in the future (e.\+g. to use profiles and have a compatible path for new major versions of configuration). By using bookmarks, users should not be confronted by it too often.


\begin{DoxyItemize}
\item many man pages were improved
\item many typos were fixed, thanks to Pino Toscano!
\item Fix documentation for kdb list, thanks to Christian Berrer
\item Compilation variants are explained better, thanks to Peter Nirschl for pointing out what was missing
\item document ronn as dependency, thanks to Michael Zehender
\item fix broken links, thanks to Daniel Bugl
\end{DoxyItemize}

Thanks to Kurt Micheli, developers are now warned during compilation on broken links in Markdown. The output format is the same as for gcc. Additionally, the markdown documentation of plugins now get a proper title in the pdf and html output of doxygen.

\subsection*{Qt-\/\+Gui 0.\+0.\+10}

Raffael Pancheri again updated qt-\/gui with many nice improvements\+:


\begin{DoxyItemize}
\item update existing nodes in case the config was changed outside the gui
\item safely update tree
\item add update signal to metadata
\item fix crash when closing the G\+U\+I
\item move Actions in separate file to make main.\+qml less clustered
\item plugins do not output messages at startup
\item {\ttfamily Backend\+Builder} is now used, which automatically takes cares of the correct ordering of plugins
\item Qt 5.\+4 compatibility is still ensured
\item C++11 is now used in Qt-\/\+Gui, too
\end{DoxyItemize}

\subsection*{Packaging and Build System}

Elektra 0.\+8.\+14 now in Debian with qt-\/gui, man pages, thanks to Pino Toscano \href{https://packages.qa.debian.org/e/elektra/news/20151215T000031Z.html}{\tt read more here}

Thanks to Gustavo Alvarez for updating and splitting the packages on Arch Linux!

Thanks to \href{http://friends.ccbib.org/harald/supporting/}{\tt Harald Geyer}, Elektra is now packaged for Open\+W\+R\+T. We fixed a number of cross-\/compilation issues and now officially support building against musl libc, with one minor limitation\+: R\+P\+A\+T\+H works differently on musl so you need to install all plugins directly in /usr/lib/ or set L\+D\+\_\+\+L\+I\+B\+R\+A\+R\+Y\+\_\+\+P\+A\+T\+H. Report any bugs in \href{https://github.com/haraldg/packages}{\tt Harald's Open\+W\+R\+T packaging issue tracker}.


\begin{DoxyItemize}
\item export errors/symbols are now called {\ttfamily elektra-\/export-\/symbols} and {\ttfamily elektra-\/export-\/symbols} and can be installed using {\ttfamily I\+N\+S\+T\+A\+L\+L\+\_\+\+B\+U\+I\+L\+D\+\_\+\+T\+O\+O\+L\+S} (by default off). This is needed for cross-\/compilation. Thanks to Harald Geyer for reporting.
\item some header files are renamed because they endlessly included themselves if the header files were found in wrong order. Thanks to Harald Geyer for reporting.
\item fixed compilation when built on more than 20 cores with $>$= -\/j15, thanks to Gustavo Alvarez for reporting and Manuel Mausz for analyzing
\item lua 5.\+1 now works too (except for iterators), thanks to Harald Geyer for reporting. thanks to Manuel Mausz for adding a new Find\+Lua.\+cmake
\item pdf builds do not fail due to half written files, reported by René Schwaiger and fixed by Kurt Micheli
\end{DoxyItemize}

Read about \href{https://github.com/ElektraInitiative/libelektra#packages}{\tt other packages here}.

\subsection*{Fixes and Improvements}


\begin{DoxyItemize}
\item 3 way merge now properly deals with binary data, thanks to Felix Berlakovich
\item getenv\+: fix wrapping on powerpc, thanks to Pino Toscano
\item markdownlinkconverter\+: fix char/int mismatch, thanks to Pino Toscano
\item wresolver\+: use K\+D\+B\+\_\+\+M\+A\+X\+\_\+\+P\+A\+T\+H\+\_\+\+L\+E\+N\+G\+T\+H instead of P\+A\+T\+H\+\_\+\+M\+A\+X, thanks to Pino Toscano
\item Cleaning up \#ifdefs that break statements, thanks to Romero Malaquias
\item Daniel Bugl tested the I\+N\+I plugin
\item cmake list\+\_\+filter was broken because of different behaviour in cmake\+\_\+parse\+\_\+arguments, thanks to Christian Berrer for reporting
\item g++5.3 is now supported
\item gtest does not link against pthread if not needed
\item testcases that are built with B\+U\+I\+L\+D\+\_\+\+S\+H\+A\+R\+E\+D also successfully work
\item kdb list works when libs are in same path as plugins, thanks to Harald Geyer for reporting
\item fix Mac O\+S issues, thanks to Peter Nirschl, René Schwaiger and Mihael Pranjic
\item fix resolver-\/baseflag docu, thanks to Harald Geyer for reporting
\item do not create wrong directories called {\ttfamily (} and {\ttfamily )} in source, thanks to René Schwaiger
\item fix cmake for systems where iconv is not part of libc, thanks to Michael Zehender and Peter Kümmel (for Find\+Iconv.\+cmake)
\item fix segfault in libgetenv if root keys are present
\item lua\+: fix Key\+:tostring(), thanks to Manuel Mausz
\item add list of \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/bindings}{\tt supported bindings}, thanks to Manuel Mausz
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.15.tar.gz}{\tt here} and now also \href{https://github.com/ElektraInitiative/ftp/tree/master/releases/elektra-0.8.15.tar.gz}{\tt here on github}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+15.\+tar.\+gz
\item size\+: 2338297
\item md5sum\+: 33ec1e5982fb7fbd8893bf7b579b80f0
\item sha1\+: 6b1fdd5aa5aaad6ba377b4bb5ef437e0c85319ff
\item sha256\+: 6a406986cecb8d4a44485ced118ee803bc039b0824b72298e123b4dd47eb0b22
\item sha512\+: 86a408dd546b33e3b437f92f415de7aee6a235189f9eab0762b3f44ab4c453ee369a53de10a9f5b0df1b446460b12c57c6b8b77c282648ec2a49f2328d9af13d
\end{DoxyItemize}

This release tarball now is also available \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.15.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.15/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt R\+S\+S feed} to always get the release notifications.

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} the issue tracker \href{http://git.libelektra.org/issues}{\tt on github} or by mail \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{http://doc.libelektra.org/news/1ab4a560-c286-46d2-a058-1a8e7e208fe8.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

Best regards, Markus

\section*{0.\+8.\+14 Release}


\begin{DoxyItemize}
\item guid\+: 519cbfac-\/6db5-\/4594-\/8a38-\/dec4c84b134f
\item author\+: Markus Raab
\item pub\+Date\+: Thu, 19 Nov 2015 17\+:48\+:14 +0100
\end{DoxyItemize}

Again we managed to release with many new features and plugins (lua, enum, list, crypto, csvstorage, conditionals, mathcheck, filecheck, logchange) many fixes, and especially with a vastly improved polished documentation.

\subsection*{Documentation Initiative}

The Documentation Initiative is a huge success and now the documentation of Elektra is in a state where someone (preferable a linux guru), never heard of Elektra, still can use Elektra only by reading man pages.

There are now many ways to show a man page\+:


\begin{DoxyItemize}
\item http\+://libelektra.org/blob/master/doc/help/kdb.\+md \char`\"{}on github\char`\"{}
\item \href{http://doc.libelektra.org/api/latest/html/md_doc_help_kdb.html}{\tt in the A\+P\+I docu}
\item by using {\ttfamily kdb -\/-\/help} or {\ttfamily kdb help $<$command$>$}
\item by using {\ttfamily man kdb}
\end{DoxyItemize}

\subsubsection*{Help system}

Ian Donnelly wrote man pages for all the tools delivered with Elektra. Additionally, nearly all R\+E\+A\+D\+M\+E.\+md are now also converted to man pages and also to Doxygen.

\subsubsection*{Doxygen Filter}

Kurt Micheli did an amazing work with a new doxygen filter. The filter allows all Elektra markdown pages to be also included in the doxygen documentation. Thus all technical concepts are now explained in Markdown pages, this filter is essential.

But even more, the filter also includes all man pages written for the tools, giving a nice html view for them. (In addition to the markdown rendering on github).

Enjoy the \href{http://doc.libelektra.org/api/0.8.14/html/}{\tt result}.

A big thanks to Kurt Micheli!

\subsubsection*{Further Docu fixes}


\begin{DoxyItemize}
\item getenv debugging docu was improved
\item typo fix\+: Specify, thanks to Pino Toscano
\item \href{http://libelektra.org/blob/master/doc/decisions}{\tt Design decisions} Definition of Bool, capabilities and Publish Subscribe (thanks to Daniel Bugl)
\item Improve iconv docu
\item usage examples for many plugins
\item improve R\+E\+A\+D\+M\+E for line plugin (thanks to Ian Donnelly)
\item add docu about dependencies for some plugins (thanks to Ian Donnelly)
\item create many new links within the documentation
\end{DoxyItemize}

\subsection*{Simplicity}

We shifted our http\+://git.libelektra.\+org/blob/master/doc/\+G\+O\+A\+L\+S.md \char`\"{}goals\char`\"{} a bit\+: We want to prefer simplicity to flexibility. Not because we do no like flexibility, but because we think we achieved enough of it. Currently (and in future) you can use Elektra\+:


\begin{DoxyItemize}
\item obviously as primitive key/value storage
\item with specifications and dozens of plugins driven by it
\item with code generation
\item ...
\end{DoxyItemize}

But we cut flexibility regarding\+:


\begin{DoxyItemize}
\item namespaces are only useful for configuration (not for arbitrary key/value)
\item the semantics of \href{http://git.libelektra.org/blob/master/doc/METADATA.ini}{\tt metadata}
\item mounting functionality
\item error code meanings are fixed, if a resolver detects a conflict, our defined error must be used
\item of course A\+B\+I, A\+P\+I
\end{DoxyItemize}

\section*{Qt-\/gui 0.\+0.\+9}

Raffael Pancheri again updated his qt-\/gui to version 0.\+0.\+9 (beta) with important of fixes and improvements\+:


\begin{DoxyItemize}
\item Fixes for Qt 5.\+5
\item Handling of merge-\/conflicts improved
\item Avoid rewriting on merge-\/conflicts
\item Allow Q\+M\+L to destroy C++ owned model
\item Dialog at startup
\item Reduce memory footprint
\item add man page
\end{DoxyItemize}

A bit thanks to Raffael Pancheri!

\subsection*{Compatibility}

As always, the A\+P\+I and A\+P\+I is fully forward-\/compatible, i.\+e. programs compiled against an older 0.\+8 versions of Elektra will continue to work.

The behaviour of some plugins, however, changed\+:


\begin{DoxyItemize}
\item the I\+N\+I plugin, the section handling was improved.
\item in the N\+I plugin, the symbol Ni\+\_\+\+Get\+Version vanished
\item in the resolver plugin files of other namespaces which are not mounted are not resolved anymore
\end{DoxyItemize}

\subsubsection*{Build System}

E\+N\+A\+B\+L\+E\+\_\+\+C\+X\+X11 does not exist anymore, it is always on. We do not care about 199711\+L compilers anymore, which makes development easier, without losing any actually used platform.

Some programs that are only used in-\/source are not installed anymore. (by Pino Toscano)

Python and Lua plugins are enabled now in {\ttfamily -\/\+D\+P\+L\+U\+G\+I\+N\+S=A\+L\+L}.

Python3 plugin was renamed to python.

\subsection*{Lua Plugin}

Manuel Mausz add a lightweight alternative to the python plugin\+: \href{http://libelektra.org/blob/master/src/plugins/lua/}{\tt the lua plugin}. In a similar way, someone can write scripts, which are executed on every access to the http\+://libelektra.org/blob/master/doc/help/elektra-\/glossary.\+md \char`\"{}key database\char`\"{}.

To mount a lua based filter, you can use\+: \begin{DoxyVerb}kdb mount file.ini /lua ini lua script=/path/to/lua/lua_filter.lua
\end{DoxyVerb}


Even though it works well, it is classified as technical preview.

Thanks to Manuel Mausz for this plugin!

\subsection*{Cryptography Plugin}

In this technical preview, Peter Nirschl \href{http://libelektra.org/blob/master/src/plugins/crypto/}{\tt demonstrates how a plugin} can encrypt Elektra's values. In testcases it is already able to do so, but for the end user an easy way for key derivation is missing.

A big thanks to Peter Nirschl!

\subsection*{I\+N\+I Plugin}

The I\+N\+I plugin got a near rewrite. Now it handles many situations better, has many more options and features, including\+:


\begin{DoxyItemize}
\item preserving the order
\item using keys as meta-\/data
\item many new testcases
\item fix escaping
\end{DoxyItemize}

Thanks to Thomas Waser for this work!

\subsection*{Mathcheck plugin}

This plugin allows you to check and even calculate keys from other keys using an polish prefix notation. It supports the typical operations {\ttfamily + -\/ / $\ast$} and {\ttfamily $<$, $<$=, ==, !=, =$>$, $>$, \+:=}. To mount, check and calculate values, one would use\+: \begin{DoxyVerb}kdb mount mathcheck.dump /example/mathcheck dump mathcheck
kdb setmeta user/example/mathcheck/k check/math "== + a b"
kdb setmeta user/example/mathcheck/k check/math ":= + a b"
\end{DoxyVerb}


For details \href{http://libelektra.org/blob/master/src/plugins/mathcheck/}{\tt see the documentation}.

Thanks to Thomas Waser for this important plugin!

\subsection*{List Plugin}

Currently, Elektra has some limitations on how many plugins can be added to certain http\+://libelektra.org/blob/master/doc/help/elektra-\/plugins-\/ordering.\+md \char`\"{}placement\char`\"{}. Because of the rapidly growing number of plugins, some combinations are not possible anymore.

This plugin tackles the issue, by delegating the work to an arbitrary number of subplugins. As a bonus, it works lazily and thus might avoid the loading of some plugins all together.

Thanks to Thomas Waser for this plugin!

\subsection*{Conditionals}

Brings {\ttfamily if} inside Elektra. It lets you check if some keys have the values they should have. \begin{DoxyVerb}    kdb mount conditionals.dump /tmount/conditionals conditionals dump
    kdb set user/tmount/conditionals/fkey 3.0
    kdb set user/tmount/conditionals/hkey hello
    kdb setmeta user/tmount/conditionals/key check/condition "(hkey == 'hello') ? (fkey == '3.0')" # success
    kdb setmeta user/tmount/conditionals/key check/condition "(hkey == 'hello') ? (fkey == '5.0')" # fail
\end{DoxyVerb}


For details \href{http://libelektra.org/blob/master/src/plugins/conditionals/}{\tt see the documentation}.

Again, thanks to Thomas Waser for this plugin!

\subsection*{Csvstorage Plugin}

You can now mount csv-\/files. To mount {\ttfamily test.\+csv} simply use\+: \begin{DoxyVerb}kdb mount test.csv /csv csvstorage
\end{DoxyVerb}


There are many options, e.\+g. changing the delimiter, use header for the key names or predefine how the columns should be named. For details \href{http://libelektra.org/blob/master/src/plugins/csvstorage/}{\tt see the documentation}.

Thanks to Thomas Waser!

\subsection*{Filecheck plugin}

This plugin lets you validate lineendings, encodings, null, bom and unprintable characters.

The also new plugin lineendings is already superseded by the filecheck plugin.

Thanks to Thomas Waser!

\subsection*{Enum plugin}

The Enum plugin checks string values of Keys by comparing it against a list of valid values.

Thanks to Thomas Waser!

\subsection*{Elektrify Machinekit.\+io}

We are proud that \href{http://www.machinekit.io/}{\tt Machinekit} starts using Elektra.

Alexander Rössler is digging into all details, and already enhanced the D\+B\+U\+S Plugin for their needs. D\+Bus now can emit a message for every changed key.

A big thanks to Alexander Rössler!

\subsection*{Bugfixes}


\begin{DoxyItemize}
\item libgetenv did not reinitalized its mutexes on forks
\item add need\+Sync also in C++ binding
\item handle removed current working directories (fallback to /)
\item avoid segfault on missing version keys (when doing {\ttfamily kdb rm system/elektra/version})
\item fix glob plugin + kdb mount with http\+://libelektra.org/blob/master/doc/help/elektra-\/contracts.\+md \char`\"{}config/needs usage\char`\"{}
\item fix different handling of strerror\+\_\+r in Mac O\+S X (thanks to Daniel Bugl)
\item do not change the users parent\+Key in early-\/error scenarios
\item do not try to interpret some binary keys as function keys
\end{DoxyItemize}

\subsection*{Other Gems}


\begin{DoxyItemize}
\item getenv example\+: do not link to elektra/elektratools, thanks to Pino Toscano
\item fixes in other examples
\item avoid useless U\+T\+F-\/8 chars and fix typos, thanks to Kurt Micheli
\item fix kdb check return code (open fail)
\item pdf now also allows U\+T\+F-\/8 characters if added to elektra\+Special\+Characters.\+sty, thanks to Kurt Micheli
\item libgetenv\+: lookup also used for layers
\item handle wrong arguments of metals better, thanks to Ian Donnelly
\item Improvement of error messages in the augeas plugin
\item {\ttfamily kdb set} avoids fetching unnecessary namespaces
\item verbose unmount
\item logchange\+: small demonstration plugin to show how to log added, removed and changed keys
\item setmeta will use spec as default
\item libtools\+: avoid useless get\+Name, add verbosity flag for find\+Backend
\item Improve iconv error messages
\item That mount needs permissions to /etc should now really be obvious with new error message
\item many fixes in the template for new plugins
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.14.tar.gz}{\tt here} and now also \href{https://github.com/ElektraInitiative/ftp/tree/master/releases/elektra-0.8.14.tar.gz}{\tt here on github}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+14.\+tar.\+gz
\item size\+: 2252008
\item md5sum\+: a87cd3845e590bf413959dfd555e3704
\item sha1\+: 2360603c347ae3f3a28e827eb9260ff0b9881e46
\item sha256\+: af681a38c9c2921b8d249f98ab851c3d51371735471d8a1f833a224c4446fe2e
\end{DoxyItemize}

This release tarball now is also available \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.14.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.14/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt R\+S\+S feed} to always get the release notifications.

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} the issue tracker \href{http://git.libelektra.org/issues}{\tt on github} or by mail \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{http://doc.libelektra.org/news/519cbfac-6db5-4594-8a38-dec4c84b134f.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

Btw. the whole release happened with http\+://libelektra.org/blob/master/src/libs/getenv/\+R\+E\+A\+D\+M\+E.\+md \char`\"{}elektrify-\/getenv\char`\"{} enabled.

Best regards, Markus

\section*{0.\+8.\+13 Release}


\begin{DoxyItemize}
\item guid\+: 3c00a5f1-\/c017-\/4555-\/92b5-\/a2cf6e0803e3
\item author\+: Markus Raab
\item pub\+Date\+: Thu, 17 Sep 2015 17\+:32\+:16 +0200
\end{DoxyItemize}

Again we managed to release with many new features, many fixes and also other improvements.

\subsection*{Elektrify-\/getenv}

getenv(3) is one of the most popular ways to retrieve configuration, even though it has many known problems\+:


\begin{DoxyItemize}
\item no standard way to modify it
\item relogin (or restart of shell) necessary
\item names are flat (no hierarchical structure)
\item cannot be set for individual applications
\item different in at, cron and similar scripts
\end{DoxyItemize}

With elektrify-\/getenv we wrote a solution which solves most of the problems. We use the L\+D\+\_\+\+P\+R\+E\+L\+O\+A\+D technique to {\itshape additionally} retrieve values from Elektra, and not only the environment.

You simply can do\+:

```bash kdb set user/env/override/\+H\+T\+T\+P\+\_\+\+P\+R\+O\+X\+Y \char`\"{}http\+://my.\+proxy\+:8080\char`\"{} ```

This will set the {\ttfamily H\+T\+T\+P\+\_\+\+P\+R\+O\+X\+Y} environment variable to {\ttfamily \href{http://my.proxy:8080}{\tt http\+://my.\+proxy\+:8080}}. Configuration can be retrieved with {\ttfamily kdb get}\+:

```bash kdb get user/env/override/\+H\+T\+T\+P\+\_\+\+P\+R\+O\+X\+Y lynx \# or start another www-\/browser with the newly set H\+T\+T\+P\+\_\+\+P\+R\+O\+X\+Y ```

Or using the man pages\+: \begin{DoxyVerb}kdb elektrify-getenv man man --elektra:MANWIDTH=40
\end{DoxyVerb}


Will use M\+A\+N\+W\+I\+D\+T\+H 40 for this invocation of man man. This feature is handy, if an option is only available by environment, but not by command-\/line arguments, because sometimes environment variables are not trivial to set (e.\+g. in Makefiles).

Some more examples\+: \begin{DoxyVerb}kdb set user/env/override/MANOPT -- "--regex -LC"
kdb elektrify-getenv getenv MANOPT   # to check if it is set as expected
kdb getenv MANOPT   # if /etc/ld.so.preload is active
\end{DoxyVerb}


So is this the final solution for configuration and manual elektrification of applications is not needed anymore?

The answer is\+: no and yes.

It is quite satisfactory for configuration that is inherently sharable (not different from one application to another) {\itshape and} needs the environment semantics, i.\+e. some subprocesses should have different configuration than others, e.\+g. in a specific terminal.

But it might not be a good solution for your own application, because libgetenv(3) implies many architectural decision, that other elektrified applications would decide differently, e.\+g.\+:


\begin{DoxyItemize}
\item it uses global variables (getenv(3) has no handle)
\item it uses mutex for multi-\/threading safety
\item the A\+P\+I getenv(3) only returns {\ttfamily char$\ast$} and has no support for other data types
\end{DoxyItemize}

For more information see http\+://git.libelektra.\+org/blob/master/src/libs/getenv/\+R\+E\+A\+D\+M\+E.md \char`\"{}src/libgetenv/\+R\+E\+A\+D\+M\+E.\+md\char`\"{}

\subsection*{Compatibility}

As always, the A\+P\+I and A\+P\+I is fully forward-\/compatible, i.\+e. programs compiled against an older 0.\+8 versions of Elektra will continue to work.

Because {\ttfamily key\+Unescaped\+Name} and {\ttfamily key\+Get\+Unescaped\+Name\+Size} is added in this release, it is not backward-\/compatible, i.\+e. programs compiled against 0.\+8.\+13, might {\itshape not} work with older 0.\+8 libraries.

The function {\ttfamily key\+Unescaped\+Name} provides access to an unescaped name, i.\+e. one where {\ttfamily /} and {\ttfamily \textbackslash{}\textbackslash{}} are literal symbols and do not have any special meaning. {\ttfamily N\+U\+L\+L} characters are used as path separators. This function makes it trivial and efficient to iterate over all path names, as already exploited in all bindings\+:


\begin{DoxyItemize}
\item \href{http://git.libelektra.org/blob/master/src/bindings/jna/HelloElektra.java}{\tt jna (java)}
\item \href{http://git.libelektra.org/blob/master/src/bindings/swig/lua/tests/test_key.lua}{\tt lua}
\item \href{http://git.libelektra.org/blob/master/src/bindings/swig/python2/tests/testpy2_key.py}{\tt python2}
\item \href{http://git.libelektra.org/blob/master/src/bindings/swig/python/tests/test_key.py}{\tt python3}
\end{DoxyItemize}

Other small changes/additions in bindings\+:


\begin{DoxyItemize}
\item fix key constructor, thanks to Manuel Mausz
\item add copy and deepcopy in python (+examples,+testcases), thanks to Manuel Mausz
\item dup() in python3 returned wrong type (S\+W\+I\+G wrapper), thanks to Toscano Pino for reporting, thanks to Manuel Mausz for fixing it
\end{DoxyItemize}

Doxygen 1.\+8.\+8 is preferred and the configfile was updated to this version.

The symbols of nickel (for the ni plugin) do not longer leak from the Elektra library. As such, old versions of testmod\+\_\+ni won't work with Elektra 0.\+8.\+13. A version-\/script is now in use to only export following symbols\+:


\begin{DoxyItemize}
\item kdb$\ast$
\item key$\ast$
\item ks$\ast$
\item libelektra$\ast$ for module loading system
\item elektra$\ast$ for proposed and other functions (no A\+B\+I/\+A\+P\+I compatibility here!)
\end{DoxyItemize}

In this release, E\+N\+A\+B\+L\+E\+\_\+\+C\+X\+X11 was changed to {\ttfamily O\+N} by default.

Note that in the next release 0.\+8.\+14 there will be two changes\+:


\begin{DoxyItemize}
\item According to \href{http://git.libelektra.org/issues/262}{\tt issue \#262}, we plan to remove the option E\+N\+A\+B\+L\+E\+\_\+\+C\+X\+X11 and require the compiler to be C++11 compatible. If you have any system you are not able to build Elektra with -\/\+D\+E\+N\+A\+B\+L\+E\+\_\+\+C\+X\+X11=O\+N (which is the default for 0.\+8.\+13) please report that immediately.
\item the python3 bindings will be renamed to python
\end{DoxyItemize}

By not having to care for pre-\/\+C++11 compilers, we hope to attract more developers. The core part is still in C99 so that Elektra can be used on systems where libc++ is not available. Many new plugins are still written in C99, also with the purpose of not depending on C++.

\subsection*{Python Plugins}

A technical preview of \href{http://git.libelektra.org/blob/master/src/plugins/python}{\tt python3} and \href{http://git.libelektra.org/blob/master/src/plugins/python2}{\tt python2} plugins has been added.

With them its possible to write any plugin with python scripts.

Note, they are a technical preview. They might have severe bugs and the A\+P\+I might change in the future. Nevertheless, it is already possible to, e.\+g. develop storage plugins with it.

They are not included in {\ttfamily A\+L\+L} plugins. To use it, you have to specify it\+: \begin{DoxyVerb}-PLUGINS="ALL;python;python2"
\end{DoxyVerb}


Thanks to Manuel Mausz for to this work on the plugins and the patience in all the last minute fixes!

\subsection*{Qt-\/gui 0.\+0.\+8}

The G\+U\+I was improved and the most annoying bugs are fixed\+:


\begin{DoxyItemize}
\item only reload and write config files if something has changed
\item use merging in a way that only a conflict free merge will be written, thanks to Felix Berlakovich
\item made sure keys can only be renamed if the new name/value/metadata is different from the existing ones
\item fixed 1) and 2) of \#233
\item fixed \#235
\item fixed qml warning when deleting key
\item fixed qml typerror when accepting an edit
\end{DoxyItemize}

A big thanks to Raffael Pancheri!

\subsection*{K\+D\+B Tool}

The commandline tool {\ttfamily kdb} also got some improvements. Most noteworthy is that {\ttfamily kdb get -\/v} now gives a complete trace for every key that was tried. This is very handy if you have a complex specification with many fallback and override links.

It also shows default values and warnings in the case of context-\/oriented features.

Furthermore\+:


\begin{DoxyItemize}
\item Add {\ttfamily -\/v} for setmeta
\item Copy will warn when it won't overwrite another key (behaviour did not change)
\item improve help text, thanks to Ian Donnelly
\end{DoxyItemize}

\subsection*{Documentation Initiative}

As Michael Haberler from \href{http://www.machinekit.io/}{\tt machinekit} pointed out it was certainly not easy for someone to get started with Elektra. With the documentation initiative we are going to change that.


\begin{DoxyItemize}
\item The discussion in \href{http://git.libelektra.org/issues}{\tt github issues} should clarify many things
\item We start writing man pages in ronn-\/format(7), thanks to Ian Donnelly for current work
\item Kurt Micheli is woring on improved doxygen docu + pdf generation
\item Daniel Bugl already restructed the main page
\item Daniel Bugl also improved formatting
\item doc\+: use 
\begin{DoxyRetVals}{Return values}
{\em more,thanks} & to Pino Toscano\\
\hline
\end{DoxyRetVals}

\item doxygen\+: fix template to use {\ttfamily @} and not {\ttfamily \textbackslash{}\textbackslash{}}.
\item S\+V\+G logo is preferred, thanks to Daniel Bugl
\item doc\+: use 
\begin{DoxyRetVals}{Return values}
{\em more,thanks} & to Pino Toscano\\
\hline
\end{DoxyRetVals}

\item many typo fixes, thanks to Pino Toscano
\item fix broken links, thanks to Manuel Mausz, Daniel Bugl and Michael Haberler
\end{DoxyItemize}

Any further help is very welcome! This call is especially addressed to beginners in Elektra because they obviously know best which documentation is lacking and what they would need.

\subsection*{Portability}

{\ttfamily kdb-\/full} and {\ttfamily kdb-\/static} work fine now for Windows 64bit, thanks to Manuel Mausz. The wresolver is now more relaxed with unset environment.

All issues for Mac O\+S X were resolved. With the exception of elektrify-\/getenv everything should work now, thanks to Mihael Pranjic\+:


\begin{DoxyItemize}
\item fix mktemp
\item testscripts
\item recursive mutex simplification
\item clearenv ifdef
\end{DoxyItemize}

and thanks to Daniel Bugl\+:


\begin{DoxyItemize}
\item R\+P\+A\+T\+H fixed, so that {\ttfamily kdb} works
\end{DoxyItemize}

furthermore\+:


\begin{DoxyItemize}
\item fix {\ttfamily \+\_\+\+\_\+\+F\+U\+N\+C\+T\+I\+O\+N\+\_\+\+\_\+} to {\ttfamily \+\_\+\+\_\+func\+\_\+\+\_\+} (C99), thanks to Pino Toscano
\item avoid compilation error when J\+N\+I\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+1\+\_\+8 is missing
\item fix (twice, because of an accidental revert) the T\+A\+R\+G\+E\+T\+\_\+\+C\+M\+A\+K\+E\+\_\+\+F\+O\+L\+D\+E\+R, thanks to Pino Toscano
\end{DoxyItemize}

Thanks to Manuel Mausz for to testing and improving portability!

\subsection*{Packaging and Build System}


\begin{DoxyItemize}
\item \href{https://packages.qa.debian.org/e/elektra/news/20150726T155000Z.html}{\tt 0.\+8.\+12 packaged+migrated to testing}, thanks to Pino Toscano
\item fix build with external gtest, thanks to Pino Toscano
\item switch from Find\+Elektra.\+cmake to Elektra\+Config.\+cmake, thanks to Pino Toscano
\item use {\ttfamily cmake\+\_\+parse\+\_\+arguments} instead of {\ttfamily parse\+\_\+arguments}, thanks to Manuel Mausz
\end{DoxyItemize}

\subsection*{Further Fixes}


\begin{DoxyItemize}
\item Key\+::release() will also work when Key holds a null-\/pointer
\item Key\+::get\+Name() avoids std\+::string exception
\item support for copy module was introduced, thanks to Manuel Mausz
\item be more P\+O\+S\+I\+X compatible in shell scripts ({\ttfamily type} to {\ttfamily command -\/v} and avoid {\ttfamily echo -\/e}) thanks to Pino Toscano
\item fix vararg type for K\+E\+Y\+\_\+\+F\+L\+A\+G\+S, thanks to Pino Toscano
\item fix crash of example, thanks to Pino Toscano
\item add proper licence file for Modules (C\+O\+P\+Y\+I\+N\+G-\/\+C\+M\+A\+K\+E-\/\+S\+C\+R\+I\+P\+T\+S), thanks to Pino Toscano
\item fix X\+D\+G resolver issue when no given path in X\+D\+G\+\_\+\+C\+O\+N\+F\+I\+G\+\_\+\+D\+I\+R\+S is valid
\item make dbus example work again
\item fix compiler warnings for gcc and clang
\item fix valgrind suppressions
\item Installation of G\+I binding is fixed, thanks to Dāvis
\item make uninstall is fixed and docu improved
\end{DoxyItemize}

\subsection*{Notes}

There are some misconceptions about Elektra and semi structured data (like X\+M\+L, J\+S\+O\+N). Elektra is a key/value storage, that internally represents everything with key and values. Even though, Elektra can use X\+M\+L and J\+S\+O\+N files elegantly, there are limitations what X\+M\+L and J\+S\+O\+N can represent. X\+M\+L, e.\+g., cannot have holes within its structure, while this is obviously easily possible with key/value. And J\+S\+O\+N, e.\+g., cannot have non-\/array entries within an array. This is a more general issue of that configuration files in general are constrained in what they are able to express. The solution to this problem is validation, i.\+e. keys that does not fit in the underlying format are rejected. Note there is no issue the other way round\+: special characteristics of configuration files can always be captured in Elektra's metadata.

\subsection*{Get It!}

You can download the release from \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.13.tar.gz}{\tt here} and now also \href{https://github.com/ElektraInitiative/ftp/tree/master/releases/elektra-0.8.13.tar.gz}{\tt here on github}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+13.\+tar.\+gz
\item size\+: 2141758
\item md5sum\+: 6e7640338f440e67aba91bd64b64f613
\item sha1\+: ca58524d78e5d39a540a4db83ad527354524db5e
\item sha256\+: f5c672ef9f7826023a577ca8643d0dcf20c3ad85720f36e39f98fe61ffe74637
\end{DoxyItemize}

This release tarball now is also available \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.13.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.13/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt R\+S\+S feed} to always get the release notifications.

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} the issue tracker \href{http://git.libelektra.org/issues}{\tt on github} or by mail \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{http://doc.libelektra.org/news/3c00a5f1-c017-4555-92b5-a2cf6e0803e3.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

Best regards, Markus

\section*{0.\+8.\+12 Release}


\begin{DoxyItemize}
\item guid\+: 98770541-\/32a1-\/486a-\/98a1-\/d02f26afc81a
\item author\+: Markus Raab
\item pub\+Date\+: Sun, 12 Jul 2015 20\+:14\+:09 +0200
\end{DoxyItemize}

Again we managed to release with new features, many build system fixes and also other improvements.

\subsection*{dir namespace}

This namespace adds per-\/project or per-\/directory (hence the name) configurations. E.\+g. think how git works\+: not only /etc and $\sim$ are relevant sources for configuration but also the nearest .git directory.

This technique is, however, much more widely useful than just for git repositories! Nearly every application can benefit from such a per-\/dir configuration. Its almost certain that you have already run into the problem that different projects have different guidelines (e.\+g. coding conventions, languages, whitespace requirements, line breaks, ..). Obviously, thats not a per-\/user configuration and its also not a per-\/file issue (thats how its usually solved today). So in fact you want, e.\+g., your editor to have an additional per-\/project layer to choose between such settings.

The technique is useful for nearly every other tool\+:
\begin{DoxyItemize}
\item different color palettes in gimp, inkscape,..
\item different languages for libreoffice
\item different security settings for media players, interpreters (e.\+g. when in Download folder)
\item per-\/folder .htaccess in apache or other web servers
\item any other per-\/dir configuration you can imagine..
\end{DoxyItemize}

It is simple to use, also for the administrative side. First, change to the folder to your folder (e.\+g. where a project is)\+: \begin{DoxyVerb}cd ~/projects/abc
\end{DoxyVerb}


Then add some user (or system or spec) configuration to have some default. \begin{DoxyVerb}kdb set user/sw/editor/textwidth 72
\end{DoxyVerb}


Then verify that we get this value back when we do a cascading lookup\+: \begin{DoxyVerb}kdb get /sw/editor/textwidth
\end{DoxyVerb}


The default configuration file for the dir-\/namespace is {\ttfamily pwd}/\+K\+D\+B\+\_\+\+D\+B\+\_\+\+D\+I\+R/filename\+: \begin{DoxyVerb}kdb file dir/sw/editor/textwidth
\end{DoxyVerb}



\begin{DoxyItemize}
\item K\+D\+B\+\_\+\+D\+B\+\_\+\+D\+I\+R can be modified at compile-\/time and is {\ttfamily .dir} per default
\item filename can be modified by mounting, see below, and is {\ttfamily default.\+ecf} by default
\end{DoxyItemize}

We assume, that the project abc has the policy to use textwidth 120, so we change the dir-\/configuration\+: \begin{DoxyVerb}kdb set dir/sw/editor/textwidth 120
\end{DoxyVerb}


Now we will get the value 120 in the folder $\sim$/projects/abc and its subdirectories (!), but everywhere else we still get 72\+: \begin{DoxyVerb}kdb get /sw/editor/textwidth
\end{DoxyVerb}


Obviously, that does not only work with kdb, but with every elektrified tool.

\subsubsection*{mount files in dir namespaces}

For cascading mountpoints, the dir name is also automatically mounted, e.\+g.\+: \begin{DoxyVerb}kdb mount editor.ini /sw/editor ini
\end{DoxyVerb}


But its also possible to only mount for the namespace dir if no cascading mountpoint is present already\+: \begin{DoxyVerb}kdb mount app.ini dir/sw/app tcl
\end{DoxyVerb}


In both cases keys below dir/sw/editor would be in the I\+N\+I file {\ttfamily .dir/editor.\+ini} and not in the file {\ttfamily .dir/default.\+ecf}.

\subsubsection*{dir together with spec namespace}

In the project P we had the following issue\+: We needed on a specific computer the configuration in /etc to be used in favour of the dir config.

We could easily solve the problem using the specification\+: \begin{DoxyVerb}kdb setmeta spec/sw/P/current/org/base override/#0 /sw/P/override/org/base
\end{DoxyVerb}


Hence, we could create system/sw/\+P/override/org/base which would be in favour of dir/sw/\+P/current/org/base. So we get system/sw/\+P/override/org/base when we do\+: \begin{DoxyVerb}kdb get /sw/P/current/org/base
\end{DoxyVerb}


Alternatively, one could also use the specification\+: \begin{DoxyVerb}kdb setmeta spec/sw/P/current/org/base namespace/#0 user
kdb setmeta spec/sw/P/current/org/base namespace/#1 system
kdb setmeta spec/sw/P/current/org/base namespace/#2 dir
\end{DoxyVerb}


Which makes dir the namespace with the least priority and system would be preferred. This was less suitable for our purpose, because we needed the override only on one computer. For all other computers we wanted dir to be preferred with only one specification.

\subsubsection*{Conclusion}

The great thing is, that every elektrified application, automatically gets all the mentioned features. Not even a recompilation of the application is necessary.

Especially the specification provides flexibility not present in other configuration systems.

\subsection*{Qt-\/\+Gui 0.\+0.\+7}

Raffael Pancheri again did a lot of stabilizing work\+:
\begin{DoxyItemize}
\item show errormessage on exception when starting gui
\item Correctly update key\+Area\+View property when selecting item in Tree\+View
\item Fix crash when creating key in Mounting\+Wizard
\item Remove information on successful export
\item Show error dialog on failed import
\item Remove namefilters (every syntax can have any file extension)
\item other namespaces (including dir) are included
\end{DoxyItemize}

The G\+U\+I can be handy for many purposes, e.\+g. we use it already as xml and json editor. Note that there are still \href{http://git.libelektra.org/issues}{\tt some bugs}.

\subsection*{Other fixes}


\begin{DoxyItemize}
\item constants now additionally gives information about S\+P\+E\+C and D\+I\+R.
\item Doku about C\+Make variables {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+D\+E\+B\+U\+G\+\_\+\+B\+U\+I\+L\+D} and {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+V\+E\+R\+B\+O\+S\+E\+\_\+\+B\+U\+I\+L\+D} fixed, thanks to Kurt Micheli
\item Fixed compilation of {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+D\+E\+B\+U\+G\+\_\+\+B\+U\+I\+L\+D} and {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+V\+E\+R\+B\+O\+S\+E\+\_\+\+B\+U\+I\+L\+D}, thanks to Manuel Mausz
\item Example with error handling added, thanks to Kurt Micheli
\item Add design decision about global plugins
\item Split dependencies document to individual R\+E\+A\+D\+M\+E.\+md, thanks to Ian Donnelly
\item Fix nearly all compilation warnings of S\+W\+I\+G, thanks to Manuel Mausz
\item C\+Make\+: Fix gtest to be build if {\ttfamily B\+U\+I\+L\+D\+\_\+\+T\+E\+S\+T\+I\+N\+G} activated, but not {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+T\+E\+S\+T\+I\+N\+G}
\item C\+Make\+: Allow compilation without B\+U\+I\+L\+D\+\_\+\+S\+T\+A\+T\+I\+C
\item Explain compilation options more, thanks to Kai-\/\+Uwe Behrmann for asking the question
\item C\+Make\+: always build examples, allow one to only build documentation
\item add common header file for C++ plugins (used by plugins struct and type)
\item fix compilation of race tool under o\+S-\/11.\+4 thanks to Kai-\/\+Uwe Behrmann
\item C\+Make\+: find python3 correctly
\item C\+Make\+: fix B\+U\+I\+L\+D\+\_\+\+S\+H\+A\+R\+E\+D\+\_\+\+L\+I\+B\+S
\item Doxygen\+: remove {\ttfamily H\+T\+M\+L\+\_\+\+T\+I\+M\+E\+S\+T\+A\+M\+P} to make build reproduceable
\item Doxygen\+: rewrite of main page+add info about all five namespaces
\item C\+Make\+: allow one to use qt-\/gui with qt built with -\/reduce-\/relocations
\item fix kdb ls, get to list warnings during open
\item during \hyperlink{group__kdb_ga6808defe5870f328dd17910aacbdc6ca}{kdb\+Open()} use Configfile\+: to state phase
\item add -\/f option to kdb check+improve docu
\item improve readability of warning output
\item run\+\_\+all always uses dump for backups
\item line plugin roundtrips correctly
\item untypical resolvers have their non-\/existant filename handled correctly + sync ignored them correctly
\item cmake-\/3.\+0 fixes
\item cascading merging, a big thanks to Felix Berlakovich for the last minute fix
\end{DoxyItemize}

\subsection*{Compatibility}

As always, the A\+P\+I and A\+P\+I is fully compatible. Because nothing was added, its even possible to link against an older version of Elektra (if compiled against 0.\+8.\+12).

In plugins some small changes may effect compatibility\+:
\begin{DoxyItemize}
\item in rename the handling of parent key is different (see \#206)
\item resolving of spec absolute and relative paths are no more handled identical. Instead absolute paths will be searched absolutely, while relatives are below K\+D\+B\+\_\+\+D\+B\+\_\+\+S\+P\+E\+C (as before). This behaviour is consistent to the behaviour of the other namespaces.
\end{DoxyItemize}

These two points are also the only unit tests that fail when Elektra 0.\+8.\+12 is used with 0.\+8.\+11 unit tests.

\subsection*{Build Server}


\begin{DoxyItemize}
\item special github command to build bindings \char`\"{}jenkins build bindings please\char`\"{}, thanks to Manuel Mausz
\item open build service update For \href{https://build.opensuse.org/package/show/home:bekun:devel/elektra}{\tt Open\+S\+U\+S\+E, Cent\+O\+S, Fedora, R\+H\+E\+L and S\+L\+E} Kai-\/\+Uwe Behrmann kindly provides packages \href{http://software.opensuse.org/download.html?project=home%3Abekun%3Adevel&package=libelektra4}{\tt for download}.
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.12.tar.gz}{\tt here} and now also \href{https://github.com/ElektraInitiative/ftp/tree/master/releases/elektra-0.8.12.tar.gz}{\tt here on github}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+12.\+tar.\+gz
\item size\+: 2102450
\item md5sum\+: a40a33ae6661ebfa096378f0986ede6c
\item sha1\+: 3594ef58b6e3b0ffa9589d787679b6e739fbb0dd
\item sha256\+: 562432bea9455a61ff6e6b3263078ea9b26bef2ed177a04b5f9b181d605bc021
\end{DoxyItemize}

This release tarball now is also available \href{http://www.libelektra.org/ftp/elektra/releases/elektra-0.8.12.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.12/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt R\+S\+S feed} to always get the release notifications.

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} the issue tracker \href{http://git.libelektra.org/issues}{\tt on github} or by mail \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{http://doc.libelektra.org/news/98770541-32a1-486a-98a1-d02f26afc81a.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://libelektra.org}{\tt http\+://libelektra.\+org}

Best regards, Markus

\section*{0.\+8.\+11 Release}


\begin{DoxyItemize}
\item guid\+: 7d4647d4-\/4131-\/411e-\/9c2a-\/2aca39446e18
\item author\+: Markus Raab
\item pub\+Date\+: Fri, 03 Apr 2015 02\+:39\+:37 +0200
\end{DoxyItemize}

From the beginning of the Elektra Initiative, Elektra aimed at avoiding hard-\/coded information in the application and to make the application's configuration more transparent. While avoiding any paths to files was reality from the first released Elektra version, now also hard-\/coding default values, fallback mechanisms and even Elektra's paths to keys can be avoided.

How does that work?

Elektra 0.\+8.\+11 introduces a so called specification for the application's configuration. It is located below its own namespace {\ttfamily spec} (next to user and system).

Once the base path is known, the user can find out all Elektra paths used by an application, using\+: \begin{DoxyVerb}kdb ls spec/basepath
\end{DoxyVerb}


Keys in {\ttfamily spec} allow us to specify which keys are read by the application, which fallback it might have and which is the default value using meta data. The implementation of these features happened in {\ttfamily ks\+Lookup}. When cascading keys (those starting with {\ttfamily /}) are used following features are now available (in the meta data of respective {\ttfamily spec}-\/keys)\+:


\begin{DoxyItemize}
\item {\ttfamily override/\#}\+: use these keys {\itshape in favour} of the key itself (note that {\ttfamily \#} is the syntax for arrays, e.\+g. {\ttfamily \#0} for the first element, {\ttfamily \#\+\_\+10} for the 11th and so on)
\item {\ttfamily namespace/\#}\+: instead of using all namespaces in the predefined order, one can specify which namespaces should be searched in which order
\item {\ttfamily fallback/\#}\+: when no key was found in any of the (specified) namespaces the {\ttfamily fallback}-\/keys will be searched
\item {\ttfamily default}\+: this value will be used if nothing else was found
\end{DoxyItemize}

This technique does not only give you the obvious advantages, but also provides complete transparency how a program will fetch a configuration value. In practice that means that\+: \begin{DoxyVerb}kdb get "/sw/app/#0/promise"
\end{DoxyVerb}


will give you the {\itshape exact same value} as the application uses when it lookups the key {\ttfamily promise}. Many {\ttfamily if}s and hardcoded values are avoided, we simply fetch and lookup the configuration by following code\+: \begin{DoxyVerb}Key *parentKey = keyNew("/sw/app/#0", KEY_CASCADING_NAME, KEY_END);
kdbGet(kdb, ks, parentKey);

ksLookupByName(ks, "/sw/app/#0/promise", 0);
\end{DoxyVerb}


We see in that example that only Elektra paths are hardcoded in the application. But those can be found out easily, completely without looking in the source code. The technique is simple\+: append a logger plugin and the K\+D\+B base path is printed to\+:


\begin{DoxyItemize}
\item stdout in the case of the plugin tracer
\item syslog in the case of the plugin syslog
\item journald in the case of the plugin journald
\end{DoxyItemize}

What we do not see in the program above are the default values and fallbacks. They are only present in the so specification (namespace {\ttfamily spec}). Luckily, the specification are key/value pairs, too. So we do not have to learn something new, e.\+g. using the ni plugin we can specify\+: \begin{DoxyVerb}[promise]
default=20
fallback/#0=/somewhere/else
namespace/#0=user
\end{DoxyVerb}


1.) When this file is mounted to {\ttfamily spec/sw/app/\#0} we specify, that for the key {\ttfamily /sw/app/\#0/promise} only the namespace {\ttfamily user} should be used. 2.) If this key was not found, but {\ttfamily /somewhere/else} is present, we will use this key instead. The {\ttfamily fallback} technique is very powerful\+: it allows us to have (recursive) links between applications. In the example above, the application is tricked in receiving e.\+g. the key {\ttfamily user/somewhere/else} when {\ttfamily promise} was not available. 3.) The value {\ttfamily 20} will be used as default, even if no configuration file is found.

Note that the fallback, override and cascading works on {\itshape key level}, and not like most other systems have implemented, on configuration {\itshape file level}.

\subsection*{Namespaces}

The specification gives the namespaces clearer semantics and purpose. Key names starting with a namespace are connected to a configuration source. E.\+g. keys starting with\+:


\begin{DoxyItemize}
\item {\ttfamily user} are keys from the home directory of the current user
\item {\ttfamily system} are keys from the {\ttfamily /etc} directory of the current system
\item {\ttfamily spec} are keys from the specification directory (configurable with K\+D\+B\+\_\+\+D\+B\+\_\+\+S\+P\+E\+C, typically {\ttfamily /usr/share/elektra/specification})
\end{DoxyItemize}

When a key name starts with an {\ttfamily /} it means that it is looked up by specification. Such a cascading key is not really present in the keyset (except when a default value was found). They are neither received nor stored by {\ttfamily kdb\+Get} and {\ttfamily kdb\+Set}.

Applications shall only lookup using cascading keys (starting with {\ttfamily /}). If no specification is present, cascading of all namespaces is used as before.

Elektra will (always) continue to work for applications that do not have a specification. We strongly encourage you, however, to write such a specification, because\+:


\begin{DoxyItemize}
\item it helps the administrator to know which keys exist
\item it documents the keys (including lookup behaviour and default value)
\item and many more advantages to come in future releases..
\end{DoxyItemize}

For a tutorial how to actually elektrify an application and for more background to Elektra, https\+://github.com/\+Elektra\+Initiative/libelektra/blob/master/doc/tutorials/application-\/integration.\+md \char`\"{}read this document\char`\"{}.

For a full list of proposed and implemented meta-\/data, https\+://github.com/\+Elektra\+Initiative/libelektra/blob/master/doc/help/elektra-\/namespaces.\+md \char`\"{}read this document\char`\"{}.

\subsection*{Simplification in the merging framework}

As it turned out the concept of very granular merge strategies was hard to understand for users of the three-\/way merging framework that emerged in the last year's G\+So\+C. While this granularity is desirable for flexibility, we additionally wanted something easy to use. For that reason merge configurations were introduced. These are simply preconfigured configurations for a merger that arrange required strategies for the most common merging scenarios. Especially they make sure that meta merging is handled correctly.

Have a look at the changes in the example \href{https://github.com/ElektraInitiative/libelektra/blob/master/src/libs/tools/examples/merging.cpp}{\tt /src/libs/tools/examples/merging.cpp} for an glimpse of the simplifications.

A big thanks to Felix Berlakovich!

The header files will be installed to /usr/include/elektra/merging, but they are subject to be changed in the future (e.\+g. as they did in this release).

From the merging improvements some minor incompatibility happened in {\ttfamily kdb import}. Not all merging strategies that worked in 0.\+8.\+10 work anymore. Luckily, now its much simpler to choose the strategies.

\subsection*{A\+P\+I}

The main A\+P\+I kdb.\+h has two added lines. First a new method was added\+: \begin{DoxyVerb}ssize_t keyAddName(Key *key, const char *addName);
\end{DoxyVerb}


This method is already used heavily in many parts. Contrary to {\ttfamily key\+Set\+Base\+Name} and {\ttfamily key\+Add\+Base\+Name} it allows us to extend the path with more than one Element at once, i.\+e. {\ttfamily /} are not escaped.

The other new line is the new enum value {\ttfamily K\+E\+Y\+\_\+\+F\+L\+A\+G\+S}. This feature allows bindings to use any flags in key\+New without actually building up variable argument lists. (Thanks to Manuel Mausz)

As always, A\+P\+I+\+A\+B\+I is stable and compatible.

\subsection*{Proposed}

Many new functions are proposed and can be found in \href{http://doc.libelektra.org/api/0.8.11/html}{\tt the doxygen docu} and in \href{https://github.com/ElektraInitiative/libelektra/blob/master/src/include/kdbproposal.h}{\tt kdbproposal.\+h}.

Noteworthy is the method {\ttfamily key\+Get\+Namespace} which allows us to query all namespaces. Since this release we changed every occurrence of namespaces (except documentation) with switch-\/statements around {\ttfamily key\+Get\+Namespace}. This allows us to add new more namespaces more easily. (Although its currently not planned to add further namespaces.)

Finally, a bunch of new lookup options were added, which might not be useful for the public A\+P\+I (they allow us to disable the specification-\/aware features mentioned in the beginning).

\subsection*{Obsolete and removed concepts}

\subsubsection*{umount}

The concept that backends have a name (other than their mountpoint) is now gone. Backends will simply be named with their escaped mountpath below system/elektra/mountpoints without any confusing additional name.

Unmounting still works with the mountpath.

Removing this concept makes Elektra easier to understand and it also removes some bugs. E.\+g. having mountpoints which do not differ except having a {\ttfamily \+\_\+} instead of a {\ttfamily /} would have caused problems with the automatic name generation of Elektra 0.\+8.\+10.

Old mountpoints need to be removed with their 0.\+8.\+10 name ({\ttfamily \+\_\+} instead of {\ttfamily /}).

\subsubsection*{directory keys}

Additionally, the so called directory keys were also removed. Elektra was and still is completely key/value based. The {\ttfamily /} separator is only used for mountpoints.

\subsubsection*{fstab}

The plugin fstab is also improved\+: Slashes in mountpoints are escaped properly with the internal escaping engine of \hyperlink{group__keyname_gaa942091fc4bd5c2699e49ddc50829524}{key\+Add\+Base\+Name()} (i.\+e. without any problematic {\ttfamily /} replacements).

\subsubsection*{dirname}

get\+Dir\+Name() was removed from C++, gi-\/lua, gi-\/python2, gi-\/python3, swig-\/lua, swig-\/python2 and swig-\/python3. It was never present in C and did not fit well with \hyperlink{group__keyname_gaaff35e7ca8af5560c47e662ceb9465f5}{key\+Base\+Name()} (which returns an unescaped name, which is not possible for the dirname). (Thanks to Manuel Mausz)

\subsubsection*{invalid parent names}

While empty (=invalid) names are still accepted as parent\+Name to {\ttfamily kdb\+Get} and {\ttfamily kdb\+Set} for compatibility reasons, but the parent\+Key \begin{DoxyVerb}Key *parentKey = keyNew("/", KEY_END);
\end{DoxyVerb}


should be used instead (if you want to get or store everything). They have identical behaviour, except that invalid names (that cannot be distinguished from empty names) will produce a warning. In the next major version invalid parent\+Names will produce an error.

\subsection*{K\+D\+B Behaviour}

It is now enforced that before a \hyperlink{group__kdb_ga11436b058408f83d303ca5e996832bcf}{kdb\+Set()} on a specific path a \hyperlink{group__kdb_ga28e385fd9cb7ccfe0b2f1ed2f62453a1}{kdb\+Get()} on that path needs to be done. This was always documented that way and is the only way to correctly detect conflicts, updates and missing configuration files. Error \#107 will be reported on violations.

Additionally, the handling with missing files was improved. Empty keysets for a mountpoint now will remove a file. Such an empty file is always up-\/to-\/date. Removing files has the same atomicity guarantees as other operations.

The concurrency behaviour is at a very high level\+: as expected many processes with many threads can each concurrently write to the key database, without any inconsistent states\+: This is noted here because Elektra works on standard configuration files without any guarding processes.

Filesystem problems, e.\+g. permission, now always lead to the same errors (\#9, \#75, \#109, \#110), regardless of the storage plugin.

\subsection*{Qt-\/\+Gui 0.\+0.\+6}

Raffael Pancheri was very busy and did a lot of stabilizing work\+:


\begin{DoxyItemize}
\item Added markdown converter functionality for plugin documentation
\item Integrated help (Whats this?)
\item Added credits to other authors
\item do not show storage/resolver plugins if a plugin of that kind has been selected
\item added menu to newkey toolbar button to allow new array entries
\item added option to include a configuration keyset when adding a plugin
\item show included keys when creating the plugin configuration
\item Added all storageplugins to namefilters
\item Reimplement Error\+Dialog
\item Added undo/redo of all commands and correctly update the view
\item modified Tool\+Tip size
\item Color animation on search results
\item Refactored Buttons to accept shortcuts
\item Updated Translations
\item Colors are now customizeable
\item Many small fixes
\end{DoxyItemize}

The gui is already used and the remaining small bugs (see github) are going to be fixed soon. One of the highlights is undo for nearly every action, so nothing prevents you from trying it out!

A huge thanks to Raffael Pancheri for his contributions. His thesis can be found at \href{http://www.libelektra.org/ftp/elektra/pancheri2015gui.pdf}{\tt here}.

\subsection*{Bug fixing}


\begin{DoxyItemize}
\item fix issues with escaped backslashes in front of slashes
\item atomic commits across namespaces work again
\item memleak on Read\+File error in ni plugin
\item {\ttfamily kdb getmeta} reports errorcode if key, but no meta was found
\item {\ttfamily ks\+Lookup} now will also work if a key of the keyset is used as search-\/key (aliasing problem fixed by dup() on namelock)
\item resolver regex does not match to wrongly written plugins
\item jna plugin is now named libelektra-\/0.\+8.\+11.\+jar, with proper symlink to current version, for every C\+Make version
\item fix bashism (\$\+R\+A\+N\+D\+O\+M)
\item new keys are correctly renamed, fixes Open\+I\+C\+C (thanks to Felix Berlakovich)
\item comments in host keys are correctly restored (thanks to Felix Berlakovich)
\item output stream in type checking is no longer locale dependent (thanks to Manuel Mausz)
\item cmake uninstall works again
\item simplify C\+M\+A\+K\+E\+\_\+\+D\+L\+\_\+\+L\+I\+B\+S (thanks to Manuel Mausz)
\end{DoxyItemize}

\subsection*{Further gems}


\begin{DoxyItemize}
\item Examples were improved, added (e.\+g. cascading, namespace) and included in \href{http://doc.libelektra.org/api/0.8.11/html}{\tt Doxygen docu}.
\item \href{https://github.com/ElektraInitiative/libelektra/blob/master/doc/METADATA.ini}{\tt M\+E\+T\+A\+D\+A\+T\+A specification} was nearly completely rewritten (thanks to Felix Berlakovich)
\item benchmarks were greatly enhanced (runtime+heap profiling), and some important performance improvements were done
\item All plugins now use the cmake function {\ttfamily add\+\_\+plugin} (thanks to Ian Donnelly for most of the work)
\item data directory (keysets as C-\/files) is now shared between different kinds of test suites.
\item many more tests were added, e.\+g. distribution tests, K\+D\+B A\+P\+I tests; and allocation tests were readded
\item now all kdb commands accept cascading keys.
\item More compiler warning-\/flags are added and many warnings are fixed
\item cleanup of old unused {\ttfamily key\+Name} methods
\item The key {\ttfamily system/elektra/mountpoints} itself was always created and a left-\/over on a freshly installed system after the unit tests run the first time. The physical presence of the key is now irrelevant and it won't be created automatically.
\item Bash completion was greatly improved (thanks to Manuel Mausz)
\item Configure scripts were refactored and are now much shorter (thanks to Manuel Mausz)
\item New Debian build agents were added that are magnitutes faster than the old ones (a big thanks to Manuel Mausz)
\item Many K\+D\+B tests, written in C, lua and python were added (thanks to Manuel Mausz)
\item S\+W\+I\+G3 is preferred when available
\item add the plugin counter that counts how often the methods of a plugin are called
\item {\ttfamily kdb list-\/tools} is now advertised in {\ttfamily kdb -\/-\/help}
\item Mac O\+S X support was greatly improved, thanks to Peter Nirschl and Kai-\/\+Uwe Behrmann. The feature rich resolver, now also works for Mac O\+S X. wresolver is now only needed for mingw.
\item Elektra still compiles with gcc (also mingw variants), icc and clang.
\end{DoxyItemize}

\subsection*{Further Notes}

With 471 files changed, 27978 insertions(+), 11512 deletions(-\/) this release is huge. With 773 commits over four month much more changes happened which did not find their place in these release notes, even though the notes are much less detailed than usual.

Thanks for all contributions that are not enlisted here!

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} or \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\subsection*{Get It!}

You can download the release from \href{http://www.markus-raab.org/ftp/elektra/releases/elektra-0.8.11.tar.gz}{\tt here}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+11.\+tar.\+gz
\item size\+: 2022129
\item md5sum\+: c53a8151aab760851842d745e904a4f8
\item sha1\+: d7929d17d1a6529089d156f1910d87f678b84998
\item sha256\+: c20fefcfba62cc906228f9b55d1f411ef8f884ff9d75774a0dd4f8eb8f5b48f6
\end{DoxyItemize}

This release tarball now is also available \href{http://www.markus-raab.org/ftp/elektra/releases/elektra-0.8.11.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.11/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt new R\+S\+S feed} to always get the release notifications.

\href{http://doc.libelektra.org/news/7d4647d4-4131-411e-9c2a-2aca39446e18.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://www.libelektra.org}{\tt http\+://www.\+libelektra.\+org}

Best regards, Markus

\section*{0.\+8.\+10 Release}


\begin{DoxyItemize}
\item guid\+: 6ce57ecf-\/420a-\/4a31-\/821e-\/1c5fe5532eb4
\item author\+: Markus Raab
\item pub\+Date\+: Tue, 02 Dec 2014 18\+:37\+:51 +0100
\end{DoxyItemize}

Hello,

we are delighted to announce our latest feature release providing major updates in\+:


\begin{DoxyItemize}
\item compatibility with standards,
\item tooling,
\item plugins (hosts, rename),
\item Qt-\/\+Gui and
\item a new Java binding
\end{DoxyItemize}

\subsection*{X\+D\+G Compatibility}

Elektra now is \href{http://standards.freedesktop.org/basedir-spec/basedir-spec-0.8.html}{\tt fully X\+D\+G 0.\+8} compliant. Following changes were necessary\+:


\begin{DoxyItemize}
\item newly created configuration files for user/ now have the permissions 0600
\item newly created configuration directories for user/ now have the permissions 0700
\item existing configuration files will retain their permissions.
\item The default path to store user configuration is now $\sim$/.config
\item A new resolver variant x (for user and system) is introduced
\begin{DoxyItemize}
\item implements handling of X\+D\+G environment variables
\item ignores empty dirs and absolute paths in envvar
\end{DoxyItemize}
\item add new shell based test suite for (xdg)-\/resolver
\end{DoxyItemize}

For example, we could use resolver\+\_\+fm\+\_\+xhp\+\_\+x\+: \begin{DoxyVerb}kdb mount --resolver=resolver_fm_xhp_x file.dump /example dump
kdb file user/example
kdb file system/example
\end{DoxyVerb}


Will show you that for both user+system the resolver respects X\+D\+G environment variables, e.\+g. above lines will print\+: \begin{DoxyVerb}/home/m/.config/file.dump
/etc/xdg/file.dump
\end{DoxyVerb}


Of course, any attempts to get and set keys below user/example and system/example will also be in these files.

The letters after \+\_\+ describe the variant of the resolver\+:


\begin{DoxyItemize}
\item f .. file based locking
\item m .. mutex based locking (for multiple K\+D\+B per process)
\item for user configuration (after next \+\_\+)
\begin{DoxyItemize}
\item x .. first check X\+D\+G\+\_\+\+C\+O\+N\+F\+I\+G\+\_\+\+H\+O\+M\+E environment
\item h .. then check H\+O\+M\+E environment
\item p .. then fall back to passwd
\end{DoxyItemize}
\item for system configuration (after next \+\_\+)
\begin{DoxyItemize}
\item x .. check all paths in X\+D\+G\+\_\+\+C\+O\+N\+F\+I\+G\+\_\+\+D\+I\+R\+S and falls back to /etc/xdg
\end{DoxyItemize}
\end{DoxyItemize}

A lot of such resolver variants are added when -\/\+D\+P\+L\+U\+G\+I\+N\+S=A\+L\+L is used. Of course you can create new variants with different behaviour by adding them to P\+L\+U\+G\+I\+N\+S.

To make your application (that uses Elektra) X\+D\+G aware, you have nothing to do\+: you get it to free. Make sure to always use cascading lookup. Additionally, an X\+D\+G conforming application should not write system/ keys.

\subsection*{Open\+I\+C\+C Compatibility}

Based on that, Elektra now also implements the draft for \href{http://www.openicc.info/wiki/index.php?title=OpenICC_Configuration_0.1}{\tt the Open\+I\+C\+C specification}.

The mount command looks like quite complicated, but it consists of simple parts\+: \begin{DoxyVerb}kdb mount --resolver=resolver_fm_xhp_x \
  color/settings/openicc-devices.json /org/freedesktop/openicc \
  yajl rename cut=org/freedesktop/openicc
\end{DoxyVerb}


We already know the first two lines\+: we use the X\+D\+G resolver already introduced above. Only the file name and the path where it should be mounted differs.

The plugin yajl is a storage plugin that reads/writes json. The plugin rename was the missing link to support Open\+I\+C\+C (thanks to Felix Berlakovich for closing this gap). It is needed, because every Open\+I\+C\+C file starts like this\+: \begin{DoxyVerb}{ "org": { "freedesktop": { "openicc": {
\end{DoxyVerb}


Because the backend is mounted at /org/freedesktop/openicc, it would lead to keys below /org/freedesktop/openicc/org/freedesktop/openicc which we obviously do not want. So we simply get rid of the common prefix by cutting it out using the rename plugin.

Of course this renaming functionality can be used in every situation and is not limited to Open\+I\+C\+C.

\subsection*{Tools}

A large number of old and new tools were added, mostly for convenience e.\+g.\+: \begin{DoxyVerb}kdb mount-openicc
\end{DoxyVerb}


saves you from writing the long mount command we had in the previous section.

To get a list of all tools that are installed, now the command (which is also an external tool and as such currently not displayed in kdb --help)\+: \begin{DoxyVerb}kdb list-tools
\end{DoxyVerb}


is available. Do not be surprised\+: on typical installations this will be a large list. You can run each of these tools by using kdb $<$command$>$. Most of the tools, however, are part of the test suite, which you can run using\+: \begin{DoxyVerb}kdb run_all
\end{DoxyVerb}


Other tools are \char`\"{}old friends\char`\"{}, e.\+g. convert-\/fstab written in 2006 by Avi Alkalay still works\+: \begin{DoxyVerb}kdb convert-fstab | kdb import system/filesystems xmltool
\end{DoxyVerb}


It will parse your /etc/fstab and generate a X\+M\+L. This X\+M\+L then can be imported. Other convert tools directly produce kdb commands, though.

kdb now uses K\+D\+B itself for many commands\+:


\begin{DoxyItemize}
\item /sw/kdb/current/resolver .. You always want a different default resolver than that was compiled in as default when mounting backends?
\item /sw/kdb/current/format .. If you are annoyed by the default format dump format for import/export.
\item /sw/kdb/current/plugins .. If you always forget to add some plugins when mounting something.
\end{DoxyItemize}

By default the plugin \char`\"{}sync\char`\"{} is added automatically (it makes sure that fsync is executed on config files, the directory is already done by the resolver), you should not remove it from /sw/kdb/current/plugins otherwise the next mount command will not add it. To preserve it use a space separated list, e.\+g.\+: \begin{DoxyVerb}kdb set user/sw/kdb/current/plugins "sync syslog"
\end{DoxyVerb}


Last, but not least, kdb get now supports cascading get\+: \begin{DoxyVerb}kdb get /sw/kdb/current/plugins
\end{DoxyVerb}


This feature allows you to see the configuration exactly as seen by the application.

Other options\+:


\begin{DoxyItemize}
\item -\/123 options for hiding nth column in {\ttfamily kdb mount}
\item hide warnings during script usage of {\ttfamily kdb mount}
\item -\/0 option accepted in some tools (null termination)
\item Mount got a new -\/c option for backend configuration. For example -\/c cut=org/freedesktop/openicc would be the parameter cut for all plugins. Have a look at \#146 if you want to use it.
\end{DoxyItemize}

\subsection*{Compatibility}

The core A\+P\+I (kdb.\+h), as always, stayed A\+P\+I/\+A\+B\+I compatible. The only changes in kdb.\+h is the addition of K\+E\+Y\+\_\+\+C\+A\+S\+C\+A\+D\+I\+N\+G\+\_\+\+N\+A\+M\+E and K\+E\+Y\+\_\+\+M\+E\+T\+A\+\_\+\+N\+A\+M\+E. So applications compiled against 0.\+8.\+10 and using these constants, will not work with Elektra 0.\+8.\+9.

The constants allow us to create following kinds of keys\+:


\begin{DoxyItemize}
\item empty names\+: this was always possible, because invalid names (including empty names) did not cause key\+New to abort
\item meta names\+: this is a new feature that allows us to compare key names with meta keys
\item cascading names\+: names starting with / have the special meaning that they do not specify which namespace they have. When such names are used for
\begin{DoxyItemize}
\item \hyperlink{group__kdb_ga28e385fd9cb7ccfe0b2f1ed2f62453a1}{kdb\+Get()} and \hyperlink{group__kdb_ga11436b058408f83d303ca5e996832bcf}{kdb\+Set()} keys are retrieved from all namespaces
\item \hyperlink{group__keyset_gaa34fc43a081e6b01e4120daa6c112004}{ks\+Lookup()} keys are searched in all namespaces
\item \hyperlink{group__keyset_gad2e30fb6d4739d917c5abb2ac2f9c1a1}{ks\+Lookup\+By\+Name()} is now just a wrapper for \hyperlink{group__keyset_gaa34fc43a081e6b01e4120daa6c112004}{ks\+Lookup()}. The method does not do much except creating a key and passing them to \hyperlink{group__keyset_gaa34fc43a081e6b01e4120daa6c112004}{ks\+Lookup()}.
\end{DoxyItemize}
\end{DoxyItemize}

Usage in C is\+: \begin{DoxyVerb}Key *c = keyNew("/org/freedesktop", KEY_CASCADING_NAME, KEY_END);
Key *m = keyNew("comment/#0", KEY_META_NAME, KEY_END);
\end{DoxyVerb}


The same functionality exists, of course, in available in all bindings, too.

Changes in non-\/core A\+P\+I are\+:


\begin{DoxyItemize}
\item xmltool now does not output default (unchanged) uid,gid and mode
\item ks\+Lookup\+By\+Spec from \hyperlink{kdbproposal_8h}{kdbproposal.\+h} was removed, is now integrated into ks\+Lookup
\item extension key\+Name\+Get\+Namespace was removed
\item the hosts comment format has changed
\item the default resolver has changed (uses passwd)
\item \hyperlink{classkdb_1_1tools_1_1Backend_a1650b149ebf313ee8cd3472247212263}{kdb\+::tools\+::\+Backend\+::\+Backend} constructor, try\+Plugin and add\+Plugin have changed\+:
\begin{DoxyItemize}
\item mountname is now automatically calculated
\item add\+Plugin allows us to add a Key\+Set to validate plugins with different contracts correctly
\end{DoxyItemize}
\item C++ binding now throws std\+::bad\+\_\+alloc on allocation problems (and not Invalid\+Name)
\end{DoxyItemize}

\subsection*{C\+Make}

It is now possible to remove a plugin/binding/tools by prefixing a name with \char`\"{}-\/\char`\"{}. The new \char`\"{}-\/element\char`\"{} syntax is accepted by T\+O\+O\+L\+S, B\+I\+N\+D\+I\+N\+G\+S and P\+L\+U\+G\+I\+N\+S. It is very handy in combination with A\+L\+L, e.\+g.\+: \begin{DoxyVerb}-DPLUGINS="ALL;-xmltool"
\end{DoxyVerb}


will include all plugins except xmltool.

\subsection*{Improved comments}

Comment preserving was improved a lot. Especially, the hosts plugin was rewritten completely. Now multiple different comment styles can be intermixed without losing information. E.\+g. some I\+N\+I formats support both ; and \# for comments. With the new comments it is possible to preserve that information and even better\+: applications can iterate over that information (meta data).

To mount the new hosts plugin use (if you already have mounted it, you have nothing to do)\+: \begin{DoxyVerb}kdb mount /etc/hosts system/hosts hosts
\end{DoxyVerb}


The hosts plugin now seperates from ipv4 and ipv6 which makes the host names canonical again, e.\+g.\+: \begin{DoxyVerb}kdb get system/hosts/ipv4/localhost
kdb get system/hosts/ipv6/localhost
\end{DoxyVerb}


To access the inline-\/comment, use\+: \begin{DoxyVerb}kdb getmeta system/hosts/ipv4/localhost "comment/#0"
\end{DoxyVerb}


For other meta information, see\+: \begin{DoxyVerb}kdb lsmeta system/hosts/ipv4/localhost
\end{DoxyVerb}


Additionally, a small A\+P\+I for specific meta-\/data operations emerges. These operations will be moved to a separate library and will not stay in Elektra's core library.

\subsection*{Proposal}


\begin{DoxyItemize}
\item lookup options\+:
\begin{DoxyItemize}
\item K\+D\+B\+\_\+\+O\+\_\+\+S\+P\+E\+C uses the lookup key as specification
\item K\+D\+B\+\_\+\+O\+\_\+\+C\+R\+E\+A\+T\+E creates a key if it could not be found
\end{DoxyItemize}
\item elektra\+Key\+Get\+Meta\+Key\+Set creates a Key\+Set from meta data
\item elektra\+Ks\+Filter allows us to filter a Key\+Set arbitrarily (not only key\+Is\+Below in case of ks\+Cut). It reintroduces more functional programming.
\item key\+Get\+Namespace was reintroduced. In one of the next versions of Elektra we will introduce new namespaces. key\+Get\+Namespace allows the compiler to output a warning when some namespaces are not handled in your C/\+C++ code.
\end{DoxyItemize}

\subsection*{Java binding}

Elektra now fully supports applications written in Java and also Plugins written in the same language.

The \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/bindings/jna}{\tt new binding was developed using jna.} For the \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/plugins/jni}{\tt plugin interface J\+N\+I} was used. We developed already \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/bindings/jna/elektra/plugin}{\tt some plugins}.

\subsection*{Qt-\/\+Gui}

Raffael Pancheri released the version 0.\+0.\+2 of the Qt-\/\+Gui\+:


\begin{DoxyItemize}
\item added Backend Wizard for mounting
\item user can hover over Tree\+View items and quickly see keyname, keyvalue and metakeys
\item it is now easily possible to create and edit arrays
\item added header to Meta\+Area for better clarity
\item many small layout and view update fixes
\end{DoxyItemize}

\subsection*{Further stuff and small fixes}


\begin{DoxyItemize}
\item Two new error/warnings information\+: mountpoint and configfile. It is added automatically and all tools will print it.
\item C++ I/\+O for key(s) now allows null terminator next to new-\/line terminator
\item fix error plugin\+: now use on\+\_\+open/trigger\+\_\+warnings to be consistent
\item fix metaset\+: now correctly append new key
\item arrays are also available when compiled with mingw (but tests still have to be excluded for successful compilation)
\item fix \#136
\item fix long help text in {\ttfamily kdb check}
\item signed release tags are now used
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{http://www.markus-raab.org/ftp/elektra/releases/elektra-0.8.10.tar.gz}{\tt here}


\begin{DoxyItemize}
\item size\+: 1915277
\item md5sum\+: 2b16a4b555bc187562a0b38919d822a1
\item sha1\+: 08b1d0139fc5eb0d03c52408478e68b91b1825dc
\item sha256\+: 526e2ed61e87d89966eb36ddad78d8139b976e01ce18aab340d8a1df47132355
\end{DoxyItemize}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.10/html/}{\tt here}

\subsection*{Stay tuned!}

Subscribe to the \href{http://doc.libelektra.org/news/feed.rss}{\tt new R\+S\+S feed} to always get the release notifications.

\href{http://doc.libelektra.org/news/6ce57ecf-420a-4a31-821e-1c5fe5532eb4.html}{\tt Permalink to this N\+E\+W\+S entry}

For more information, see \href{http://www.libelektra.org}{\tt http\+://www.\+libelektra.\+org}

Best regards, Markus

\section*{0.\+8.\+9 Release}


\begin{DoxyItemize}
\item guid\+: 38640673-\/3e07-\/4cff-\/9647-\/f6bdd89b1b08
\item author\+: Markus Raab
\item pub\+Date\+: Tue, 04 Nov 2014 10\+:48\+:14 +0100
\end{DoxyItemize}

Again we managed to do an amazing feature release in just two month. In 416 commits we modified 393 files with 23462 insertions(+) and 9046 deletions(-\/).

\subsection*{Most awaited}

The most awaited feature in this release is certainly the {\itshape qt-\/gui} developed by Raffael Pancheri. It includes a rich feature set including searching, unmounting, importing and exporting. A lot of functionality is quite stable now, even though its version is 0.\+0.\+1 alpha. If you find any bugs or want to give general feedback, feel free to use the issue tracker of the Elektra project. A screenshot can be found \href{https://github.com/ElektraInitiative/libelektra/blob/master/doc/images/screenshot-qt-gui.png}{\tt here} To compile it (together with Elektra), see the R\+E\+A\+D\+M\+E \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/tools/qt-gui}{\tt here}

Manuel Mausz also has been very active and developed glib+gi bindings. These bindings make Elektra more friendly to the glib/gtk/gnome world. Using the gobject introspection python3 and lua bindings were developed. Additionally he got rid of all clang warnings.

Felix Berlakovich also made progress\+: \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/plugins/ini}{\tt the ini plugin} now supports multiline and which can be dynamically turned on and off, i.\+e. during mounting (thanks to Felix)

Last, but not least, Kai-\/\+Uwe ported Elektra to Windows7. Min\+G\+W is now one more supported compiler (tested on build-\/server, see later). Astonishingly, it was only little effort necessary\+: Basically we only needed a new implementation of the resolver, which is now called {\itshape wresolver}. Different from the {\itshape resolver} it lacks the sophisticated multi-\/process and multi-\/thread atomicity properties. On the plus side we now have a resolver that is very easy to study and understand and still works as file resolver ({\itshape noresolver} does not).

\subsection*{Interfaces}

A\+B\+I/\+A\+P\+I of the C-\/\+A\+P\+I is still completely stable even though under the hood a lot was changed. All testcases compiled against the previous version still run against Elektra 0.\+8.\+9.

This is, however, not the case for libtools. For Min\+G\+W porting it was necessary to rename an enum related to merging because it conflicted with an already defined M\+A\+C\+R\+O.

For maintainers also some changes are necessary. For Min\+G\+W and to actually use the flexibility of the new resolver variants two new C\+Make Variables are introduced\+: K\+D\+B\+\_\+\+D\+E\+F\+A\+U\+L\+T\+\_\+\+R\+E\+S\+O\+L\+V\+E\+R and K\+D\+B\+\_\+\+D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+T\+O\+R\+A\+G\+E.

More importantly for maintainers the C\+Make variables regarding S\+W\+I\+G bindings are now abandoned in favour to the new variable B\+I\+N\+D\+I\+N\+G\+S that works like P\+L\+U\+G\+I\+N\+S and T\+O\+O\+L\+S. Just start with \begin{DoxyVerb}    -DBINDINGS=ALL
\end{DoxyVerb}


and C\+Make should remove the bindings that have missing dependencies on your system. Remember that glib and gi (i.\+e. {\itshape gi\+\_\+python3} and {\itshape gi\+\_\+lua}) bindings were introduced, too. Additionally, the {\itshape cpp} binding can now be deactivated if not added to B\+I\+N\+D\+I\+N\+G\+S.

Finally, the {\itshape gen} tool added a Python package called {\ttfamily support}.

\subsection*{Other Bits}

A proof of concept storage plugin {\ttfamily regexstore} was added. It allows one to capture individual configuration options within an otherwise not understood configuration file (e.\+g. for vimrc or emacs where the configuration file may contain programming constructs).

Most tests now also work with the B\+U\+I\+L\+D\+\_\+\+S\+H\+A\+R\+E\+D variant (from our knowledge all would work now, but some are still excluded if B\+U\+I\+L\+D\+\_\+\+F\+U\+L\+L and B\+U\+I\+L\+D\+\_\+\+S\+T\+A\+T\+I\+C is disabled. Please report issues if you want to use uncommon C\+Make combinations).

A small but very important step towards specifying configuration files is the new proposed A\+P\+I method ks\+Lookup\+By\+Spec (and ks\+Lookup implementing cascading search). It introduces a {\ttfamily logical view} of configuration that in difference to the {\ttfamily physical view} of configuration does not have namespaces, but everything is below the root \char`\"{}/\char`\"{}. Additionally, contextual values now allow one to be compile-\/time configured using C++-\/\+Policies. These are small puzzle pieces that will fit into a greater picture at a later time.

A (data) race detection tool was implemented. Using it a configurable number of processes and threads it tries to \hyperlink{group__kdb_ga11436b058408f83d303ca5e996832bcf}{kdb\+Set()} a different configuration at (nearly) the same time.

With this tool the resolver could be greatly be improved (again). It now uses stat with nanosecond precision that will be updated for every successful \hyperlink{group__kdb_ga11436b058408f83d303ca5e996832bcf}{kdb\+Set()}. Even if the configuration file was modified manually (not using Elektra) the next \hyperlink{group__kdb_ga11436b058408f83d303ca5e996832bcf}{kdb\+Set()} then is much more likely to fail. Additionally a recursive mutex now protects the file locking mechanism.

The build server now additionally has following build jobs\+:


\begin{DoxyItemize}
\item \href{http://build.libelektra.org:8080/job/elektra-gcc-i386/}{\tt i386 build\+:}\+: We had an i386 regression, because none of the developers seems to use i386 anymore.
\item \href{http://build.libelektra.org:8080/job/elektra-gcc-configure-debian/}{\tt Configure Debian Script} Calls the scripts/configure-\/debian(-\/wheezy).
\item \href{http://build.libelektra.org:8080/job/elektra-local-installation/}{\tt Local Installation\+:} We had an regression that local installation was not possible because of a bash completion file installed to /etc. This build tests if it is possible to install Elektra in your home directory (and calls kdb run\+\_\+all afterwards)
\item \href{http://build.libelektra.org:8080/job/elektra-test-bindings/}{\tt Test bindings\+:} Compiles and tests A\+L\+L bindings.
\item \href{http://build.libelektra.org:8080/job/elektra-gcc-configure-mingw-w64/}{\tt Mingw\+:} Compiles Elektra using mingw.
\end{DoxyItemize}

Many more examples were written and are used within doxygen. Most snippets now can also be found in compilable files\+:


\begin{DoxyItemize}
\item \href{https://github.com/ElektraInitiative/libelektra/tree/master/examples/keyNew.c}{\tt key\+New examples}
\item \href{https://github.com/ElektraInitiative/libelektra/tree/master/examples/keyCopy.c}{\tt key\+Copy examples}
\item \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/bindings/cpp/examples/cpp_example_dup.cpp}{\tt C++ deep dup}
\item \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/bindings/cpp/examples/cpp_example_ordering.cpp}{\tt How to put Key in different data structures}
\item \href{https://github.com/ElektraInitiative/libelektra/tree/master/scripts/mount-augeas}{\tt Mount some config files using augeas}
\item \href{https://github.com/ElektraInitiative/libelektra/tree/master/scripts/mount-info}{\tt Mount system information}
\end{DoxyItemize}

Most plugins now internally use the same C\+Make function {\ttfamily add\+\_\+plugin} which makes plugin handling more consistent.

Felix converted the M\+E\+T\+A\+D\+A\+T\+A spec to ini files and added a proposal how comments can be improved.

\subsubsection*{Refactoring\+:}


\begin{DoxyItemize}
\item reuse of utilities in gen code generator
\item the gen support library is now in its own package ({\ttfamily support})
\item refactor array handling
\item internal comparision functions (key\+Compare\+By\+Name)
\end{DoxyItemize}

\subsubsection*{Optimization\+:}


\begin{DoxyItemize}
\item lookup\+By\+Name does not need to allocate two keys
\item lookups in generated code
\item prefer to use allocation on stack
\end{DoxyItemize}

\subsubsection*{Fixes\+:}


\begin{DoxyItemize}
\item disable cast that segfaults on i386 (only testing code was affected)
\item fix key\+Add\+Base\+Name in xmltool and testing code
\item support non-\/system installation (e.\+g. in home directory)
\item rewrote test cases to use succeed\+\_\+if\+\_\+same to avoid crashes on null pointers
\item allow one to use python 2.\+6 for kdb gen
\item improve exception messages
\item use memcasecmp (fix lookup ignoring case)
\item fix memory leaks (ini)
\item text messages for some warnings/errors
\item fix many issues regarding C\+Make, more variants of setting C\+Make options are now allowed.
\item cmake policies fixes allow us to use cmake version $>$ 3
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{http://www.markus-raab.org/ftp/elektra/releases/elektra-0.8.9.tar.gz}{\tt here}


\begin{DoxyItemize}
\item size\+: 1936524
\item md5sum\+: 001c4ec67229046509a0cb9eda223dc6
\item sha1\+: 79ea9b83c08ed4c347ed0100b5e0e2d3309b9d04
\item sha256\+: e0895bba28a27fb37f36f59ef77c95235f3a9c54fb71aa6f648566774d276568
\end{DoxyItemize}

already built A\+P\+I-\/\+Docu can be found \href{http://doc.libelektra.org/api/0.8.9/html/}{\tt here}

For more information, see \href{http://www.libelektra.org}{\tt http\+://www.\+libelektra.\+org}

Best regards, Markus

\section*{0.\+8.\+8 Release}


\begin{DoxyItemize}
\item guid\+: eca69e19-\/5ddb-\/438c-\/ac06-\/57c20b1a9160
\item author\+: Markus Raab
\item pub\+Date\+: Tue, 02 Sep 2014 17\+:31\+:42 +0200
\end{DoxyItemize}

In this release we changed 578 files in 473 commits (68596 insertions(+), 59260 deletions(-\/) compared to Elektra 0.\+8.\+7). We assume thats the largest change set for any of Elektra's releases up to now. It happened only within a bit more than a month up (0.\+8.\+7 was released 28.\+07.\+2014).

\subsection*{New features}

G\+So\+C finished successfully (thanks Ian and Felix) See \href{http://community.libelektra.org/wp}{\tt http\+://community.\+libelektra.\+org/wp} for the latest results. So Elektra now has a 3-\/way merging framework that is superior to text-\/based merging in many scenarios (e.\+g. moving configuration options within a file or with in-\/line comments) iff a storage plugin creates key names that are not only line numbers. We love to get Feedback!

Writing plugins is now even more comfortable. A plugin writer tutorial was written (thanks Ian)\+: \href{https://github.com/ElektraInitiative/libelektra/blob/master/doc/tutorials/plugins.md}{\tt https\+://github.\+com/\+Elektra\+Initiative/libelektra/blob/master/doc/tutorials/plugins.\+md} The documentation was completely reworked\+: \href{http://doc.libelektra.org/api/0.8.7/html/group__plugin.html}{\tt http\+://doc.\+libelektra.\+org/api/0.\+8.\+7/html/group\+\_\+\+\_\+plugin.\+html} And two new macros allow printf formating for warnings and errors (E\+L\+E\+K\+T\+R\+A\+\_\+\+A\+D\+D\+\_\+\+W\+A\+R\+N\+I\+N\+G\+F and E\+L\+E\+K\+T\+R\+A\+\_\+\+S\+E\+T\+\_\+\+E\+R\+R\+O\+R\+F).

The ini plugin was greatly improved (tested with samba configurations and added to A\+L\+L plugins) and the hosts plugin was rewritten to support ipv6 properly (thanks to Felix).

The constants plugin was added and allows introspection of Elektra's cmake variables. Because such non-\/file based plugins (e.\+g. also uname) do not need resolving, the plugin noresolver was added. It supersedes the success plugin.

Elektra now allows one to correctly fsync its configuration files (sync plugin) and the folders where files are stored (resolver plugin). Just make sure to add the \char`\"{}sync\char`\"{} plugin using kdb mount. The resolver plugin now reads from passwd and no longer needs environment variables. Additionally, the resolver plugin was prepared to support other variants by so called compilation variants.

The error plugin now allows, next to list all possible errors, to provoke errors when opening plugins. We fixed some issues related to plugins having errors when they initialize themselves.

So following plugins were added\+: sync noresolver line ini constants Nearly all plugins now have a R\+E\+A\+D\+M\+E.\+md for further information (thanks to Ian). An overview of all plugin is on with links to them\+: \href{https://github.com/ElektraInitiative/libelektra/blob/master/src/plugins/}{\tt https\+://github.\+com/\+Elektra\+Initiative/libelektra/blob/master/src/plugins/}

The kdb tools were greatly improved (thanks to Felix)\+:
\begin{DoxyItemize}
\item added remount tool
\item umount now also accepts mountpath
\item mount allows one to specify different resolvers
\item import now can use merge strategies
\item check without arguments checks key database
\item mount is now more verbose when validation fails
\end{DoxyItemize}

New/improved scripts/make targets (note that scripts can be executed by kdb scriptname)\+:
\begin{DoxyItemize}
\item mounting, unmounting scripts were added
\item generate template for a new plugin was improved
\item configure-\/debian was added
\item added targets run\+\_\+all and run\+\_\+memcheck
\item bash completion file now installed
\item ucf integration
\item merging scripts were added for the usage with ucf
\item scripts doing internal checks on source of plugins
\end{DoxyItemize}

\subsection*{Compatibility}

This time we had to break compatibility. We did not change the A\+B\+I (your application still will be able to use Elektra 0.\+8.\+8) and we did not change the A\+P\+I (your application still will compile against Elektra). We changed the third part of our interface\+: the semantic interface.

The problems were following\+: key\+Add\+Base\+Name/key\+Set\+Base\+Name did something obvious when no special characters were in the base\+Name. But once there were, there are two different interpretations what it should do\+: 1.) add/set a basename, so escape characters that are not canonical in the basename 2.) add all parts of the name given (with slashes)

The methods were used in both ways, so it was obvious that something is very wrong. We decided that it should do what the name says, that is add/set a basename (variant 1).

The variant 2, to add any name was added and is called \hyperlink{group__keyname_gaa70593a2c772c4b7bc33423b9b10a270}{key\+Add\+Name()} and added as proposal.

(Thank Felix for implementations and Manuel for investigations)

When keys are renamed after adding to a keyset is a bad thing because it destroys the order of the keyset. This is now avoided by key\+Lock. Use \hyperlink{group__key_gae6ec6a60cc4b8c1463fa08623d056ce3}{key\+Dup()} to get rid of such locks.

Another, even larger, change is also about ordering of keys in keysets. Elektra now internally has an null-\/terminated unescaped keyname. Ordering of keysets will always happen on this name. The \hyperlink{group__keytest_gaf6e66e12fe04d535a5d1c8218ced803e}{key\+Cmp()} tool can be used to check this order. It works very efficiently with memcmp() and never gets confused by A\+S\+C\+I\+I ordering of / (because / is 0 in the unescaped keyname).

The syntax, semantics and conventions of key names is now documented in detail\+: \href{http://doc.libelektra.org/api/0.8.8/html/group__keyname.html}{\tt http\+://doc.\+libelektra.\+org/api/0.\+8.\+8/html/group\+\_\+\+\_\+keyname.\+html}

\hyperlink{group__keyset_ga671e1aaee3ae9dc13b4834a4ddbd2c3c}{ks\+New()} does now return a keyset with a properly set cursor (ks\+Rewind).

Because its always possible that software relies on bugs the better way to deal with such a situation (as the \hyperlink{group__keyname_ga6e804bd453f98c28b0ff51430d1df407}{key\+Set\+Base\+Name()} situation described above) is to provide the same function twice. Manuel said he will create a prototype to introduce symbol versioning in Elektra. With that, old customers would still receive the old behaviour, but people compiling against a new version would get the new behaviour. So in one of the next releases we will also avoid semantic interface changes when there is a valid use case for it (there is none if the program e.\+g. crashes).

Symbol versioning also allows one to compile against old versions on purpose if you do not want the new behaviour.

We have prepared an A\+B\+I-\/test suite, that also checks behaviour, for that purpose, but we also improved testing in other parts\+:
\begin{DoxyItemize}
\item (New Test strategy)\mbox{[}/doc/\+T\+E\+S\+T\+I\+N\+G.md\mbox{]}
\item New resolver tests for conflicts (needs tty)
\end{DoxyItemize}

If you try to execute test\+\_\+ks from 0.\+8.\+7 with libelektra 0.\+8.\+8 it will crash, but not because of any incompatibility, but because of strcmp in the test itself gets a null pointer. The pointer is now null, because ks\+New correctly rewinds its internal cursor (see above). Amusingly, it says on that line 94 in test\+\_\+ks.\+c\+: // T\+O\+D\+O\+: why is the cursor here?

\subsection*{A\+P\+I Proposals}

see above for more information\+:
\begin{DoxyItemize}
\item key\+Add\+Name .. add key name without escaping, like key\+Set\+Name
\item key\+Unescaped\+Name .. get access to null-\/separated unescaped name
\item key\+Lock .. to allow one to secure keys against modifications
\end{DoxyItemize}

some new ideas\+:
\begin{DoxyItemize}
\item key\+Set\+String\+F .. printf format-\/style changing of the key string
\item elektra\+Key\+Set\+Name .. to allow one to set meta + cascading keys
\end{DoxyItemize}

\hyperlink{array_8c_afc46476b8d722d89e07a966e023df317}{elektra\+Array\+Inc\+Name()} now works correctly with empty arrays embedded in other arrays (yajl+line plugin)

elektra\+Array\+Validate\+Name() was also added, thanks to Felix.

These methods are declared in the file \hyperlink{kdbproposal_8h}{kdbproposal.\+h} but do not guarantee any forms of compatibility (they might even be removed).

\subsection*{Issues}

Many issues were resolved as you can see in github\+: \href{https://github.com/ElektraInitiative/libelektra/issues}{\tt https\+://github.\+com/\+Elektra\+Initiative/libelektra/issues} Alone for the milestone 0.\+8.\+8 we closed 17 issues, including those mentioned in \char`\"{}\+Compatibility\char`\"{}. Other issues (not all were tracked on github)\+:


\begin{DoxyItemize}
\item fix undefined errors in \hyperlink{group__kdb_ga6808defe5870f328dd17910aacbdc6ca}{kdb\+Open()} or \hyperlink{group__kdb_gadb54dc9fda17ee07deb9444df745c96f}{kdb\+Close()}
\item Now Python 2+3 work in parallel
\item python2 interpreter is found correctly (also on Arch)
\item Sentinel now makes sure that you cannot forget K\+S\+\_\+\+E\+N\+D to end ks\+New
\item Fixes for architecture-\/specific problems by Pino
\item fix .pc file
\item fix compilation problem with K\+D\+B\+\_\+\+M\+A\+X\+\_\+\+P\+A\+T\+H\+\_\+\+L\+E\+N\+G\+T\+H
\item tmpnam to mkstemp (security)
\item make test data naming consistent (thanks Pino)
\item use L\+I\+B\+\_\+\+S\+U\+F\+F\+I\+X for T\+A\+R\+G\+E\+T\+\_\+\+T\+O\+O\+L\+\_\+\+E\+X\+E\+C\+\_\+\+F\+O\+L\+D\+E\+R thanks to Kai Uwe
\item Fix search for boost (thank Pino)
\end{DoxyItemize}

\subsection*{Other Stuff}

Thanks to Pino Toscano Elektra 0.\+8.\+7-\/4 is now available in Debian Testing\+: \href{https://packages.debian.org/search?keywords=elektra}{\tt https\+://packages.\+debian.\+org/search?keywords=elektra} So it is only a matter of time that other (debian-\/based) distributions will follow and replace the dusty Elektra 0.\+7.

Debian Continuous Integration \href{http://ci.debian.net/packages/e/elektra}{\tt http\+://ci.\+debian.\+net/packages/e/elektra} (thanks Pino) greatly complement our tests running on \href{http://build.libelektra.org:8080/}{\tt http\+://build.\+libelektra.\+org\+:8080/}

Elektra's buildserver also was improved\+:


\begin{DoxyItemize}
\item now also compiles with icc
\item runs make run\+\_\+memcheck
\item checks if plugins are added correctly in-\/source
\item runs A\+B\+I + behavioural tests
\end{DoxyItemize}

Raffael Pancheri now made a merge request for qt-\/gui \href{https://github.com/ElektraInitiative/libelektra/pull/103/files}{\tt https\+://github.\+com/\+Elektra\+Initiative/libelektra/pull/103/files} in which copy, paste and delete of keys already works. It is, however, still work in progress.

Manuel Mausz made great progress in script-\/based Elektra plugins. He is also working on glib+gobject-\/introspection based bindings. He investigated some issues, e.\+g. a crash of the python binding which was only triggered if python3 is build with a specific flag/module combination, see\+: \href{https://github.com/ElektraInitiative/libelektra/issues/25}{\tt https\+://github.\+com/\+Elektra\+Initiative/libelektra/issues/25}

\subsection*{Get It!}

You can download the release from\+:

\href{http://www.markus-raab.org/ftp/elektra/releases/elektra-0.8.8.tar.gz}{\tt http\+://www.\+markus-\/raab.\+org/ftp/elektra/releases/elektra-\/0.\+8.\+8.\+tar.\+gz}


\begin{DoxyItemize}
\item size\+: 1644441
\item md5sum\+: fe11c6704b0032bdde2d0c8fa5e1c7e3
\item sha1\+: 16e43c63cd6d62b9fce82cb0a33288c390e39d12
\item sha256\+: ae75873966f4b5b5300ef5e5de5816542af50f35809f602847136a8cb21104e2
\end{DoxyItemize}

already built A\+P\+I-\/\+Docu can be found here\+:

\href{http://doc.libelektra.org/api/0.8.8/html/}{\tt http\+://doc.\+libelektra.\+org/api/0.\+8.\+8/html/}

Best regards, Markus 