El miércoles de la semana pasada yo y más devs nos encontramos con una catástrofe: nuestros proyectos de no estaban compilando. Gran parte del mundo del software se paralizó. Incluyendo nuestros proyectos, nada se podía actualizar.
Este fue uno de los dos eventos que marcaron la semana pasada en el mundo del desarrollo. A priori, no parecen estar relacionados, pero sí lo están. Ahora te cuento por qué.
A principios de la semana, Richard Stallman anunció que iba a volver al directorio de la Free Software Foundation, tras haber renunciado el año pasado por críticas que recibió por sus declaraciones sobre diversos temas polémicos y por acusaciones de acoso.
La decisión fue repudiada ampliamente por el mismo mundo del software libre, desde donde rápidamente salió una carta abierta firmada por miles de personas, incluyendo gente bien influyente y organizaciones grandes como Mozilla.
Este contexto es importante, porque es difícil hablar de software libre sin hablar de este personaje. Creo que es importante abstraerse de su positiva influencia en el mundo del software, pues su legado también incluye el hecho que mucha gente se haya alejado de proyectos por su forma de tratar a la gente
Este miércoles, un programa aparentemente pequeño, mimemagic, cambió su licencia a la famosa GPLv2, porque en verdad la habían estado rompiendo sin darse cuenta.
Antes de esta semana probablemente muy poca gente conocía mimemagic, que sirve para detectar automáticamente el tipo de un archivo, o sea, para saber si es un PDF, un Excel, un archivo de texto, etc. Es una dependencia fundamental de Rails (un framework que sirve para hacer aplicaciones web). Para hacerse una idea, sobre Rails se han construido diversas empresas como AirBnB, Buda, GitHub, Fintual, Shopify y Fintoc.
Con este cambio de licencia desaparecieron las versiones anteriores de mimemagic, y es la razón de lo que les conté al principio. Miles de personas confundidas y con un dolor de cabeza, y el mundo del software paralizado.
Este xkcd se volvió real. Y se notó al tiro, en uno de los issues más comentados del último tiempo en Rails.
Toda la comunidad hablando de un problema que paralizó al mundo dev, como el barco del canal de Suez. La diferencia clave: que la comunidad puede reaccionar rápido y en conjunto, y todo se arregló en tiempo récord.
Pero ¿por qué tantas aplicaciones dependen de algo que es aparentemente tan chico? y ¿qué significa cambiar su licencia? ¿qué significan esas de GPL, MIT, OSS? ¿software libre, código abierto?
He estado juntando conocimiento de estas cosas a través del tiempo. No soy experto (eso se lo dejo a la gente que estudia leyes 😴), así que es posible que me equivoque. Pero intentaré explicarlo
Copyright y copyleft
El copyright es lo que protege las obras que crea una persona. Básicamente prohíbe que alguien copie el trabajo que hiciste sin tu consentimiento. Cualquier cosa que sea de tu autoría tiene automáticamente derechos de autor, no tienes que hacer nada.
Funciona así en (casi) cualquier parte del mundo, porque está en el artículo 27 de la declaración universal de derechos humanos 🤓. A veces (varias veces en verdad) el derecho le pertenece a una empresa. Por ejemplo, Disney tiene los derechos de autor de sus películas.
Lo contrario a copyright es que una obra pertenezca al dominio público. Esto significa que la obra no le pertenece a nadie. Una obra se puede dejar en el dominio público, o pasa automáticamente después de muchos años (eso depende del país). La cantidad de años va aumentando eso sí, en gran parte por el lobby que hacen algunas empresas que son dueñas de obras muy antiguas.
Desde hace décadas en el mundo del software ha existido una gran disposición a colaborar y compartir conocimiento, por lo que muchos programas hechos por gente fuera de su trabajo eran pasados sin licencia (es decir, como dominio público). Pero esto significa que el trabajo se puede modificar, y esas modificaciones dejan de pertenecer al dominio público. O sea, ahí termina la colaboración. Tomo lo que me sirve y lo mejoro, pero el resto ve cómo se las arregla.
Por eso fue que nacieron las licencias copyleft. Stallman (el personaje del principio del artículo) escribió un manifiesto que más tarde se convirtió en la primera licencia copyleft, la GPL. Un programa distribuido con esta licencia debe garantizar que puede ser estudiado y mejorado, pero además, las mejoras o cambios se deben distribuir con la misma licencia, no se pueden acaparar el trabajo de la comunidad.
En GPL, además, cualquier trabajo derivativo debe también ser liberado con las mismas condiciones. O sea, si uso algo con licencia GPL, tengo que liberar mi trabajo con la misma licencia.
Este último detalle es importante, porque hace que estas licencias sean más o menos “virales”, o generan un efecto dominó que hace que muchas cosas terminen teniendo licencias copyleft.
Algunas empresas o personas consideran que su código es parte importante del valor de lo que hacen, y por eso nacieron otro tipo de licencias, que son más permisivas, pero intentan mantener el espíritu de colaboración.
Se les llaman justamente licencias de copyleft permisivas. Si tomas un trabajo con una de estas licencias y lo mejoras, tienes que devolver las mejoras, pero si lo ocupas sin cambiarlo, no hay problemas. En general las licencias permisivas son las conocidas como open source, y las no permisivas como software libre (hay más diferencias, pero daría para otro post entero)
Volviendo a la actualidad
Lo que pasó con mimemagic es que tenía una licencia MIT, que es permisiva. Rails depende de mimemagic, e igual tiene licencia MIT. Pero mimemagic tiene como dependencia un archivo con licencia no permisiva. O sea que, legalmente, debía tener una licencia GPL. Se le notificó a minad (que maneja el repositorio de mimemagic) que estaba rompiendo una licencia, e hizo el cambio apenas pudo, porque nunca fue su intención pasar por encima de la gente de cuyo trabajo dependía.
Este cambio que parece ser chico tuvo consecuencias catastróficas (bueno, quizás no tanto). Como Rails depende de mimemagic, también tenía que pasar a ser GPL. Como Rails debía pasar a GPL, los proyectos que usan Rails también. O sea, mañana mismo puedo crear una copia de AirBNB y esperar a que la gente empiece a usarla 🤯 (obvio que eso no es tan fácil, pero el código de seguro ayuda).
Afortunadamente, la comunidad responde rápido. Así como minad cambió su licencia rápidamente, también se hicieron los cambios necesarios para que mimemagic pueda funcionar sin romper la licencia GPL en algo así como un día.
Todo esto es posible porque hay una comunidad gigante que colabora para lograrlo. Devs que usan su tiempo libre o empresas que aportan recursos (humanos y financieros) para desarrollar herramientas que cualquiera puede usar y mejorar. En Platanus usamos Rails, y tenemos varios proyectos de código abierto. ActiveAdmin AddOns, por ejemplo, es usado por personas de varios lugares del mundo, y hay gente que nos reporta problemas y aporta con soluciones, y que nunca vamos a conocer.
Este espíritu colaborativo, que es característico del mundo dev, es una de las razones por las que los productos digitales pueden salir y probarse tan rápida y efectivamente. Gracias a esto el mundo del desarrollo es cada vez más importante. Creo que debemos mantener este espíritu, y que al igual que sus proyectos, dependa de la misma comunidad que lo nutre y de su colaboración, no de una persona u organización como eje central.