John - one of the difficulties here is that there is a bit of an onion skin effect - it looks simple from the outside, but each time you peel off a layer of understanding, there is another layer of complexity beneath! I don't think that there is any particular disagreement between any of those who have posted, but we each tend to have our own way of looking at things. For example, Kit mentioned woodworking gantry machines and mills as if they are different. Well, of course they are mechanically, but in terms of machine and work coordinates they work exactly the same way. But the complication comes when you watch them at work - in the first case, the tool moves around the work, in the second the tool stays still and the work moves! The only thing that matters is the RELATIVE movement between work and tool, and that is (or should be set up to be) the same in both cases.

Couple of things that have been mentioned. G54, G55, etc - these refer to different work coordinate systems. The motion control software notes the offset between machine and work zeroes when you set them up. It can save these values, so that when you come back to the machine it remembers the offsets and, once you have rehomed the machine, your work zero will be in the same place as before. Sometimes it's useful to have several work coordinate systems, if you have some jigs and fixtures on the machine, for instance. So you can set work zero for each of these, and save them as the G54 (the usual default set), or G55, or G56, etc. Then in your gcode, it will tell the machine which set to use for a particular fixture, say, and you don't need to reset each time.

Jazz also mentioned the "backing off" feature. I'm with him on this - as mentioned a few posts ago, there is no reason to have the machine zero anywhere except in the "bottom lefthand" corner, but you might want to use the opposite end of machine travel for your home position. A friend of mine has his router set up like this - this commercial machine has the home switch at the +X end of the bed, so it homes to there but effectively sets the machine coordinate zero to correspond to the -X end of the bed. However (and I have exactly this problem on my own machine) you can sometimes get a problem when homing. For example, I home X, and by default the machine then leaves X where it is and starts homing Y. But the tiny vibration that is caused trips the X switch which then gives a limit error. Pain in the neck! The answer is to use the backoff feature to move the X position a milllimetre or two off the switch and set zero there. Then there is no accidental switch triggering and homing becomes reliable again.

These discussions come up every so often but it's worth airing because this is a big stumbling block when you first start out. Give it month or two of use and you'll forget you ever had a problem, but it's a real brain-strainer at first!