Why are there always two PID's for the Zero?

# Arduino/Genuino Zero (Native USB Port)
# ---------------------------------------
arduino_zero_native.name=Arduino/Genuino Zero (Native USB Port)

# If the board is a 2341:824d use 2341:824d for build and set other parameters as well
arduino_zero_native.vid.2.build.usb_product="Genuino Zero"

# If the board is a 2341:024d use 2341:824d for build and set other parameters as well
arduino_zero_native.vid.3.build.usb_product="Genuino Zero"

What the heck is going on with the PIDs here?

I get that there is an Arduino and Genuino version of the Zero. But why do they seem to have two PIDs for each, one prefixed 0x0 and one 0x8?

It seems like the 0x8 are the newer ones, but they leave the 0x0 alone on the Arduino zero, while on the Genuino the build process updates it to the 0x8 PID.

Why would they be doing this? Why create a new PID at all when nothing which would require knowing which version you have has changed? If I’m not mistaken this was like this since day 1 of the release so there weren’t even two versions in the wild. And why update it on one, but not the other?

I’m wondering if this is some weird quirk of USB protocols because Adafruit did the same thing with their Feather board. But in that case perhaps like me they didn’t understand why it was done and they just went with it?

Well, I'm not any closer to an answer, but I did find the following in the MAKEFILE for the bootloader:

# Arduino Zero (PID == 0x004D)

There are a few others commented out for Genuino and MKR1000 but it seems based on this that the 0x804D PID is the older one.

And I'm guessing some of the weirdness in the above where they're modifying PIDs has something to do with the existence of the M0 Pro.