Sfondo
In un ecosistema software in cui diversi pacchetti dipendono da versioni diverse di altri pacchetti, a volte la risoluzione delle dipendenze termina con un conflitto di versione.
Esempio:
- Il pacchetto root A dipende da B 1. * e C 1. *.
- Il pacchetto B dipende da E 1. *.
- Il pacchetto C dipende da E 2. *. - > conflitto.
Forse gli sviluppatori della libreria C hanno discusso sul fatto che sia giusto dipendere da E 2. * anziché E 1. *, e quante persone potrebbero arrabbiarsi.
Forse gli sviluppatori della libreria E hanno anche discusso se qualcuno passerebbe al loro nuovo ramo E 2. , che potrebbe rompere la compatibilità con pacchetti più vecchi che usano ancora E 1. .
Ho visto discussioni su questo tipo di problema nella comunità PHP, per l'ecosistema Composer / Packagist. Ma presumo che discussioni simili accadano altrove.
Domanda
Mi sono chiesto, perché non rilasciare una nuova versione con il proprio nome e spazio dei nomi? Ciò consentirebbe a diverse versioni di coesistere senza conflitto.
es. invece di E 1. * e E 2. , ci sarebbe E1 1. ed E2 1. *. Il nome del pacchetto non sarebbe "E" ma "E1" / "E2". Lo spazio dei nomi per le classi sarebbe ACME::E1::*
o ACME::E::v1::*
, invece di solo ACME::E::*
.
O nell'ecosistema PHP / Composer / Packagist:
Invece di solo symfony / symfony , ci sarebbero symfony / symfony1, symfony / symfony2 ecc. E lo spazio dei nomi sarebbe essere Symfony2\Component\Asset
ecc.
O forse il numero di versione si applicherebbe a un livello inferiore, ad es. Symfony\Component2\Asset
.
Quindi la mia domanda è: esiste un ecosistema di pacchetti in cui questa è una pratica comune? C'è una buona ragione per non farlo?