Dies ist generell ein Problem, wenn aktive Programme im laufenden Betrieb ersetzt werden.
Dies erfolgt durch den Compiler automatisch, da das alte Objekt in QRPLOBJ verschoben wird und dann das neue Objekt erst erstellt wird.
Somit arbeiten alle aktiven Programme mit der alten Version weiter bis sie selber inaktiv werden (return mit *INLR = *ON) oder der Job beendet wird.
Das System erstellt keine Kopie!

Ursache ist, dass ein Programm beim 1. Aufruf alle Adressen auf Programmobjekte lädt, des es ggf. aufrufen könnte. Bei *INLR = *ON wird das Programm beim Return deaktiviert, so dass beim nächsten Aufruf die Adressen neu ermittelt werden.
Das Verschieben eines Objektes in eine andere Lib ändert nicht die Adresse des Objekts, sondern nur die Adresse seines Kontexts, also den Standort. Ebenso gilt dies für das Umbenennen eines Objekts, die Adresse bleibt gleich.

Bei ILE-Objekten verhält es sich da durchaus mal anders. Z.B. lassen sich ILE-Trigger-Programme auf diese Weise nicht verschieben, da es hier Objektsperren auf die Programme gibt.