Remi's RPM repository - Blog


Blog | Forum | Repository | Wizard

vendredi 29 mars 2024

DNF 5 and Modularity

In an enterprise distribution, such as RHEL, because of the very long life cycle (10 years or more), there is 2 opposite needs:

  • stability, which means keeping the same version for the whole life of the distribution (ex EL-7 still provides PHP 5.4)
  • new versions needed by new projects (ex: a lot of projects now require PHP 8)

So, this means we need to be able to distribute alternative versions in a safe way.

This of course also affects my repository, which has the goal to provide more alternative versions and extensions.

This is not a need for Fedora which has a very sort life cycle (6 months), so with no need for newer versions in a stable release.

1. The old time

Until EL-7, the main solution was to create 1 optional repository per version (ex: the RHWAS channel in EL-4).

This was not perfect, mostly working only for newer versions, raising conflicts because 2 versions were available in active repositories.

In EL-5 using different names was tried (e.g. php version 5.1 and php53 for version 5.3), this was a real nightmare, and this has been abandoned.

2. Software Collections

A nice idea appears in EL-6 and EL-7 to provide alternative versions in a separated RPM namespace, installed in a separated tree (/opt), allowing the installation of various versions simultaneously.

Mostly because of some design faults, the community rejected this and the project was abandoned in EL-8 (excepted for newer GCC, in devtoolset).

As initial design issues were fixed, I really appreciate SCL and still use them, and provides them in my repository, see My PHP development Workstation, mostly because I like being able to install various versions simultaneously.

3. Modularity

EL-8 introduced modularity, a new way to manage alternative versions in optional streams. When a stream is disabled its packages are ignored by dnf, when it is enabled its packages are preferred. This works very well for both newer and older versions.

3.1. Everything is module

In EL-8 the idea was to provide everything as modules. This was probably a terrible mistake that caused the community to reject it again.

Indeed, especially for libraries this probably doesn't make sense. This also creates a complex dependency tree, and a very complex build system (MBS).

3.2. Module only for alternatives

In EL-9 everything was greatly simplified. The base system works without modules that are only used for alternative versions (ex: PHP 8.0 by default, but 8.1 and 8.2 are available as modules).

This is probably how modularity should have been used from the beginning. And this works really smoothly. Also, MBS is not really required in this simple scheme, with a simple build configuration being enough.

But it was too late, and the community (mostly the Fedora one) had already killed it.

4. DNF version 5

This is the successor of DNF version 4 which introduces modules. But, as Fedora chose to stop using modules, the needed features are not implemented.

For now, dnf5 only supports enabling/disabling streams, but this is far from usable, and perhaps everything related to modularity will be dropped in the final version.

4.1. Fedora 40

In the upcoming Fedora 40, dnf is still version 4 by default, and dnf5 is also available for test.

Module management still works, despite a small regression which has a workaround.

4.2. Fedora 41

In the future Fedora 41, dnf version 5 should become the default, probably without modularity.

5. My repository

I plan to continue to provide modules for Fedora 40 and probably EL-10, with dnf 4.

I need to think about later versions, having to switch back to the old way (1 repo per version) makes me terribly sad and gives me nightmares.

I've read a proposal to switch back to provide alternative versions under a different namespace. Which seems like switching 10 years back, with a broken solution.

6. Conclusion

Of course, I dream of seeing Modularity support maintained in dnf 5 ;)

I'm disappointed with the bad Fedora community feedback on solutions proposed to solve Enterprise-only needs.

And what a waste of developer energy on these features (SCL and Modularity)

lundi 21 septembre 2020

PHP extensions status with upcoming PHP 8.0

With PHP 8.0 entering stabilization phase, time to check the status of most commonly used PHP extensions (at least, the ones available in my repository).

Here is the (mostly) exhaustive list.

Lire la suite...

lundi 16 mars 2020

Changes in zip extension version 1.18

The zip extension version 1.18.0 has been released.


Lire la suite...

Changements dans l'extension zip version 1.18

L'extension zip version 1.18.0 vient d'être publiée.


Lire la suite...

vendredi 13 mars 2020

"rpminfo" php extension

I'm used to write scripts using PHP, of course, this is the language I know the best.

But I had a lot of needs requiring parsing system command output, and exec is evil.

So I create a new extension rpminfo providing bindings for the librpm library API. This extension is designed to provide simple functions, a low-level API, that PHP code can take advantage of.

After the recent developments done, I just released version 0.4.0 which can be considered as stable, even if the API still can evolve before version 1.0.0.

Lire la suite...

Extension "rpminfo" pour php

J'ai l'habitude d'écrire mes scripts en PHP, normal, c'est le language que je connais le mieux.

