Existe alguma diferença entre um GUID e um UUID?

866

Eu vejo esses dois acrônimos lançados, e eu queria saber se existem diferenças entre um GUID e um UUID?

Jon Tackabury
fonte
183
Eu posso dizer "GUID", não posso dizer "UUID".
Hardwareguy
48
I pronunciar UUID como "você-wid"
Matt Greer
106
Eu digo "você-você-I-dee", mas eu não sou um falante nativo ...
Wilt
20
Especificação de UUID ( RFC-4122 ) diz no resumo: Esta especificação define um Uniform namespace nome do recurso para UUIDs (Universally Unique Identifier), também conhecido como GUIDs (Globally Unique Identifier)
Tom
89
Os UUIDs são únicos universalmente (escopo do universo), enquanto os GUIDs são únicos apenas globalmente (escopo do globo). Nem são multiversais únicos, ou seja, não são MUIDs. Isso significa que, em princípio, você não deve usar GUIDs interplanetariamente. Fora isso, eles são praticamente intercambiáveis.
RSP

Respostas:

817

A resposta simples é: não há diferença , eles são a mesma coisa. Trate-os como um valor de 16 bytes (128 bits) usado como um valor exclusivo. No Microsoft-speak, eles são chamados de GUIDs, mas os chamam de UUIDs quando não estão usando o Microsoft-speak.

Até os autores da especificação UUID e da Microsoft afirmam que são sinônimos:

  • Desde a introdução ao IETF RFC 4122 " Um espaço para nome URN de um identificador exclusivo universal (UUID) ": "um espaço de nome Uniform Resource Name para UUIDs (identificador exclusivo universal), também conhecido como GUIDs (identificador exclusivo globalmente)."

  • Da Recomendação ITU-T X.667, Norma Internacional ISO / IEC 9834-8: 2004 : "Os UUIDs também são conhecidos como GUIDs (Identificadores Exclusivos Globalmente), mas esse termo não é usado nesta Recomendação".

  • E a Microsoft ainda afirma que um GUID é especificado pelo UUID RFC: "Na programação do Microsoft Windows e nos sistemas operacionais Windows, um GUID (identificador exclusivo globalmente), conforme especificado em [RFC4122], é ... O termo identificador universalmente exclusivo (UUID ) às vezes é usado nas especificações de protocolo do Windows como sinônimo de GUID. "

Mas a resposta correta depende do que a pergunta significa quando diz "UUID" ...

A primeira parte depende do que o solicitante está pensando quando está dizendo "UUID".

A afirmação da Microsoft implica que todos os UUIDs são GUIDs. Mas todos os GUIDs são UUIDs reais? Ou seja, o conjunto de todos os UUIDs é apenas um subconjunto adequado do conjunto de todos os GUIDs ou é exatamente o mesmo conjunto?

Observando os detalhes do RFC 4122, existem quatro "variantes" diferentes de UUIDs. Isso ocorre principalmente porque esses identificadores de 16 bytes estavam em uso antes que essas especificações fossem reunidas na criação de uma especificação UUID. Na seção 4.1.1 da RFC 4122 , as quatro variantes do UUID são:

  1. Reservado, compatibilidade com versões anteriores do Network Computing System
  2. A variante especificada na RFC 4122 (das quais existem cinco sub-variantes, chamadas "versões")
  3. Reservado, compatibilidade com versões anteriores da Microsoft Corporation
  4. Reservado para definição futura.

De acordo com a RFC 4122, todas as variantes de UUID são "UUIDs reais" e todos os GUIDs são UUIDs reais. Para a pergunta literal "existe alguma diferença entre GUID e UUID", a resposta é definitivamente não para os UUIDs RFC 4122: nenhuma diferença (mas sujeita à segunda parte abaixo).

Mas nem todos os GUIDs são UUIDs da variante 2 (por exemplo, o Microsoft COM possui GUIDs que são UUIDs da variante 3). Se a pergunta for "existe alguma diferença entre GUID e UUIDs da variante 2", a resposta seria sim - eles podem ser diferentes. Alguém que faz a pergunta provavelmente não conhece as variantes e pode estar pensando apenas na UUID da variante 2 quando diz a palavra "UUID" (por exemplo, sabe vagamente o endereço MAC + o tempo e as formas de algoritmo de número aleatório do UUID, que são as duas versões da variante 2). Nesse caso, a resposta é sim diferente .

Portanto, a resposta, em parte, depende do que a pessoa que está perguntando está pensando quando diz a palavra "UUID". Eles significam a variante 2 UUID (porque essa é a única variante que eles conhecem) ou todos os UUIDs?

A segunda parte depende de qual especificação está sendo usada como a definição de UUID.

