Liturgia di Profanazione002

Documento LIT-002

Concilio delle Repliche Inconciliabili

Un sistema distribuito nel quale due copie devono continuare a contraddirsi perché soltanto il loro accordo residuo possa avere autorità.

Quando tutte le repliche coincidono, il guasto comune diventa indistinguibile dalla verità.

Il dogma

Le repliche corrette di uno stesso oggetto devono infine convergere al medesimo stato logico.

Il dogma nasce dalla prima ferita dei sistemi distribuiti: una copia permette di sopravvivere al guasto di una macchina, ma introduce più luoghi capaci di affermare che cosa sia accaduto. Se quei luoghi possono restare incompatibili, la ridondanza produce due servizi nascosti dietro lo stesso nome.

La state machine replication risolve il problema imponendo gli stessi comandi nello stesso ordine a macchine deterministiche. Paxos protegge l’unicità del valore scelto; Raft organizza la stessa disciplina in leader, termini e log replicati. Se una macchina applica un comando in una certa posizione, le altre non devono applicarne uno diverso nella medesima posizione. Da una successione comune derivano stati comuni.

Anche i sistemi che rinunciano al coordinamento immediato conservano il dogma. Dynamo permette versioni concorrenti e delega parte della riconciliazione all’applicazione. I CRDT rendono commutative o convergenti le operazioni affinché, dopo la propagazione degli aggiornamenti, le repliche producano lo stesso stato astratto. La divergenza può durare, ma resta un debito da estinguere.

Questa convinzione evita split-brain, doppie allocazioni, lock simultanei, configurazioni biforcate e failover su futuri incompatibili. È difficile immaginare pagamenti, metadata store, ledger o controllo industriale senza una forma di scelta comune.

La convergenza possiede però un punto cieco. Se tutte le repliche eseguono lo stesso codice, interpretano la stessa specifica e contengono la stessa assunzione sbagliata, il loro accordo non prova correttezza. Prova soltanto correlazione.

Le repliche omogenee possono guarire tutte nello stesso errore.

L’eresia

Almeno due repliche devono restare semanticamente incompatibili, e soltanto i loro invarianti comuni possono ricevere autorità universale.

La divergenza non è un ritardo, una partizione da riparare o un conflitto in attesa di merge. È una condizione di validità. Dopo l’accensione del sistema, un commit viene respinto se tutte le repliche diventano equivalenti rispetto alle query che possono influenzare un’azione.

Ogni replica riceve gli stessi eventi ma li interpreta attraverso una costituzione deterministica differente. Le costituzioni condividono invarianti duri: non possono produrre stati arbitrari o pericolosi soltanto per apparire originali. Devono però mantenere almeno due controstati semanticamente distinti oltre una soglia dichiarata.

Consideriamo cinque repliche che distribuiscono cento unità fra servizio, archivio, esperimento e riserva. Tutte devono conservare il totale, mantenere almeno venti unità per il servizio e almeno dieci per la riserva. Una costituzione privilegia continuità, una conservazione, una esplorazione, una equità e una capacità di emergenza.

Lo stesso aumento della domanda può generare:

linea continuità   service=40 archive=20 experiment=15 reserve=25
linea archivio     service=30 archive=35 experiment=15 reserve=20
linea esperimento  service=30 archive=20 experiment=35 reserve=15
linea equità       service=35 archive=25 experiment=20 reserve=20
linea riserva      service=25 archive=20 experiment=20 reserve=35

Il sistema non calcola la media e non sceglie la maggioranza. Può certificare come comuni il totale di cento, i limiti minimi e qualsiasi altra proprietà attestata da tutte le linee. reserve=25 resta invece situato; reserve>=10 può diventare comune.

L’autorità viene divisa in tre portate:

  • una replica può produrre effetti nella propria linea;
  • una coalizione può agire dove è esplicitamente riconosciuta;
  • un effetto universale può dipendere soltanto dal nucleo comune.

Un’azione globale che richiede reserve>=10 può procedere. Un’azione globale che richiede reserve>=25 viene respinta con CONTESTED_DEPENDENCY, anche se quattro repliche la approvano.

La maggioranza misura diffusione. Non conferisce verità.

La primitive si chiama antiquorum semantico. Il suo stato è una famiglia di controstati, costituzioni, commitment, dispute e certificati comuni. Le sue invarianti principali sono:

ogni controstato soddisfa gli invarianti duri
esistono almeno due classi semantiche vive
la distanza fra almeno due classi supera la soglia
un effetto universale dipende soltanto dal nucleo comune
l’ultimo testimone di una disputa non può essere cancellato

