a) Establish communication protocols that are fixed and unchangeable. These protocols and their functioning cannot and must not ever change in any … oh wait you’re not talking about programs that modify themselves and yet need to remain in communication.. ok, let me start over.
___DO OVER___
a) All version of the program are identical.
b) Once the source code is written and finalized, have a routine that contains a copy of the code. (or contains a compiled version of the code).
I wrote a Turbo Pascal program once that would split out the source code or a copy of itself if asked back in 1993 just to see if I could, so it’s not hard. I don’t 100% remember the way I did it though. It might have been a single copy that was sterile or one that could produce copies as well. [it was a sound converter]
I had more to say but my brain is tired right now 🙂 I was thinking along the lines of code that can change itself while still recognizing other versions of itself but once I realized you weren’t asking about that, I lost my oomph.
“I need a program that can do 5 things:
Send a message to a version of itself
Receive a message from a version of itself
process a message from a version of itself
create a copy of itself
delete a version of itself.
and
the number of possible messages is bounded.”