Saludos a la comunidad del software libre de la lengua cervantina.
Debido a que hay gente que todavía parece tener cierta confusión tanto con respecto a la definición de software libre y software de código abierto (aún cuando el Chad hizo un muy buen vídeo al respecto), he decidido remarcar las diferencias y similitudes entre ambas filosofías de una manera más gráfica para que termine de cerrar el tema.
He visto a varias personas que consideran que, si bien conceptualmente ambas filosofías son diferentes, las mismas se encuentran tan alejadas entre sí, como si se buscara diferenciar al software libre del software privativo y voy a desarrollarles el por qué considero que son mucho más cercanas de lo que varios creen.
Para poder desarrollar este tema, me voy a basar en las cuatro libertades detalladas por la F.S.F. (Free Software Foundation) y los 10 criterios que definen al software Open Source y que son detallados por la propia Open Source Initiative.
Las cuatro libertades del software libre.
Primero vamos a enumerar y tratar de detallar cuáles son las cuatro libertades que definen al FS (Primero voy a copiarlas tal cual como se encuentran en el sitio de la Free Software Foundation y luego las voy a traducir):
- The freedom to run the program as you wish, for any purpose (freedom 0).
La libertad de correr el programa como desees, por cualquier propósito (libertad 0)
- The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.
La libertad de estudiar cómo el programa trabaja, y cambiarlo para que realice tu cómputo como desees (libertad 1). El acceso al código fuente es una precondición para esto.
- The freedom to redistribute copies so you can help others (freedom 2).
La libertad de redistribuir copias así tú puedes ayudar a otros (libertad 2).
- The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.
La libertad de distribuir copias de tu versión modificada a otros (libertad 3). Haciendo esto, le puedes dar a toda la comunidad la chance de beneficiarse de tus cambios. El acceso al código fuente es una precondición para esto.
Los 10 criterios que definen al software de código abierto.
- Free Redistribution (Libre distribución).
The license shall not restrict any party from selling or giving away the software as a component of an aggregate software distribution containing programs from several different sources. The license shall not require a royalty or other fee for such sale.
La licencia no debe restringir a ninguna parte de vender o regalar el software como un componente de una distribución de software agregado conteniendo programas de diferentes fuentes. La licencia no requerirá comisión u otro cargo por dicha venta.
- Source Code (Código fuente).
The program must include source code, and must allow distribution in source code as well as compiled form. Where some form of a product is not distributed with source code, there must be a well-publicized means of obtaining the source code for no more than a reasonable reproduction cost, preferably downloading via the Internet without charge. The source code must be the preferred form in which a programmer would modify the program. Deliberately obfuscated source code is not allowed. Intermediate forms such as the output of a preprocessor or translator are not allowed.
El programa debe incluir el código fuente, y debe permitir la distribución en código fuente como así también en su forma compilada. Donde una forma del producto no sea distribuída con el código fuente, debe ser bien publicitada la manera de obtener el código fuente por no más de un costo de producción razonable, preferiblemente descargado vía internet sin cargo. El código fuente debe ser en la forma preferida en la que un programador pueda modificar el programa. El código fuente deliberadamente ofiscado no está permitido. Formas intermediarias como la salida de un preprocesador o traductor no están permitidas.
- Derived Works (Trabajos derivados).
The license must allow modifications and derived works, and must allow them to be distributed under the same terms as the license of the original software.
La licencia debe permitir modificaciones y trabajos derivados, y debe permitir que sean distribuídos bajo los mismos términos como los de la licencia original del software.
- Integrity of The Author’s Source Code (Integridad del código fuente del autor).
The license may restrict source-code from being distributed in modified form only if the license allows the distribution of “patch files” with the source code for the purpose of modifying the program at build time. The license must explicitly permit distribution of software built from modified source code. The license may require derived works to carry a different name or version number from the original software.
La licencia puede restringir al código fuente de ser distribuído en su forma modificada sólo si la licencia permite la distribución de “archivos parche” con el código fuente con el proposito de modificar el programa al momento de compilarlo. La licencia debe permitir explícitamente la distribución del software compilado del código fuente modificado. La licencia puede requerir que los trabajos derivados lleven un nombre o número de versión diferente al del software original.
- No Discrimination Against Persons or Groups (No discriminación contra personas o grupos).
The license must not discriminate against any person or group of persons.
La licencia no debe no debe discriminar a ninguna persona o grupo de personas.
- No Discrimination Against Fields of Endeavor (No discriminación contra campos de actividad).
The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.
La licencia no debe restringir a nadie de hacer uso del programa en un campo de actividad específico. Por ejemplo, no puede restringir a un programa de ser usado en negocios, o de ser usado para investigación genética.
- Distribution of License (Distribución de la licencia).
The rights attached to the program must apply to all to whom the program is redistributed without the need for execution of an additional license by those parties.
Los derechos adjuntos al programa deben aplicarse a todos quienes se les redistribuyó el programa sin la necesidad de la ejecución de una licencia adicional por aquellas partes.
- License Must Not Be Specific to a Product (La licencia no debe ser específica a un producto).
The rights attached to the program must not depend on the program’s being part of a particular software distribution. If the program is extracted from that distribution and used or distributed within the terms of the program’s license, all parties to whom the program is redistributed should have the same rights as those that are granted in conjunction with the original software distribution.
Los derechos adjuntos al programa no deben depender de que el programa sea parte de una distribución de software particular. Si un programa es extraído de dicha distribución y usado o distribuído junto con los términos de la licencia del programa, todas las partes a quienes el programa fue redistribuído deberían tener los mismos derechos que aquellos que son obtenidos en conjunción con la distribución del software original.
- License Must Not Restrict Other Software (La licencia no debe restringir a otro software).
The license must not place restrictions on other software that is distributed along with the licensed software. For example, the license must not insist that all other programs distributed on the same medium must be open source software.
La licencia no debe posicionar restrincciones en otro software que es distribuído junto con la licencia del software. Por ejemplo, la licencia no debe insistir en que el resto de programas distribuídos bajo el mismo medio deben ser software de código abierto.
- License Must Be Technology-Neutral (La licencia debe ser tecnológicamente neutral).
No provision of the license may be predicated on any individual technology or style of interface.
No aprovisionamiento de la licencia puede ser predicada en cada tecnología individual o estilo de interfáz.
Marcando diferencias y similitudes en ambas filosofías.
Uno de los motivos por el que personalmente me encuentro decantado por el software de código abierto antes que el software libre, se debe a la falta de precisión y claridad en las libertades detalladas por la F.S.F.. Esto es algo natural, ya que para darles un poco de contexto, dichas libertades fueron establecidas en el año 1983 y todavía faltaban sentar muchas bases en el mundo del software, y es por ese motivo que considero que los criterios del software de código abierto detallan y cierran conceptos que todavía ni habían comenzado en plantearse para en ese entonces.
Ahora bien, para enmarcar las diferencias y similitudes, me ví en la tarea de agrupar los criterios del OSS dentro de las libertades del FS que tratan del mismo punto o concepto.
Libertad 0
Por muchas similitudes en sus objetivos que tengan tanto el software libre y el software de código abierto, hay diferencias notorias. Desde la F.S.F. han dejado bien en claro su posición detallando su filosofía en su página web, e incluso han tratado de enmarcar con ejemplos la diferencia entre ambas pero con algunas fallas debido a (lo que yo asumo por mi cuenta) errores de interpretación o la falta de análisis de los objetivos.
Uno de estos puntos es la libertad 0, en donde la propia fundación alega la falta dentro de los criterios del código abierto. Analizando esto, me di cuenta que no sólo es algo que sí se encuentra detallado, si no que lo hace en diferentes puntos (5, 6, 7, 8, 9 y 10), bien desglosados y dejando bien en claro todos los parámetros necesarios para que el software “pueda correr como el usuario lo desee, para cualquier propósito”.
De hecho, fue el punto mas elaborado dentro de los 10 criterios.
Para que un software pueda correr como el usuario lo desee y para cualquier propósito, se deben cumplir algunas condiciones:
- La primera es que no se debe discriminar o restringir el uso a nadie. De no cumplirse esta condición, sólo los usuarios permitidos por licencia podrán correr el programa y sólo como la licencia lo permita (la viva definición de software privativo).
- Luego tenemos la no discriminación hacia campos de actividad. Si realmente eres libre de correr el programa como desees y para cualquier propósito, no vas a discriminar a ningún campo de actividad o desarrollo en donde pueda ser utilizado el software.
- Distribución de la licencia: Los derechos y libertades otorgados por la licencia del software, deben ser transferibles hacia trabajos derivados. De esta manera se evita la interrupción en la distribución del código fuente, permitiendo la accesibilidad al mismo para todos.
- La licencia no debe ser específica a un producto. Si tenemos una distribución de software que incluye a varios programas y extraemos uno en particular para redistribuir, los derechos para dicho software individual son los mismos que los de la distribución completa del software, sin obligar al usuario a depender de todo el “paquete” completo.
- La licencia no debe restringir a otro software. La importancia de este punto se debe a que en caso de que un programa con licencia de código abierto sea distribuído junto a otros programas, este no debe restringir la licencia o condiciones de uso del resto. Cada programa debe tener su licencia independiente dentro de la distribución, pudiendo coincidir o no.
- Para finalizar con este punto, la licencia debe ser tecnológicamente neutral, es decir que la licencia no puede provisionarse a una tecnología individual o estilo de interfáz.
Si cumplimos con todos estos criterios, vamos a tener un programa que realmente pueda correr en cualquier lado y como lo deseemos.
Libertad 1
Con esta libertad nos va a ser posible aprender el funcionamiento de un programa y también modificarlo, pero como pasó con la libertad anterior, es necesario ser claros al respecto y marcar los parámetros necesarios para que esta libertad exista.
Dentro de los criterios del código abierto, nos encontramos a esta libertad detallada en dos partes (punto 2 y 4):
- La primera es el código fuente, que debe estar disponible y ser distribuído junto con la versión compilada del programa. Acá es donde encontré una falta de interpretación dentro de las diferencias publicadas por la F.S.F., ya que alegan que un ejecutable cuenta como código fuente, siendo que en este punto se detalla en específico que no se cumple esta condición si el código es la salida de un preprocesado o traducción, como así también el código deliberadamente ofuscado.
- El segundo punto habla sobre la integridad del autor del código fuente. A este punto quiero recalcarle su debida importancia, ya que el autor original o la empresa encargada de la distribución y mantenimiento del programa tienen reputaciones que mantener basadas en la calidad de su código. Cualquiera es libre de usar el programa, modificarlo y redistribuirlo, pero es necesario aclarar qué parte del código corresponde al autor original y cual forma parte de la alteración o modificación, ya que una modificación puede preservar, mejorar o empeorar la calidad del software.
Esto no significa que no se pueda hacer, pero es posible que se requiera un cambio de nombre del programa o de versión del mismo para que los usuarios puedan diferenciar y elegir a qué versiones del programa quieren acceder.
Libertad 2
Esta libertad no se encuentra más detallada por la propia diferencia entre el software libre y el software de código abierto. En este caso las diferencias son intencionadas y es un ejemplo de la diferencia entre objetivos de ambas filosofías.
Como todos en la lengua cervantina sabemos, que el software sea libre, no significa que sea gratis y la redistribución del mismo implica que una vez obtenido el código fuente, este puede revenderse.
Para el software de código abierto, la redistribución no debe incluír ningún valor agregado en forma de comisión o tarifa por dicha venta (punto 1).
Libertad 3:
Para finalizar con las diferencias y similitudes, nos toca hablar de los trabajos derivados y las versiones modificadas. En este caso no se encuentra ninguna diferencia práctica o teórica entre ambas filosofías. Dentro del software libre, esta libertad establece que cualquiera es libre de distribuir las versiones modificadas del programa.
Al compararlo con el requerimiento por parte del código abierto, este sólo añade que la licencia debe transferirse al programa derivado (punto 3). En el caso anterior ya se encuentra implícito pero veo bien al motivo de ser claros con las condiciones de cada punto.
GNU + Linux.
Algo que me parece increíble tener que aclarar en esta comunidad es la diferencia entre GNU y Linux, pero me siento obligado a hacerlo ya que he visto a personas que todavía asumen que ambos por separado son sistemas operativos completos.
Cada uno es una porción del sistema operativo y se encuentran enfocados en objetivos concretos dentro del mismo. Sin entrar en demasiados detalles técnicos, GNU es la porción que contiene los programas del sistema y que nosotros como usuarios, utilizamos todo el tiempo para operar el mismo. Linux, en cambio, es el kernel. Con esto nos referimos a la parte del sistema que comuncia a dichos programas con el hardware.
GNU por sí sólo NO ES UN SISTEMA OPERATIVO como tampoco lo es Linux. Es cierto que por comodidad al comunicarnos o para usuarios nuevos se utilice el término “Linux” para referirse a todo el ecosistema, pero es necesario aclarar y enseñar de qué se encarga cada cosa.
Evitar fanatismos.
Desde la fundación del software libre dejan bien en claro que el “campamento” del código abierto no es un enemigo como es el caso del software privativo. Desgraciadamente, muchas personas suelen tomar partido con demasiado fanatismo, desembocando en posturas muy cerradas e inflexibles que sólo logran romper con la dinámica de las comunidades impidiendo la evolución y adaptación del tema a seguir.
La mayor libertad que un ser humano puede tener es la de crear su postura personal, adoptando filosofías de diferentes posturas y creando un punto medio para sí mismo, y eso es lo que yo considero como lo más hermoso a lo que alguien puede aspirar.
Yo personalmente, por preferir una postura más que la otra, no voy a decir que “el otro bando” es el malo o voy a desechar un producto por el simple facto de que aboga por una filosofía un poco diferente, y actualmente es imposible elegir una opción entre estos dos “contendientes” sin que veamos restringidas nuestras propias libertades a causa de nuestras ideologías, por lo que usamos ambas en conjunto según nuestras necesidades y adaptandonos al terreno.
La tecnología con la que convivimos día a día se volvió una extensión de nosotros mismos y somos nosotros mismos los que elegimos dónde quedarnos.
Dicho esto, yo considero que las libertades del software libre se explica demasiado por fuera de las mismas y con una amplia utilización de ejemplos sin ser específicas por sí mismas, pero el software libre me sigue pareciendo maravilloso y lo utilizo día a día junto con software de código abierto, y tampoco voy a condenar a nadie por no compartir mi postura, ni voy a cegarme ignorando el resto de posibilidades, cambios o puntos de vista.
La opinión de la comunidad.
Si alguno desea desarrollar más el tema y quisiera realizar su aporte es más que bienvenido. Podemos coincidir o no, pero enfrentar ideas es lo que nos hará evolucionar. Somos humanos y hasta a quienes idolatramos pueden equivocarse.
Espero haber podido ayudarles a entender bien las diferencias entre una cosa y la otra.