Uma maneira comum de garantir que os usuários não possam ler o código-fonte de algo que estão causando a execução seria escrever um serviço que atue em nome do usuário com os privilégios necessários. Em seguida, forneça aos usuários uma maneira de se comunicar com o servidor, como um soquete ou uma porta TCP. Neste ponto, o código não está mais sendo executado em um contexto disponível para o usuário. Escrever isso não é trivial, pois você pode considerar, por exemplo, usuários tentando usar seu serviço para escalonamento de privilégios.