personal-website/_posts/2022-11-24-github-copilot.md

8.5 KiB
Raw Blame History

layout title date description
post GitHub Copi­lot 2022-11-24 17:39:00 ¿Avance o riesgo?

Es una herramienta de GitHub o, como Microsoft publicita, un AI pair programmer, que te recomienda sugerencias de código a medida que vas programando. Estas sugerencias pueden ser recibidas empezando a escribir una parte del código o, también, agregando un comentario en lenguaje natural que describa lo que se esté intentando hacer. Este último punto, particularmente, le da un positivo diferencial en relación con sus posibles competidores como, por ejemplo, IntelliSense, que solo provee auto-completado de código, o Tabnine, que hace lo mismo que IntelliSense solo que usando AI, pero no tiene tanto poder de generación como Copilot.

¿Cómo funciona?

Usa OpenAI Codex, que, en pocas palabras, es un sistema que traduce lenguaje natural a código.

{% include figure.html path="assets/img/copilot.png" class="img-fluid rounded z-depth-1" %}

Flujo de GitHub Copilot

Es un descendiente directo de GPT-3 (generative pre-trained transformer), el cual tiene como objetivo o tarea principal la generación de lenguaje natural en respuesta a un mensaje de, valga la redundancia, lenguaje natural. Por lo tanto, en base a un texto inicial, este puede producir texto que lo continúe y tenga, por supuesto, relación con el inicial. Codex, además de poseer la característica de procesamiento de lenguaje natural, puede producir código funcional.

Codex tiene una memoria de 14KB, en comparación con su antecesor que solo tiene 4KB. Esto hace que tenga en cuenta 3 veces más de información contextual. La información contextual surge de los comentarios y código que se está desarrollando tanto en el archivo actual como en el resto de los archivos del proyecto que se esté realizando (es decir, archivos que se encuentran en la misma carpeta).

Según OpenAI, Codex se entrenó tanto con lenguaje natural como con millones de líneas de código, provenientes de millones de repositorios públicos en GitHub. Además, con este entrenamiento, Codex da la respuesta correcta a los problemas en un 28.8% de los casos.

¿Es útil?

Depende. Mucha gente sostiene que facilita el proceso pero otros piensan todo lo contrario: lo ralentiza. Para mí, luego de hacer varias pruebas y de llevar un uso diario, la mayoría de las veces lentifica la producción del código. ¿Por qué? Simplemente porque si bien en algunos casos particulares puede darte el snippet de código que necesitás (en vez de, por ejemplo, ir a sitios como Stack Overflow y copiar de este el código que se necesita), no es bueno para el entendimiento del código en forma integral y podría llegar a generar bugs que, mientras más se utilice esta herramienta, más difíciles serían de encontrar. Para que no ocurra esto, el uso de esta herramienta requiere de un gran conocimiento del lenguaje y de lo que se quiere programar; por lo que, teniendo este conocimiento, dudo de que en verdad se quiera utilizar esta herramienta.

Un caso parecido que merece la pena traer a colación es el de las traducciones. En algunas empresas, se empezó a obligar a los traductores a poner lo que se quiera traducir en una herramienta del estilo de Google Translate y, luego, corregirla (en vez de traducir de manera directa el texto). Esto, como en el caso de GitHub Copilot, sin duda puede traer ciertas mejoras en el tiempo total de traducción, no obstante, es preciso tener en cuenta que podría llegar a traer decrementos en el rendimiento general si la herramienta en cuestión no funcionara de manera adecuada.

Problemas relacionados con la seguridad

Debido a que Codex podría generar cualquier código, se debe tener en cuenta que podría justamente ocasionar vulnerabilidades o algún código malicioso. Es por esto que OpenAI recomienda correr este código en un sandbox primero, para asegurarse de que no sea efectivamente malware. Esto, de nuevo, requiere de un gran esfuerzo y conocimiento del programador para leer y releer el código generado y estudiar así sus posibles vulnerabilidades. De esta forma, se sigue perdiendo tiempo y precisamente se va en contra de lo que esta herramienta intenta resolver.

Uno podría pensar que mientras más se ajuste esta herramienta (es decir, mientras más se actualice y se mejore) esto no continuaría ocurriendo, pero, curiosamente, sucedería lo contrario. Si se mejorara la herramienta, esta produciría código más potente y, por tanto, con mucho mayor riesgo de tener vulnerabilidades o de contener malware.

Problemas con licencias

Como vimos, GitHub Copilot se entrena con los repositorios públicos de GitHub. Esto trae graves problemas con relación a las diferentes licencias de OSS (open source software), puesto que podría hacer que se usen partes de código de software libre en proyectos de código propietario.

Algunas licencias de OSS no permiten la reproducción si no se mantiene la misma licencia (copyleft), es decir, no se puede usar su código en un proyecto propietario a menos que este último cambie su licencia. El problema es que esto no lo tiene en cuenta GitHub Copilot, ya que, al menos en la versión publicada el 24/11/2022, únicamente recomienda código sin perjuicio de qué licencia tenga el proyecto del cual se obtuvo. Además, como si fuera poco, GitHub se lava las manos dejando el copyleft compliance a los usuarios. Pero, sin embargo, surge otra pregunta: ¿cómo se puede hacer esto si los usuarios directamente no saben de dónde se obtuvo el código?

Por otro lado, otro problema que puede aflorar con el uso de esta herramienta es la debilitación de las comunidades open source, pues hace que muchos programadores obtengan código de forma rápida sin ver de dónde salió. Entonces se pierde el contacto de programador a programador.

Debido a todo esto, Microsoft recibió una demanda judicial por parte de un grupo de personas en USA. El grupo alega que se violan varios derechos legales en relación con las licencias OSS, y los propios términos de servicio y políticas de privacidad de Microsoft, entre otras cosas.

Justamente, por todo esto muchos proyectos open source (y particularmente SFC) se están yendo de GitHub. Microsoft piensa que proveyendo el hosting de código ya es su dueño y, por tanto, que puede hacer lo que quiere con él.

Me gustaría que el lector curioso piense sobre este tema y reflexione, a su vez, si no es una buena opción, e incluso éticamente responsable, irse de GitHub y usar otras alternativas como GitLab, SourceHut, CodeBerg o, si es que efectivamente tiene los conocimientos necesarios (y el debido hardware), tratar de hostear un sistema SCM usted mismo.

Referencias