¿Qué es el software de código abierto?

Completado

El software de código abierto es software cuyo código fuente está disponible públicamente para que cualquiera pueda inspeccionar, modificar y distribuir. La iniciativa de código abierto proporciona la definición ampliamente aceptada:

"El software de código abierto es software con código fuente que cualquier persona puede inspeccionar, modificar y mejorar. El titular de los derechos de autor concede a los usuarios los derechos de estudio, cambio y distribución del software a cualquier persona y para cualquier propósito, sujeto a los términos de una licencia de código abierto".

Esta definición enfatiza varios principios clave:

  • Disponibilidad del código fuente: El código fuente completo debe ser accesible públicamente, no solo archivos binarios ejecutables.
  • Libertad para modificar: Los usuarios pueden cambiar el software para satisfacer sus necesidades, corregir errores o agregar características.
  • Derechos de redistribución: Los usuarios pueden compartir el software con otros usuarios, ya sea en forma original o modificada.
  • Términos de licencia: Los derechos de uso se definen mediante una licencia de código abierto que especifica permisos, restricciones y obligaciones.

El software de código abierto difiere fundamentalmente del software propietario, donde el código fuente permanece secreto y los derechos de uso están estrechamente controlados por el titular del copyright.

El modelo de código abierto colaborativo

El desarrollo de código abierto implica la creación de software colaborativo con varios colaboradores:

Desarrollo controlado por la comunidad

  • Colaboradores distribuidos: Los desarrolladores de todo el mundo contribuyen al código, la documentación, las pruebas y el soporte técnico.
  • Participación voluntaria: Muchos colaboradores participan voluntariamente, motivados por la resolución de problemas, aprendizaje, creación de reputación o herramientas de apoyo que usan.
  • Meritocracia: La influencia en los proyectos normalmente se correlaciona con la calidad y la cantidad de contribuciones en lugar de la jerarquía organizativa.
  • Procesos transparentes: El desarrollo se produce en repositorios públicos en los que cualquier usuario puede observar discusiones, decisiones y cambios.

Flujos de trabajo de colaboración

  • Repositorios públicos: El código se hospeda en plataformas como GitHub, GitLab o Bitbucket donde cualquiera puede verlo.
  • Seguimiento de problemas: Los errores y las solicitudes de funciones se rastrean públicamente, permitiendo a los miembros de la comunidad identificar problemas y proponer soluciones.
  • Revisiones de solicitudes de incorporación de cambios: Los colaboradores envían cambios a través de solicitudes de incorporación de cambios que revisan los mantenedores y otros miembros de la comunidad antes de combinarlos.
  • Administración de versiones: Los mantenedores coordinan las versiones, lo que garantiza la estabilidad y la compatibilidad al incorporar contribuciones de la comunidad.

Modelos de gobernanza de proyectos

Diferentes proyectos de código abierto adoptan varios enfoques de gobernanza:

  • Dictador benevolente: Un solo individuo (a menudo el fundador) toma decisiones finales sobre la dirección del proyecto (por ejemplo, Python con Guido van Rossum históricamente).
  • Equipo principal: Un pequeño grupo de mantenedores toma decisiones colectivamente a través del consenso o votación.
  • Gobernanza de la base: Los proyectos de gran tamaño suelen crear bases (como Apache Foundation, Linux Foundation) que proporcionan estructuras legales, recursos y marcos de gobernanza.
  • Patrocinio corporativo: Muchos proyectos de código abierto son mantenidos principalmente por empleados de empresas que dependen del software.

Adopción generalizada del software de código abierto

El software de código abierto se ha vuelto omnipresente en todos los sectores de tecnología:

