Keeping the average user from opening two copies of my program
I suggest you to use resource based locking. Consider the following:


your application uses well known TCP/UDP port. Only single process can bind it.
your application uses some configuration/database/whatever files in predefined places. flock them. Same stands for pid files under /var/run.


It is still possible to separate resources with chroot or containers. But if nothing is shared are there any benefits in forced locking?


  I'd like to keep mid-average users from being able to open more than one copy of my program at a time.


I guess mid-average users won't use network namespaces, chroots or containers. If they will - I bet they have the reasones so let them do the thing.