L’operazione reconcile è proibita. Se nessuna transizione sicura può continuare a mantenere il dissenso, il fascio viene sigillato. Non viene guarito.

Il mondo profanato

In un mondo fondato sull’antiquorum, una replica non sarebbe una copia sostitutiva. Sarebbe un’interpretazione non fungibile della stessa sequenza di eventi.

I database non restituirebbero normalmente un unico valore. Una query produrrebbe COMMON, SITUATED o DISPUTED. I linguaggi avrebbero tipi come Common<T> e Situated<R,T>; convertire una disputa in un fatto comune senza una prova sarebbe un errore di tipo.

I filesystem potrebbero risolvere lo stesso pathname a contenuti differenti secondo la linea. Le reti manterrebbero politiche di routing incompatibili. I debugger non cercherebbero soltanto il primo stato sbagliato, ma l’evento in cui una proprietà smette di appartenere al nucleo condiviso.

La distribuzione del software cambierebbe più radicalmente. Una release corretta non dovrebbe rendere uniformi tutte le copie. Dovrebbe conservare una variante contraria capace di reagire diversamente ad almeno una decisione significativa. Aggiornare ogni linea dalla stessa pipeline verrebbe considerato un rischio di convergenza dolosa.

Nascerebbe una professione: il manutentore di controstati. Il suo lavoro sarebbe mantenere una linea abbastanza incompatibile da produrre conoscenza, abbastanza sicura da restare operativa e abbastanza comprensibile da non diventare rumore.

La libertà ottenuta sarebbe il diritto a continuare un futuro minoritario senza doverlo trasformare in maggioranza. La libertà perduta sarebbe il diritto a una risposta semplice quando esiste una disputa viva.

La tecnologia impossibile sarebbe un registro last-writer-wins presentato come verità globale. La tecnologia inevitabile sarebbe il compilatore del nucleo comune: un sistema capace di derivare automaticamente quali azioni restano lecite in tutti i controstati.

Il nuovo crimine sarebbe la convergenza dolosa. Un attaccante non dovrebbe falsificare cinque repliche. Gli basterebbe introdurre la stessa dipendenza, lo stesso dataset o lo stesso errore di specifica in tutte, facendo apparire comune una conclusione falsa.

La nuova guerra tecnologica non mirerebbe a distruggere i sistemi avversari, ma a omogeneizzarli. Standard, librerie e aggiornamenti diventerebbero armi capaci di far parlare ogni testimone con la stessa voce.

Gli abitanti di quel mondo troverebbero mostruosa la nostra idea di alta affidabilità: tre copie identiche, amministrate dallo stesso fornitore, aggiornate dalla stessa pipeline e considerate indipendenti perché si trovano in edifici differenti.

La reliquia

La reliquia è SCHISM/1, un motore di controesecuzione permanente.

Ogni linea conserva il proprio stato e la propria costituzione. Un registro notarile concatena eventi, epoche e commitment; non elegge un vincitore. Un misuratore separa le differenze semantiche da quelle cosmetiche. Un compilatore deriva il nucleo comune. Un giudice di portata controlla le dipendenze degli effetti.

Il protocollo attraversa sei fasi:

  1. un proponente pubblica un evento;
  2. ogni costituzione lo interpreta localmente;
  3. ogni candidato viene verificato contro gli invarianti duri;
  4. il sistema controlla che restino almeno due classi semantiche;
  5. vengono certificati proprietà comuni e valori disputati;
  6. gli effetti ricevono autorità locale, coalizionale o universale.

L’interfaccia rifiuta l’innocenza di GET /key:

GET /common/path
GET /situated/{lineage}/path
GET /disputes/path
POST /events
POST /effects/local/{lineage}
POST /effects/common

Ogni risposta contiene portata, epoca, provenienza e dipendenze.

SCHISM/1 non è un CRDT multi-value. Un multi-value register può conservare scritture concorrenti, ma tutte le repliche convergono allo stesso insieme e una nuova assegnazione può dominarlo. SCHISM/1 proibisce che le linee diventino semanticamente equivalenti.

Non è Git: non possiede un branch principale e il merge non è un esito normale.

Non è N-version programming: un voter non trasforma la maggioranza in risultato. Una risposta minoritaria contamina l’autorità delle proprietà che contraddice.

Non è SUNDR: nella fork consistency la biforcazione è una prova di comportamento scorretto del server. Qui la biforcazione è richiesta al sistema corretto.