Estadísticas de adopción del sector

  • Uso de empresa: Más de 90% de empresas usan software de código abierto en entornos de producción.
  • Infraestructura de Internet: La mayoría de los servidores web se ejecutan en Linux (código abierto), sirven contenido a través de Apache o Nginx (código abierto) y usan bases de datos como PostgreSQL o MySQL (código abierto).
  • Informática en la nube: Las principales plataformas en la nube usan y admiten tecnologías de código abierto: Kubernetes, Docker, Terraform y muchas otras herramientas de código abierto forman la base de la infraestructura en la nube moderna.
  • Dispositivos móviles: Android, el sistema operativo móvil más popular del mundo, se basa en el kernel de Linux e incluye componentes de código abierto extensos.

Composición de la pila tecnológica

Los stacks tecnológicos modernos son principalmente de código abierto.

  • Sistemas operativos: Linux impulsa la infraestructura en la nube, los contenedores y muchos sistemas incrustados.
  • Lenguajes de programación: Python, JavaScript, Java, Go, Rust, Ruby, PHP; los lenguajes más populares son de código abierto.
  • Bases: PostgreSQL, MySQL, MongoDB, Redis, Elasticsearch domina las implementaciones de bases de datos.
  • Tecnologías web: React, Angular, Vue.js, Express, Django, Rails permiten el desarrollo de aplicaciones web.
  • Herramientas de desarrollo: Git, Docker, Kubernetes, Jenkins, VS Code son herramientas de desarrollo de código abierto esenciales.

Adopción de Microsoft de código abierto

Microsoft ejemplifica la transformación en actitudes empresariales hacia el software de código abierto:

Cambio histórico

Microsoft ha visto históricamente el código abierto como una amenaza para su modelo de negocio de software propietario. Esto cambió drásticamente en la última década como la empresa reconoció la importancia estratégica de código abierto.

Código abierto en Azure

Azure integra ampliamente las tecnologías de código abierto:

Captura de pantalla de las herramientas y tecnologías de código abierto en Azure.

Lenguajes y entornos de ejecución: Azure admite Python, Node.js, Java, PHP, Ruby, Go y otros lenguajes de código abierto como opciones de plataforma de primera clase.

Bases: Azure ofrece servicios administrados para PostgreSQL, MySQL, MariaDB y Redis, junto con ofertas propietarias.

Orquestación de contenedores: Azure Kubernetes Service (AKS) proporciona Kubernetes administrado, la plataforma de orquestación de contenedores de código abierto.

Herramientas de desarrollo: Azure DevOps se integra con Git, Jenkins y otras herramientas de código abierto, mientras que GitHub (adquirido por Microsoft) es la plataforma más grande del mundo para el desarrollo de código abierto.

Datos y análisis: Azure admite Apache Spark, Hadoop, Kafka y otras tecnologías de macrodatos de código abierto.

Transformación de .NET

La plataforma .NET demuestra el compromiso completo de Microsoft con el código abierto:

Open-sourcing .NET: Microsoft lanzó .NET Core (ahora .NET 5+) como código abierto bajo la licencia MIT, lo que hace que toda la plataforma esté disponible libremente con código fuente. El entorno de ejecución, las bibliotecas, los compiladores y las herramientas de .NET son de código abierto.

Desarrollo multiplataforma: Al abrir el código de .NET, Microsoft ha habilitado el desarrollo multiplataforma en Windows, Linux y macOS, lo que amplía considerablemente el alcance de .NET.

Contribuciones de la comunidad: Los repositorios de .NET en GitHub reciben miles de contribuciones de desarrolladores externos a Microsoft, con la empresa revisando y aceptando activamente mejoras de la comunidad.

Dependencias de código abierto: ASP.NET aplicaciones principales suelen incorporar muchos componentes de código abierto:

  • Bibliotecas de front-end: jQuery, React, Angular Vue.js habilitar interfaces de usuario enriquecidas.
  • Bibliotecas de utilidades: Newtonsoft.Json, Serilog, AutoMapper e innumerables otros proporcionan funcionalidad común.
  • Marcos de pruebas: xUnit, NUnit, Moq admiten el desarrollo controlado por pruebas.

Contribución a proyectos de código abierto

