I'm not sure about Mac or Windows yet, but working with Linux requires a lot more technical know-how than the listing lets on. VIA's url to a web app to customize keys (including the 4 programmable above the numpad) doesn't recognize the device properly, or at least it won't configure to it properly even though it recognizes it by name (see images). The keyboard will still work just from being plugged in, but going through the process of trying to download github repos, move around other dependency directories not already sorted properly (like bluetooth folder for example), then trying to build frameware use QMK instructions and bouncing back and forth between documentation for make and gcc to compile the damn thing, installing all the pip dependencies for setting up the build environment without it wrecking my other programming / development environments, and then trying to deal with errors that come up anyway like "Compiling: keyboards/keychron/bluetooth/indicator.c keyboards/keychron/bluetooth/indicator.c: In function 'indicator_set_backlit_timeout':keyboards/keychron/bluetooth/indicator.c:130:44: error: implicit declaration of function 'rgb_matrix_disable_timeout_set'; did you mean 'rgb_matrix_disable_noeeprom'? [-Werror=implicit-function-declaration]";... which compeletely prevents the firmware makefile from building at all... which is just insane imho because it's an indicator light for bt when the keyboard requires a physical switch to enable bluetooth anyway so it's not like there's no other way to tell whether or not the bluetooth is activated... not to mention it would show up when a bluetooth transceiver scans to find radio devices or as a hidraw list item if it was already connected... etc.I've reached out to keychron support for this, but yeah, just to say, a simple programmable set of 4 keys has turned into a complete nightmare and time sink. Luckily I sort of enjoy the process of learning a bit, but it's not even close to as simple as advertised or as the VIA web app would make things seems at first glance with a flashy 3D render of the keyboard sending false reassurances of plug and play.MOSTLY THIS IS A FANTASTIC PRODUCT! Don't get me wrong. The keys are balanced for weight, they're not excessively loud (though louder than I'd prefer, but hey, that's what customizations are for) and the entire switch can be subbed out for what ever you prefer. It feels awesome, it's extremely sturdy with no flex or bulky bezels, and the angle of the legs is perfect too. It is a really fantastic find compared the prices of other mechanical full sized keyboards on the market, but the programmable key thing in ubuntu and the difficulties setting up basic firmware and having to build it myself instead of a GUI or something is really a huge bother. Hopefully keychron gets back to me soon so I can edit this review with the simple solution I overlooked... until then, I'm pleasantly annoyed, I guess lol.EDIT: so the keychron support was a bit slow, and they wouldn't help without proof of purchase, which seems odd since there ought to be some straight forward guidance they could copy-paste or pre-compiled firmware downloads or something. But anyway, a few days between contacts isn't terrible. Since it took a couple weeks for the back and forth emails I managed to figure it out myself in the meantime. Compiling a make file needs to be done from a particular directory but the qmk docs are fairly good, it just happens to be a bit of a complicated process. ON THE PLUS SIDE, figuring it out in Linux and flashing the keyboard with the new firmware made the web interface immediately functional, and the changes I saved using the web interface to customize the keyboard carried over to other operating systems since it's stored in the keyboard itself and not just some drivers on the hard drive that the operating system needs to read. So once I got the firmware compiled and followed the rest of the directions in the github readme file, the VIA web interface worked immediately. Could be simpler, but could also have been much more complicated. It could be easier to customize, but the VIA interface is excellent once it is running.All in all, I wish response times were better and the instructions that come with the product were better, but the keyboard works and feels great, the price is excellent, the interface for recording macros and saving layouts is top notch for the most part, but the words used to describe certain customization elements (like layouts referring to key assignments by operating system, the physical switch not just a software profile, that's unclear.. or explaining whether or not the function key will still be assigned to the functions printed above the F-keys for another example) leave a bit to be desired.It's a great buy, probably not even a single issue if you use Mac or Windows, and if you're using Linux it's still perfectly functional if you're willing to learn to compile your own firmware to flash. I should also mention the keyboard works fine out of the box, the firmware just needs to be updated in order to customize keys and macros, that's all. With the ability to change not just key caps but the switches too, I don't anticipate ever needing another keyboard again.