RFC: Una nueva estrategia de versionado para Discourse

Ok, pero creo que entonces entiendo aún menos el problema :confused:

Al final, realmente no importa según los últimos comentarios de @david, así que para resumir.

El modelo propuesto es una versión mensual, más 2 versiones esr, por ejemplo, para 2026:

  • 2026.1
  • 2026.2
  • 2026.3
  • 2026.8
  • 2026.9
  • 2026.10

Así que asumiendo que estamos en octubre de 2026 y .2 y .8 son versiones esr, eso significa 4 versiones compatibles.

Y mi idea fue. ¿No sería más fácil tener básicamente versiones trimestrales, es decir, para 2026:

  • 2026.1
  • 2026.2
  • 2026.3

Y aún así solo la versión actual y la anterior serían compatibles, por lo que en octubre de 2026, serían 2.

Y todo el razonamiento fue que tal vez esto facilitaría las cosas tanto para los desarrolladores como para los usuarios. Pero como se mencionó anteriormente: @david ha aclarado que las versiones menos frecuentes no son una opción.

2 Me gusta

Entendido. Es más o menos como lo esperaba. De hecho, en este caso, un poco de soporte de herramientas sería agradable al menos a medio plazo.

La forma en que lo concibo es: estás en un canal de lanzamiento específico (latest, release, esr), y normalmente pasarías relativamente rápido a la siguiente versión, por lo que recibir un mensaje y/o notificación cuando la nueva versión esté disponible y tener un solo comando para cambiar a ella sería genial. Y en los casos en que hayas retrasado la adopción de una nueva versión, también sería bueno que te recordaran cuándo la versión que estás usando actualmente se vuelve obsoleta/no compatible. Puntos extra si la herramienta respectiva también te permitiera cambiar rápidamente de canal de lanzamiento :slightly_smiling_face:

Pero entiendo si eso no es una prioridad ahora mismo, y todavía recomiendas que la gente se mantenga en test-passed/latest.

Ya veo. En el contexto de mi trabajo, lanzar una función a los clientes se considera “rápido” :sweat_smile:

Además, como se mencionó anteriormente, mi idea era que pasar a un calendario trimestral facilitaría la vida a usted (y a la vida de los desarrolladores de plugins/temas), porque hay menos ramas en mantenimiento. Así que si ese no es el caso, entonces supongo que realmente no tiene sentido para usted :slightly_smiling_face:

6 Me gusta

No veo ningún beneficio en el esquema de control de versiones basado en años que propones. ¡Cíñete a los números de versión que cumplen con SemVer!

SemVer en sí mismo no está realmente diseñado para aplicaciones grandes. Entiendo que está mucho más enfocado en bibliotecas consumidas por software y, en particular, la lógica de numeración de versiones se basa en la API del paquete.

Sin embargo, podríamos aplicar semver a nuestra(s) API(s). Tener garantías más sólidas en torno a las API que expone Discourse es sin duda una conversación que vale la pena tener, pero creo que está separada de esta.

Ahora, entiendo que no dijiste que deberíamos cumplir con SemVer, solo dijiste que deberíamos seguir usando números que cumplan con el sistema de numeración especificado por SemVer.

  1. Un número de versión normal DEBE tener la forma X.Y.Z donde X, Y y Z son enteros no negativos y NO DEBEN contener ceros a la izquierda. X es la versión principal, Y es la versión secundaria y Z es la versión de parche. Cada elemento DEBE aumentar numéricamente. Por ejemplo: 1.9.0 → 1.10.0 → 1.11.0.

Creo que la sugerencia de los “ceros a la izquierda” es lo único que romperíamos si seguimos ese camino.

Por lo demás, creo que cualquier biblioteca SemVer aún podría analizar los números de versión que estamos sugiriendo y ordenarlos correctamente.

Todo eso a un lado, ¿puedes compartir más sobre por qué crees que cumplir con un sistema de numeración SemVer tiene valor?

2 Me gusta

El OP dice que no estás usando ceros iniciales, si entiendo correctamente.

Creo que también se ha propuesto una razón convincente para usar ceros iniciales (ordenar por versiones). ¿Los ceros iniciales son el plan actual? (Todavía me gustan las versiones mensuales en lugar de las versiones en serie).

3 Me gusta

El propósito de SemVer es que el número de versión comunique información útil. La única información que comunica tu esquema propuesto es la órbita de la Tierra alrededor del sol. Esa información no es muy útil para el consumidor del software.

Si por alguna razón quisiera saber la fecha de lanzamiento, miraría el lanzamiento y obtendría la fecha completa.

No realmente. El punto es comunicar la naturaleza del lanzamiento al usuario.

Si el lanzamiento es un aumento de versión de parche, esto comunica que el conjunto de cambios no contiene nada que se espere que afecte el flujo de trabajo de los usuarios del software.

Si el lanzamiento es un aumento de versión menor, esto comunica que el conjunto de cambios incluye la adición de nuevos componentes orientados al usuario, pero nada que rompa los flujos de trabajo existentes de los usuarios del software.

Si el lanzamiento es un aumento de versión mayor, esto comunica que el conjunto de cambios incluye cambios que pueden romper los flujos de trabajo existentes de los usuarios del software.

La determinación de qué componente de versión se debe aumentar es más clara en un producto de software que tiene una única interfaz de usuario, pero los principios siguen siendo los mismos incluso para un producto de software como Discourse, donde existe una variedad de niveles de interfaces y tipos de consumidores (por ejemplo, desarrolladores de complementos, consumidores de API, personal del foro, usuarios finales).

Incluso si la elección de qué componente aumentar es un poco más subjetiva en este proyecto de software, todavía resulta en que el número de versión tenga significado en lugar de ser solo un número arbitrario, como es el caso de tu propuesta.

2 Me gusta

Propuse eso hace unas publicaciones.

Contrariamente a semver, el esquema de numeración de versiones propuesto deja claro de inmediato si una versión todavía es compatible (como Ubuntu). Dado que esto también depende de la órbita de la Tierra alrededor del sol, esto tiene sentido.

Esto está claramente dirigido a paquetes y bibliotecas. Cualquier versión de Discourse incluye cambios que pueden interrumpir los flujos de trabajo existentes de los usuarios del software. Incluso he visto parches de seguridad que lo hacen. Semver no es utilizable para aplicaciones complejas.

Sí, realmente, ver

Una vez que identifiques tu API pública, comunicas los cambios en ella con incrementos específicos en tu número de versión.

5 Me gusta

Solo para enfatizar un punto que podría perderse, creo que Discourse lo hace muy bien aquí. Una mejora sería al menos resaltar los temas que ya has escrito que describen cambios y posibles interrupciones dentro de ese ciclo de actualización. Por ejemplo, con la versión 3.5, tuve que abrir las notas de la versión, hacer clic en el blog y luego hacer clic en el enlace sobre la agrupación de complementos con Discourse core para captar ese detalle de que dejar esos complementos dentro de mi archivo de configuración podría afectar las actualizaciones.

Sería genial extraer ese tipo de notas en una página/tema para las versiones ESR, incluso si es solo un conjunto de enlaces a temas existentes que deben revisarse antes de realizar una actualización ESR.

Sin embargo, esto puede estar fuera del alcance de este hilo: mi opinión sobre el cambio de versión es que la acojo con satisfacción y aprecio la transparencia aquí. Creo que sería una gran mejora que simplificaría las cosas y nos daría más opciones para el autoalojamiento.

¡Gracias!

4 Me gusta

Sí, y es una idea tan buena que creo que el OP debería ser editado para reflejarlo.

3 Me gusta

Se está considerando el uso de ceros a la izquierda y si se debe o no buscar la sincronización explícita con los meses. @david compartirá una actualización una vez que el grupo que trabaja en esto llegue a una decisión.

7 Me gusta

Esa no es la información importante para un mantenedor de foros que evalúa una nueva versión.

No, de verdad. Te estás perdiendo el punto real de SemVer al negarte a entender que “API” en realidad solo significa la interfaz. No hay absolutamente ninguna razón por la que el espíritu de SemVer no pueda usarse en la versión de cualquier tipo de software.

Creo que tendremos que estar de acuerdo en discrepar en este punto @per1234.

Aquí hay una discusión relacionada en el repositorio de GitHub para semver con una respuesta de uno de los mantenedores:

Semver no es realmente útil para “aplicaciones de usuario final”, es más útil para bibliotecas que las personas usan como dependencias para sus proyectos.

4 Me gusta

No importa realmente si se trata de una biblioteca o de una aplicación más grande. Un esquema de versionado semántico funciona perfectamente bien para aplicaciones grandes. Incluso se puede usar para una colección de aplicaciones empaquetadas en una plataforma, pero aquí se vuelve bastante difícil de abordar.

La pregunta principal es si se va a seguir la ruta de la depreciación soportada en una versión y solo la eliminación en la próxima versión principal. Tener funcionalidad obsoleta pero soportada puede requerir bastante esfuerzo. Cuando se van a realizar cambios en el modelo de datos persistente, la depreciación a menudo se vuelve imposible. Si eso sucede, ni siquiera se puede hacer una versión menor con funcionalidad obsoleta, y se salta instantáneamente a la siguiente versión principal. Esta es la parte donde las aplicaciones grandes suelen tener problemas. Se pasa de 3.0.0 a 3.0.1 a 4.0.0 porque no se puede proporcionar compatibilidad con versiones anteriores. Si a menudo hay cambios disruptivos, adherirse a semver aporta poco valor.

Dicho esto, prefiero mucho más esa construcción porque comunica más claramente a los desarrolladores que habrá cambios disruptivos. El esquema AAAA.N no me dice nada como desarrollador, ni como administrador.

Entonces, la pregunta es, ¿qué quieres comunicar con la versión? Si quieres hacer 6 lanzamientos de funciones (que pueden ser o no disruptivos), y cada 6º lanzamiento tendrá un soporte más prolongado con parches; y no quieres versionar los lanzamientos de parches. Entonces X.Y es un esquema adecuado donde Y=0 es el más prolongado. X sería solo un número. El problema es que cuando X es el año, Y se asocia rápidamente con un mes. ¿Entonces los lanzamientos más nuevos y de soporte más prolongado se lanzarán en enero? Siempre tengo que buscar qué versión de Ubuntu es LTS, lo que me molesta.

Entonces, ¿qué pasa si Discourse simplemente continúa con la versión principal actual? La próxima versión de soporte más prolongado se llama 4.0; y luego obtenemos 4.1 a 4.5 como lanzamientos de funciones; seguido de 5.0 que es el más nuevo de soporte más prolongado.

Entonces tampoco tendrás ese momento incómodo en el que un lanzamiento se retrasa debido a un problema importante.

Opcionalmente, puedes agregar un número de “parche” si planeas lanzar parches explícitamente (en lugar de tener lanzamientos de parches continuos). “Pero entonces tienes x.y.z que es semver”. Bueno, no, parece semver, pero no lo es. Cada nueva versión “menor” puede ser disruptiva. Así que sugiero simplemente ceñirse a X.Y como esquema de versión con Y=0 → LTS.

Dejando a un lado la cadena de versión. Me gusta el nuevo plan de lanzamiento.

4 Me gusta

Sí, aquí es donde las cosas están efectivamente hoy, especialmente con el sistema de temas flexible.

Así que creo que tienes toda la razón aquí:

También significa que la parte “principal” de nuestro número de versión actual comunica muy poco.

Por lo tanto, se sintió como “oye, podríamos usar un año allí para comunicar algo”.

:rocket:

4 Me gusta

Esta discusión no pinta bien. Veo una decisión del equipo de desarrollo de adoptar un nuevo sistema de versionado que tiene sentido para ellos, y otros que de repente parecen considerar que la versión de Discourse seguía el versionado semántico… lo cual no era así. Siempre ha sido un lanzamiento continuo (rolling release), al menos desde la versión 1.0, ¿o no?

Pero los argumentos de todas las partes del debate parecen erróneos:

  • “Estándar de la industria”: Linux usa versiones pares para estable y versiones impares para desarrollo.
  • “La Tierra orbita alrededor del Sol”: bueno, si te conviertes al Islam, tendrás problemas porque dejarás de usar versiones y no, no coincidirá con la revolución del Sol, sino con los ciclos de la Luna. Aquí, ahora entiendes que al elegir el esquema de versionado YYYY.Y.Z en lugar de X.Y.Z, has impuesto una cultura dominante.
  • La versión menor sigue sin estar clara: mencionas “asumiendo una cadencia mensual”, pero bien podría ser de 3 semanas o 7, dependiendo de la funcionalidad, en cuyo caso contar Y desde 0 tiene sentido, o ¿en realidad tu objetivo es lanzar mensualmente, en cuyo caso contar M desde 1 tendría más sentido?

El principal cambio que veo es que al adoptar un ritmo mensual, el equipo de Discourse está estableciendo expectativas y alejándose de los objetivos de lanzamiento, adoptando lanzamientos regulares en su lugar.

LTS por 8 meses no suena realmente a “mucho tiempo”. NodeJS se mueve demasiado rápido, pero mantiene el soporte LTS durante más de 30 meses y varias versiones actuales a la vez, mientras que Ubuntu mantiene LTS durante años. Aunque entiendo que Discourse no es ni un lenguaje ni un sistema operativo, parece anunciar que las nuevas funcionalidades se lanzarán a un ritmo bastante rápido, lo que me viene a la mente otro problema: dado que se introducen nuevas configuraciones de administrador de vez en cuando, pronto nos encontraremos en el infierno de WordPress con infinitas opciones y una complicación incomprensible para la administración del sitio, también conocido como bloatware: entonces se vuelve importante aclarar cómo pasas de las versiones existentes con objetivos a lanzamientos regulares, y cómo eliges qué objetivos descartar (o posponer) para un lanzamiento, etc. (lo cual puede que ya esté documentado, pero me lo perdí).

¿Serías tan amable de compartir tu razonamiento entre el ritmo de desarrollo/versionado y lo que tienes en mente para evitar que los administradores se ahoguen bajo demasiadas configuraciones y una curva de aprendizaje elevada?

:heart: :discourse:

1 me gusta

Antes de responder a sus otras preguntas, quiero aclarar primero que nuestra frecuencia de lanzamiento prevista no cambiará con esta propuesta.

  • Durante los últimos 3 años, hemos estado haciendo lanzamientos “estables” aproximadamente cada 6 meses, apuntando a estos lanzamientos para finales de enero y julio de cada año, con algunos retrasos aquí y allá:
  • Durante los últimos ~8 meses, hemos estado haciendo lanzamientos “beta” aproximadamente cada mes, aparte de un par de lanzamientos de seguridad fuera de banda:

En esta nueva propuesta, pretendemos mantener la misma cadencia que hemos estado siguiendo, y los principales cambios son:

  • Lo que ahora llamamos lanzamientos “estables”, lo llamaremos “lanzamientos de soporte extendido”
    • Elegimos ese nombre y no soporte a largo plazo, porque estamos de acuerdo en que es extendido en comparación con nuestros otros lanzamientos soportados, pero no necesariamente “a largo plazo”. Esta propuesta no incluye agregar un lanzamiento de soporte a largo plazo.
    • Actualmente, el soporte para un lanzamiento estable finaliza inmediatamente cuando se realiza el siguiente lanzamiento. Con esta nueva propuesta, el soporte se superpone durante ~2 meses, por lo que las personas tienen tiempo para actualizar mientras reciben parches de seguridad.
  • Lo que ahora llamamos lanzamientos “beta”, lo llamaremos “lanzamientos”
    • Actualmente no damos soporte a los lanzamientos beta en absoluto más allá de su fecha de lanzamiento. Son meros puntos de control en el camino que vienen con una notificación para avanzar rápidamente, ya que a menudo también incluyen correcciones de seguridad.
    • Con esta propuesta, sí pretendemos dar soporte a los lanzamientos durante ~2 meses, para que las personas puedan decidir cuándo actualizar, mientras continúan recibiendo parches de seguridad.

Teniendo esto en cuenta, ¿siente que sus otras preguntas sobre demasiada configuración todavía están relacionadas con esta propuesta? ¿O son preocupaciones independientes que sería mejor discutir en un tema separado?

11 Me gusta

¡Gracias por tu detallada explicación @mcwumbly!

De hecho, esta es una preocupación diferente. Personalizar el administrador usando un plugin sería útil para hacer pruebas sobre cómo podría verse. ¿Hay algún trabajo en curso con respecto a este enfoque?

2 Me gusta

No específicamente esto, pero hemos estado invirtiendo bastante en mejorar la interfaz de usuario del administrador durante el último año. Si quieres profundizar más en estas cosas, ¿puedes iniciar un nuevo tema y exponer algunos de los problemas y/o ideas que te gustaría discutir más?

3 Me gusta

Este es un gran cambio (me gustan especialmente los ESR superpuestos)

Comentarios:

  1. Me gustaría ver ese gráfico de ciclo de vida en una página centralizada para poder consultarlo fácilmente, idealmente con una tabla de EOL para poder decir fácilmente qué está en y fuera de soporte en cualquier momento y planificar en consecuencia (al menos para los ESR).

  2. Cambio de streams:

Esto sería genial, pero incluso solo poder elegir la etiqueta durante la configuración sería enorme. O incluso incluir los pasos manuales en la documentación de configuración. Si alguien quiere empezar en estable/ESR, no está muy claro cómo hacerlo ahora mismo para un nuevo administrador. (Creo que la respuesta es pasar --skip-rebuild a ./launcher, luego editar la versión, y luego hacer rebuild por primera vez, pero no estoy seguro). Ya que de lo contrario, la configuración simplemente se inicia inmediatamente para obtener y ejecutar la última versión, y luego retroceder es pedir problemas.

(Ejemplo de la dificultad para un nuevo administrador: Ahora mismo, el resultado de búsqueda #1 para “instalar discourse estable” dirige a este hilo, que enlaza a otro hilo que explica cómo actualizar a estable, pero no cómo instalar estable desde cero).

2 Me gusta

Hoy hemos dado otro paso hacia la implementación de este RFC: la última versión de Discourse está numerada como v2025.11.0 :tada:

6 Me gusta