Un GUID est un "identifiant unique mondial". Également appelé UUID (Universally Unique ID).
Il s'agit essentiellement d'un nombre de 128 bits généré d'une certaine manière (voir RFC 4112). http://www.ietf.org/rfc/rfc4122.txt ) qui rend presque impossible la création de doublons. De cette façon, je peux générer des GUID sans qu'une organisation tierce doive me les donner pour garantir qu'ils sont uniques.
L'une des utilisations les plus répandues des GUID est celle d'identificateurs pour les entités COM sous Windows (classes, typelibs, interfaces, etc.). Grâce aux GUID, les développeurs pouvaient construire leurs composants COM sans avoir à s'adresser à Microsoft pour obtenir un identifiant unique. Même si l'identification des entités COM est une utilisation majeure des GUIDs, ils sont utilisés pour de nombreuses choses qui nécessitent des identifiants uniques. Certains développeurs génèrent des GUIDs pour les enregistrements de bases de données afin de leur fournir un identifiant qui peut être utilisé même s'ils doivent être uniques dans de nombreuses bases de données différentes.
En général, vous pouvez considérer un GUID comme un numéro de série qui peut être généré par n'importe qui à tout moment et qui saura que le numéro de série sera unique.
L'obtention d'un nom de domaine est un autre moyen d'obtenir des identifiants uniques. Pour garantir le caractère unique des noms de domaine, vous devez les obtenir auprès d'une organisation (administrée en dernier ressort par l'ICANN).
Comme les GUID peuvent être difficiles à manier (d'un point de vue de lisibilité humaine, il s'agit d'une chaîne de nombres hexadécimaux, généralement regroupés comme suit : aaaaaa-bbbb-cccc-dddd-ffffffffffff), certains espaces de noms qui nécessitent des noms uniques dans différentes organisations utilisent un autre système (souvent basé sur les noms de domaine Internet).
Par convention, l'espace de noms des paquets Java commence par le nom de domaine de l'organisation (inversé), suivi de noms déterminés de manière spécifique à l'organisation. Par exemple, un paquetage Java peut être nommé :
com.example.jpackage
Cela signifie que le traitement des collisions de noms devient la responsabilité de chaque organisation.
Les espaces de noms XML sont également rendus uniques de la même manière. Par convention, la personne qui crée un espace de noms XML est censée le rendre "sous-jacent" à un nom de domaine enregistré sous son contrôle. Par exemple :
xmlns="http://www.w3.org/1999/xhtml"
Les adresses MAC Ethernet constituent un autre moyen de gérer les identifiants uniques. Une entreprise qui fabrique des cartes Ethernet doit se faire attribuer un bloc d'adresses par l'IEEE (je crois que c'est l'IEEE). Dans ce cas, le schéma a plutôt bien fonctionné, et même si un fabricant se plante et émet des cartes avec des adresses MAC dupliquées, les choses fonctionneront toujours correctement tant que ces cartes ne sont pas sur le même sous-réseau, car au-delà d'un sous-réseau, seule l'adresse IP est utilisée pour acheminer les paquets. Bien que d'autres utilisations des adresses MAC puissent être affectées, l'un des algorithmes de génération de GUID utilise l'adresse MAC comme paramètre. Cette méthode de génération de GUID n'est plus aussi largement utilisée car elle est considérée comme une menace pour la vie privée.
Les identifiants fournis par Microsoft pour les pilotes "VxD" dans Windows 9x sont un exemple de schéma d'identification unique qui n'a pas très bien fonctionné. Les développeurs de pilotes VxD tiers étaient censés demander à Microsoft un ensemble d'identifiants à utiliser pour tout pilote écrit par le tiers. De cette façon, Microsoft pouvait s'assurer qu'il n'y avait pas de doublons d'ID. Malheureusement, de nombreux auteurs de pilotes n'ont jamais pris la peine de le faire et ont simplement utilisé l'ID figurant dans l'exemple de VxD qu'ils ont utilisé comme point de départ. Je ne suis pas sûr de l'ampleur des problèmes que cela a causé - je ne pense pas que l'unicité des ID VxD était absolument nécessaire, mais cela a probablement affecté certaines fonctionnalités de certaines API.