Después de un año de desarrollo tuvo lugar lanzamiento del administrador de paquetes RPM 4.16.0. El proyecto RPM4 es desarrollado por Red Hat y se utiliza en distribuciones como RHEL (incluidos los proyectos derivados CentOS, Scientific Linux, AsiaLinux, Red Flag Linux, Oracle Linux), Fedora, SUSE, openSUSE, ALT Linux, OpenMandriva, Mageia, PCLinuxOS, Tizen y muchos otros. Equipo de desarrollo anteriormente independiente. desarrollado proyecto RPM5, que no está directamente relacionado con RPM4 y actualmente está abandonado (no actualizado desde 2010). Código de proyecto distribuido por Licenciado bajo GPLv2 y LGPLv2.
Se ha implementado un nuevo backend para almacenar bases de datos en SQLite DBMS. Este backend se utilizará en Fedora Linux 33 en lugar de un backend basado en BerkeleyDB.
Se ha implementado un nuevo backend experimental para almacenar bases de datos en BDB (Oracle Berkeley DB), operando en modo de solo lectura. La implementación está escrita desde cero y no utiliza código del backend heredado de BerkeleyDB, que ha quedado obsoleto pero aún se incluye de forma predeterminada.
Se eliminó el backend de la base de datos experimental basada en LMDB.
La base de datos backend basada en el almacenamiento NDB se ha declarado estable.
Se agregó soporte para macros y expresiones "%if" operador tenar (%{expr:1==0?"yes":"no"}) y ofrece una función de comparación de versiones incorporada ('%[v"3:1.2-1″ > v"2.0″]').
Se ha implementado soporte para clasificar archivos según los tipos MIME de su contenido.
Se ha propuesto una nueva versión de la API de análisis y comparación para C y Python.
Se garantiza la paralelización de la ejecución de los componentes brp-strip y del conjunto de pruebas. Se ha realizado la optimización de la paralelización del proceso de generación de paquetes.
A la utilidad rpmdb agregado opción “—salvagedb” para restaurar una base de datos dañada (solo funciona con el backend NDB).
Se agregaron nuevas macros %arm32, %arm64 y %riscv para la detección de arquitectura. También se agregó una macro incorporada %{macrobody:...} para obtener el contenido de las macros.
Está prohibido utilizar palabras que no estén separadas por comillas en expresiones, es decir en lugar de 'a == b' ahora necesitas escribir '"a" == "b"'.
El analizador de expresiones implementa la sintaxis “%[...]” para ejecutar una expresión con expansión de macro (se diferencia de “%{expr:...}” en que las macros se ejecutan primero).
Se agregó soporte para expansión corta de operadores lógicos y tenares en expresiones ("%[0 && 1 / 0]" se trata como 0 en lugar de causar un error debido al intento de división por cero).
Se agregó soporte para usar el operador lógico NOT en contextos arbitrarios (!"%?foo").
Comportamiento de los operadores "||" y "&&" se alinea con Perl/Python/Ruby, es decir. En lugar de devolver un valor booleano, ahora devuelve el último valor calculado (por ejemplo, "%[2 || 3]" devolverá 2).
Se agregó la capacidad de verificar formatos alternativos de firmas digitales y hashes.
Se agregó soporte para metadependencias (Requires(meta): somepkg), que no afectan el orden de instalación y eliminación.
Se agregó la opción "--rpmv3" a rpmsign para forzar el uso de firmas digitales en formato RPM3.
Se agregó la opción de instalación "--excludeartifacts" para omitir la instalación de documentación, archivos de configuración de ejemplo y otros datos relacionados.
Soporte obsoleto para RPMv3 y los backends criptográficos beecrypt y NSS.