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.