I've had a 3G dongle for a while now. It works well enough, but can be a little fiddly. You have to install a driver, of course, and it also has its own dialer program. That's fine, except that dialer doesn't always recognise that you've plugged the dongle in. I discovered by accident that the Windows built-in stuff is perfectly happy to dial for you, but it's still a minor pain. On a whim this afternoon, I popped the dongle into my Ubuntu Linux laptop. It picked up the dongle immediately, whipped me though setting it up for my provider, and that was that. Fab.
My fancy-pants HTC Desire phone offers USB tethering, so it too can act as a 3G dongle. I'd never tried it, but spurred on by my exciting little success, I plugged into my Windows laptop. It whirred away and installed a driver, rebooted the phone (!) and, ..., well nothing as far as I could see. I had a half-hearted poke around, but to no effect. Plugged phone into Linux laptop and it immediately connected. Turned off tethering. Turned it on again - reconnected straightaway. Magic.
I'm not a particularly unhappy Windows user, but it's really getting its arse kicked in this little corner of the user-convenience space.