[Captivate Q&A, Help & Troubleshooting] js22:
Grab some coffee. I'm trying to put off work, so this is gonna take a while...

Behind the scenes, Android is is just a customized, bare-bones version of Linux with a few special features added. Any Linux system can be divided into two parts : the kernel, and everything else. The kernel handles the most basic functions (files, processes, hardware interfaces) and is usually the part that needs most (or all) of the changes made to support new hardware devices. The kernel starts running as soon as you turn on the power, and keeps running until you shut down.

The rest of the system is more generic. Physically, its just a bunch of individual files that you can browse around and see living in the Linux file system. Some of these are programs that you as a human can run (command line utilities, etc.) but there are lots of other programs, libraries, configuration data, and other stuff. On Android, almost all of these are essential, and if they don't "fit together" properly your system is going to have problems, if it even works at all.

Typically, to install Linux, you would choose a "distribution" or "distro" (a kernel plus everything else) that has been very carefully selected, configured, and put together for you. During the installation, you can choose how much or how little of the other stuff you want to install. Then, as time goes by, you can add or remove programs and possibly update the kernel as you wish.

Even the smoothest, stablest, most user-friendly desktop distributions of Linux have a substantial learning curve, and require a certain amount of system administration. With Android, the goal has been to pare down and hide the Linux side from users (a Good Thing) and tweak it carefully until it just runs by itself with no user effort. And I'm very impressed at how well this has worked.

So what is a "ROM" ?

Well, the choice of name is (IMO) very bizarre and confusing, but basically it is just another name for a Linux distribution. Somebody has gone to the trouble of selecting (perhaps customizing) a kernel for your specific phone, and then

put together a useful set of programs, libraries, and configuration data that make it all work. Note that these are almost all things that you will never see as an Android user, and the design philosophy of Android is that you never *should* see them : everything at the Linux level should "just work." The Android apps and widgets that you install, or that the ROM author installs for you live (almost) entirely outside of the Linux world : they just ask the Linux system to do specific things according to a very specific and well-defined interface.

Anyway, because of it's hybrid nature (Linux inside, not-Linux outside) there are some things about your phone that only a Linux hacker can change. And within the Linux part, some things require modifying the kernel whereas others are simply a matter of adding or tweaking other files.

Usually, an Android user who steps into the world of customizing their phone typically does so by installing a new ROM; i.e. completely replacing the existing Linux system with an altogether new one. Sometimes you will see a kernel offered by itself (be *sure* it is meant to work with your hardware and your exiting ROM !) or some other kind of update (e.g. a GPS fix zipfile) that merely replaces/modifies a couple of Linux system files. But since the small, maintenance-free version of Linux used by Android doesn't include a good way of managing Linux packages (e.g. apt, rpm, yum, ...) this approach is (and probably should remain) fairly limited.

Anyway, I hope this post helped somebody. Even as a seasoned Linux geek I find the world of Android modding very confusing and hard to get good info on.