Italiano

Strumenti per sviluppatori · Generatore UUID

Dall'Apollo NCS a RFC 9562: una breve storia del UUID

· Sfondo

uuid crittografia API del browser

Una sequenza temporale dall'Apollo Network Computing System attraverso DCE, GUID e RFC 4122 a RFC 9562
Illustrazione vettoriale originale ToolAcre

Il layout strano 8-4-4-4-12 e la dimensione 128-bit sono ereditati dal calcolo distribuito degli anni '80. Questo post traccia il UUID dal Network Computing System di Apollo attraverso DCE, GUID di Microsoft e due standard IETF.

Perché 128 bits e perché quei trattini? - le domande che ogni nuovo arrivato pone e alle quali la storia risponde

The 8-4-4-4-12 hyphenated format and 128-bit size of a UUID are design choices that historians immediately question. Perché non 96 bits per calcoli più semplici? Perché quel layout specifico del segmento? Perché base-16 con trattini invece di base-64 o una codifica più semplice? The answers lie in the Apollo Network Computing System of the early 1980s, a distributed computing platform that faced a genuine problem: systems in a network needed to allocate unique identifiers without a central authority, and those identifiers had to be globally unique with overwhelming probability. Apollo NCS solved this problem by combining a timestamp, a network address and a clock sequence into a 128-bit identifier that could be generated independently by any machine.

Apollo Network Computing System: l'origine negli anni '80 di identificatori univoci costruiti in base al tempo e a un indirizzo di rete

The current standard records a lineage from Apollo NCS through the OSF Distributed Computing Environment and later Microsoft platforms. Questa storia spiega perché i sistemi moderni condividono una famiglia riconoscibile di 128-bit preservando i marcatori di varianti per i layout più vecchi. Non stabilisce una garanzia di unicità assoluta: ogni versione ha le proprie regole di generazione e modalità di fallimento. Il risultato duraturo è l’interoperabilità senza un servizio di registrazione centrale. A browser, database and operating system can exchange the same canonical hexadecimal form, inspect its variant and version fields, and decide whether the producing recipe fits the receiving system's needs.

OSF DCE e il campo della variante: come l'ambiente di calcolo distribuito ha formalizzato il layout e aggiunto i bit della variante

Il layout consente molteplici strategie di generazione attraverso campi versione e variante incorporati fin dall'inizio della progettazione. La generazione basata sul tempo, la generazione casuale e la generazione basata sul nome possono coesistere nello stesso spazio degli identificatori. Modern applications have different requirements than 1980s NCS—databases that want sortable keys, cloud systems that want privacy, distributed systems that want collision resistance—yet the same 128-bit structure still accommodates them. Versions 6 and 7 which were added in RFC 9562 in 2024 prove that the original designers left room for future evolution without breaking backward compatibility.

GUID di Microsoft — COM, il registro e lo stile tra parentesi graffe e maiuscole che persiste ancora oggi

L'Apollo Network Computing System era una piattaforma informatica distribuita che funzionava sulle workstation Apollo Computer negli anni '80. Si basava su identificatori univoci a livello globale per chiamate di procedure remote, replica dei dati e servizi di denominazione. I nodi della rete non avevano modo di coordinare l'assegnazione degli ID perché non era possibile contattare un server centrale se la rete poteva essere partizionata o disconnessa. Pertanto i progettisti di Apollo hanno creato un formato 128-bit che combina un timestamp 60 bits, un identificatore di nodo solitamente derivato dall'indirizzo MAC della scheda di rete 48 bits e una sequenza di orologio 14 bits per gestire i cambiamenti dell'orologio. Questo approccio consente ai nodi di generare identificatori in modo indipendente combinando il tempo, una sequenza di orologio e un campo del nodo; il suo comportamento dipendeva ancora dagli orologi e dalla selezione dei nodi.

RFC 4122 (2005) - IL IETF standard che definiva le versioni 1 A 5 e il URN spazio dei nomi, allineato con ITU-T X.667

