I have an old iPaq. I have put linux on it. Neat! Except it has basically no I/O, so isn't much fun. I want to plug USB peripherals into it, but it was not designed for this. Its USB port works in device mode only.
Some smart gadgets are starting to ship with USB-OTG ports which allow them to work
as hosts *or* devices: you can plug keyboards, hard drives etc. into these, as well as plug them into PCs. This is fun, but needs special hardware to work: a kernel upgrade is not enough to turn a traditional USB device into a USB-OTG device.
However, a smart cable with two USB host controller chips embedded within it, along with an appropriate kernel module on the device, could be used as a work-around for devices which cannot physically work in host mode.
As soon as the smart cable plugs into a device, it starts groping around the bus to see what it's been plugged into, just like a PC would. The iPaq (or whatever) responds to the groping by announcing itself to the smart cable that it is a device which has the special smart-cable kernel module installed, and that if they cooperate together, the two can achieve great things.
The host cable and device now have two-way communication, and can talk to one another, just like a hard drive and PC can talk to one another. The smart cable is the controller, the iPaq is still the device. Nothing special yet.
The smart cable's second USB controller chip is now fired up, and the iPaq creates a virtual USB bus in its device hierarchy, using its special kernel module. Whenever data or bus commands occur on this virtual bus, the iPaq encodes the data and communicates the encoded signals to its USB daddy: the smart cable. The smart cable then decodes these data, and turns them into real USB signals on its second bus.
This is all transparent to the rest of the linux system and end user which simply see a new USB bus in their device hierarchy. Now you can plug a keyboard or disk into the other end of the smart cable, and use it as a normal USB device, from your USB device.
This needn't be clunky: USB controller chips are very small now and you could get two in a cable with scarcely any increase to the volume. Although, there'd need to be a battery in the cable if your external USB devices can't power the bus.