
\begin{DoxyItemize}
\item guid\+: 4884a54f-\/996a-\/4564-\/a138-\/38a70166fed7
\item author\+: Markus Raab
\item pub\+Date\+: Tue, 27 Feb 2018 19\+:35\+:58 +0100
\item short\+Desc\+: Logo, I\+NI, Lookup
\end{DoxyItemize}

We are proud to release Elektra 0.\+8.\+22! In 429 commits, 8 authors changed 548 files with 60369 insertions(+), 6783 deletions(-\/).

\subsection*{What is Elektra?}

Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit \href{https://libelektra.org}{\tt https\+://libelektra.\+org}.

For a small demo see here\+:

\href{https://asciinema.org/a/cantr04assr4jkv8v34uz9b8r}{\tt }

You can also read the news \href{https://www.libelektra.org/news/0.8.22-release}{\tt on our website}

You can read the \href{https://fosdem.org/2018/interviews/markus-raab/}{\tt F\+O\+S\+D\+EM interview} and watch the \href{https://fosdem.org/2018/schedule/event/elektra/}{\tt F\+O\+S\+D\+EM main talk} given recently.

Elektra is now an official part of \href{http://formulae.brew.sh/formula/elektra}{\tt Homebrew} and \href{https://pkgs.alpinelinux.org/package/edge/testing/x86_64/elektra}{\tt Alpine Linux}.

\subsection*{Highlights}


\begin{DoxyItemize}
\item New Logo and Website Theme
\item I\+NI plugin greatly improved
\item Notifications A\+PI and Bindings for Asynchronous I/O
\item Plugin Processes
\item Lookup with the Order Preserving Minimal Perfect Hash Map
\end{DoxyItemize}

\subsubsection*{New Logo and Website Theme}

We are proud to present our new logo. It has a new shape and cooler colors.



Thanks to Philipp Frei!

We also gave the website a new look. It has the colors from the logo and new fonts (\href{https://fonts.google.com/specimen/Lato}{\tt Lato} and \href{https://fonts.google.com/specimen/Libre+Franklin}{\tt Libre Franklin}) that improve readability and add to a unique look. The restructured start page contributes to the new look as well.

We also updated asciinema-\/player to 2.\+6.\+0.

Thanks to Thomas Wahringer.

We also fixed security issues in the Website due to an old version of jquery, thanks to Marvin Mall.

Thanks to Bernhard Denner for keeping our infrastructure running.

\subsubsection*{I\+NI plugin greatly improved}


\begin{DoxyItemize}
\item {\ttfamily dini} is no longer experimental anymore and adds the binary plugin.
\item We added a crash test for the I\+NI plugin that feeds the plugin with problematic input data we determined using \href{http://lcamtuf.coredump.cx/afl}{\tt A\+FL}
\item We fixed various small bugs that could potentially cause the I\+NI plugin to crash and fixes the problems as reported by A\+FL
\item The I\+NI plugin now \href{https://github.com/ElektraInitiative/libelektra/issues/1793}{\tt converts a section to a normal key-\/value pair} if you store a value inside it. This has the advantage that you will not \href{https://github.com/ElektraInitiative/libelektra/issues/1697}{\tt lose data unexpectedly anymore}.
\item The \href{https://www.libelektra.org/plugins/ini}{\tt I\+NI plugin} should now read most key-\/value pairs containing delimiter characters ({\ttfamily =}) properly.
\end{DoxyItemize}

Thanks to René Schwaiger!

Nevertheless, we did not switch to I\+NI as default format. This has some reasons\+:


\begin{DoxyItemize}
\item In many workflows, {\ttfamily dump} is the better choice\+: e.\+g. with {\ttfamily kdb editor} you can edit any parts of Elektra with any format (e.\+g. I\+NI) more safely. (With the I\+NI plugin in some of these situations meta data is wrongly shown.)
\item The code base of I\+NI is not fully tested and partly not well understood.
\item We plan to switch to a newly written parser (most likely Y\+A\+ML) and want to avoid that users have two migrations. The migration from {\ttfamily dump} is easier (especially compared with I\+NI) because the {\ttfamily dump} format is recognisable without ambiguity. (Thus the I\+NI file parses nearly any file, it is hard to detect that a file is not I\+NI)
\end{DoxyItemize}

But for those who want to switch, the migration will be smooth\+: The {\ttfamily dini} plugin makes sure that old dump files are still being read. Only when writing out configuration files, configuration files are converted to I\+NI. To change to I\+NI during compilation, simply use\+:

{\ttfamily -\/\+D\+K\+D\+B\+\_\+\+D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+T\+O\+R\+A\+GE=dini}

Or simply switch for your installation with\+:~\newline
 {\ttfamily sudo kdb change-\/default-\/storage dini}

You can also mount I\+NI (or dini) as root\+:~\newline
 {\ttfamily sudo kdb mount default.\+ini / dini}

\subsubsection*{Notification A\+PI and Bindings for Asynchronous I/O}

This release contains an experimental implementation of Elektra\textquotesingle{}s notification feature. This feature enables applications to get updates when configuration is changed at run-\/time. For more details see the preview tutorial at https\+://github.com/\+Elektra\+Initiative/libelektra/tree/master/doc/tutorials/notifications.\+md \char`\"{}doc/tutorials/notifications.\+md\char`\"{}

The \href{https://doc.libelektra.org/api/current/html/kdbnotification_8h.html}{\tt Notification A\+PI} is implemented by a new library called {\ttfamily elektra-\/notification}. To use the library you need the new internalnotification plugin. Since the plugin is experimental it needs to be enabled when building Elektra from source (e.\+g. by passing {\ttfamily -\/\+D\+P\+L\+U\+G\+I\+NS=\char`\"{}\+A\+L\+L;-\/\+E\+X\+P\+E\+R\+I\+M\+E\+N\+T\+A\+L;internalnotification\char`\"{}} to {\ttfamily cmake}).

New bindings for asynchronous I/O called \char`\"{}\+I/\+O bindings\char`\"{} also have been added. These bindings allow Elektra\textquotesingle{}s plugins and other parts to perform {\itshape asynchronous} operations. I/O bindings are opt-\/in for application developers. New features of Elektra that take advantage of I/O bindings will have fallbacks where viable. These fallbacks will use synchronous I/O thus keeping the status quo.

This release includes an experimental I/O binding for \href{http://libuv.org/}{\tt uv}. The interface for I/O bindings is currently experimental and might change in the future.

Elektra\textquotesingle{}s notification feature is not complete yet. So called \char`\"{}transport plugins\char`\"{} will be responsible for sending and receiving notifications using different protocols or libraries (like Zero\+MQ or D-\/\+Bus). These plugins will make use of the new I/O bindings. We plan to introduce the first transport plugins with the next release of Elektra.

\subsubsection*{Plugin Processes}

A new library called \href{https://github.com/ElektraInitiative/libelektra/tree/master/src/libs/pluginprocess}{\tt pluginprocess} has been added. This library contains functions that aid in executing plugins in a separate process. This child process is forked from Elektra\textquotesingle{}s main process each time such plugin is used and gets closed again afterwards. It uses a simple communication protocol based on a Key\+Set that gets serialized through a pipe via the {\ttfamily dump} plugin to orchestrate the processes.

Such a behavior is useful for plugins which cause memory leaks to be isolated in an own process. Furthermore this is useful for runtimes or libraries that cannot be reinitialized in the same process after they have been used.

\subsubsection*{Lookup with the Order Preserving Minimal Perfect Hash Map}

The {\ttfamily ks\+Lookup (...)} has a new search algorithm, that acts as an alternative to the binary search. The Order Preserving Minimal Perfect Hash Map (O\+P\+M\+P\+HM) is a non-\/dynamic, randomized hash map and is very effective for mostly static configurations. The O\+P\+M\+P\+HM can be enabled for a search by passing the in \href{https://github.com/ElektraInitiative/libelektra/blob/master/src/include/kdbproposal.h}{\tt kdbproposal.\+h} defined option {\ttfamily K\+D\+B\+\_\+\+O\+\_\+\+O\+P\+M\+P\+HM} to the lookup. Be aware that if the Key\+Set changes often using the O\+P\+M\+P\+HM might not be a good idea, read more about the \href{https://github.com/ElektraInitiative/libelektra/blob/master/doc/dev/data-structures.md#order-preserving-minimal-perfect-hash-map-aka-opmphm}{\tt O\+P\+M\+P\+HM}.

When you are not sure if the O\+P\+M\+P\+HM will speed up you searches, wait for the next release, that one will include a hybrid search algorithm that combines the best properties of both search algorithms.

To disable O\+P\+M\+P\+HM (e.\+g. on systems with tight memory constraints), you can pass {\ttfamily -\/\+D\+E\+N\+A\+B\+L\+E\+\_\+\+O\+P\+T\+I\+M\+I\+Z\+A\+T\+I\+O\+NS=O\+FF}

\subsection*{Other New Features}

We added even more functionality, which could not make it to the highlights\+:


\begin{DoxyItemize}
\item The Web UI was greatly improved, thanks to Daniel Bugl The version of clusterd was increased from 1.\+0.\+0 to 1.\+1.\+0.
\item Elektra is now part of the official \href{http://formulae.brew.sh/formula/elektra}{\tt Homebrew repository}. We still provide a \href{http://github.com/ElektraInitiative/homebrew-elektra}{\tt tap}, if you want to install Elektra together with plugins or bindings that require additional libraries.
\item The building and linking of the haskell bindings and haskell plugins has been \href{https://github.com/ElektraInitiative/libelektra/pull/1698}{\tt greatly improved}.
\item The invoke library can now \href{https://github.com/ElektraInitiative/libelektra/pull/1801}{\tt report errors} upon opening/closing a plugin, thanks to Armin Wurzinger.
\item The \href{https://www.libelektra.org/plugins/yamlcpp}{\tt Y\+A\+ML C\+PP plugin} does not require \href{http://www.boost.org}{\tt Boost} anymore, if you installed \href{https://github.com/jbeder/yaml-cpp/releases/tag/yaml-cpp-0.6.0}{\tt yaml-\/cpp 0.\+6}.
\item Improved colored output in {\ttfamily kdb} tool.
\item We added two build jobs\+: \href{https://build.libelektra.org/job/test-docker/}{\tt docker} and \href{https://build.libelektra.org/job/elektra-haskell/}{\tt haskell}. Thanks to Bernhard Denner and Armin Wurzinger.
\item \href{https://www.libelektra.org/plugins/yamlcpp}{\tt Y\+A\+ML C\+PP} does not write binary data to a config file, if you forget to load the \href{https://www.libelektra.org/plugins/base64}{\tt Base64 plugin}.
\item \href{https://www.libelektra.org/plugins/yamlcpp}{\tt Y\+A\+ML C\+PP} now encodes empty binary keys as N\+U\+LL values ({\ttfamily $\sim$}), and also adds the meta key {\ttfamily binary} for such values automatically.
\end{DoxyItemize}

\subsection*{Documentation}

We improved the documentation in the following ways\+:


\begin{DoxyItemize}
\item We have https\+://github.com/\+Elektra\+Initiative/libelektra/tree/master/scripts/docker/jenkinsnode/\+R\+E\+A\+D\+M\+E.\+md \char`\"{}documented how you can setup a build node for Jenkins using a Docker container\char`\"{} We also provide an example Dockerfile based on Debian Stretch for that purpose, thanks to Armin Wurzinger.
\item Document how {\ttfamily rlwrap} might be used for {\ttfamily kdb shell}.
\item Fixed docu in {\ttfamily hosts} plugin.
\item Greatly improved the \href{https://git.libelektra.org/blob/debian/debian/copyright}{\tt license documentation} in {\ttfamily debian/copyright} in the {\ttfamily debian} branch, thanks to Thomas Wahringer.
\item Various fixes in doc/\+M\+E\+T\+A\+D\+A\+T\+A.\+ini
\end{DoxyItemize}

\subsection*{Compatibility}

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

We executed old test cases against the latest Elektra version and all tests passed.

In {\ttfamily kdbinvoke.\+h} we changed the A\+PI so that {\ttfamily elektra\+Invoke\+Open} and {\ttfamily elektra\+Invoke\+Close} can yield error messages.

We added\+:


\begin{DoxyItemize}
\item the public headerfiles {\ttfamily \hyperlink{kdbnotification_8h}{kdbnotification.\+h}}, {\ttfamily \hyperlink{kdbio_8h}{kdbio.\+h}}, {\ttfamily \hyperlink{kdbiotest_8h}{kdbiotest.\+h}}.
\item the private headerfiles {\ttfamily kdbnotificationplugin.\+h}, {\ttfamily \hyperlink{kdbioprivate_8h}{kdbioprivate.\+h}}.
\end{DoxyItemize}

\subsection*{Portability}


\begin{DoxyItemize}
\item Fix bash shebang of bash scripts, thanks to Jakub Jirutka
\item Remove unportable unneeded asm, thanks to Timo Teräs and Jakub Jirutka
\item Fixed syntax in shell recorder, thanks to René Schwaiger
\item Used {\ttfamily mktemp} in {\ttfamily check\+\_\+distribution.\+sh} to allow parallel run of test cases, thanks to Armin Wurzinger.
\end{DoxyItemize}

\subsection*{Notes for Maintainer}

These notes are of interest for people maintaining packages of Elektra\+:


\begin{DoxyItemize}
\item {\ttfamily dini} is no longer experimental.
\item C\+Make\+: {\ttfamily B\+I\+N\+D\+I\+N\+GS} now behaves like {\ttfamily P\+L\+U\+G\+I\+NS} By default now all M\+A\+I\+N\+T\+A\+I\+N\+ED bindings except E\+X\+P\+E\+R\+I\+M\+E\+N\+T\+AL and D\+E\+P\+R\+E\+C\+A\+T\+ED are included. For more 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`\"{}. To include both intercept bindings, you now need to write {\ttfamily I\+N\+T\+E\+R\+C\+E\+PT}, to only include getenv interception {\ttfamily intercept\+\_\+env}. {\ttfamily intercept} in lower-\/case does not work anymore.
\end{DoxyItemize}

The following files are new\+:


\begin{DoxyItemize}
\item Libs\+: {\ttfamily libelektra-\/notification.\+so}, {\ttfamily libelektra-\/io.\+so}, {\ttfamily libelektra-\/io-\/uv.\+so}, {\ttfamily libelektra-\/pluginprocess.\+so}
\item Headers\+: {\ttfamily kdbgetenv.\+h}, {\ttfamily \hyperlink{kdbio_8h}{kdbio.\+h}}, {\ttfamily kdbpluginprocess.\+h}
\item Plugins\+: {\ttfamily base64/\+Base64.\+pdf}
\item Binaries\+: {\ttfamily getenv}, {\ttfamily test\+\_\+context}, {\ttfamily test\+\_\+fork}, {\ttfamily test\+\_\+getenv}, {\ttfamily test\+\_\+ks\+\_\+opmphm}, {\ttfamily test\+\_\+opmphm}
\item Other\+: {\ttfamily elektra-\/io.\+pc}
\end{DoxyItemize}

The following files were removed\+:


\begin{DoxyItemize}
\item Tests\+: {\ttfamily testmod\+\_\+semlock}
\end{DoxyItemize}

\subsection*{Notes for Elektra\textquotesingle{}s Developers}

These notes are of interest for people developing Elektra\+:


\begin{DoxyItemize}
\item We now use {\ttfamily clang-\/reformat-\/5.\+0} for formatting. Please upgrade your clang.
\item Build Agent {\ttfamily ryzen v2} was added to speed up {\ttfamily jenkins build all please}, thanks to Armin Wurzinger.
\item Travis maintenance (Qt 5 and other problems), thanks to René Schwaiger.
\item {\ttfamily B\+I\+N\+D\+I\+N\+GS} was greatly improved and the C\+Make functions were simplified. Bindings now also have a {\ttfamily R\+E\+A\+D\+M\+E.\+md} with meta data. A big thanks to Thomas Wahringer.
\item Decision\+: Logging with {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+L\+OG} is only for C/\+C++.
\item Including {\ttfamily kdberrors.\+h} in a C++ files now also works, if you do not add the statement
\end{DoxyItemize}


\begin{DoxyCode}
\textcolor{keyword}{using namespace }\hyperlink{namespaceckdb}{ckdb};
\end{DoxyCode}


before you import {\ttfamily kdberrors.\+h}.


\begin{DoxyItemize}
\item The C\+Make code for Elektra’s \href{https://www.libelektra.org/tools/qt-gui}{\tt Qt-\/\+G\+UI} now detects the location of Qt 5 automatically if you installed Qt via Homebrew.
\item All Shell Recorder tests should not now correctly restore your old configuration after you execute them, thanks to René Schwaiger.
\item The \href{https://www.libelektra.org/plugins/base64}{\tt Base64 plugin} does not encode empty binary values in meta mode anymore. This update allows plugins such as Y\+A\+ML C\+PP to handle empty keys properly.
\end{DoxyItemize}

\subsection*{Fixes}

Many problems were resolved with the following fixes\+:


\begin{DoxyItemize}
\item {\ttfamily kdb global-\/umount} also removed other mountpoints
\item We fixed \href{https://github.com/ElektraInitiative/libelektra/pull/1761}{\tt internal inconsistency} in the C\+Make code of the \href{https://www.libelektra.org/plugins/augeas}{\tt Augeas plugin}
\item We fixed the \href{https://github.com/ElektraInitiative/libelektra/pull/1787}{\tt haskell bindings and plugins on Debian Stretch} and added a \href{https://build.libelektra.org/job/elektra-haskell/}{\tt new build server job} to test that in the future.
\item Cleanup in list plugin, thanks to Thomas Wahringer
\item The Shell Recorder now exports and imports the root of a mountpoint instead of the mountpoint itself. This change makes sure that Shell Recorder test do not change the configuration directly below the specified mountpoint.
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.8.22.tar.gz}{\tt here} or \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.8.22.tar.gz?raw=true}{\tt Git\+Hub}

The \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.8.22.tar.gz.hashsum?raw=true}{\tt hashsums are\+:}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+22.\+tar.\+gz
\item size\+: 5885118
\item md5sum\+: 5cbd9e33daf51f6f33791ff3f99342a6
\item sha1\+: 4954ff16cfe7dc69e45e6a748556262b8fb1a9fa
\item sha256\+: 962598315619d5dff3a575d742720f076dc4ba3702bd01609bfb7a6ddb5d759f
\end{DoxyItemize}

The release tarball is also available signed by me using Gnu\+PG from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.8.22.tar.gz.gpg}{\tt here} or \href{https://github.com/ElektraInitiative/ftp/blob/master/releases//elektra-0.8.22.tar.gz.gpg?raw=true}{\tt Git\+Hub}

Already built A\+P\+I-\/\+Docu can be found \href{https://doc.libelektra.org/api/0.8.22/html/}{\tt online} or \href{https://github.com/ElektraInitiative/doc/tree/master/api/0.8.22}{\tt Git\+Hub}.

\subsection*{Stay tuned!}

Subscribe to the \href{https://www.libelektra.org/news/feed.rss}{\tt R\+SS feed} to always get the release notifications.

For any questions and comments, please contact the issue tracker \href{http://issues.libelektra.org}{\tt on Git\+Hub} or me by email using \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{https://www.libelektra.org/news/0.8.22-release}{\tt Permalink to this N\+E\+WS entry}

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

Best regards, \href{https://www.libelektra.org/developers/authors}{\tt Elektra Initiative} 