¿Qué es el código abierto y por qué es importante para el software y la blockchain?

¿Qué es el código abierto?
El código abierto significa que el código fuente del software está disponible y que una licencia otorga a otras personas derechos claros para usar, consultar, modificar y distribuir ese código. El código fuente es la versión legible de un programa con la que trabajan los desarrolladores. Puede verse como la receta detrás de una aplicación o un programa.
Por tanto, no basta con publicar el código en línea. Sin una licencia adecuada, no queda automáticamente claro si usted puede copiar ese código, modificarlo o volver a compartirlo. Precisamente la licencia determina qué está permitido y qué no.
El código abierto tampoco significa necesariamente que sea gratuito. Alguien puede vender software de código abierto o cobrar por su distribución, siempre que la licencia lo permita. Lo importante es la libertad en torno al código, no el precio.
Una licencia de código abierto auténtica, por ejemplo, no puede hacer distinciones entre usuarios, grupos o aplicaciones. Por tanto, no puede ofrecer el software solo a un grupo concreto o solo para uso privado y luego llamarlo código abierto. Además, las condiciones no deben depender de una tecnología específica.
Ejemplo: Suponga que un desarrollador publica un programa bajo una licencia de código abierto. Usted puede estudiar el código, crear una versión propia y compartirla, siempre que cumpla las condiciones de esa licencia. Si ese mismo código está en línea sin licencia, no obtiene automáticamente esos derechos.
Puntos clave
- El código abierto se refiere tanto al código fuente como a los derechos que concede una licencia.
- A menudo puede usar, estudiar, modificar y compartir software de código abierto.
- El código abierto no significa automáticamente que el software sea gratuito.
- Una licencia determina qué condiciones se aplican al uso y la distribución.
- El código fuente público sin una licencia adecuada no otorga a otros derechos de uso claros.
¿Cómo funciona el software de código abierto?
El software de código abierto funciona porque el creador publica el código fuente bajo una licencia con reglas claras. Después, otros desarrolladores pueden copiar, consultar y modificar el código. Si también pueden distribuir su versión modificada depende de las condiciones de la licencia.
En muchos proyectos se utiliza el control de versiones. Se trata de un sistema que registra qué cambio se hizo, por quién y cuándo. Un cambio guardado de este tipo se denomina commit. Gracias a ello, normalmente puede verse paso a paso cómo ha evolucionado el software.
Una forma muy utilizada de colaborar funciona más o menos así:
-
Crear una versión de trabajo propia Un desarrollador trabaja en una branch, una línea de trabajo separada dentro del mismo proyecto. A veces primero crea un fork: una copia propia de todo el proyecto.
-
Modificar el código En esa versión propia, alguien puede corregir un error, añadir una función o mejorar el código sin cambiar de inmediato la versión oficial.
-
Enviar un pull request Un pull request es una propuesta para incorporar el cambio al proyecto original. Otros desarrolladores pueden entonces revisar, debatir y probar el código.
-
Revisar el cambio Los proyectos pueden someter los cambios a revisión, ejecutar pruebas automáticas para comprobar si el código funciona correctamente y verificar posibles errores o problemas de seguridad.
-
Fusionar o no fusionar Si las personas con los permisos adecuados están de acuerdo, pueden fusionar el cambio con la versión oficial. A esto a menudo se le llama merge.
Por cierto, un fork nunca tiene por qué volver al proyecto original. Alguien puede seguir desarrollando de forma independiente con esa copia propia. Solo cuando los administradores del proyecto original aceptan el cambio, este pasa a formar parte de la versión oficial.
GitHub, los pull requests y los forks son formas útiles y muy utilizadas de colaborar, pero no son un requisito para el código abierto. La licencia es la base.
¿Quién gestiona el software de código abierto y cómo se introducen los cambios?
El software de código abierto no tiene un único administrador general; cada proyecto decide por sí mismo quién gestiona el código y cómo se aceptan los cambios. Pueden ser maintainers individuales, pero también una organización, una fundación o la comunidad del proyecto.
Un maintainer es alguien que ayuda a mantener el proyecto en funcionamiento. Esa persona puede, por ejemplo, revisar cambios, publicar nuevas versiones y decidir quién tiene acceso al repository oficial. Un repository es el lugar donde se encuentra el código y el historial de cambios de un proyecto.
Los desarrolladores externos suelen poder informar de un problema, proponer una mejora o enviar código modificado. En plataformas como GitHub, esto ocurre por ejemplo mediante un issue o un pull request. Un issue suele ser un aviso de un error, una pregunta o una idea de mejora.
Los proyectos pueden establecer reglas adicionales antes de que el código pueda fusionarse. Piense en revisiones obligatorias por parte de otros desarrolladores, pruebas automáticas o normas que impiden que el código importante pueda modificarse directamente sin más.
En blockchain entra en juego algo más: que se añada nuevo código al proyecto oficial no significa que las reglas de la blockchain cambien automáticamente.
Un node es un ordenador que ejecuta el software y verifica transacciones y bloques según las reglas de una blockchain.
En Bitcoin, los BIP sirven como propuestas públicas de mejora. En Ethereum, los EIP cumplen una función similar para los estándares y los cambios en la red. Una propuesta de este tipo puede incluir explicación, comentarios y modificaciones anteriores. Pero publicar un BIP o un EIP no cambia por sí solo las reglas de Bitcoin o Ethereum.
La fusión del código tampoco lo hace automáticamente. Para que exista un cambio real en las reglas del protocolo, es decir, las reglas técnicas de la red, los participantes relevantes deben acabar ejecutando software que siga esas nuevas reglas.
En Bitcoin, ningún órgano formal o informal decide por sí solo la adopción de los BIP. En Ethereum, los editores de EIP se encargan sobre todo de tareas administrativas y editoriales, no de decidir en cuanto al contenido si una propuesta es deseable.
¿Qué licencias de código abierto existen?
Dos tipos frecuentes son las licencias permisivas y las licencias copyleft. Las licencias permisivas reciben ese nombre porque permiten mucho: normalmente puede usar, modificar y redistribuir el código con libertad. Copyleft es un juego de palabras con copyright. En este tipo de licencias también puede modificar y compartir el código, pero el software derivado suele tener que seguir disponible bajo las mismas condiciones abiertas.
Estas son algunas licencias conocidas:
-
MIT Es una licencia permisiva. Puede usar, copiar, modificar, distribuir e incluso utilizar comercialmente el software. Eso sí, debe incluir el aviso de copyright y el texto de la licencia. El software se proporciona sin garantía y con responsabilidad limitada.
-
BSD-2-Clause y BSD-3-Clause También son licencias permisivas. Permiten un uso y una distribución amplios, normalmente siempre que se conserve la información de copyright y de la licencia.
-
Apache-2.0 Apache License 2.0 también es permisiva. Además, esta licencia incluye acuerdos sobre las patentes de las personas que contribuyen código al proyecto.
-
GPL-3.0-only GPL es una licencia copyleft. Dicho de forma sencilla, esta licencia intenta garantizar que la libertad de compartir y modificar el código se mantenga cuando el software se redistribuye. Quien distribuya software bajo GPLv3 debe, bajo determinadas condiciones, poner también a disposición el código fuente correspondiente.
-
MPL-2.0 Mozilla Public License 2.0 es una forma de copyleft que se centra sobre todo en archivos individuales. Si modifica un archivo que está bajo MPL, ese archivo modificado normalmente debe seguir disponible bajo las mismas condiciones abiertas. Otros archivos de un proyecto más amplio pueden estar sujetos a otras condiciones.
Es importante saberlo: etiquetas como permisiva, copyleft fuerte y copyleft débil son útiles como primera explicación, pero las condiciones exactas siempre figuran en el texto de la licencia. Especialmente cuando se combinan distintos componentes de software con licencias diferentes, la situación puede complicarse.
¿Por qué es importante el código abierto para las criptomonedas y la blockchain?
El código abierto es importante para crypto y blockchain porque los nodes ejecutan software que verifica transacciones y bloques según reglas fijas. Quien ejecuta su propio node puede querer comprobar qué reglas aplica exactamente ese software.
En Bitcoin, Bitcoin Core es un ejemplo conocido. El código fuente está disponible públicamente y el software se distribuye bajo la licencia MIT. Gracias a ello, los desarrolladores y otras personas interesadas pueden estudiar el código, proponer contribuciones o crear una versión propia dentro de las condiciones de esa licencia.
Ethereum puede utilizarse con varios programas de código abierto diferentes, llamados clients. Este software procesa, entre otras cosas, transacciones y ayuda a los ordenadores a participar en la red Ethereum. Los distintos clients son desarrollados por equipos diferentes y a veces utilizan lenguajes de programación distintos.
¿Por qué es útil esto? Si una red dependiera por completo de una sola pieza de software, un error grave en ella podría afectar a muchos participantes al mismo tiempo. Varios clients independientes hacen que la red dependa menos de una sola versión del software.
Naturalmente, esos distintos clients de Ethereum deben seguir las mismas especificaciones relevantes. Las especificaciones son los acuerdos técnicos comunes sobre cómo funciona la red. Piense en reglas para las transacciones, los bloques y la forma en que la red alcanza un consenso sobre qué datos son válidos.
Los BIP y los EIP también ayudan a coordinar públicamente. Hacen visibles las propuestas, la explicación técnica, los comentarios y las revisiones. Esto es valioso en crypto, porque los cambios en las reglas pueden tener grandes consecuencias para cualquiera que ejecute software, guarde crypto o utilice aplicaciones como smart contracts.
Además, el código abierto permite versiones independientes y forks. Eso ofrece más opciones a desarrolladores y usuarios. Pero el código abierto por sí solo no garantiza que una blockchain sea segura, descentralizada o ampliamente utilizada. El código debe ser bueno, ejecutarse correctamente y, en última instancia, también ser utilizado por los nodes y otros participantes.
¿Cuáles son las ventajas del código abierto?
La mayor ventaja del código abierto es que los usuarios no solo pueden utilizar el software, sino también investigarlo, modificarlo y compartirlo. Esto resulta útil cuando una organización quiere adaptar el software a sus propias necesidades técnicas u operativas.
Además, el código público permite la revisión. Puede consultar los cambios en el historial de versiones y ver qué se ha modificado. En un flujo de trabajo con pull requests, otras personas pueden debatir un cambio antes de que se fusione. Las pruebas automáticas y las revisiones de seguridad pueden ayudar a detectar errores antes.
El código abierto también puede facilitar la colaboración. Los desarrolladores pueden reutilizar componentes existentes en lugar de construir todo desde cero. Naturalmente, esto solo es posible si las licencias son compatibles entre sí y todos cumplen las condiciones.
Un fork ofrece otra ventaja: la continuidad. Suponga que un grupo de desarrolladores quiere una dirección técnica distinta de la de los maintainers originales. Entonces pueden seguir adelante con una copia propia. Así, un proyecto no tiene por qué detenerse necesariamente porque exista desacuerdo sobre el futuro.
En blockchain, la diversidad de clients es una ventaja. Esto significa que existen varios clients diferentes: programas con los que los ordenadores participan, por ejemplo, en Ethereum. Si estos clients son desarrollados por equipos distintos, la red depende menos de una sola versión del software. De ese modo, es menos probable que un único error afecte de la misma manera a todos los nodes, los ordenadores que mantienen la red en funcionamiento.
Eso sí, es importante tener en cuenta que el hecho de poder inspeccionar el código no significa que los expertos lo hayan revisado realmente a fondo. El código abierto permite la revisión, pero no es una prueba de que todos los errores ya hayan sido encontrados o resueltos.
¿Qué riesgos y limitaciones tiene el código abierto?
El código abierto no es un certificado de seguridad. Incluso el código público puede contener errores de programación, vulnerabilidades o decisiones de diseño inseguras. Que cualquiera pueda ver el código no significa que suficientes expertos lo hayan hecho realmente.
El mantenimiento es un riesgo importante. El software suele necesitar mantenimiento continuo, por ejemplo para corregir errores, aplicar actualizaciones de seguridad y gestionar nuevas dependencies. Una dependency es un componente de software externo del que depende un programa. Si un proyecto no se mantiene bien, los problemas conocidos pueden quedar sin resolver.
Cuantos más componentes de software externos utilice un programa, más puntos puede haber donde surja un problema de seguridad. Una dependency maliciosa o comprometida puede poner en peligro todo un sistema. Por eso conviene comprobar si cada dependency es realmente necesaria, de dónde procede y si la versión utilizada sigue estando actualizada.
En el software de código abierto, las licencias también desempeñan un papel. Si combina componentes con licencias diferentes, pueden aplicarse condiciones sobre la disponibilidad del código fuente, los avisos de copyright, las modificaciones o las patentes. Esto es algo que conviene investigar bien antes de distribuir el software.
Los forks también tienen una desventaja. Ofrecen libertad de elección, pero pueden repartir entre varios proyectos a los desarrolladores, los usuarios, la documentación y el mantenimiento de seguridad. Un fork necesita sus propios maintainers, su propia seguridad, nuevas versiones y usuarios o operadores de nodes para seguir funcionando bien a largo plazo.
Para crypto hay además un punto de control adicional. El código de un repository público no tiene por qué ser automáticamente exactamente el mismo que el software que usted instala. Por eso es importante comprobar de dónde procede el software y si la versión que instala coincide con la versión oficial.
En el caso de los smart contracts, además puede comprobar si el código publicado coincide con el contrato que realmente se ejecuta en la blockchain.
En resumen: el código abierto le ofrece más posibilidades de comprobación, pero no le exime de todo el trabajo de verificación. Por tanto, en el software y los proyectos crypto también debe fijarse en el mantenimiento, las prácticas de seguridad, las dependencias y la versión que realmente utiliza.
Conclusión
El código abierto significa que el código fuente está disponible bajo una licencia que otorga derechos claros para usar, estudiar, modificar y compartir el software. La licencia es al menos tan importante como el propio código.
Para crypto y blockchain, el código abierto es especialmente relevante porque los nodes ejecutan reglas de protocolo y varios clients independientes pueden hacer que una red dependa menos de una sola pieza de software. Al mismo tiempo, el código público no garantiza seguridad ni calidad. Las buenas revisiones, el mantenimiento activo y unas dependencias seguras siguen siendo igual de importantes.
Por tanto, considere el código abierto sobre todo como una base sólida para la transparencia, la colaboración y la libertad de elección. Ofrece posibilidades, pero aun así debe comprobar cómo se gestiona un proyecto y si el software utilizado se mantiene de forma fiable.