In this article
Por qué la gobernanza del código abierto es clave para la seguridad
¿Qué es la gobernanza del código abierto?
La gobernanza del código abierto es el conjunto de reglas y prácticas reconocidas que guían un proyecto de código abierto. Según OpenSource.com, para definir las directrices de gobernanza, hay que responder las siguientes preguntas:
¿Qué funciones pueden desempeñar los colaboradores en el proyecto?
¿Qué requisitos, deberes, privilegios y autoridad corresponden a cada función?
¿Cómo se asignan (y se quitan) las funciones?
¿Cómo se pueden modificar las definiciones de los roles?
¿Cuáles son las políticas y los procedimientos colectivos del proyecto?
Una vez definidos los roles dentro del proyecto, generalmente según las actividades de cada desarrollador, se puede aplicar la gobernanza a los proyectos de código abierto.
6 modelos de gobernanza diferentes
La definición de las reglas de un proyecto de código abierto y la asignación de funciones se conoce como modelo de gobernanza. Según Red Hat, hay seis modelos de gobernanza.
1. Do-ocracy: Este modelo de gobernanza parte de la idea de que quienes hacen el trabajo deben tomar las decisiones. En este caso, la revisión entre pares tiene un papel importante en la gobernanza. También puede ser un modelo difícil para los desarrolladores que necesitan más orientación.
2. Liderazgo del fundador: Este modelo de gobernanza de código abierto se usa sobre todo en proyectos nuevos o con pocos colaboradores. En este modelo de software hay una línea de gobernanza clara, que suele estar a cargo de la persona o el equipo de desarrollo que inició el proyecto. Por desgracia, este modelo puede conducir a una dictadura de código abierto, en la que el fundador puede dictar la gobernanza durante todo el ciclo de vida del software.
3. Consejo o junta autodesignados: Este modelo de gobernanza de software de código abierto crea un comité de liderazgo que supervisa las etapas de desarrollo del proyecto. Su desventaja es que el comité de liderazgo podría excluir las voces y la participación del resto del equipo.
4. Electoral: Este modelo permite que la comunidad elija su sistema de gobernanza mediante elecciones. Es popular en proyectos donde hay una gran participación de la comunidad, formada por desarrolladores con habilidades y funciones similares. Aunque es el modelo más equitativo en cuanto a la toma de decisiones, también puede sumar responsabilidades y distracciones, además de provocar disputas internas mientras los miembros de la comunidad compiten por puestos de liderazgo.
5. Respaldado por una empresa: En este modelo de gobernanza de software, las empresas o industrias se hacen cargo de distribuir el software mediante acuerdos de licencia de código abierto. Aunque esto permite controlar el desarrollo del software, también limita las contribuciones externas que suelen caracterizar a los proyectos de código abierto.
6. Respaldado por una fundación: Este modelo está gestionado por una organización sin fines de lucro, y la gobernanza suele estar estrictamente controlada por una sola estructura. Esto se debe a los requisitos relacionados con el estatus de estas organizaciones.
Cómo formalizar las funciones de liderazgo
Los proyectos de software de código abierto están diseñados para fomentar la colaboración, pero la gobernanza proporciona dirección. Los líderes guían el proyecto, se aseguran de que se cumplan los plazos y de que se respeten las políticas y directrices.
Cada modelo de gobernanza tiene sus propios procesos para elegir a los líderes. Estos son:
Do-ocracy: El liderazgo se construye haciendo. Cuantas más contribuciones de un desarrollador se acepten en un proyecto, más influencia tendrá en la comunidad.
Liderazgo del fundador: El liderazgo suele surgir de forma natural entre quienes iniciaron el proyecto.
Autodesignado: En los proyectos de código abierto más maduros y de largo plazo, suele haber documentación disponible que describe los procesos de gobernanza. Cada desarrollador debe tomar la iniciativa para aprender cómo sus contribuciones pueden llevarlo a ocupar funciones de liderazgo.
Electoral: Los procesos electorales cuentan con procedimientos bien definidos para determinar cómo y cuándo se realizan las elecciones y qué funciones se eligen. Los resultados están disponibles en la documentación en línea del proyecto. Antes de postularse para un puesto de liderazgo, los candidatos suelen haberse ganado una reputación dentro de la comunidad.
Respaldado por una empresa: La gobernanza proviene de la empresa que inició el proyecto, por lo que el liderazgo mantiene una relación con ella.
Respaldado por una fundación: La gobernanza proviene directamente de la fundación o de un consejo autodesignado.
Todos los colaboradores del proyecto deberían tener la oportunidad de asumir una función de gobernanza si así lo desean, pero primero deben incorporarse al proyecto. Para hacerlo, los desarrolladores interesados deben suscribirse a la lista de correo del proyecto, que pueden encontrar en GitHub y en los sitios oficiales del proyecto.
Una vez que comiencen a contribuir a un proyecto, deberán llevar un registro de sus contribuciones. Para ello, pueden usar herramientas como Open Source Contributions Log. El seguimiento de las contribuciones demuestra el trabajo realizado y puede ayudar a quienes quieran asumir funciones de liderazgo en la gobernanza del código abierto.
Funciones en la gobernanza del código abierto
Los colaboradores de proyectos de software de código abierto pueden asumir funciones formales de gobernanza. Algunas de las más reconocidas son:
Mantenedor: Puede ser alguien que haya escrito mucho código para el proyecto de código abierto, que haya creado documentación sobre el proyecto o incluso que lo promueva. Este colaborador siente responsabilidad por la dirección general del proyecto y hace lo necesario para mejorarlo.
Colaborador: Cualquier persona que contribuya al proyecto, ya sea comentando problemas o escribiendo código. Si aporta algo de valor al proyecto, desempeña la función de colaborador.
Committer: Persona con permisos especiales para hacer commits que ha demostrado un compromiso profundo y constante con el proyecto.
4 formas de proteger tu proyecto de código abierto
El atractivo del software de código abierto es que cualquier persona puede participar. Al mismo tiempo, el mayor riesgo de estos proyectos es que cualquiera puede contribuir. La gobernanza del código abierto implica tomar medidas para proteger el proyecto de las amenazas. Algunas medidas para prevenir riesgos son:
Crear políticas de seguridad para el proyecto, que incluyan la supervisión de usuarios y colaboradores o la documentación del proyecto. Una persona con una función de liderazgo debe tener autoridad para hacer cumplir esas políticas. Los mantenedores son una buena opción para esta función.
Probar, dar seguimiento y corregir vulnerabilidades. Las herramientas de análisis de composición de software (SCA) permiten a los desarrolladores analizar y administrar componentes de código abierto dentro del software. Estas herramientas realizan tareas como verificar licencias y evaluar los riesgos de vulnerabilidad.
Limitar quién puede crear pull requests y evaluarlos antes de tomar medidas. También se pueden analizar estos pull requests con herramientas de SCA o de pruebas estáticas de seguridad de aplicaciones (SAST) para detectar vulnerabilidades.
Verificar a los colaboradores antes de que se unan al proyecto y dar acceso solo a usuarios de confianza.
Analiza tus dependencias de código abierto en busca de vulnerabilidades
Encuentra, prioriza y corrige vulnerabilidades automáticamente y gratis con Snyk.
Cuándo implementar la gobernanza
La gobernanza debe implementarse lo antes posible en cualquier proyecto de código abierto. Cuanto antes se redacte la documentación, más fácil será definir las expectativas y los objetivos. La gobernanza temprana también permite establecer claramente las funciones. Si el proyecto cuenta con el respaldo de una empresa o una fundación, las conversaciones deben realizarse internamente antes de lanzarlo, para que los procesos estén claros y haya un camino definido para avanzar.
Contribuciones de empresas y modelos de gobernanza
Muchos usuarios distintos utilizan software de código abierto. Como cada empresa puede necesitar el software para fines diferentes, sus contribuciones pueden cambiar el alcance del proyecto. Algunas empresas también pueden asignar desarrolladores remunerados para que se incorporen como colaboradores de ciertos proyectos.
Estas contribuciones deben tratarse como cualquier otra. La gobernanza debe seguir basándose en el valor de las contribuciones y la participación.
Informe de Snyk
Estado de la seguridad del código abierto en 2022
Un análisis de la complejidad y los riesgos de la cadena de suministro de software, en colaboración con The Linux Foundation.
Cómo empezar con la gobernanza del código abierto
Más del 90 % del software propietario utiliza componentes de código abierto, por lo que la gobernanza del código abierto debe ser una prioridad para los departamentos de TI y los directivos de todas las empresas que publiquen código como código abierto. Las políticas sobre gobernanza del código abierto, colaboradores del proyecto y liderazgo deben estar bien definidas y comunicarse con claridad. Además, todas las personas involucradas en el desarrollo de software de código abierto deben conocer sus funciones en el proyecto.
La política de gobernanza del código abierto ofrece soluciones para problemas que pueden surgir, desde riesgos de seguridad hasta riesgos operativos. La falta de gobernanza puede ralentizar el ciclo de desarrollo del software, retrasar los lanzamientos o hacer necesario corregir problemas después de que el producto entre en funcionamiento.
La incorporación de modelos de gobernanza ayuda a abordar posibles problemas legales. Por ejemplo, la política de gobernanza de la organización debe incluir una herramienta de SCA para detectar posibles vulnerabilidades y problemas de licencias en las dependencias. Snyk Open Source te permite ver los paquetes de código abierto que utilizas, además de gestionar el cumplimiento de licencias y las dependencias.