I've packaged up another alpha release of the OSX port of xscreensaver. It's coming along... all of the existing savers now compile on OSX, and almost all of them work to at least some degree (though many still have problems). Please give it a try if you are feeling adventurous:

ping is going to need to call out to a setuid binary, as loading a setuid saver bundle obviously doesn't make ScreenSaverEngine go setuid. I recommend writing a helper binary, or just abusing /sbin/ping.

Also, GL savers do some seriously weird things in demo mode if you switch to another pref pane or otherwise hide the view. I have a 100% working port of noof, but not enough time to check what you're doing differently. If you're interested, the source is available.

For celtic, part of the problem is that its draw routine calls usleep repeatedly to "animate" the pattern, so it needs a little state machine work (patch). It also uses the blocking erase routines.

The rest of the reported blocking time is accounted for by its requested delay of 5 seconds between calls to the draw routine. It looks like usleep_and_process_events is fully capable of breaking down the 5 second sleep into 1/10 second quanta, so it remains responsive, *but* check_timing isn't called in between quanta so it reports having blocked the entire time.