This is a big one, both in terms of complexity and impact.
In an ideal world, this will be kernel-agnostic, so that other projects can re-use most of our USB implementation. Redox has some basic USB support, should check out what it supports.
To start, just the HCI should be developed, using USB HID as an example usecase (which should be developed concurrently, to drive requirements).
One thing that may be worth looking into is supporting MA-USB (Media Agnostic USB) (ZIP containing spec) - that permits doing USB over the network, and might allow us to stick with a (simpler) virtual HCI as a first pass, while still getting the USB device model and everything figured out. Also: No need for actually talking to hardware, so a lot of development could be done in perfectly normal Rust crates that run and pass tests on the developers' normal machines.
, that looks great.