12

Tal vez la forma más obvia de proteger la propiedad intelectual de una empresa de sus propios desarrolladores parece ser un acuerdo de no divulgación de la NDA. La efectividad de este enfoque puede variar, dependiendo de muchos factores, y algunas veces o en algún lugar puede no funcionar como se espera.Protección del código de sus propios desarrolladores

¿Qué otros enfoques, aparte de este puramente legal, existen para proteger el código de software de las personas que lo desarrollan? ¿Existen en absoluto? ¿Tiene sentido en la práctica?

Quizás, por ejemplo, Team Edition de Visual Studio ya contenga algunas características relacionadas con este problema (por ejemplo, niveles de acceso a partes de código, dependiendo del rol dentro de un equipo de desarrollo o algo así).

de referencia sobre el tema:

Como dice estadísticas, en promedio, los programadores tienden a cambiar de trabajo cada tres - y cuatro años.

+3

Desde un punto de vista puramente curioso ¿por qué sería esto necesario? Inmediatamente pensé que el entorno sería caótico o que se daría un vuelco para tener miedo de que los desarrolladores robaran el código y se fueran a otro lado para "aprovecharlo". Cualquier cosa en un nivel ultra alto probablemente debería solicitar una patente de software. –

+6

debería ser wiki de la comunidad – SilentGhost

+7

Heh, toma las pelotas para preguntar esto en el sitio de un desarrollador :) –

Respuesta

31

Intenta formar un equipo en el que puedas confiar.

+0

Estoy de acuerdo. Probablemente el mejor trabajo que tuve fue en una compañía donde la mitad de los desarrolladores trabajaban allí durante una década, algunos incluso más. Las buenas políticas hicieron que la gente se quedara y eso a su vez hizo que el código fuera muy bueno. ("He estado manteniendo a este bebé por más de diez años y está en tan buena forma porque nunca permití que se incluyera ese código. ¡Exijo que esto se limpie!") – sbi

1

Sé que dijiste aparte de la puramente legal, pero me gustaría agregar que además del legal que mencionaste, también está el Non-Compete. Básicamente dice que una vez que deje su trabajo, no podrá competir de ninguna manera contra su ex empleador. El código de robo no es tan atractivo si no podrá usarlo durante un año o dos.

+0

Al menos en el Reino Unido, las cláusulas de no competencia en un contrato de trabajo son de dudosa utilidad: los tribunales tienden a favorecer el derecho del empleado a trabajar. –

+0

Incluso aquí en los Estados Unidos, los que no compiten son en gran parte para el espectáculo y alguien que toma el terreno elevado moral intentará cumplir con lo que firmaron; "robar código", sin embargo, SIEMPRE es ilegal y debe ser castigado. –

+2

Los acuerdos de no competencia no impiden que alguien venda el código robado a un competidor detrás de escena. – doppelfish

5

Si es realmente necesario, puede dividir la aplicación en subaplicaciones. Cada equipo trabaja en una sola aplicación y ve a todos los demás como "cajas negras". Quizás SOA ayude aquí.

+0

Este es el único aspecto positivo que esta idea tiene IMO : Encapsulación, que conduce a un código modularizado mejor documentado. –

+0

Y seguramente requiere más tiempo para construir y entregar los productos desarrollados de esta manera. Brooks dice, multiplica por tres. –

+0

@Pavel Shved: por supuesto. – cherouvim

6

Es muy poco probable que su código sea propiedad intelectual real, es decir, el conocimiento y el proceso comercial de su empresa.

+0

De acuerdo: solo un pequeño número de compañías invierten * que * mucho en I + D el código fuente inédito realmente da alguna ventaja competitiva real – ZJR

+0

Todavía escuché de gerentes que usan la * Compañía A * mano de obra para el beneficio de * Compañía B * haciendo que implementen características del * Clientes de la empresa B * solicitados y luego contrabandeados, pero es obvio ** este tipo de personas no está realmente molesto por obstáculos legales **. – ZJR

3

Cree un equipo de desarrolladores en los que pueda confiar o bloquee completamente el sistema para que no puedan acceder a los puertos USB, la unidad de CD o los clientes de correo web. Lo único que podrían hacer es trabajar en el código y posiblemente navegar por la web. También solo déles acceso al código que están a cargo.

Pero con todas estas medidas de seguridad es probable que sus desarrolladores se odian trabajar con usted y salir de su trabajo

+2

Conozco a un tipo que robó código de un entorno como ese al tomar más de 200 fotos de la pantalla con su teléfono móvil ... – CesarGon

+0

Si pueden navegar por la web, siempre hay pastebin y similares. – doppelfish

+1

¡atorníllelo, quite sus teléfonos también! O simplemente puede abrir –

2

No hay manera fácil de hacer esto si su código está dentro del mismo proyecto (es decir, que desea permitir el acceso a algunas partes del código y otras no). Sin embargo, si tiene proyectos separados que requieren diferentes niveles de seguridad, es posible permitir que los desarrolladores solo tengan acceso de código a ciertos proyectos y luego extraer compilaciones de un servidor de compilación común.

Tenga en cuenta que la descompilación de marcos que funcionan contra IL como .NET es relativamente sencilla, por lo que evitar el acceso a los archivos de código no es necesariamente una bala para proteger el IP.

33

