Use robust_snprintf more
Splify program object lifecycle

A new program object is created with program_define and an existing
program object is removed by program_purge.

program_purge is irreversible, running processes are killed with SIGKILL
and all data belonging to the program if deleted.

A purged program object that is kept alive by external references will
respond to all requests with an API_E_PROGRAM_IS_PURGED error.