Ci sono molte ragioni per questo, e un po 'di storia è al fine di mettere le cose in prospettiva.
Ricorda che quando parliamo di "Linux" ciò a cui ci riferiamo generalmente è una delle molte diverse distribuzioni Linux . "Linux" è in realtà solo un kernel del sistema operativo.
L'obiettivo originale di Linux era quello di creare un sistema basato su Unix che potesse funzionare su PC (inizialmente il 386). Il primo passo è stato creare il kernel stesso. Mentre Linus Torvalds stava lavorando sul kernel Richard Stallman stava lavorando sul suo sistema Free Unix, nell'ambito del progetto GNU (GNU's Not Unix) . Per farla breve, i due in qualche modo convergevano perché GNU aveva le utilità associate (compilatore C / libreria / strumenti di compilazione, shell, editor di testo ecc.) Ma nessun core su cui eseguirlo, e Linux aveva il core ma nessuna utility per corri sopra per renderlo utile per le masse.
Questa convergenza divenne nota in qualche modo ufficialmente come GNU / Linux. Vedrai che molte distro si riferiscono ancora a se stesse come distribuzioni GNU / Linux.
A causa della natura libera e aperta di GNU / Linux, chiunque può prenderlo e creare un sistema in bundle secondo i propri gusti. Il risultato è stato che molti flussi diversi di metodi di configurazione diversi sono stati utilizzati per creare questi sistemi, il che ha avuto l'effetto collaterale di creare quasi tutti i diversi sistemi di gestione dei pacchetti per adattarsi a ciascuno di essi.
Ogni diverso sistema completo aveva i suoi seguaci forti che si sono uniti a loro nel corso degli anni, risultando in ciò che abbiamo oggi: una manciata di sistemi di gestione dei pacchetti ampiamente usati, profondamente radicati e stabili come RPM , APT / dpkg e Portage di Gentoo .
Esistono progetti, come Autopackage , che stanno tentando di risolvere il problema, ma la continua evoluzione dei vari sistemi di gestione dei pacchetti supportati significa che ci sono molti obiettivi mobili da seguire.
Ciò che alcuni produttori di software finiscono per fare è raggruppare i binari specifici e le copie delle dipendenze di cui hanno bisogno in un unico pacchetto di grandi dimensioni che funzionerà su sistemi specifici.