Due to the way most of our AMX code is programmed we give the client the whole code but some of the highly customised modules within that code are previously compiled and, therefore, remain "hidden". This allows the client to make changes, update system or panels, add or remove devices, change the installation set-up etc. without the need to rehire the original programmer but still protects the intellectual property of the original programmer.
For example:
Programmer spends many hours developing an uber-cool DirecTV module.
We don't bill the customer for all that time as the uber module will be used many times over.
We don't want the client hiring a new programmer who then "steals" the uber code to potentially distribute or re-use it many times over.
We DO WANT the customer to be able to take all rest of the code and manipulate or update as he sees fit even if that means not using us.
It can help to understand it this way:
A module is a brick and the code is the cement.
A client needs both the bricks and the cement for the system to work but, if needed, replacing a brick for a new one is relatively easy whereas replacing the cement would be cost prohibitive. I think of this as a win-win for both us and the customer. They get the best system and great value for money and we get repeatability, stable systems and profit.
Whether the touchpanel GUI's are template based or customised the customer owns them outright.
Our handheld remote codes are owned by the customer 100%.