Modelo de desarrollo de gbpublisher: estabilidad y transparencia

El desarrollo de software académico requiere un equilibrio delicado: necesitamos innovación contínua para mejorar las herramientas, pero también estabilidad absoluta para las instituciones que dependen de ellas en producción.

Este artículo explica el modelo de desarrollo que seguirá gbpublisher, sus raíces históricas en el software libre, y por qué es particularmente apropiado para software de producción editorial académica.

El problema: dos audiencias, dos necesidades

En el desarrollo de gbpublisher convergen dos tipos de usuarios con necesidades completamente diferentes:

Usuarios de producción:

  • Necesitan que el software funcione siempre
  • No quieren sorpresas ni cambios inesperados
  • Valoran la estabilidad por encima de features nuevas
  • Planifican sus flujos editoriales con meses de anticipación
  • Un bug puede significar retrasar la publicación de un número completo

Early adopters y colaboradores:

  • Quieren ver las últimas mejoras
  • Están dispuestos a reportar bugs
  • Entienden que el desarrollo es iterativo
  • Pueden tolerar inestabilidad temporal
  • Quieren influir en la dirección del proyecto

Intentar servir a ambas audiencias con un único código base es una receta para el desastre. La solución es tan antigua como el software libre mismo: separación de ramas de desarrollo.

Las raíces: el modelo Debian

La solución a este problema no es nueva. Fue formalizada por el proyecto Debian en 1993, cuando Ian Murdock estableció un sistema de tres ramas para gestionar uno de los ecosistemas de software más complejos jamás creados:

stable (estable)
  └─ Software probado exhaustivamente
  └─ Solo actualizaciones de seguridad
  └─ Para sistemas en producción

testing (en pruebas)
  └─ Candidatos a próxima versión estable
  └─ Features nuevas pero ya probadas
  └─ Para usuarios avanzados

unstable (inestable)
  └─ Desarrollo activo
  └─ Donde entran paquetes nuevos
  └─ Puede romperse en cualquier momento

Este modelo ha permitido a Debian mantener simultáneamente:

  • Sistemas en producción con décadas de uptime ininterrumpido
  • Innovación continua en miles de paquetes
  • Una comunidad activa de desarrolladores y testers

El éxito del modelo Debian lo convirtió en el estándar de facto del software libre. Prácticamente todos los proyectos serios lo han adoptado en alguna forma.

Evolución del modelo: del kernel Linux a PostgreSQL

El kernel Linux adoptó tempranamente una variante de este modelo:

  • mainline: Donde Linus Torvalds integra cambios para la próxima versión
  • stable: Versiones liberadas, mantenidas por Greg Kroah-Hartman
  • longterm: Versiones con soporte extendido (LTS) para sistemas críticos

Cuando tu universidad actualiza los servidores, probablemente está usando un kernel LTS de 5-6 años de antigüedad. No porque sea “viejo”, sino porque es absolutamente confiable.

PostgreSQL, la base de datos preferida en entornos académicos y científicos, sigue un modelo similar:

  • master: Desarrollo de la próxima versión mayor
  • REL_16_STABLE, REL_15_STABLE, etc.: Ramas de mantenimiento
  • Cada versión mayor recibe bugfixes durante 5 años

Este modelo permite que una universidad pueda planificar migraciones con años de anticipación, sabiendo exactamente cuándo termina el soporte de cada versión.

Gambas: el padre técnico de gbpublisher

Gambas, el framework en el que está construido gbpublisher, también sigue este modelo fielmente. Benoît Minisini, su creador, mantiene:

  • master: Versión estable actual (3.19.x al momento de escribir esto)
  • develop: Desarrollo activo de próximas features (3.21.x en progreso)

Este modelo permite que las distribuciones Linux empaqueten la versión estable de Gambas sin temor a que cambie inesperadamente, mientras los desarrolladores pueden seguir el branch develop para acceder a las últimas mejoras.

Como gbpublisher está construido sobre Gambas, adoptar el mismo modelo es natural y coherente. No estamos inventando nada: estamos siendo consistentes con nuestro ecosistema.

El modelo gbpublisher: adaptado al contexto académico

Para gbpublisher, he adaptado este modelo probado al contexto específico de producción editorial académica:

main
  └─ Desarrollo activo de próximas versiones
  └─ Aquí ocurre la innovación
  └─ Puede contener código experimental
  └─ Para colaboradores y curiosos

stable/1.x
  └─ Versión 1.0.0, 1.0.1, 1.0.2, etc.
  └─ SOLO correcciones de bugs críticos
  └─ Garantía de estabilidad
  └─ Para producción editorial

