Yo regularmente invierto mucho tiempo en la creación de bibliotecas de funciones. Regularmente estas bibliotecas contienen el producto de cientos de horas de investigación, ensayos, pruebas, en fin... mis mas geniales ideas
Cuando un cliente quiere un sistema con código fuente, tendrá el código fuente de su aplicativo, con vínculos a mis bibliotecas, de las cuales nunca he revelado el código fuente. La razón...... podria llamarse "celos" profesionales. Eso si... nunca encierro la funcionalidad real del programa en estas bibliotecas... aunque si mucha parte del procesamiento de datos a bajo nivel (procesamiento de cadenas y otros tipos de datos, alguna interacción con bases de datos (digamos para hacer un lookup programático, etc.).
Hasta la fecha, siempre he hecho mi mejor esfuerzo porque haya documentación disponible sobre estas rutinas para los programadores que eventualmente le puedan dar mantenimiento al sistema, evitando que sean "Cajas negras" de las que se ignore el comportamiento. Es una forma de encapsular la funcionalidad, darle al cliente lo que necesita (independencia) y proteger de alguna forma ciertas ideas.
Una cuestión que siempre me ha preocupado en este sentido, es perfeccionar un contrato que efectivamente "cierre" las puertas legales para la explotación no autorizada de estos fuentes. Lease, un programador inescrupuloso que se adueña de los fuentes para su beneficio personal, o un empresario que contrata programadores para adaptar los sistemas y usarlos en otras compañias (sin que esto esté previsto en el trato original).
Es un asunto que hay que tener en cuenta al revelar los fuentes... pues allí ya no hay mecanismos de seguridad "cerrados" que nos protejan de la piratería...
Hasta luego.