Se você acha isso confuso, leia o ITU-T X.667 ISO / IEC 9834-8: 2004, que deveria estar alinhado e totalmente compatível tecnicamente com o RFC 4122 . Há uma frase extra na Cláusula 11.2 que diz: "Todos os UUIDs em conformidade com esta Recomendação | Padrão Internacional devem ter bits variantes com o bit 7 do octeto 7 definido como 1 e o bit 6 do octeto 7 definido como 0". O que significa que apenas a UUID da variante 2 está em conformidade com esse padrão (esses valores de dois bits significam a variante 2). Se isso for verdade, nem todos os GUIDs estão em conformidade com os UUIDs ITU-T / ISO / IEC, porque os UUIDs ITU-T / ISO / IEC conformes podem ser apenas valores da variante 2.

Portanto, a resposta real também depende de qual especificação de UUID a pergunta está perguntando. Assumindo que estamos a falar claramente sobre todos os UUIDs e não apenas variante 2 UUIDs: não há nenhuma diferença entre UUIDs GUID e IETF das, mas sim diferença entre GUID e em conformidade ITU-T UUIDs / ISO / IEC!

Codificações binárias podem diferir

Quando codificado em binário (em oposição ao formato de texto legível por humanos), o GUID pode ser armazenado em uma estrutura com quatro campos diferentes, conforme a seguir. Esse formato difere do padrão UUID apenas na ordem dos bytes dos 3 primeiros campos.

Bits  Bytes Name   Endianness  Endianness
                   (GUID)      RFC 4122

32    4     Data1  Native      Big
16    2     Data2  Native      Big
16    2     Data3  Native      Big
64    8     Data4  Big         Big
Hoylen
fonte
35
Resposta mais informativa que a escolhida. Eu acho que a resposta escolhida é a resposta mais simples absoluta para a pergunta, no entanto.
New Alexandria
3
A tabela de codificação binária incorporada na resposta é muito útil. Tnx
Luciano
2
O 'endianness' é muito importante. Se você armazenar o ID como bytes, obterá resultados diferentes de GUID e UUID.
Calabacin
E imagine, seres presos em meros 665 votos! Como eu não pude votar isso?
Haakon Løtveit 19/09/18
656

GUID é a implementação da Microsoft do padrão UUID.

Por Wikipedia :

O termo GUID geralmente se refere à implementação da Microsoft do padrão UUID ( Universally Unique Identifier ).

Uma citação atualizada desse mesmo artigo da Wikipedia:

O próprio RFC 4122 afirma que os UUIDs "também são conhecidos como GUIDs". Tudo isso sugere que "GUID", embora originalmente se referisse a uma variante de UUID usada pela Microsoft, tornou-se simplesmente um nome alternativo para UUID…

bdukes
fonte
40
(A G representa Globalmente)
ted.strauss
487
Assim como a Microsoft para tomar algo que funciona em qualquer lugar (o universo) e fazê-lo funcionar em um subconjunto muito pequeno (do globo) :)
Gus
33
Observe que se você deseja converter da representação binária GUID da Microsoft em um UUID padrão, precisará alternar a endianidade dos três (dos quatro) primeiros campos de dados, conforme detalhado na seção "Codificação binária" aqui: en.wikipedia.org/ wiki / Globally_unique_identifier
Formulário
87
É por isso que os astronautas não têm permissão para instalar o Windows no ISS.
intuited 28/07
10
@bdukes Parece que a Wikipedia mudou o que você chamou de declaração. Agora ele lêThe term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Khadim Ali 10/10
13

Na verdade não. O GUID é mais centrado na Microsoft, enquanto o UUID é usado mais amplamente (por exemplo, no esquema urn: uuid: URN e no CORBA).

Mark Cidade
fonte
1
Qual é a definição e o efeito da centralização na Microsoft?
Karl Richter
8

O GUID tem uso de longa data em áreas onde não é necessariamente um valor de 128 bits da mesma maneira que um UUID. Por exemplo, a especificação RSS define GUIDs como qualquer sequência de sua escolha, desde que seja única, com um atributo "isPermalink" para especificar que o valor que você está usando é apenas um link permanente para o item que está sendo distribuído.

Tony Arcieri
fonte
0

A GUIDrepresentação textual da Microsoft pode estar na forma de um UUID cercado por dois chavetas {}.

Chris Stryczynski
fonte
6
Isso é apenas para uma representação textual do GUID. A estrutura atual é diferente.
anônimo
-2

Uma diferença entre GUID no SQL Server e UUID no PostgreSQL é maiúscula; O SQL Server produz resultados superiores, enquanto o PostgreSQL produz resultados inferiores.

Os valores hexadecimais "a" a "f" são emitidos como caracteres minúsculos e não diferenciam maiúsculas de minúsculas na entrada. - rfc4122 # section-3

eezing
fonte