This research addresses unsolved problems in software portability. Portability of a software unit (application program or component) is its ability to be transported and adapted to a new hardware/software environment at a cost significantly less than complete redevelopment. As far as possible, portable software should also take advantage of the specific capabilities of the target environment. The continuing proliferation of both applications and environments has made portability an increasingly critical need which, in many cases, is largely unfulfilled. The goal is to develop and validate new methods to improve portability of software units during the design process, and to improve support for portability in computing environments. These methods will improve portability for conventional software, and extend portability to new software classes such as real-time and concurrent software. Part of our work is to explore relationships between portability and reusability. Another important part of our study is the investigation of methods to specify and measure portability requirements and attributes. The research will use both analytical and experimental methods. Planned activities include a survey of existing strategies and methods; analysis of portability problems for selected new classes of software; development of methods to specify portability requirements and attributes, and metrics to quantify the costs and benefits of portability; comparison of potential strategies for specific classes of software using these specifications and metrics; and evaluation of promising strategies by selected experimental implementations.