Versionamiento semántico para librerías de software

Adopta buenas prácticas en tus librerías de software utilizando la especificación de versionamiento semántico.

Introducción

Cuando te propones crear una aplicación o librería de software, una de las primeras cosas a realizar es asignar un número de versión. Pero... ¿cuándo alcanzamos la versión 1.0? No tiene sentido si nos vamos a inventar los números.

Aún así, esto no debería ser un problema cuando a nadie más le afecta si a tu software le has dado la versión 1.0 o 0.1, pero hoy en día contamos con unas magníficas piezas de software llamadas gestores de paquetes.

Por ejemplo, npm (gestor de paquetes para Node.js) es un sistema mediante el cual podemos instalar librerías, que a su vez dependen de otras. Estos paquetes a lo mejor necesitan una versión específica, superior o inferior de otros paquetes de los que depende, y si cada dueño le da a su proyecto los números de versión que le apetece, sería un caos.

Versionamiento semántico

Ante tal necesidad, nació el versionamiento semántico, un proyecto que pretende solucionar este dilema mediante convención y buenas prácticas.

majorminorpatch184v

A grandes rasgos, SemVer propone utilizar X.Y.Z para el versionamiento.

  • X: Versión major. Utilizado cuando se introducen cambios que no son compatibles con versiones anteriores.
  • Y: Versión minor. Utilizado cuando se añaden nuevas funcionalidades y no se rompe la compatibilidad.
  • Z: Versión patch. Corrección de errores compatible con versiones anteriores.

También se permite especificar un nombre de versión, por ejemplo:

  • 1.0.1-alpha
  • 1.0.1-beta
  • 1.0.1-salchichas

Esto quiere decir que, por ejemplo, si nuestra aplicación utiliza la librería "foobar", podríamos actualizar dicha librería sin riesgos siempre y cuando el cambio que se produzca sea un minor o un patch. ¿Muy cómodo verdad?

Puedes consultar el resto de la especificación así como una lista de preguntas frecuentes en semver.org.

Puedes apoyarme para que pueda dedicar aún más tiempo a escribir artículos y tener recursos para crear nuevos proyectos. ¡Gracias!