That is the default behavior because having common home areas is fairly common, but with some work you can run your code from wherever is convenient. Using the -wd flag you can have the code run from wherever you want, but the code and data has to get there somehow.
If you are using a batch scheduler it is fairly easy to write into your execution script a section that parses the list of assigned nodes and pushes your data and executable out to the scratch space on those nodes, and then cleans up afterward (or not). The sensible way to do this will depend a lot on what schedulers you are using and your application. Openmpi may have a trick to push data/executables around as well, but I haven't run across one yet. Mike Edwards