Since I didn't figure I'd actually get to sleep, decided to spend some time trying to figure out why the glutInit function is failing. The function is failing when GLUT tries to copy one of the strings in the argv array. Unfortunately, I can't see what that array is (easily), as the ctypes stuff has packed it into a structure to pass to the function pointer at a lower-than-C level.
Strangely, I see lots of 0x7fffffffe6b0 and similar addresses showing up in gdb. That normally means (IIRC) a problem with the 64-bit port. Will have to spend some time poking at it over the weekend (again) to see if that's just wishful thinking on my part or a real situation. For now I really must try to get some sleep.