The reason appears to be for older motherboard support.
I contacted Das Keyboard, and this was the response they gave:
Thanks for taking the time to contact us.
The reason for NKRO toggling is because some older motherboards don’t “understand”
or “get” NKRO over USB. It’s a bit more complicated than that, but
that’s the simplest way to put it – so that users with older
motherboards can use the keyboard over USB without issues. Of course,
they could use a PS/2 adapter to achieve NKRO, but since the world is
all about USB nowadays, not everyone would have access to a PS/2 port
on their machine.
There’s a long discussion at https://geekhack.org/index.php?topic=37567.0 about the technical reasons why NKRO sometimes causes problems. The TLDR of this discussion is:
- NKRO is most likely to cause problems with BIOSes and KVM switches. These problems are caused by cost-cutting measures rather than being inherent to NKRO.
- 6KRO is fine for any ordinary use, including most gaming.
The most illuminating comment in that discussion thread is the following:
The USB standards don’t say anything specific at all about keyboards
or mice etc., in any version.
It’s the HID standard that does. The 6-key plus modifiers report
structure was only really intended to make life easy for BIOS (so they
didn’t have to parse report descriptors), but became a de-facto
‘standard’ for keyboards regardless. However, the HID standard allows
for all sorts of different reports, and all major OS support it fully,
so there’s no need for extra drivers.
The other limitation is that a low-speed USB data packet can only be a
maximum of 8 bytes. A report can be larger, but that starts taking a
significant amount of time to send. The USB standard only allows a
low-speed device to send one packet every 10ms (per endpoint). OS
typically nudges that up to 8ms, i.e. 125Hz (without hacks). Taking up
to 16ms to get a keypress to the host would be crap! So we’ve had a
phase of makers trying to get more out of low-speed chips than they
can really handle, with tricks like multiple endpoints etc. 🙁
Full-speed USB frees up those limitations. Each packet can be 64
bytes, and can be sent every 1ms (again, per endpoint). This allows
the HID standard to be used to its full effect.
Finally, NKRO isn’t done just for the sake of it. Doing full NKRO
requires only one bit per key, rather than one byte, and doesn’t have
to treat modifiers as a special case. So a keyboard can send e.g. 104
keys in a mere 13 bytes – using the other scheme 13 bytes would only
manage 11KRO (11 keys + modifiers + one reserved byte). Sure, that’s
still plenty of keys, but it’s far less elegant a method (and still
‘not-6KRO’, so could still be incompatible with dumb hosts).
NKRO prevents ubuntu working with “linux” key modifiers correctly too in some cases. (not all, but some)
So the ability to toggle is invaluable for daily drivers of linux.