Microsoft contribuye activamente a proyectos de código abierto más allá de sus propios:

Kernel de Linux: Microsoft contribuye al kernel de Linux, mejorando la integración con Hyper-V y apoyando la infraestructura de Azure.

Kubernetes: Microsoft es un colaborador importante de Kubernetes, lo que ayuda a dar forma a la plataforma que impulsa AKS.

Iniciativas de código abierto: Microsoft patrocina eventos de código abierto, financia la infraestructura crítica de código abierto y emplea a los desarrolladores para trabajar a tiempo completo en proyectos de código abierto.

Proyectos de código abierto creados por Microsoft

Más allá de contribuir a los proyectos existentes, Microsoft crea y abre un software significativo:

Visual Studio Code: El editor de código más popular es de código abierto, con extensiones, temas y mejoras aportados por una comunidad global.

TypeScript: El lenguaje de Microsoft para el desarrollo de JavaScript con tipado seguro es de código abierto y ampliamente adoptado.

PowerShell Core: El marco de automatización de Microsoft es de código abierto y multiplataforma.

.NET Foundation: Microsoft estableció .NET Foundation para admitir proyectos de código abierto en el ecosistema de .NET, lo que proporciona recursos, gobernanza y soporte técnico de la comunidad.

Para obtener más información, consulte el sitio web de .NET Foundation.

Justificación estratégica

El adopción de Microsoft de código abierto refleja decisiones empresariales estratégicas:

Adopción del desarrollador: Los desarrolladores prefieren lenguajes y herramientas de código abierto. Al admitir código abierto, Microsoft atrae a los desarrolladores a sus plataformas.

Negocio en la nube: Las cargas de trabajo de código abierto impulsan la adopción de la nube. Excelente compatibilidad de código abierto en Azure hace que la plataforma sea más atractiva.

Velocidad de innovación: El código abierto permite una innovación más rápida a través de contribuciones de la comunidad, lo que reduce la carga de desarrollo de Microsoft.

Crecimiento del ecosistema: Las comunidades de código abierto crean valiosas extensiones, herramientas y conocimientos que mejoran el valor de la plataforma.

Posicionamiento competitivo: Como competidores (AWS, Google Cloud) admiten ampliamente el código abierto, Microsoft debe coincidir o superar sus funcionalidades de código abierto.

¿Por qué las organizaciones eligen código abierto?

Las organizaciones seleccionan software de código abierto por varias razones:

Consideraciones sobre los costos: La eliminación de las tarifas de licencia reduce los costos directos, especialmente importantes al implementar software a escala o crear productos en los que los costos de licencia se transferirían a los clientes.

Flexibilidad y control: El acceso al código fuente significa que las organizaciones pueden modificar el software para satisfacer necesidades específicas, corregir errores críticos de forma independiente y no están bloqueados en las escalas de tiempo del proveedor para características o correcciones.

Transparencia y seguridad: El código fuente público permite las auditorías de seguridad, la revisión de la comunidad identifica las vulnerabilidades más rápido y la ausencia de puertas traseras ocultas o recopilación de datos proporciona confianza.

Evitar el bloqueo del proveedor: Normalmente, el software de código abierto se puede implementar en cualquier lugar, lo que reduce la dependencia de proveedores específicos y mejora de las posiciones de negociación.

Soporte técnico de la comunidad: Las comunidades activas de código abierto proporcionan foros, documentación, tutoriales y asistencia del mismo nivel, a menudo rivalizan o superan la calidad del soporte técnico comercial.

Innovación y características: Las tecnologías de vanguardia a menudo surgen en primer lugar en código abierto y las organizaciones pueden contribuir a características que necesitan en lugar de esperar a las hojas de ruta del proveedor.

Comprender qué es el software de código abierto y por qué se ha adoptado tan ampliamente proporciona un contexto esencial para explorar las preocupaciones que las organizaciones deben abordar al implementar componentes de código abierto, que se tratan en la siguiente unidad.