I've written a cool program. You want to run it. What do we have to do?
It depends a lot on what programming language I've written it in.
CeeLanguage, CeePlusPlus, maybe DelphiLanguage: If we have the same kind of computers, I give you the compiled program, you run it. Period. Very nice. Especially with C and C++ there can be significant developer effort involved in making it this easy.
("Same kind of computers": Compatible processors, compatible operating systems; compatible run-time libraries either on the target machine or part of the "package" with the program to be installed.)
JavaLanguage: No need for "the same kind of computers"; but (unless it's a browser-based applet) you need to figure out how to associate the compiled bytecodes with the installed Java run-time environment on your computer. Which needs to be compatible. All of which sounds pretty tough for the naive Java programmer. JavaWebStart is a really good way to distribute Java applications. It requires that you have some hosting space, you can't just provide a CD or email a binary, but it's very nice and not overly difficult for the beginner programmer. (Somebody with experience say more here, please.)
PerlLanguage: I give you source code; you make sure your computer has a compatible interpreter, and (transitively) all the libraries my code needs. Limited need for "the same kinds of computers." Can be tough.
SmallTalk: Naive view: I give you an image, you plug it into a compatible Smalltalk environment and run it. Less naive view: I "package" my program, and give you something that you might be able to run as easily as a C program. (Somebody with experience say more here, please.)
PythonLanguage: Naive view: I give you source or compiled code; you do the same kinds of things you do with Perl. Less naive view: I "freeze" my program, give it to you, you run it as easily as a C program. There are a variety of "freeze" applications for the various platforms. py2exe is for Windows and is trivial to use, even for very new Python developers. (Somebody with experience say more here, please.)
I think this aspect is hugely underestimated. --PaulChisholm
VisualBasic: I give you compiled Windows binary. You run it. It may or may not start due to incompatible libraries on your system. It may or may not crash at any time while running due to incompatible libraries/devices/operating systems on your system.
VMWare, VirtualPC and other virtual OS hosting: Here is an OS image. It worked on my machine. Your virtual hardware should be the same, so it will work there, apart from network changes. Unless I agree to give you a new VM image on a daily/weekly basis, you will now incur the maintenance costs of keeping this virtual OS image up to date.
There are tools for packaging Perl and Python programs as executables. I have not worked with them, though. I agree in general that deployment is a big issue for a lot of software. -- SteveHowell
See CostOfDeployment, ExtremeDeployment, HowXpPlansDeployment