Upgrade/compatibility impact

Using some of the new feature will break forward compatibility. Packages using these features will not be able be build or be installed on older Fedora versions. Backward compatibility is expected to be maintained.

How To Test

Testing is done in full operation.

User Experience

Packagers will see better error messages with broken macro

Packagers will be able to use unexpanded arguments for macro (like %autosetup %{?git:-n %{name}-%{commit}})

Release Engineers / Packagers will be able to use multiple keys for signing packages

Users will be able to install multiple versions of debuginfo packages at the same time

Packagers will be able to split debuginfo per (sub-)package and one debugsource for package

Release Engineers will be able to make reproducible builds easier

Packagers will be able to write dependency generators which returns rich dependencies

Packagers will be able to specify version range or "feature" dependencies (examples are below)

Requires: (foo >= 1.0 with foo < 2.0)

Requires: (kernel with flavor = desktop)

Packagers will stop missing autogenerated dependencies coming from pkg-config files if they don't have dependencies in buildroot

Users shouldn't see any regressions

Users will be able to test tech-preview version of ndb (by changing _db_backend to ndb and running rpmbuild --rebuild)

Dependencies

New (and old) kind of rich dependencies (in Requires / Recommends) could be used only when FPC approves them

Better reporting of processing package (RPMCALLBACK_ELEM_PROGRESS) through DNF API (e.g. in Anaconda) requires support from DNF

Changing database from bdb to ndb requires patching of some programs who read/expect /var/lib/rpm/Packages and other files directly without using librpm

Nothing from above blocks implementing change.

Contingency Plan

Contingency mechanism: (What to do? Who will do it?) Fix issues quickly / Go back to rpm-4.13. It is unlikely that this requires reverting some changes in other packages as the new features will probably not already be used in F27. In case something really bad happens it might be necessary to rebuild all packages built with the broken version