Skip to content
This repository was archived by the owner on Jul 9, 2024. It is now read-only.
This repository was archived by the owner on Jul 9, 2024. It is now read-only.

v6: Retain definition and behavior of v1 fields (avoids confusion, allows for symmetric encoding.) #52

@broofa

Description

@broofa

Version 6 changes how the node and clockseq fields behave. This is confusing, and also compromises one of the most important traits version 6 can have: symmetric encoding with version 1.

It's confusing because these fields behave in ways that are contradictory and overlapping between the two versions:

  • node is stable and (mostly) unchanging in version 1. In version 6 it is generated randomly each time.
  • clockseq is also (mostly) stable in version 1, but must be set randomly if node changes. In version 6 it's something completely different - a subsecond counter (which version 1 already allows for in low-order bits of the timestamp.)

Of more concern, however, is loss of ability to deterministically encode a v6 id from any v1 id, and vice-versa. Imagine a distributed legacy system where different components of the system are being migrated from version 1 to version 6 over time. Not being able to deterministically encode ids means there must be a centralized authority that contains the mapping of each v1 id to each corresponding v6 id. This is fundamentally counter to the entire thesis on which UUIDs are based, and in all likelihood will be (if you'll pardon the expression) an enormous pain in the ass for developers, who very likely chose UUIDs to avoid the need for a central authority.

I believe the community as a whole will be much better served if the version 6 spec consist of nothing more than a description of how version 1 fields are to be laid out (... while ensuring version 1 and 6 ids may be symmetrically encoded.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Draft 03IETF Draft 03 WorkUUIDv6All things UUID6 related

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions