News for hackers. Stuff that matters.
Re:Porting USB applications to the web. Part 1: libusb by RReverser on Thursday January 20, 2022 @01:05PM (#30012376)
Btw, author of the port / demo / article here - happy to answer any questions you have :)
Re:Porting USB applications to the web. Part 1: libusb by sorenjan on Thursday January 20, 2022 @02:42PM (#30013693)
Why do you write "to the web" when it's actually "to Chrome and Chrome's siblings"? Chromium doesn't define the web. It's a common theme in articles from web.dev, where Google pretends that Chrome only features are general web features.

https://caniuse.com/webusb

With that said, thank you for writing and sharing the article. It's interesting even with the above mentioned irritant.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Thursday January 20, 2022 @02:50PM (#30013798)
I understand where you're coming from, but at the same time it's a feature defined as a finalized spec in the Web incubator. Even if it's currently implemented by one engine, 1) that engine is used in browsers from many different vendors - Google, Microsoft, Samsung, etc. which represent a huge chunk of the Web and 2) there's still hope that other browsers will implement it in the future.

For example, File System Access API was also part of WICG and similarly deemed by commenters as Chrome-only API because it implemented it first, but is now at least partially implemented in Safari 15.2. Who knows what we'll see adopted next? As long as there's a Web spec and apps using an API, browser vendors can prioritise.

Re:Porting USB applications to the web. Part 1: libusb by chrismorgan on Friday January 21, 2022 @12:01AM (#30019370)
WebUSB is not finalised in any way. It’s a WICG draft (draft means not finalised, and WICG means explicitly unofficial), with only one shipping implementation in browsers. (There’s also an implementation for Node.js, but I think that’s considered irrelevant.) My recollection of the rough processes is that to become a Candidate Recommendation (which is the first stage you could reasonably argue “finalised spec” corresponds to) it would need at least a second shipping implementation, and to be adopted by a working group.

As it stands, there’s no short-term prospect of a second implementation: Mozilla’s current position is that WebUSB is harmful because it’s super dangerous and the risks can’t be adequately explained, and is a tracking hazard <https://mozilla.github.io/standards-positions/#webusb>, and WebKit have likewise consciously decided not to implement WebUSB for similar reasons (“due to fingerprinting, security, and other concerns, and where we do not yet see a path to resolving those concerns”) <https://webkit.org/tracking-prevention/#anti-fingerprinting>.

That multiple browsers use the same engine and implementation is irrelevant for standardisation—otherwise Chromium would be the very definition of the standards. To show this even more clearly, WebSQL was scuttled because everyone used SQLite and there was no satisfactory way of specifying what would be permitted.

Speaking frankly here: as the post author and a “WebAssembly Advocadoer @Google”, you’re speaking from a position where authority will be assumed, but in this comment you expressed some very significant errors and presented a badly biased view. This is not good.

Re:Porting USB applications to the web. Part 1: libusb by mehdix on Friday January 21, 2022 @02:27AM (#30020302)
Thank you for clarification. As an ill-informed reader, by reading the parent comment I was under the impression that it was already a standard.

Considering the hazards, the last thing I want is random js in random website start messing with my operating system file system and USB connected devices.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @05:29AM (#30021657)
It sounds like you're talking about the W3C standards track (correct me if I'm wrong, just guessing from the context) whereas I'm talking about the spec itself as the document and the API. Those are two different things after all.

All browser engines have been following living specs even for core stuff like HTML/CSS instead of the W3C "officially finalised" standards for a while now, so I didn't bring the latter up as they weren't relevant to the conversation about the spec itself or its stability.

However, I admit that I missed myself and should've called out that the spec, while stable, is still a draft - that's a mistake on my part.

Re:Porting USB applications to the web. Part 1: libusb by chrismorgan on Friday January 21, 2022 @09:08AM (#30023647)
The spec is not on the standards track at this time, but is in a place where that is the explicit goal (the I in WICG stands for incubation). Combined, these facts emphatically mean that it’s not finalised. The whole purpose of these standardisation processes is to get multiple parties working on something in order to produce a better result than any one party would achieve. I have two clear examples in mind, both from IETF rather than W3C, but the principle transfers: Google presented QUIC and Fastmail JMAP to IETF as complete, functional protocols matching what they had been using themselves, but there were some pretty radical changes based on other people’s feedback before each was declared stable.

How much more in this case, given Mozilla and Apple’s positions on it! It’s extremely likely that if it does get taken onto the standards track it will only be with breaking changes.

WebUSB is not finalised and is not stable, even if it hasn’t changed recently—because the only reason it hasn’t changed is because no one but Chromium is willing to touch it because it’s such a run-away-screaming scary idea for security. That it is metastable (that’s a more suitable word) in its current state is an indictment against it, not a good thing.

The WHATWG Living Standards are a completely different kettle of fish—it’s not a case of even for core stuff, it’s a case of that being a model that makes sense for the well-established core stuff where changes affect many places, given implementation practice (and indeed that’s why browser makers forked HTML, because the W3C development model wasn’t working for them); but the Living Standard approach doesn’t make sense for new stuff and well-isolated functionality, like most CSS and JavaScript APIs.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @10:05AM (#30024445)
Slightly tangential, but I still find it fascinating that it was Firefox OS was the first to introduce the idea of adding all sorts of hardware APIs accessible from JavaScript, or at least that was the first time I heard of that idea and played with it (and still have a ZTE phone from the time), but, after the Firefox OS was discontinued, they essentially stopped being interested in those capabilities altogether and started to even actively discourage others from exploring it.

I guess it makes sense from business perspective, but I still believe in the original idea of making more powerful apps with Web technologies, even though the companies that work on those ideas changed over time.

Re:Porting USB applications to the web. Part 1: libusb by chrismorgan on Friday January 21, 2022 @10:21AM (#30024704)
Yeah, I’m sad that Firefox OS died.

Firefox OS needed those sorts of things for its “apps” since it had no lower-level “native”, and I think that they were only exposing features like that to trusted code (meaning apps you deliberately installed) rather than general web content, until they could be sure it was reasonable.

I think they also designed the OS with a better peripheral security model than Windows/Linux/macOS, nullifying or mitigating one of the two critical problems of WebUSB (that the computer trusts peripherals too much, so that one that’s hijacked can more easily become a remote code execution vulnerability).

(I write all this as one who kept a fairly close eye on Firefox OS, but has never run it.)

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @10:34AM (#30024929)
> and I think that they were only exposing features like that to trusted code (meaning apps you deliberately installed) rather than general web content

I'd actually be pretty happy if browsers chose to implement those APIs with the same restriction in mind - that is, only for explicitly installed PWAs. I said this elsewhere in the past, and I still think that's a reasonable restriction that could provide a path forward.

> or mitigating one of the two critical problems of WebUSB (that the computer trusts peripherals too much, so that one that’s hijacked can more easily become a remote code execution vulnerability)

I'm not very well-versed in the details, but I believe that's also the reason why WebUSB (or Chromium implementation of WebUSB?) doesn't allow certain classes of devices to be ever accessed via that API.

Re:Porting USB applications to the web. Part 1: libusb by chrismorgan on Friday January 21, 2022 @11:03AM (#30025367)
Limiting it to installed apps still has the problem of users blindly agreeing to something that is fundamentally super dangerous. I don’t believe installing PWAs currently exposes any new security surface, so this would be a significant change, and worse still a persistent hazard with probably no indication of what’s going on when it’s in use. I think there’s still potential in the general concept, but it’d take work and is certainly not ready yet in any browser.

Yes, certain classes are restricted from access via WebUSB for security, https://wicg.github.io/webusb/#protected-interface-classes. But as the note says, it’s about balance: that list is necessary for security, but not sufficient.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @11:05AM (#30025400)
> Limiting it to installed apps still has the problem of users blindly agreeing to something that is fundamentally super dangerous.

Same can be said about native apps. Like with other hazards, in the end it's all about balance - you can't stop users from _ever_ doing stupid things.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @09:59AM (#30024346)
> because it’s such a run-away-screaming scary idea for security

I think that's the root of our disagreement. Few years ago I've been of the same mind about giving the web new powerful features, but after watching the space and seeing the existing alternatives I've come to change my mind.

As mentioned in another thread below (https://news.ycombinator.com/item?id=30013287), vendors who need this sort of functionality, already find ways to implement it via other proprietary methods like local executables that, unlike implementations of Web APIs, are not reviewed by other teams and usually expose all sorts of critical stuff over local HTTP servers or in another insecure fashion.

In the end, it's not a question of "if" we want to expose those features to the web apps, it's "how" we can do so with minimal risks to the users, and that's where web APIs with thought-out permission models, explicit requests and history of cross-origin checks can help.

Of course, you can also say that vendors can continue to implement those things insecurely anyway even when new APIs exist, but 1) in practice when they're given a simpler way to do the same thing, they tend to go for that more often instead of inventing custom hacks and 2) that's where advocacy of the new APIs comes in, and what I'm trying to do by showing what the web can be if we let it.

As for your other arguments about potential for breaking changes if/when those APIs get adopted by other browsers, I agree I might be overoptimistic and your prediction might very well turn out to be true. Those APIs map to basic USB concepts quite closely, so I can't imagine what changes would be necessary, but, of course, I don't have enough experience with WebUSB outside this project to say that it's 100% impossible :)

In the end, it's a bit of a chicken-and-egg problem - in order for browsers to see the interest or get feedback, there have to be apps trying to build something with those APIs and reporting bugs / feature requests, and for those apps to use those APIs, there has to be at least one implementation first. This problem can be chewed from either end, and I'm trying to do my part by showing developers how those APIs can be used for porting interesting apps and libraries.

Re:Porting USB applications to the web. Part 1: libusb by chrismorgan on Friday January 21, 2022 @10:45AM (#30025103)
My main disagreement with you is not based on the soundness or otherwise of WebUSB functionally, but your position on it as a specification. Still, I’ll address the matter of WebUSB itself.

WebUSB is so scary for security because neither USB devices nor desktop operating systems have been written with such a use case in mind. There are two key problems in WebUSB: ⓐ USB devices weren’t designed with public exposure in mind, so that they’re commonly insecure and brickable or hijackable if you get access to them; and ⓑ operating systems weren’t designed with malicious USB devices in mind. Combine these, and you’ve got potential total sandbox escape and remote code execution, guarded only by a flimsy permissions popup that doesn’t explain what can happen—can’t explain what can happen. The threat here is probably the most severe (using the definition in the severity/probability model of risk assessment) ever contemplated for the web.

Yes, there are legitimate uses of such an API. Yes, this makes life much easier and even safer for such uses. But if the concept doesn’t also give you the heeby-jeebies, you haven’t thought the implications through enough, haven’t seen how bad programmers are at their jobs, and haven’t observed how hopelessly ineffective permissions popups are at protecting users. I watched the video in your article and was horrified that it’s not even trying to protect you or indicate that this is anything other than routine: you just get a “‹origin› wants to connect” popup with a list of routinely-cryptic device names (“ILCE-6600” rather than “Sony α6600”) that you can choose from. Yet this is a thing that, with the wrong USB device and a malicious attacker that knows about a vulnerability in it, could literally set fire to your computer, steal all your passwords, or silently install malware on the USB device or computer.

For myself, I might prefer to have WebUSB, because I trust my judgement in what I execute and because it’s more likely to support my platform. But for the population at large, on the balance of things, no, I agree with Mozilla’s position that it’s harmful, and would regretfully condemn people to continue downloading and executing untrusted code from the manufacturer, because that’s more likely to be done deliberately and only for first-party code.

WebUSB is problematic because there’s probably no safe subset of its functionality: it seems to be fundamentally dangerous. People have tried proposing a few subsets, from memory (I’ve occasionally paid a little attention to it), but so far they’ve all been rejected as either not safe enough or too crippling; and so Chromium has declined to be crippled and implemented the wildly unsafe with only mild mitigations to limit the class of devices exposed, and Gecko and WebKit have declined to play it dangerously. It’s similar to the question of exposing raw TCP, which was contemplated, but ended up being deemed too dangerous, and so it was wrapped up in HTTP as WebSockets: something not quite as useful, but safe. It’s possible someone could come up with something like that for WebUSB, something that constrains it to something safe. Such a constraint could easily require major API changes. That WebUSB currently matches the fundamental USB concepts closely is no saving grace in the stability of the protocol.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @11:10AM (#30025485)
> It’s possible someone could come up with something like that for WebUSB, something that constrains it to something safe.

That sounds like WebSerial and WebHID to me, which don't require similar shenanigans with Zadig on Windows or Linux permission changes, because they allow access to a limited subset of USB device functions.

But that will never cover all the use-cases for USB apps. For those the only choices are not to do anything at all and let closed native executables to continue dominate this space (which gives them unlimited access without even those simplest permission prompts), or to work on WebUSB and encourage devs who do need to interact with such devices over USB to switch to that instead. I don't see 3rd option or how it would be possible in our non-ideal world, and among those two WebUSB still seems like a better idea.

Re:Porting USB applications to the web. Part 1: libusb by dmitriid on Friday January 21, 2022 @07:59AM (#30022827)
> However, I admit that I missed myself and should've called out that the spec, while stable, is still a draft - that's a mistake on my part.

As is never mentioning the fact that WebUSB is considered harmful by both Safari and Firefox, and hiding it behind "oh, I do hope other browsers will implement it". They won't, you are perfectly aware of it, and the reasons why they won't.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @09:45AM (#30024152)
I think I already made it clear in another thread why I'm not going to interact with your comments in particular. There's no need to try and post variations of the same comment throughout the tree.

At the same time, I'm perfectly happy to respond to questions and concerns of other people like the one above who can express their thoughts without resorting to personal attacks.

Re:Porting USB applications to the web. Part 1: libusb by dmitriid on Friday January 21, 2022 @12:29PM (#30026793)
> I'm perfectly happy to respond to questions and concerns of other people

What a wonderful word, "respond". Not answer. Respond. That's exactly what you're doing: responding

HN: This is not "finalised"

Respond: oh yes, it is finalised. Because browsers [sic! plural] conform to the living standard

HN: It's not implemented or supported by browsers (plural).

Respond: Oh, it doesn't matter, all that matters is that Chrome implemented it

(Aside: for something to be considered standard and finalised there should be at least two independent implementations. See history of why WebSQL on top of Sqlite never happened)

HN: Others view this standard as harmful

Respond: why are you attacking me personally

> who can express their thoughts without resorting to personal attacks.

To me you are just another in a long list of Chrome's talking heads who all behave absolutely identically (and their behaviour is very well documented across various internet platforms): ignore, deflect, gaslight. What you see is simply a reaction to this. To your credit you haven't stooped down to gaslighting.

Want to see a different approach? Change your (as in Chrome team's) behaviour. That is, however, unlikely: Chrome stands nothing to lose by ignoring any and all concerns about its behaviour.

Re:Porting USB applications to the web. Part 1: libusb by ciupicri on Thursday January 20, 2022 @03:30PM (#30014396)
Regarding File System Access I notice that [1]:

> This specification was published by the Web Platform Incubator Community Group. It is not a W3C Standard nor is it on the W3C Standards Track.

[1]: https://wicg.github.io/file-system-access/

Re:Porting USB applications to the web. Part 1: libusb by dmitriid on Thursday January 20, 2022 @05:27PM (#30016124)
> but at the same time it's a feature defined as a finalized spec in the Web incubator.

At the dame time both Firefox and Safari consider this feature harmful and will not implement it.

Just because you rammed it through standards bodies doesn't make it standard, or good.

And, unfortunately, you've co-opted web.dev to be a full-on Chrome propaganda machine.

Additionally, the status of this "finalized spec" is, quote, "Draft Community Group Report". It's nowhere near to being a) finalized and b) standardized.

The "finalized spec" literally has this in its description: "It is not a W3C Standard nor is it on the W3C Standards Track."

> For example, File System Access API

1. Is anyone talking about this API here? No. Only you, trying to pull conversation away from WebUSB

2. Filesystem API suffers from the same thing: it's a "standard", and now your team is busy pushing three more file standards

Re:Porting USB applications to the web. Part 1: libusb by malepoon on Thursday January 20, 2022 @05:00PM (#30015735)
It's too bad these Chromium "specs" tend to be pretty low quality and rushed. They're then never changed because "too bad, we shipped it already, can't break the web!" See the garbage they tried to push in the form of NaCl, WebSQL, etc.
Re:Porting USB applications to the web. Part 1: libusb by baxuz on Friday January 21, 2022 @08:51AM (#30023424)
Don't forget Web components v1
Re:Porting USB applications to the web. Part 1: libusb by dblohm7 on Thursday January 20, 2022 @04:12PM (#30015083)
> Even if it's currently implemented by one engine, 1) that engine is used in browsers from many different vendors - Google, Microsoft, Samsung, etc. which represent a huge chunk of the Web

That's a really terrible argument, tbh.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Thursday January 20, 2022 @04:42PM (#30015512)
Is it? It's worth keeping in mind that it's users and apps that comprise the web, not the implementation details of any given browser.
Re:Porting USB applications to the web. Part 1: libusb by dmitriid on Thursday January 20, 2022 @05:29PM (#30016177)
> It's worth keeping in mind that it's users and apps that comprise the web, not the implementation details of any given browser.

Ah yes. As we all know, Chrome is very well known for how well it listens to users. Remember the alert fiasco? And many other fiascos?

Or remember "standards" like WebHID which are so bad that Mozilla engineers couldn't even understand them, but you still shipped them?

Or other "standards" which have multiple issues pointed out and still shipped by default in Chrome?

Please don't insult our intelligence by pretending that you, or Chrome team care at all about users or standards.

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Thursday January 20, 2022 @05:47PM (#30016419)
Funny how you use words like "insult" yet don't see the irony in the tone you use when talking to other people :)

Good day to you too.

Re:Porting USB applications to the web. Part 1: libusb by dmitriid on Thursday January 20, 2022 @05:53PM (#30016502)
Well, you don't care about that, either. Because the entire behaviour of every single public person from Chrome team has been:

- deflect

- pretend Chrome-only APIs are standards

- gaslight other browser vendors

You are not different, and there's literally nothing in this world will stop you, and nothing I say or do can ever even begin to approach the behaviour of the Chrome team.

So, do hold up the mirror to your actions first.

Re:Porting USB applications to the web. Part 1: libusb by GeorgeWBasic on Thursday January 20, 2022 @09:13PM (#30018365)
For another third party perspective, I find your tone entirely appropriate, given that web.dev is a propaganda machine for Chrome. Pushback is necessary.
Re:Porting USB applications to the web. Part 1: libusb by Dylan16807 on Friday January 21, 2022 @01:55AM (#30020104)
Pushback can be done with being so personal and insulting, and it's easier to read that way too.
Re:Porting USB applications to the web. Part 1: libusb by dmitriid on Friday January 21, 2022 @02:46AM (#30020423)
Re-read the subthread. The only place he reacts is in the "non-constructive feedback". All the constructive feedback is promptly ignored.

Chrome team couldn't give two craps about any amount of constructive feedback from other browser implementers, framework authors and web developers on most of the stuff they ram through standards bodies. Why start now?

Re:Porting USB applications to the web. Part 1: libusb by Dylan16807 on Friday January 21, 2022 @09:35AM (#30024000)
Yeah I saw that the first time.

I'm not saying it has to be particularly constructive. But you can describe how a policy is terrible without your comment becoming a personal combative mess.

Something like:

Yeah, users comprise the web, and Chrome doesn't listen to them. See the alert fiasco, among others. [side note: probably elaborate here, I don't know what alerts you're talking about even after a search]

The Chrome team created a "standards" documents for WebHID that was so bad that Mozilla engineers couldn't even understand it, and still went ahead with shipping.

Others "standards" have had serious issues pointed out, with other browsers refusing to implement them, and Chrome keeps shipping them by default.

Users and proper standards haven't mattered at any point.

Re:Porting USB applications to the web. Part 1: libusb by dmitriid on Saturday January 22, 2022 @04:08AM (#30035021)
> But you can describe how a policy is terrible without your comment becoming a personal combative mess.

What's the point though? Look at this exchange between RReverser and chrismorgan: https://news.ycombinator.com/item?id=30019370

chrismorgan: WebUSB is not finalized, there’s no short-term prospect of a second implementation, it is not on the standards track, given other implementers' positions if it ever becomes standardized it will be with breaking changes, etc.

RReverse: lol it was first proposed by Mozilla in Firefox OS, and WebUSB is good, actually

chrismorgan: "My main disagreement with you is not based on the soundness or otherwise of WebUSB functionally, but your position on it as a specification."

... and the discussion was safely deflected to discussing FirefoxOS and the merits of WebUSB itself.

This is the modus operandi of Chrome's "developer advocates": ignore, deflect, gaslight. It happens again, and again, and again with any and all public personas out of the Chrome team. No matter how constructively you engage with them. To RR's credit he doesn't stoop low to gaslighting (as in "we blame other browsers for everyting").

The only recourse is to cut through all the bullshit and call out the deflections and the lies.

Re:Porting USB applications to the web. Part 1: libusb by afavour on Thursday January 20, 2022 @08:47PM (#30018157)
Just from a third party perspective here: your tone in this post and all over the thread is not even remotely constructive. You have one point that you’ve made rudely in about five different places. We get it.
Re:Porting USB applications to the web. Part 1: libusb by dmitriid on Friday January 21, 2022 @01:32AM (#30019947)
> all over the thread is not even remotely constructive

Constructive tone has been tried with Chrome team again, and again, and again, and again.

It's gotten so bad that in various "Request for position on standards" Safari team simply ends up saying "no" without stating reasons. Because it literally doesn't matter anymore.

All is left is directly pointing out the outright lies (see e.g. https://news.ycombinator.com/item?id=30019370) that Chrome's various talking heads will tell you.

And yes. I will keep saying this in many places. And there's a good reason for that, as someone else noted in the discussion: https://news.ycombinator.com/item?id=30014807 Do you by any chance go and admonish people for "not being constructive" about Safari or Firefox?

Re:Porting USB applications to the web. Part 1: libusb by travisby on Friday January 21, 2022 @07:45AM (#30022681)
I'm really excited to see this post! I've actually tried doing something similar -- I want to use/create a smartcard reader on the web that works with gpg.

The goal was to port pcsclite or scdaemon to use webusb instead of libusb.

It's been a while; I forget exactly where (very early) I left off/felt defeated. I definitely didn't consider making an additional backend for libusb!

Very cool -- I can't wait to see part 2 ;).

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @09:17PM (#30032563)
Glad to hear! If you want to give it another try, you should be able to use my linked libusb fork in any app that depends on libusb, and compile that with Emscripten.
Re:Porting USB applications to the web. Part 1: libusb by tehlike on Friday January 21, 2022 @12:34AM (#30019563)
One thing i recently attempted (and still looking into it as i have time to work on it) was to do a usbip-bridge for webusb. The idea is using a device attached to user's machine and exposing it to a vm in cloud. There are various use cases for this.

So far - i could only bridge USBIP communication, not much success with binding a proxied usb to a vm.

Did you see something like this?

Re:Porting USB applications to the web. Part 1: libusb by RReverser on Friday January 21, 2022 @09:17PM (#30032555)
I didn't see it but did think about it. I think it should be possible by wrapping WebUSB into something like Comlink, e.g. I know Surma experimented with allowing Comlink to be used with WebSockets: https://twitter.com/dassurma/status/1218207376899235840

Comlink takes care of the RPC part of any API, so you only need to choose and hook up a communication backend.

Re:Porting USB applications to the web. Part 1: libusb by tehlike on Sunday January 23, 2022 @02:54PM (#30049824)
This is actually at a lower level. This is to bind webusb remote device as a virtual device in Linux. It would be more flexible and has very interesting use cases.
Re:Porting USB applications to the web. Part 1: libusb by RReverser on Thursday January 27, 2022 @09:46AM (#30101170)
Ah, I see. That would be interesting, but removes the cross-platform compatibility from the equation, which, for me, is the most valuable piece of WebUSB and other similar APIs.
Re:Porting USB applications to the web. Part 1: libusb by worldmerge on Thursday January 20, 2022 @04:39PM (#30015458)
That was really cool! WebUSB seem really interesting, I can see using it in some future projects so I don't have to deal with OS specific things.