El primer enfoque es forzar a los programadores a que solo conozcan interfaces de otros componentes, de modo que cada uno pueda robar una pequeña parte de todo el software. Este enfoque puede tomarse prestado de la producción de calzado. Una corporación transnacional, para evitar el robo por parte de los empleados, arregló sus fábricas para que cada fábrica produjera solo zapatos izquierdos o solo adecuados. Usted podría hacer lo mismo con su código: algunos programadores solo escriben líneas con números impares, y los otros, aquellos con números pares; ¡con la condición de que no puedan ver el trabajo del otro! A veces se lo denomina "pair programming".

Algunas organizaciones obligan a los empleados a firmar un acuerdo de no competencia. Ese es el tipo de acuerdo que impide que los programadores trabajen para la competencia. Esta técnica se combina mejor con ofertas de trabajo como "Buscando programador senior con 5 años de experiencia en el campo similar".

Para evitar el robo de sus programadores, puede dañarlos tan pronto como finalicen el software. El método demostró ser el más eficiente y se ha utilizado durante siglos. Por ejemplo, el zar ruso Ivan The Terrible quema los ojos del arquitecto que diseñó una hermosa iglesia en la Plaza Roja, por lo que el diseño sigue siendo el más bello de todos. Puede hacer algo como esto a su arquitecto. Escuché, el último Visual Studio contiene algunas características ...

Hoy en día, sin embargo, es más humanista contratar personas ya ciegas y ya mudas que perdieron sus manos, por lo que no pueden mirar su código para memorizarlo, no puede contarle a nadie sobre su código y no puede volver a escribirlo. La ventaja es que esto lo ayudará a tratar con la agencia laboral en su país, que busca el equilibrio para que sus empleados no sean discriminados.

Y sí, esta publicación es una broma sarcástica, que critica la idea de cualquier medida de prevención de robo de código. Lo siento, no pude evitar publicarlo.

+1

+1 para ojos ardientes! – PostMan

+0

Cabe mencionar que perder las manos es absolutamente esencial, de lo contrario, podría leer el código con pantallas braille. Y debe tenerse en cuenta que tal vez las personas con talento podrán leer braille con los dedos de los pies, por lo que tal vez necesite cortar estos también;) –

15

¿Cómo se protege una central eléctrica del sabotaje de un empleado? ¿Cómo previene que un boxeador lance la pelea? ¿Cómo se evita que un burdel distribuya la palmada?

Su preocupación, si bien es válida, es aquella a la que solo se puede dirigir de forma adecuada mediante la responsabilidad personal y la responsabilidad dentro de su equipo. Cualquier opción que emplee para proteger el código contra el robo es más dañino que beneficioso. Si crees que un miembro del equipo no es confiable, deshazte de ellos.

+0

Muy bien puesto. - –

1

Puede hacer que desarrollen un módulo que sería independiente del resto de la aplicación. Si tuviera un sistema de plugin/tipo de módulo funcionando, esto sería adecuado. Podría lanzar API para que los desarrolladores se desarrollen contra y hacer que se integren con sus archivos DLL y no con el código fuente.

La gente parece ser muy crítica con esto, pero hay razones legítimas para hacerlo, es decir, asociarse con un competidor potencial si les daba toda su fuente, se dispararía en el pie.

4

SVN tiene la capacidad de limitar diferentes usuarios a diferentes carpetas, por lo que podría dividir el código en bibliotecas separadas y permitir solo el acceso de lectura/escritura a ciertas personas.

El archivo para esto está bajo conf \ authz Aquí es una muestra

[aliases] 
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average 

[groups] 
# harry_and_sally = harry,sally 
# harry_sally_and_joe = harry,sally,&joe 

[/ 
# [/foo/bar] 
# harry = rw 
# &joe = r 
# * = 

# [repository:/baz/fuz] 
# @harry_and_sally = rw 
# * = r 

Parte de la documentación se puede encontrar 'por directorio de control de acceso' here

Bajo

1

Se podría valer la pena gastar algo de actividad cerebral en el modelo comercial que desea seguir. Si el valor central está incorporado en el código, el valor central puede ser robado robando el código. Sin embargo, si el valor central de su empresa está integrado en un grupo de empleados, algunos de ellos ingenieros, otros vendedores, y otros, personas de soporte al cliente, y cuando el software es solo la red que mantiene funcionando a estas personas, entonces hay no es una forma fácil de robar el valor de su negocio. Y si se roba el software , los ladrones no podrán usarlo mucho.

Por lo tanto, además de lo que dijo cherouvim, forme un equipo en el que no pueda simplemente confiar, sino un equipo que sea el valor central de su negocio.

1

Desarrolle su software en módulos.

Tiene un módulo común que contiene objetos que pasan de ida y vuelta, y clases de utilidad que actúan sobre esos objetos.

Haga que cada grupo construya módulos además de eso, sin mucha necesidad de conocer otros módulos.

Haga que un equipo de desarrolladores de confianza haga la planificación de lo que se incluye en cada módulo, y haga que ese equipo también realice la integración de todos los módulos en el conjunto.

También confíe mucho en quien ejecuta su servidor de control de versiones. Si bien es estable, ningún desarrollador puede hacer tanto daño; no pueden borrar todo, por ejemplo, y sabrá exactamente lo que hicieron y cuándo, si eso llega a ser un problema.

Cuestiones relacionadas