stable/2.x (cuando se libere)
  └─ Versión 2.0.0, 2.0.1, etc.
  └─ Nueva rama estable
  └─ Coexiste con 1.x durante período de transición

¿Qué significa esto en la práctica?

Si eres editor/a de una revista académica:

  • Usas stable/1.x (o la última stable disponible)
  • Recibes notificaciones solo de bugfixes críticos
  • Tu workflow nunca se rompe por cambios inesperados
  • Puedes planificar el número de diciembre sabiendo que el software funcionará igual que en enero

Si eres desarrollador/a o quieres contribuir:

  • Sigues el branch main
  • Ves las features en desarrollo para v2.0.0
  • Puedes reportar bugs temprano
  • Puedes influir en decisiones de diseño antes del release

Si eres administrador/a de sistemas:

  • Instalas desde stable/X.x
  • Sabes exactamente qué esperar
  • Las actualizaciones son predecibles
  • No hay sorpresas en producción

Por qué esto importa en el contexto académico

La producción editorial académica tiene características únicas que hacen este modelo especialmente importante:

1. Ciclos de publicación predecibles

Las revistas académicas operan con calendarios estrictos:

  • Números trimestrales, semestrales o anuales
  • Fechas de indexación en bases de datos
  • Compromisos con autores sobre fechas de publicación
  • Evaluaciones institucionales basadas en producción publicada

Un bug que retrasa la publicación del Vol. 15 No. 2 puede significar:

  • Perder la ventana de indexación en SciELO
  • Incumplir compromisos con autores
  • Afectar métricas de puntualidad de la revista
  • Problemas en evaluaciones de calidad

La estabilidad no es un lujo: es un requisito.

2. Recursos técnicos limitados

A diferencia de empresas comerciales, las editoriales universitarias típicamente:

  • NO tienen departamentos de IT dedicados
  • Dependen de un editor técnico o coordinador
  • Carecen de presupuesto para consultores externos
  • No pueden “tirar abajo todo y reinstalar”

Cuando algo se rompe, no hay equipo técnico 24/7 para arreglarlo. El modelo de branches estables garantiza que lo que funciona, sigue funcionando.

3. Continuidad institucional

Las revistas académicas trascienden personas individuales:

  • Una revista puede tener 40+ años de historia
  • Los editores cambian cada 3-5 años
  • El conocimiento debe transferirse
  • Los procesos deben documentarse

Tener una versión estable bien definida facilita:

  • Documentación que no se vuelve obsoleta cada 3 meses
  • Capacitación de nuevos editores con materiales vigentes
  • Continuidad operativa durante transiciones de personal

4. Trazabilidad y reproducibilidad

En el contexto académico, la reproducibilidad es fundamental:

  • ¿Con qué versión se generó este XML-JATS?
  • ¿Qué transformaciones XSLT se aplicaron?
  • ¿Cómo se puede regenerar este PDF exactamente igual?

El modelo de versiones estables etiquetadas permite:

Este número se produjo con gbpublisher v1.2.3
  → Código exacto disponible en tag v1.2.3
  → Documentación específica de esa versión
  → Reproducible en 5 años si es necesario

Transparencia del desarrollo

Un aspecto crucial de este modelo es que todo el código está visible desde el primer día, incluso durante el desarrollo.

El branch main será público. Cualquiera puede:

  • Ver en qué estoy trabajando
  • Comentar sobre decisiones de diseño
  • Reportar bugs temprano
  • Sugerir mejoras antes del release

Esta transparencia es coherente con los valores académicos:

  • Revisión por pares: Los desarrolladores pueden revisar el código
  • Reproducibilidad: Todo cambio está documentado en el historial Git
  • Auditoría: Instituciones pueden verificar qué hace el software
  • Colaboración: La comunidad puede contribuir mejoras

Pero esta transparencia NO significa inestabilidad para usuarios finales, porque siempre existe el branch estable para producción.

Modelo de soporte: qué esperar de cada rama

Branch main (desarrollo)

Soporte:

  • Limitado y bajo esfuerzo razonable
  • Enfocado en mejorar el código, no en soporte de producción
  • Issues bienvenidos, pero pueden no resolverse inmediatamente
  • Documentación puede estar desactualizada

Para quién:

  • Desarrolladores
  • Colaboradores
  • Curiosos técnicos
  • Testers voluntarios

Garantías:

  • Ninguna
  • El código puede cambiar drásticamente
  • Features pueden desaparecer
  • APIs pueden modificarse

