  It is generally desirable for high-performance computing (HPC) applications
to be portable between HPC systems, for example to make use of more performant
hardware, make effective use of allocations, and to co-locate compute jobs with
large datasets. Unfortunately, moving scientific applications between HPC
systems is challenging for various reasons, most notably that HPC systems have
different HPC schedulers. We introduce PSI/J, a job management abstraction API
intended to simplify the construction of software components and applications
that are portable over various HPC scheduler implementations. We argue that
such a system is both necessary and that no viable alternative currently
exists. We analyze similar notable APIs and attempt to determine the factors
that influenced their evolution and adoption by the HPC community. We base the
design of PSI/J on that analysis. We describe how PSI/J has been integrated in
three workflow systems and one application, and also show via experiments that
PSI/J imposes minimal overhead.
