| Elektra 0.11.0

0.9.6 Release

- guid: ad3d9308-4019-46dc-9de0-b3b82de5302a
- author: Mihael Pranjić
- pubDate: Mon, 07 Jun 2021 09:48:41 +0200
- shortDesc: Java Fixes, Documentation Updates, GCC 11 and Clang 12 Compatibility

We are proud to release Elektra 0.9.6, the 7th release in preparation for Elektra 1.0.

# 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 https://libelektra.org.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

docker pull elektra/elektra
docker run -it elektra/elektra

# Highlights

- Java fixes: JNI plugin fixed and JNA bindings improved
- Fedora 34 and Debian Bullseye packages added
- Documentation Improvements & Cleanups
- GCC 11 and Clang 12 compatibility

## JNI plugin fixed

The JNI plugin was encountering a double free on open. This has been fixed in conjunction with an update to JNA binding release mechanism. The previously disabled JNI test have been fixed and enabled.

For how to write plugins, please refer to java-plugins.md as well as the JNI plugin and JNA binding documentation.

Note that it is currently not possible to mount plugins written in Java (see #3881).

# Plugins

The following section lists news about the plugins we updated in this release.

## JNI

- Fixed double free issues and re-enabled tests
- Updated documentation
- Increased minimum required JDK version to 11

_(Michael Tucek)_

Special thanks to _(Klemens Böswirth)_, _(Mihael Pranjić)_ and _(Robert Sowula)_ for helping with the problem analysis!

## Dbus, Dbusrecv and Zeromqsend

- Internal changes to ensure compatibility with the new `elektraNotificationContract`. _(Klemens Böswirth)_

## Xerces

- Store length of an array in metakey array according to array decision. _(Robert Sowula)_

## YAML Smith and Yan LR

- Removed plugins. _(René Schwaiger)_

## ni

- Silence Clang 12 warnings about suspicious string literal concatenation. _(Mihael Pranjić)_

## Lua

- Removed outdated information from docs _(-kraschitzer)_

# Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

## Core

- Remove keyCompareBy(Name)?Owner _(-kraschitzer)_

# Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up-to-date with the multi-language support provided by Elektra.

## SWIG

- Remove `-Wno-shift-overflow warnings` option from SWIG bindings compile flags. _(Mihael Pranjić)_
- Suppress SWIG/Ruby bindings warning about `operator != ignored`. _(Mihael Pranjić)_

## JNA

- Increased minimum required JDK version to 11
- Gradle wrapper and docker images upgraded to 7.0.2
- Minumum Gradle version decreased to 6.0
- Upgraded JNA dependency from 4.5.2 to 5.8.0
- Updated Java binding API documentation
- Migrated native resource clean-up from `finalize()` to `Cleaner`
  - Please revisit the documentation for `Key::release` and `KeySet::release` for recommended resource release handling
  - Currently automated native key and key set resource clean-up is deactivated due to some possible race conditions which might result in double free errors. Manual key release is also disabled to not break current API release semantic. This leads to memory leaks, which is a known issue and will be resolved in an upcoming release.
- Introduced multiple exceptions when native API calls fail - see updated Java doc for details
- Introduced early parameter validation for values which would otherwise lead to unspecific errors in native API calls
- Update `Key` API introducing the following changes:
  - Extracted exceptions from `Key` class
  - Fixed `Key::getCurrentMeta`
  - Moved `Elektra.KeyNewArgumentFlags` to `Key.NewArgumentTag`
  - Changed return types from `int` to `boolean` or enabled a fluent interface where appropriate
  - Renamed `Key::*Integer` to `Key::*Int`
  - Renamed `KeyInvalidNameException` to `KeyNameException`
  - Renamed `KeyTypeMismatchException` to `KeyBinaryTypeNotSupportedException`
  - Introduced `Key::get*AndRelease` convenience methods
  - Introduced `Key::createNameless`
  - Introduced `KeyReleasedException` being thrown when a released `Key` is being accessed
  - Introduced `KeyMetaException`
  - Removed unused `KeyTypeConversionException`
  - Removed `Key::needsSync`
  - Removed `Key::isNull`
    - `KeyReleasedException` is now being thrown when a released (= previously `isNull`) `Key` is being accessed
    - `Key`s with no backing native key pointer cannot be created anymore
- Updated `KeySet` API introducing the following changes:
  - Changed return type enabling a fluent interface where appropriate
  - Renamed `KeySet::head` to `KeySet::first`
  - Renamed `KeySet::tail` to `KeySet::last`
  - Introduced `KeySetReleasedException` being thrown when a released `KeySet` is being accessed
  - Introduced `KeySetAppendException`
  - Removed `KeySet::create(int, Object[])`
  - Removed `KeySet::needsSync`
  - Methods which have been returning a nullable `Key`, now return an `Optional<Key>´ -`KeySet::lookup*`now returns`Optional<Key>`-`Key::getMeta`now returns`Optional<Key>`
    - Example: @icode{java} // checking whether the key has been found BEFORE API change Key found = ks.lookup("/some/key"); if (found != null) { // process found key } @endicode @icode{java} // checking whether the key has been found AFTER API change ks.lookup("/some/key").ifPresent(k -> // process found key ); @endicode
    `
- `Updated`KDB`API introducing the following changes:
  - IntroducedKDBClosedException`being thrown when a closed`KDB`session is being accessed`
  - `Introduced`KDB::get(Key)``
  - `Introduced`KDB::open()``
  - `Introduced`KDB::open(KeySet)``
  - `Introduced`KDB::goptsContract(String[], String[], Key, KeySet)`
  - Changed return type enabling a fluent interface where appropriate
  `
- `Updated tests accordingly`

`_(Michael Tucek)_`

``

# Tools

``

``

- Remove `kdb set` functionality that creates a null key. _(Robert Sowula)_
- Rename elektraStrnDup to elektraMemDup _(-kraschitzer)_
- Update specmount error message _(-kraschitzer)_
- Update `elektraMemDup` to `void *` and update the documentation. _(Mihael Pranjić)_
- There have been a few bugfixes for elektrad. _(Klemens Böswirth)_
- Update `lodash` and `hosted-git-info` dependencies of `webd` due to security update. _(Mihael Pranjić)_

``

# Scripts

``

``

- Require clang-format 12 for reformatting C and Java. _(Mihael Pranjić)_
- Use basename of release file in `generate-hashsums`. _(Mihael Pranjić)_
- Use `shfmt` v3.2.4 to reformat shell scripts. _(Mihael Pranjić)_
- Use `cmake-format` v0.6.13 (`cmakelang`) to reformat CMake. _(Mihael Pranjić)_
- Aptly repositories are now automatically created if they do not exist during a package release. _(Robert Sowula)_

``

# Documentation

``

``

- Added reviews for all functions contained in the Elektra Core API. _(@lawli3t)_
- Added packaging section to news template. _(Mihael Pranjić)_
- Minor readability improvement in highlevel.md. _(Tobias Schubert @qwepoizt)_
- Fix examples of spec plugin. _(Robert Sowula)_
- Added reviews for all functions contained in the Elektra Core API. _(@lawli3t)_
- Document package names of plugins, bindings and tools. _(Robert Sowula)_
- Small update in API documentation related to different namespaces in returned keys. _(Markus Raab)_
- Improved documentation of noresolver. _(Markus Raab)_
- Improved plugin tutorial. _(Markus Raab)_
- Adding info about syncing forks to `doc/Git.md`. _(Klemens Böswirth)_
- Work on COMPILE.md and INSTALL.md. _(-kraschitzer)_
- Update and correct licensing information. _(-kraschitzer)_
- Rename RELEASE.md. _(-kraschitzer)_
- Improved documentation for module kdb in Elektra Core. _(@lawli3t)_
- Improved documentation for module key in Elektra Core. _(@lawli3t)_
- Improved documentation for module keyname in Elektra Core. _(@lawli3t)_
- Improved documentation for module keyvalue in Elektra Core. _(@lawli3t)_
- Improved documentation for module keymeta in Elektra Core. _(@lawli3t)_
- Improved documentation for module keytest in Elektra Core. _(@lawli3t)_
- Improved documentation for module keyset in Elektra Core. _(@lawli3t)_
- Fixed example in the "mount-configuration-files" tutorial #3722. _(Philipp Oppel)_
- Update and correct third party licensing information. _(-kraschitzer)_
- Use Ronn-NG instead of unmaintained ronn to generate man pages. _(Mihael Pranjić)_
- Re-generate man pages to add missing information and remove unnecessary symbols and escaping. _(Mihael Pranjić)_
- Update `doc/Doxyfile` to Doxygen 1.9.1 and fix a syntax error with the `FILTER_PATTERNS` directive. _(Mihael Pranjić)_

``

# Tests

``

``

- Fix failing `testshell_markdown_tutorial_crypto` on Mac OS and other OS with GnuPG version >= 2.3.1. _(Peter Nirschl @petermax2)_
- Use clang-format 12 for Restyled and update Restyled version. _(Mihael Pranjić)_
- Update all Restyled formatters to current versions. _(Mihael Pranjić)_

``

# Packaging

``

``

- We now package the Ruby bindings, ruby plugin and the gitresolver plugin. _(Robert Sowula)_
- We added Fedora 34 packages. _(Mihael Pranjić)_
- We added Debian Bullseye packages. _(Robert Sowula)_

``

# Build

``

``

## CMake

``

``

- Disable binding tests when `BUILD_TESTING` is disabled. _(Robert Sowula)_
- Remove unused `FindCppCMS.cmake` CMake module and unused `Boost` variables. _(Mihael Pranjić)_

``

## Docker

``

``

- Add Fedora 34 images. _(Mihael Pranjić)_
- We added release images that come with pre-installed dependencies and sudo permissions for each distribution we build packages for. _(Robert Sowula)_
- Use Clang 12 and Gradle 7.0 in Debian Sid image. _(Mihael Pranjić)_
- Remove Boost and some unused dependencies from all Docker images. _(Mihael Pranjić)_
- Use Gradle 7.0 and Ronn-NG `0.10.1.pre1` in Docker images. _(Mihael Pranjić)_
- Remove unused Debian Buster `doc` image. _(Mihael Pranjić)_

``

# Infrastructure

``

``

## Cirrus

``

``

- Use Clang 12 and Python 3.9 for macOS builds. _(Mihael Pranjić)_
- Pin GnuPG version to 2.2.x. _(Mihael Pranjić)_
- Update Fedora image to version 34. _(Mihael Pranjić)_
- Clean up unused dependencies in Arch Linux image and add Ronn-NG to generate man pages. _(Mihael Pranjić)_

``

## GitHub Actions

``

``

- Pin GnuPG version to 2.2.x. _(Mihael Pranjić)_
- Enable `jni` plugin and fix `JAVA_HOME` detection. _(Mihael Pranjić)_

``

## Jenkins

``

``

- We now build and test on Fedora 34 and 33. Fedora 32 was removed from the CI. _(Mihael Pranjić)_
- Build release documentation on Debian Sid, due to newer TeX and Doxygen packages. _(Mihael Pranjić)_

``

## Travis

``

``

- Update Ubuntu to Focal, use GCC 10 and clean up travis scripts. _(Mihael Pranjić)_

``

# Website

``

`The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:`

``

- Update `highlight.js` due to a ReDOS vulnerability and upgrade other dependencies as well. _(Mihael Pranjić)_
- Catch errors when code highlighting fails. _(Mihael Pranjić)_
- Get rid of unused code: authentication, backend, users, snippets and conversion service. _(Mihael Pranjić)_
- Fix docsearch sourcemap error. _(Mihael Pranjić)_
- Update `lodash` dependency due to security update. _(Mihael Pranjić)_

``

# Outlook

``

`We are currently working on following topics:`

``

- Elektrify KDE _(Dardan Haxhimustafa)_, _(Felix Resch)_ and _(Mihael Pranjić)_
- 1.0 API _(Stefan Hanreich)_ and _(Klemens Böswirth)_
- Improve Java Development Experience _(Michael Tucek)_
- Elektrify GNOME _(Mihael Pranjić)_
- Continious Releases _(Robert Sowula)_
- KDB access using FUSE _(Alexander Firbas)_
- Default TOML plugin _(Jakob Fischer)_
- Improve Plugin Framework _(Klemens Böswirth)_
- Improve 3-way merge _(Dominic Jäger)_
- Shell completion _(Ulrike Schäfer)_
- Ansible module _(Thomas Waser)_

``

# Statistics

``

`We closed 40 issues for this release.`

`About 17 authors changed 627 files with 15988 insertions(+) and 16768 deletions(-) in 465 commits.`

`Thanks to all authors for making this release possible!`

``

# Join the Initiative!

``

`We welcome new contributors! Read here about how to get started.`

`As first step, you could give us feedback about these release notes. Contact us via our issue tracker.`

``

# Get the Release!

``

`You can download the release from here or GitHub`

`The hashsums are:`

``

- name: elektra-0.9.6.tar.gz
- size: 7650067
- md5sum: ed33e7b61f2b1ed3742f3bc6dd046d53
- sha1: fd6082ee38e31e54b66a96a50fc4d20c9c107c89
- sha256: c8e75f4d21bf3bd6b1028e776af9ff644a17a7dfbb1f2052f50392767deea197

`The release tarball is also available signed using GnuPG from here or on GitHub`

`The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A`

`Already built API documentation can be found here or on GitHub.`

``

# Stay tuned!

``

`Subscribe to the RSS feed to always get the release notifications.`

`If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.`

`Permalink to this NEWS entry`

`For more information, see https://libelektra.org`

`Best regards, Elektra Initiative`