Mais j'avais de nombreux besoins nécessitant d'analyser la sortie de commande systèmes, et exec c'est le mal.

J'ai donc créer une nouvelle extension rpminfo utilisant l'API de la bibliothèque librpm. Cette extension est conçue pour fournir des fonctions simples, de bas niveau, qui peuvent être ensuite exploitées par le code PHP.

Suite aux développements récents, le viens de publier la version 0.4.0 qui peut désormais être considérer comme stable, même si l'API pourra encore évoluer avant la version 1.0.0.

Lire la suite...

mercredi 23 octobre 2019

FFI extension usage with PHP 7.4

The FFI extension (Foreign Function Interface) give access to features from system libraries directly from PHP without any need to additional extension.

Here is some examples, results of my tests of this  extension.

Lire la suite...

Utilisation de l'extension FFI avec PHP 7.4

L'extension FFI (Foreign Function Interface) permet d'accéder aux fonctionnalités de bibliothèques systèmes directement depuis PHP sans recours à une autre extension.

Voici quelques exemples, résultats de mes tests de cette extension.

Lire la suite...

jeudi 23 mai 2019

PHP extensions status with upcoming PHP 7.4

With PHP 7.4 entering stabilization phase, time to check the status of most commonly used PHP extensions (at least, the ones available in my repository).

Here is the (not yet) exhaustive list.

Lire la suite...

jeudi 21 mars 2019

Small history about QA

Despite I'm mainly a developer, I now use most of my time on doing QA on PHP projects.

Here is, around release of versions7.2.17RC1 and 7.3.4RC1 a report which should help to understand this activity.


Lire la suite...

Petite histoire de QA

Bien que développeur, je passe désormais la majeur partie de mon temps à faire de la QA (assurance qualité) sur les projets autour de PHP.

Voici à travers la sortie des versions 7.2.17RC1 et 7.3.4RC1 un rapport permettant de mieux comprendre cette activité.


Lire la suite...

mardi 11 décembre 2018

Work in progress: PHP stack for EL-8

As RHEL-8.0-Beta is released, it's time to start preparing PHP stack for EPEL-8.

Here some notes about this work in progress.

Lire la suite...

lundi 2 juillet 2018

PHP extensions status with upcoming PHP 7.3

With PHP 7.3 entering stabilization phase, time to check the status of most commonly used PHP extensions (at least, the ones available in my repository).

Here is the exhaustive list.

Lire la suite...

mardi 14 novembre 2017

End of PHP 7.2 FTBFS marathon

QA is a very important part of my daily work, and since PHP 7.2 is available in Fedora rawhide, we have to ensure everything works as expected with this new version.


Lire la suite...

jeudi 23 mars 2017

Away from github

For some years, the package development tracking for my repository was managed on a github repository:

This was, of course, for easiness.

Contrary to fashion of using this gratis, but not really free, service, I chose to self-host my work on the dedicated server already used for my repository, my blog and the forum.

All the sources of packages, tools and web sites will be progressively moved to the server, and can be browsed on

Github repository will stay open, only used for issues and other requests, but patch proposal should be send by email (preferably using  git format-patch so I can apply them using git am).

I will also consider moving from cgit to pagure, as soon as possible.

Partir de github

Depuis quelques années, le développement des paquets pour mon dépôt était géré dans un depôt github :

C'était évidement une solution de facilité.

Au contraire de la mode actuelle d'utiliser ce service gratuit, mais pas vraiment libre, j'ai décidé d'auto-héberger mon travail sur le serveur dédié utilisé pour mon dépôt, mon blog et le forum.

L'ensemble des sources des paquets, des outils et des sites seront donc progressivement déplacés vers le serveur, est sont consultables sur

Le dépôt github restera ouvert uniquement pour les rapports de bug ou demande diverses, mais les proposition de correctifs devront être transmises par messagerie (en utilisant de préférence git format-patch afin que je puisse les appliquer avec git am).

J'envisage aussi de remplacer, dès que possible, cgit par pagure.

mercredi 1 mars 2017

ZipArchive with encryption

Point of the situation with the development of zip extension version 1.14.0 which implements support of encrypted archives.

Lire la suite...

ZipArchive avec chiffrement

Un petit point d'avancement du développement de l'extension zip version 1.14.0 qui intègre désormais le support des archives chiffrées.

Lire la suite...

samedi 11 juin 2016

PHP 7.1 and number check

PHP 7.1 introduce a new check during conversion of string to number.

Lire la suite...

PHP 7.1 et contrôle des nombres

PHP 7.1 introduit un nouveau contrôle lors de la conversion d'une chaine en nombre.

Lire la suite...

- page 1 de 3