I just realized, you're an ML user. Aren't you supposed to be hyper-communist? Stallman was probably one of the most communist in terms of software development.
If it's not source-available, then it's somewhere between source-available and OSS - that license is very aggressively in favor of futo and against the general public.
Just to clarify the scale:
Best: FLOSS (GPL, etc)
Better: FOSS (Apache, etc)
Good: OSS (MIT, etc.)
<--Futo is here
Bad: Source-Available <--or here
Worst: Closed-Source/Proprietary
OP asked for FOSS, and if this keyboard had met OPs other criteria, it would have failed the FOSS check (it's a source-available license). It's also a roll-your-own license and a very very short one at that. It's missing a lot of key protections for both the company and the consumer.
I'm pretty steadfast on using GPL software wherever i can, especially for something as mission-critical as a keyboard. Non-gpl projects have a tendency to get bought up and relicensed or corrupted in some other way over time (sometimes a very long time, but time nevertheless). I'll make exceptions for things that are less critical, like games, but core system must be GPL or offer equivalent protections for the end user.
Source-available is still good for auditability though, making it more secure in the short-term.
In case you're making a joke: The people who don't type JSON are using controllers.
In case you're asking a serious question: the people who don't type JSON are the people in OP's image. They are technically using types, but that type is literally always string. They don't use integers, they don't use booleans. This is functional but may not be the best choice, depending on what kinds of data their system is supposed to handle.
Many API developers may choose not to use them, but they are absolutely there.
You specify the type by including or excluding quotation marks, and then for the types without quotation marks, you either include or exclude a decimal point to specify float or integer, and for boolean you use characters (specifically true or false). Arrays are wrapped in [] and objects are wrapped in {}.
JSON data as a whole is passed as one giant string because the REST protocol demands it. But once it's been pulled in and properly interpreted, there are absolutely types in the data.
This is in large part due to the EU forcing Valve to allow refunds. I think it was a good change but it is the source of the boring sales.
Before the refunds, Valve used to encourage developers to do flash sales (hour or day long surprise sales) of upwards of 90% off, and similar events. You'd also frequently see that much during the major seasonal sales like the summer sales. There was no risk really for either party because you spent very little on a game and if you didn't like it then oh well, you only spent a few dollars/pounds/euros/chuck-e-cheese tokens on a game so who cares. Conversely, Valve and the game developer had guaranteed income the moment you bought it.
I do miss the pre-refund days as a "patient gamer" because of the insane sales, but refunds have protected us against a lot of things like the cyberpunk 2077 launch, the helldivers controversy, and several other major problems.
There are a lot of games where it is a crucial or at least very useful extra layer of feedback. Some games you cant tell whats happening without it. In many cases it adds to immersiveness for a lot of people. Both Nintendo and Sony have put a great deal of effort into their current gen haptics.
This won't be possible with Wayland. It'll be possible on Xorg desktops but Wayland has explicit separation of permissions per-window and must be granted as such by the user (or on steam's gamemode, probably automatically will target the game window's surface/gamescope instance)
Could be Filelight