Mobile agents have often been advocated as the solution to the problem of designing and implementing distributed applications in a dynamic environment. Mobile agents provide a very appealing, intuitive, and apparently simple abstraction. Unfortunately there are many difficult problems that have to be addressed in order to make mobile agentbased applications work reliably. This paper discusses some of the problems associated with mobile agents and argues that other forms of code mobility can provide similar advantages while raising much fewer issues.