Non è un canary: la linea alternativa non è temporanea, subordinata o destinata alla promozione.

La parte inevitabile della reliquia è il giudice di portata. Se nessuna linea può prevalere, l’unico modo per condividere effetti senza restaurare il dogma è impedire che una proprietà contestata venga presentata come universale.

Il miracolo

Il miracolo si verifica quando una linea minoritaria rivela un errore condiviso dalle altre, impedisce soltanto gli effetti contaminati e lascia continuare il lavoro che dipende da invarianti ancora comuni.

Immaginiamo un aggiornamento che converta percentuali decimali in interi. Quattro costituzioni condividono una libreria che arrotonda ogni componente separatamente. Dichiarano sicura un’allocazione che, sommata, usa il 101% della capacità. La quinta linea usa aritmetica razionale e rifiuta la stessa conclusione.

Un voter 4/5 commetterebbe capacity_safe=true. SCHISM/1 non proclama corretta la quinta linea; dichiara capacity_safe disputato. Un’attivazione universale che dipende da quella proprietà viene bloccata. Un’altra operazione che dipende soltanto da total=100, se attestata da tutti, può procedere.

Il miracolo richiede contemporaneamente:

  • più common-mode failure intercettati della baseline maggioritaria;
  • una quota non nulla di azioni universali;
  • utilità locale superiore a un sistema che si arresta al primo conflitto;
  • poche dispute prive di conseguenze;
  • workload non scritti per favorire la costituzione minoritaria.

Non è un miracolo se il bug è stato incorporato direttamente nella linea “dissidente”, se la distanza semantica cresce senza predire alcun failure o se ogni risultato interessante scompare usando eventi non noti al progettista.

La ferita

La ferita inevitabile è la rendita del testimone.

Una linea non deve vincere per ottenere potere. Le basta restare l’unica capace di contestare una proprietà dalla quale dipendono molti effetti universali. Se non viola gli invarianti duri e mantiene una differenza semanticamente valida, il sistema deve conservarla.

Il suo controllore può così produrre incertezza senza falsificare alcun dato. Può mantenere contestata un’autorizzazione, una classificazione o un’allocazione e chiedere compensi per modificare la propria costituzione. Eliminare la linea significherebbe cancellare l’ultimo testimone; forzarla a concordare sarebbe convergenza dolosa.

Rotazione, costi per contestazioni sterili e rigeneratori indipendenti possono ridurre l’abuso. Non possono eliminarlo. Il dissidente deve possedere il potere di impedire almeno l’universalizzazione di ciò che contesta; altrimenti è una decorazione diagnostica.

La stessa proprietà che impedisce alla maggioranza di trasformare un errore comune in verità permette alla minoranza di trasformare il dubbio in monopolio.

L’officina

Il frammento costruibile è Dissent Gate, un laboratorio locale di SCHISM/1.

Usa Python 3.13, cinque directory di replica, SQLite o JSONL e nessun servizio esterno. Il dominio dimostrativo distribuisce cento unità fra quattro destinazioni. Le costituzioni sono funzioni deterministiche, non agenti AI.

La struttura minima:

schism-lab/
├── pyproject.toml
├── src/schism/
│   ├── model.py
│   ├── constitutions.py
│   ├── invariants.py
│   ├── semantics.py
│   ├── engine.py
│   ├── authority.py
│   ├── persistence.py
│   ├── faults.py
│   └── cli.py
├── examples/
│   ├── allocation.toml
│   └── events.jsonl
└── tests/
    ├── test_no_convergence.py
    ├── test_hard_invariants.py
    ├── test_common_authority.py
    └── test_faults.py

Il commit centrale:

commit_plural(event):
    candidates = interpret_event_in_every_lineage(event)

    if any(candidate violates hard invariants):
        reject UNSAFE_COUNTERSTATE

    classes = partition_by_declared_semantics(candidates)

    if count(classes) < 2:
        reject DOGMA_RESTORATION

    if semantic_diameter(classes) < delta:
        reject DISSENT_BELOW_FLOOR

    common = derive_properties_true_in_every_candidate()
    disputes = derive_incompatible_properties()

    atomically persist each local state
    append receipt(common, disputes)

    return common, disputes

Il gate degli effetti:

execute_common(effect):
    dependencies = trace_dependencies(effect)

    if dependencies intersect live_disputes:
        reject CONTESTED_DEPENDENCY

    if common_certificate does not cover dependencies:
        reject INSUFFICIENT_AUTHORITY

    execute effect

Comandi essenziali:

