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

Description
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.)