I'm betting that the little reed relays I'm using have less bounce than a person haphazardly inserting a USB plug.
Some of the drivers that I've looked at have 30 mS settling time for just this reason.
In any case, no matter how mean I am being to the Mac, why should the whole computer lock up?
My PC seems to handle this without a problem.
Fast plug/unplug cycles are a problem for most Mac OS versions.
Oh, well that's the answer I wanted.
I'll have to see if a $25 Raspberry Pi is more resilient than my over-priced (company-supplied) MacBook.
If you actually want to know the answer, and not just reinforce your prejudices, its because fast plug was never a user scenario.
When the first Mac OS USB was developed, QA did produce a lot of bugs which came down to fast plugging. As we had better things to do and it wasn't an realistic user case, those bugs were put aside to fix actual user issues. When things quietened down sufficiently, I spent about 6 months hardening the USB stack against fast plugging, it was quite an effort but the stack became quite robust.
Then things were ported to OS X, and I stopped working on the implementation. Sometime later I did work on the OS X implementation but QA wasn't generating those bugs anymore, so there was no particular reason to fix anything. There were plenty of other things to do.
As for structural differences as to why Mac OS is more vulnerable to fast plugging, Windows P&P manager is very single threaded. Everything happens sequentially, this makes life quite simple for the driver, it also means that it takes a while before a device is available to the user. Mac OS has always used a multithreaded approach, each device is enumerated in parallel with every other device. This makes enumeration for the user much faster. It also means that of you do do fast plugs you can have multiple instances of the same device running though the same code at once. It makes for some very amusing problems in concurrency (aka "asynchronous funnies" as it was called at one place I worked).
The biggest driving force in debugging fast plugging was when Steve was using a mechanical switched based KVM switch for his "Stevenotes". Its well know that he had multiple hot spares of his demo machines in case one crashed on stage. With the wrong switch he could switch to a hot spare only to have it crash as well. That got quite a lot of issues cleaned up before better KVM switches were found for use on stage.
Also, a settling time of 30ms sounds just about perfect to cause maximum havoc. USB has several characteristic times of around 10s of ms, like 20ms debounce, 10 or 50ms resets. 30ms will put a disconnect right in a critical part of the enumeration state machine.
Its not my problem anymore though.