Quando OSF successivamente lo standardizzò per il loro ambiente di elaborazione distribuita attorno a 1992, mantennero lo stesso layout e aggiunsero il campo variante per distinguere diversi tipi di UUID. Il design era già stato collaudato nei sistemi di produzione. Il IETF ha standardizzato RFC 4122 in 2005, quasi vent'anni dopo l'Apollo NCS e circa tredici anni dopo la standardizzazione di DCE. RFC 4122 versioni codificate da 1 a 5: versione 1 per generazione basata sul tempo, versione 3 per nome con MD5, versione 4 per casuale e versione 5 basata sul nome con SHA-1. Lo standard era stabile e ampiamente adottato perché era già onnipresente nell'infrastruttura Microsoft Windows, DNS e nei sistemi distribuiti. Al momento della pubblicazione di RFC 4122, UUID era già così integrato nell'infrastruttura che la standardizzazione era quasi accademica.

RFC 9562 (2024) — la revisione che ha reso obsoleto RFC 4122, ha aggiunto le versioni 6, 7 e 8 e ha scritto consigli moderni sulla casualità

In 2024, IETF ha pubblicato RFC 9562, che rende obsoleto RFC 4122 e aggiunge le versioni 6, 7 e 8. La versione 6 riordina i campi temporali della versione 1 per una migliore località e ordinabilità dell'albero B. La versione 7 utilizza un timestamp Unix moderno e familiare invece del conteggio basato su 1582, migliorando l'ordinabilità e adattandosi ai requisiti dei database moderni. La versione 8 riserva spazio per implementazioni personalizzate e progetti sperimentali UUID. Le nuove versioni risolvono i problemi emersi in quarant'anni di implementazione di UUID: le scarse prestazioni del database delle chiavi casuali, la perdita di privacy della versione 1 e il desiderio di identificatori ordinabili nei sistemi cloud. Tuttavia la struttura principale 128-bit, i campi della variante e della versione e il layout generale rimangono intatti.

Cosa non copre: dettagli di implementazione di ciascuna versione, che hanno i propri post

L'adozione da parte di Microsoft degli UUID come GUID, identificatori univoci globali nel modello a oggetti componente, li ha incorporati profondamente nei sistemi Windows a partire dagli anni '90. GUID è apparso nel registro, nelle interfacce COM e nell'infrastruttura ActiveDirectory. Microsoft ha aggiunto una variazione minore: ha archiviato i GUID in ordine di byte little-endian per alcuni componenti, allontanandosi dallo standard dell'ordine di byte di rete. Questa stranezza persiste in alcune API di Windows: se esporti un GUID da Windows e lo importi in un sistema Unix, i problemi di ordine dei byte possono causare apparenti discrepanze. Ma il formato stesso è lo stesso e la confusione è una nota a piè di pagina dello standard, non una differenza fondamentale. Lo stile parentesi graffe e maiuscole {3FA85F64-5717-4562-B3FC-2C963F66AFA6} deriva dalle convenzioni di Windows; altri sistemi preferiscono le lettere minuscole e i trattini senza parentesi graffe.

Conclusione: un progetto quarantennale che funziona ancora: il generatore ToolAcre produce gli UUID casuali (versione 4) che RFC 9562 definisce ancora per i casi in cui non è necessario ordinare

Una sequenza temporale elaborata mostra la longevità e la stabilità del design: anni '80 Apollo NCS inventa il concetto; 1992 OSF DCE standardizza il layout; Negli anni 2000 Microsoft lo incorpora in Windows; 2005 IETF pubblica RFC 4122; 2024 IETF pubblica RFC 9562 con versioni moderne. Si tratta di uno degli sforzi di standardizzazione più lunghi nel campo dell'informatica, non a causa di controversie ma perché il progetto originale era molto robusto e adattabile. Ha accolto ondate di cambiamenti architetturali, dai sistemi distribuiti NFS ai database cloud, da Windows COM ai dispositivi mobili, dalle macchine 64 bit degli anni '80 ai sistemi moderni, senza una riprogettazione fondamentale. L'impatto pratico è che gli UUID sono onnipresenti e stabili; quando generi un UUID con il generatore ToolAcre, stai generando un identificatore il cui formato è stato stabilito negli anni '80, standardizzato a livello internazionale in 2005 e mantenuto in 2024 con rilevanza duratura.