Branches stable/X.x (producción)

Soporte:

  • Profesional y prioritario
  • Bugfixes críticos se liberan rápidamente
  • Documentación completa y actualizada
  • Respuestas a consultas en 24-48h

Para quién:

  • Editoriales universitarias
  • Revistas en producción
  • Instituciones con plazos estrictos
  • Usuarios que necesitan estabilidad

Garantías:

  • Solo bugfixes, NUNCA breaking changes
  • Compatibilidad hacia atrás dentro de la misma versión mayor
  • Comportamiento predecible
  • Documentación precisa

Ciclo de vida de una versión

┌─────────────────────────────────────────────────────┐
│ DESARROLLO (6-12 meses)                             │
├─────────────────────────────────────────────────────┤
│ Branch: main                                        │
│ Actividad: Features, refactoring, experimentación   │
│ Usuarios: Colaboradores y testers                   │
└─────────────────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────┐
│ RELEASE (v2.0.0)                                    │
├─────────────────────────────────────────────────────┤
│ Tag: v2.0.0                                         │
│ Branch: stable/2.x se crea desde main               │
│ Licencia: BSL 1.1 (→ GPL v3 en 5 años)              │
└─────────────────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────┐
│ MANTENIMIENTO (2 años)                              │
├─────────────────────────────────────────────────────┤
│ Branch: stable/2.x                                  │
│ Releases: v2.0.1, v2.0.2, v2.1.0, etc.              │
│ Solo: Bugfixes y mejoras menores                    │
│ Usuarios: Producción editorial                      │
└─────────────────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────┐
│ LEGACY / TRANSICIÓN (1-2 años)                      │
├─────────────────────────────────────────────────────┤
│ Branch: stable/2.x (bugfixes críticos únicamente)   │
│ v3.0.0 ya está disponible                           │
│ Usuarios migran gradualmente a v3.x                 │
└─────────────────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────┐
│ END OF LIFE                                         │
├─────────────────────────────────────────────────────┤
│ Branch: stable/2.x permanece disponible             │
│ Código: Disponible para siempre (GPL v3)            │
│ Soporte: Termina oficialmente                       │
│ Usuarios: Deben migrar a versión actual             │
└─────────────────────────────────────────────────────┘

Convivencia de versiones: migración gradual

Un aspecto importante del modelo es que múltiples versiones estables pueden coexistir:

Enero 2027 - Se libera v2.0.0:

stable/1.x
  └─ v1.2.5 (última versión 1.x)
  └─ Soporte extendido: bugfixes críticos por 1 año
  └─ Algunas instituciones prefieren quedarse en v1

stable/2.x
  └─ v2.0.0 (nueva versión recomendada)
  └─ Soporte completo activo
  └─ Instituciones early adopters migran

Esto permite migraciones planificadas:

  • Una editorial puede terminar el año con v1.x
  • Probar v2.x durante enero-febrero (período “tranquilo”)
  • Migrar completamente para el siguiente número
  • Sin presión ni urgencias

En software comercial, frecuentemente se fuerza la actualización. En software académico, respetamos los tiempos institucionales.

Distribución y acceso: modelo de auditoría responsable

gbpublisher sigue un modelo de distribución que equilibra accesibilidad con responsabilidad académica.

Cómo obtener gbpublisher

El código fuente está completamente disponible en el repositorio GitHub:

git clone https://github.com/albertomoyano/gbpublisher
git checkout stable/1.x  # para versión de producción

Los paquetes .deb compilados están disponibles mediante solicitud:

  1. Completa el breve formulario en [URL_DEL_FORMULARIO]
  2. Recibirás el enlace de descarga por correo (usualmente en 24-48h)
  3. Instala normalmente: sudo dpkg -i gbpublisher_X.X.X.deb

¿Por qué un formulario?

Este proceso no es una barrera comercial (el software es sin costo), sino una práctica de investigación y desarrollo responsable:

Auditoría de adopción:

  • Conocer qué instituciones usan gbpublisher
  • Identificar áreas geográficas y disciplinas
  • Demostrar impacto para financiamiento académico
  • Generar métricas de uso real vs. descargas especulativas

Priorización de desarrollo:

  • Entender necesidades de usuarios reales
  • Diseñar features para casos de uso documentados
  • Asignar recursos de soporte limitados eficientemente
  • Construir comunidad de práctica identificable

Comunicación directa:

  • Notificar sobre actualizaciones críticas
  • Enviar avisos de bugs que afecten producción
  • Invitar a participar en decisiones de diseño
  • Facilitar colaboración entre instituciones similares

Datos solicitados

El formulario solicita únicamente:

  • Nombre y correo de contacto
  • Institución / editorial
  • Tipo de publicaciones (revista, libro, etc.)
  • Versión solicitada (1.x stable, 2.x testing, etc.)
  • Opcional: Caso de uso específico

Garantías de privacidad:

  • NO se comparten datos con terceros
  • NO se usa para marketing comercial
  • Solo comunicaciones técnicas relacionadas con gbpublisher
  • Puedes solicitar eliminación de datos en cualquier momento

Alternativa: compilar desde fuente

Si prefieres no completar el formulario, puedes compilar gbpublisher desde el código fuente:

# Clonar repositorio
git clone https://github.com/albertomoyano/gbpublisher
cd gbpublisher
git checkout stable/1.x

# Compilar con Gambas
gbc3 -a
gba3

Esta opción requiere conocimientos técnicos pero garantiza total autonomía.

Coherencia con BSL 1.1

Este modelo de distribución es completamente compatible con Business Source License 1.1:

  • El código fuente es completamente visible y auditable
  • El software es sin costo (no hay venta)
  • La conversión a GPL v3 ocurre automáticamente tras 5 años
  • Solo se controla cómo se distribuyen los binarios compilados durante el período de restricción

Esto es similar a prácticas de proyectos respetados como GitLab, MariaDB MaxScale y Nextcloud Enterprise, que solicitan registro para descargas enterprise mientras mantienen el código fuente completamente abierto.

Política de no-discriminación

Las solicitudes se procesan sin discriminación:

  • ✅ Todas las instituciones académicas legítimas
  • ✅ Editoriales universitarias públicas y privadas
  • ✅ Proyectos de publicación científica sin fines de lucro
  • ✅ Investigadores individuales para evaluación

No se rechazarán solicitudes legítimas de usuarios que cumplan con el caso de uso académico/editorial del software.

Comunicación clara: cómo saber qué usar

El README del repositorio siempre indicará claramente:

## Versiones Disponibles

### v1.x (Legacy - Mantenimiento limitado)
- **Última versión**: v1.2.5
- **Branch**: stable/1.x
- **Estado**: ⚠️ Mantenimiento solo para bugs críticos
- **Recomendado para**: Instituciones que no pueden migrar todavía
- **Conversión GPL v3**: Enero 2031

### v2.x (Actual - Producción)
- **Última versión**: v2.0.3
- **Branch**: stable/2.x
- **Estado**: ✅ Soporte completo activo
- **Recomendado para**: Todos los usuarios nuevos y actuales
- **Conversión GPL v3**: Enero 2032

### v3.x (En desarrollo)
- **Branch**: main
- **Estado**: 🚧 Desarrollo activo
- **Recomendado para**: Colaboradores y testers únicamente
- **Release estimado**: Mediados 2028

Conclusión: disciplina técnica al servicio de la misión académica

El modelo de desarrollo con ramas separadas no es complejidad innecesaria. Es disciplina técnica que permite cumplir la misión del software académico:

Estabilidad donde se necesita:

  • Las editoriales pueden planificar con confianza
  • Los números salen a tiempo
  • La indexación no se retrasa
  • La calidad es consistente

Innovación donde corresponde:

  • El software mejora continuamente
  • Nuevas features se desarrollan sin prisa
  • La comunidad puede participar
  • El proyecto permanece activo y relevante

Transparencia en todo momento:

  • El código es auditable
  • Las decisiones son visibles
  • La dirección del proyecto es clara
  • La reproducibilidad está garantizada

Este modelo ha funcionado para Debian desde 1993, para el kernel Linux desde sus inicios, para PostgreSQL durante décadas, y para Gambas desde 1999.

No estoy inventando nada. Estoy aplicando 30+ años de sabiduría colectiva del software libre a un dominio específico: la producción editorial académica latinoamericana.

Y eso, precisamente, es lo que debe hacer el software académico serio:

construir sobre conocimiento probado, no reinventar ruedas innecesariamente.


Referencias y lecturas adicionales

  • Debian Social Contract: https://www.debian.org/social_contract
  • Gambas Project: https://gambas.sourceforge.net/
  • PostgreSQL Versioning Policy: https://www.postgresql.org/support/versioning/
  • The Cathedral and the Bazaar (Eric S. Raymond): Sobre modelos de desarrollo en software libre
  • “Release Early, Release Often”: Filosofía que fundamenta estos modelos