For 1, the simplest way I can think of (off the top of my head, so do test):
Create a declare to gluSphere (should be standard on Mac; need glu32.dll on Win) and use it to create your two spheres.
For drawing in pseudocode:
OpenGL.glLoadIdentity // Reset transformations
// White sphere first
OpenGL.glTranslatef(x,y,z) // position
OpenGL.glColor3f(1, 1, 1) // white color
declare gluSphere(handle, radius, slices, stacks) // draw sphere
// Blue sphere next
OpenGL.glTranslatef(x,y,z) // orbit distance from white sphere, keep this constant or you'll affect rotation
OpenGL.glRotatef(angle,x,y,z) // angle and axis (your axis is probably 0,1,0 if orbiting around Y)
OpenGL.glColor3f(0, 0, 1) // blue color
declare gluSphere(handle, radius, slices, stacks)
The key is that the translate and rotate functions are relative. First, Reset everything with LoadIdentity so that subsequent translates don't build on the last. The first translate sets the white sphere's position, but the second translate for the blue one is an offset from the last translation. The rotate is then considered absolute: you must keep track of the angle yourself. It's easy to mess up here, so hopefully I've written the code correctly myself!
You could put all of this code into OpenGLSurface.Render and have a timer keep calling the Render method.
My RBGL replacement classes: http://www.jcquan.com/REALbasic