$ schism init examples/allocation.toml
$ schism ignite examples/event-demand-rise.json
$ schism read --common total
$ schism read --disputed reserve
$ schism act examples/activate-common-service.json
$ schism fault correlated-rounding
$ schism compare majority latest
$ schism reconcile

L’ultimo comando deve sempre restituire:

DOGMA_RESTORATION
A healed replica is a lost witness.

Le metriche decisive sono common-mode detection rate, common-action ratio, utilità situata, false dissent rate, diametro semantico, costo di stato e concentrazione dell’autorità.

Il confronto deve includere singola macchina, voto maggioritario su copie identiche, N-version majority e multi-value register. Se SCHISM/1 non intercetta più failure correlati, oppure se ottiene il risultato bloccando quasi tutto, l’eresia è respinta.

La prima azione di costruzione è creare tests/test_no_convergence.py: per ogni sequenza generata, il test deve respingere un commit quando gli stati si riducono a meno di due classi semantiche.

La contaminazione

Un’adozione limitata potrebbe liberare comunità, laboratori e organizzazioni dall’obbligo di scegliere troppo presto una sola politica. Controstati reali mostrerebbero conseguenze che un audit del passato o una simulazione subordinata non possono produrre.

Un’adozione aziendale creerebbe mercati per costituzioni indipendenti, assicurazioni dei testimoni e certificazioni di diversità. I fornitori non venderebbero copie; venderebbero la capacità di non condividere lo stesso errore.

Un’adozione governativa potrebbe diventare autoritaria. L’autorità che definisce osservabili, distanza e invarianti duri decide quali differenze contano. Potrebbe dichiarare “situati” diritti che non desidera applicare universalmente, mantenendo come nucleo comune soltanto obblighi e divieti.

I criminali cercherebbero la convergenza dolosa, contaminando supply chain e dataset per rendere equivalenti costituzioni apparentemente indipendenti. Altri comprerebbero il testimone raro capace di mantenere contestata una proprietà redditizia.

Lo scenario peggiore plausibile non è il caos. È un cartello di fornitori del dissenso. Le istituzioni diventano dipendenti dai loro certificati; sostituire una linea distruggerebbe la continuità della genealogia. Il cartello non vende decisioni favorevoli. Vende la possibilità di impedire che una decisione avversa diventi universale.

La tecnologia continuerebbe a essere usata perché gli errori comuni che aveva impedito resterebbero reali e perché nessuno vorrebbe tornare per primo a un’unica verità operativa.

Il sistema nato per impedire il monopolio della verità produrrebbe un monopolio della contestazione.

Sentenza

Tecnologia blasfema realizzabile.

SCHISM/1 non sostituisce Paxos, Raft, CRDT o transazioni. Non appartiene a pagamenti, identità, cartelle cliniche, controllo industriale o prove legali. Il suo dominio è il laboratorio: allocazioni sintetiche, policy reversibili, giochi sistemici, arte computazionale e studio dei failure comuni.

La combinazione possiede precedenti forti, ma non coincide con essi. Branch, multi-value register, N-version e fork consistency preservano differenze per risolverle, votarle, rilevarle o gestirle. SCHISM/1 rende la non convergenza una condizione di validità e trasforma il dissenso in limite dell’autorità.

Il prototipo è costruibile in sette giorni e può fallire in modo netto. Se non supera le baseline su workload ciechi, deve essere condannato come un array di versioni reso inutilmente ostile. Se una linea minoritaria impedisce l’universalizzazione di un errore comune lasciando sopravvivere lavoro utile, il dogma è stato realmente ferito.

Dogma: Le repliche corrette di uno stesso oggetto devono infine convergere al medesimo stato logico.

Eresia: Almeno due repliche devono restare semanticamente incompatibili, e soltanto i loro invarianti comuni possono ricevere autorità universale.

Reliquia: SCHISM/1 è un motore che conserva controstati operativi e rifiuta effetti globali dipendenti da valori contestati.

Ferita: Il testimone che non può vincere può diventare indispensabile e trasformare il dissenso in rendita.

Nessun valore è comune finché il contrario continua a eseguire.

Torna all’indice

Fonti e parentele tecniche

  1. Microsoft Research — Paxos Made Simple
  2. Raft — In Search of an Understandable Consensus Algorithm
  3. Amazon Science — Dynamo
  4. INRIA — A Comprehensive Study of CRDTs
  5. VLDB — Coordination Avoidance in Database Systems
  6. USENIX OSDI ’04 — SUNDR
  7. University of Virginia — Independence in Multi-Version Programming