I'm about to dive into autolisp and am wondering how to write code that is compatible with as many different versions of autocad as possible, obviously including the current one but also stretching back ideally as far as 2000.
Autodesk have an FAQ on this http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=770225 but don't mention anything before 2009.
Which version of (i) autocad and (ii) the autolisp compiler should I work with? Also, is this the same thing as visual lisp?
AutoLisp is interpreted, not compiled, so there are no different compilers to choose from (although there is an option to compile them to .fas files but most of the time you wouldn't bother).
VisualLisp is an extension to the AutoLisp language which allows you to access the object model in the same way as you would if using VBA, just from AutoLisp. If you use built-in functions that starts with vl- or vla- then you're already using VisualLisp.
Compatibility is mostly a matter of only using features which work the same across all versions.
This doesn't always go to plan however, and you may have to create some version-specific files which you load at the end and which redefine some functions to work with that specific version (you can easily tell which version of AutoCAD the lisp is being loaded into).