Originally Posted by sebipo
I understand there are backend and frontend engines.
Especially when people talk about media playing applications (on Linux in this case), the words "frontend" and "backend" are widely used. A "backend" is something like an "engine", the set of things that does the "real job" behind the curtains. Sometimes it can be used as such (it also provides a user interface), but sometimes it's easier to have another (perhaps graphical) program with which the user interacts, and which in turn interacts with the "backend". This program is then referred to as the "frontend". Like Totem on Gnome; Totem itself is (in my opinion, at least) a frontend, and it can use more than one backends, or engines (the used backend is selected during program compilation I think, so with Totem you cannot change it on-the-fly like you might be able to do with some other programs) - for example Xine (full player is then "totem-xine") or GStreamer ("totem-gstreamer").
The words aren't really accurate, but that's one way of looking at it. Like pixellany said, the analogy to car is pretty good. But what can/should be called a "backend" or an "engine" is then another matter. On GNU/Linux operating systems, (because this is a Linux forum) for example, a lot of things work with the idea of having something, usually invisible or transparent to the user, that does the "real work" and then having something else that the user interacts with to control the actions. Libraries (which are not engines, if you ask me) are one sort of thing: there can be one library that offers functionality to do something (like libgtkpod to work with iPods), and multiple different programs that can use the library. In the user's point of view there is just a program, maybe graphical, that is used to do different things with the iPod. However the program itself doesn't do everything, some parts of it may use the library which provides the real means of working with the device. This is different from having a graphical Totem which uses Xine "engine" as it's "backend", but still the principle is that not everything is put into one program, but there can be user-transparent pieces of software that other software can use/work with to get a task done.