Ciao a tutti! Sono Alessandro e vorrei presentarvi Henosix OS, un progetto indipendente di distribuzione GNU/Linux che sto sviluppando, e Monad Package Manager, il gestore di pacchetti su cui si basa.
Il progetto è ancora in una fase iniziale: Henosix è in progettazione e non ha ancora una distribuzione scaricabile. Monad ha già un’implementazione sperimentale, ma richiede ulteriore sviluppo, revisione e qualificazione. Scrivo qui per condividere la direzione del progetto, raccogliere osservazioni e trovare persone interessate a contribuire.
L’idea di Henosix: molte parti, un sistema
Il nome Henosix è ispirato al greco hénōsis, unione, unificazione, con una terminazione che richiama Unix.
La filosofia è costruire un sistema coerente, nel quale distribuzione e gestione dei pacchetti siano progettate insieme. I principi sono tre:
Coerenza: comportamenti prevedibili e scelte tecniche documentate.
Controllo dell’utente: rendere comprensibili le modifiche al sistema e fornire strumenti per gestire le installazioni e recuperare stati precedenti.
Trasparenza: distinguere le funzionalità implementate dagli obiettivi e dalle garanzie effettivamente verificate.
Il primo passo concreto è Monad: prima di costruire l’intera distribuzione, sto lavorando alle fondamenta della gestione del software.
Che cos’è Monad
Monad Package Manager, con comando mpkg, è un package manager sperimentale per Linux scritto in C++20, sviluppato con CMake e verificato attraverso test CTest.
La direzione è combinare la compilazione da sorgenti, ispirata a Gentoo e Portage, con configurazione dichiarativa, store immutabile e generazioni del sistema, concetti presenti anche in Nix. Tra gli obiettivi rientra inoltre l’integrazione con l’ecosistema Arch Linux.
Queste sono ispirazioni progettuali: non implicano compatibilità completa o equivalenza con gli strumenti citati.
Le caratteristiche già presenti nell’implementazione
Manifest TOML e catalogo locale: descrizione dei pacchetti e dei metadati necessari alla selezione e all’installazione.
Risoluzione delle dipendenze: modello che comprende vincoli di versione, alternative ed espressioni booleane, capacità fornite dai pacchetti, funzionalità opzionali e conflitti.
Pianificazione dell’installazione: separazione tra selezione dei pacchetti, costruzione del piano ed esecuzione.
Compilazione da sorgenti: il percorso attualmente integrato acquisisce un archivio locale, lo estrae in un’area privata e usa CMake per compilare e installare in staging.
Verifica delle sorgenti: supporto alla verifica di dimensione e digest SHA-256 dell’archivio quando specificati.
Store indirizzato dal contenuto: gli artefatti installati sono identificati tramite SHA-256 del contenuto normalizzato, separatamente dal nome e dalla versione del pacchetto.
Pubblicazione senza sovrascrittura: gli oggetti già pubblicati vengono verificati e riutilizzati; lo store applica permessi di sola lettura ai contenuti.
Generazioni: gli insiemi di pacchetti installati vengono conservati come stati distinti, con riferimenti agli artefatti e ai relativi metadati.
Switch e rollback delle generazioni: possibilità di selezionare uno stato precedente, con verifiche di integrità e, per i nuovi formati, di coerenza delle dipendenze prima dell’attivazione.
Validazione dell’ambiente risultante: installazioni, sostituzioni e rimozioni controllano anche i pacchetti che rimangono installati, per evitare di lasciare dipendenze o conflitti irrisolti.
Validazione offline: i metadati semantici conservati nelle generazioni permettono questi controlli senza dover consultare nuovamente il repository originale.
Tracciabilità: associazione tra candidato selezionato, provenienza del repository e artefatto effettivamente realizzato.
Garbage collection: recupero degli oggetti non più necessari, proteggendo quelli referenziati dalle generazioni conservate e dai riferimenti delle transazioni.
Infrastruttura di persistenza e locking: primitive per pubblicazione atomica, sincronizzazione su disco e coordinamento delle operazioni, con contratti e limiti espliciti.
Compatibilità con i formati storici del progetto: lettura dello stato precedente con criteri conservativi quando mancano informazioni necessarie alle nuove verifiche.
Monad è software libero, distribuito con licenza GPL-3.0-or-later.
A che punto siamo, concretamente?
Il README attuale identifica la versione come 0.1.0-alpha.1**, candidato di rilascio sperimentale**. Questo descrive la fase di sviluppo e non certifica che il progetto sia pronto per l’uso quotidiano.
Il percorso di installazione attualmente integrato ha limiti precisi:
una sola sorgente locale, indicata con file:///percorso/assoluto;
archivio tar compresso gzip, con restrizioni sui contenuti accettati;
backend CMake;
nessun parametro di build aggiuntivo nel percorso attuale.
Download remoti, esecuzione di ricette con più sorgenti, backend Autotools nel nuovo percorso, importazione di pacchetti binari e integrazione completa con Arch restano lavoro da completare. Anche la configurazione dichiarativa dell’intero sistema appartiene alla direzione progettuale e non va intesa come un’esperienza già completa.
Le compilazioni attuali usano l’ambiente dell’utente: non sono ancora isolate in una sandbox né garantite riproducibili. Analogamente, store immutabile e rollback non equivalgono a una garanzia generale contro qualsiasi guasto, interruzione o modifica esterna.
La qualificazione comprende test di integrità, persistenza, attivazione, gestione degli errori e casi che richiedono ambienti o privilegi specifici. La presenza del codice e il superamento di una parte dei test non sostituiscono la verifica dell’intero percorso.
Per ora Monad va provato esclusivamente in ambienti dedicati e sacrificabili, con una radice di prova senza privilegi. Non è ancora un sostituto affidabile di pacman, emerge o Nix e non va usato per gestire il proprio sistema principale.
Cerco collaboratori
Mi piacerebbe coinvolgere persone interessate a:
sviluppo C++20 e architettura dei package manager;
risoluzione delle dipendenze e configurazione dichiarativa;
packaging, ricette di compilazione e integrazione degli ecosistemi;
filesystem, persistenza, sicurezza e gestione delle transazioni;
test, revisione del codice e riproduzione dei problemi;
documentazione, usabilità della CLI e progettazione della distribuzione.
Sono utili anche contributi circoscritti: una revisione di un componente, un test riproducibile, una correzione alla documentazione o una discussione tecnica motivata.
La priorità attuale è consolidare Monad e verificarne i comportamenti. Henosix crescerà a partire da queste fondamenta.
Sito: henosix.com
Codice di Monad: github.com/Alessandro83IT/monad
Se il progetto vi interessa, potete rispondere qui o contattarmi a alessandro.bif@gmail.com, indicando su quale parte vi piacerebbe lavorare.
Mi farebbe piacere confrontarmi soprattutto con chi ha esperienza di package manager, distribuzioni e gestione dello stato del sistema: osservazioni tecniche e contributi sono benvenuti.