Portability of Parallel and Distributed Applications