Monotone es una herramienta de software de código abierto para el control de revisiones distribuidas . Realiza un seguimiento de las revisiones de los archivos, agrupa conjuntos de revisiones en conjuntos de cambios y realiza un seguimiento del historial de los cambios de nombre. El proyecto se centra en la integridad por encima del rendimiento. [2] Monotone está diseñado para un funcionamiento distribuido y hace un uso intensivo de primitivas criptográficas para realizar un seguimiento de las revisiones de los archivos (a través del hash seguro SHA-1 ) y para autenticar las acciones de los usuarios (a través de firmas criptográficas RSA ).
Historia
Hitos
La versión 0.26 de Monotone introdujo cambios importantes en las estructuras internas de las bases de datos, incluida una nueva estructura conocida por los desarrolladores de Monotone como lista . [3] Las bases de datos de Monotone creadas con la versión 0.26 no pueden intercambiar revisiones con bases de datos de Monotone más antiguas. Las bases de datos más antiguas deben actualizarse primero al nuevo formato. El nuevo protocolo netsync es incompatible con versiones anteriores de Monotone.
Como inspiración de Git
En abril de 2005, Monotone se convirtió en objeto de un creciente interés en la comunidad de software libre después de que Linus Torvalds lo mencionara como un posible reemplazo de BitKeeper en el proceso de desarrollo de Linux . En una publicación en la lista de correo del kernel de Linux , Torvalds elogió a Monotone y desprestigió a Subversion (y por extensión, a todos los sistemas de control de versiones cliente-servidor): [4]
No te molestes en hablarme de Subversion. Si es necesario, empieza a leer sobre "Monotone". Esa parece ser la alternativa más viable, pero no molestes tanto a los desarrolladores para que no hagan ningún trabajo. Ya están al tanto de mis problemas ;)
— [4]
En lugar de adoptar Monotone, Torvalds decidió escribir su propio sistema SCM , Git . El diseño de Git utiliza algunas ideas de Monotone, pero los dos proyectos no comparten ningún código fuente central. Git tiene un enfoque mucho más fuerte en el alto rendimiento, inspirado en la larga historia y los exigentes modos distribuidos de colaboración utilizados por Torvalds y los otros autores del kernel de Linux. Torvalds comentó más tarde sobre el diseño y el rendimiento de Monotone:
Si quieres un VCS escrito en C++, prueba con Monotone. En serio. Utilizan una "base de datos real". Utilizan "buenas bibliotecas orientadas a objetos". Utilizan "buenas abstracciones de C++". Y, francamente, como resultado de todas estas decisiones de diseño que suenan tan atractivas para algunas personas de la informática, el resultado final es un desastre horrible e inmantenible.
— [5]
Un tema clave debatido [6] fue si el reemplazo de BitKeeper debería soportar la selección selectiva, por la cual un mantenedor de árbol puede aprobar un subconjunto de parches mientras rechaza otros de manera individual. Torvalds argumentó que este enfoque "resulta en una dinámica y psicología equivocadas en el sistema" al trasladar la carga a los mantenedores ascendentes en lugar de obligar a los mantenedores descendentes a poner más esfuerzo en mantener sus árboles libres de basura. Argumentó además que Monotone tiene razón en su aversión a la selección selectiva como una característica, pero luego no lo llevó lo suficientemente lejos al no hacer lo suficientemente fácil "descartar" árboles de trabajo sucios una vez que se cumplió su propósito. [7] Torvalds también señaló su percepción de que Monotone en ese momento no había alcanzado el nivel de rendimiento requerido por un proyecto tan grande como el desarrollo del núcleo de Linux.
Diseño
Al igual que GNU arch y a diferencia de Subversion , Monotone adopta un enfoque distribuido para el control de versiones. Monotone utiliza hashes SHA-1 para identificar archivos específicos o grupos de archivos, como en Git y Mercurial , en lugar de números de revisión lineales. Cada participante mantiene su propio historial de revisiones, almacenado en una base de datos SQLite local .
Integridad
Antes de la importante optimización de la revisión 0.27, el énfasis de Monotone en la corrección por sobre la optimización era a menudo culpado por las malas experiencias iniciales. La primera acción de un nuevo usuario es a menudo sincronizar (clonar) una gran base de datos Monotone existente, una acción que a menudo llevaba horas para bases de datos grandes, debido a la extensa validación y comprobación de integridad que Monotone realiza cuando las revisiones se mueven a través de la red. Una vez que la base de datos inicial (clonada) está llena, las acciones posteriores suelen proceder más rápidamente. A partir de julio de 2010 [update], todavía hay espacio para una mayor optimización en algunas funciones más raras. [ cita requerida ]
Flujo de trabajo
Monotone es especialmente fuerte en su soporte para un flujo de trabajo de divergencia/fusión, lo que logra en parte al permitir siempre la confirmación antes de la fusión. [8]
Redes
Aunque Monotone originalmente admitía una variedad de protocolos de red para sincronizar árboles, ahora utiliza exclusivamente un protocolo personalizado llamado netsync , que es más robusto y eficiente, y comparte algunas bases conceptuales con rsync y cvsup. (Sin embargo, a partir de la versión 0.27, es posible utilizar el protocolo netsync sobre cualquier flujo, incluidas en particular las conexiones ssh). Netsync tiene su propio puerto asignado por IANA (4691) y las versiones anteriores del mismo son compatibles con un complemento de Wireshark para el análisis de tráfico. No hay un servidor Monotone independiente porque cualquier cliente Monotone puede actuar como servidor.
Otras características
Otras características de Monotone incluyen:
- Buen soporte para la internacionalización y localización.
- Diseño portátil, implementado en C++
- La alta integridad es un objetivo clave del diseño
- Monotone puede importar proyectos CVS .
- Firma de revisiones mediante certificados RSA
- Fácil de aprender, debido a un conjunto de comandos similar al de CVS
- Muy bueno en ramificaciones (tanto divergencias dentro de una rama como ramas con nombre) y fusiones.
- Buena documentación
- Muy bajo mantenimiento
- Biblioteca Perl completa y exhaustiva que le permite controlar completamente Monotone desde un script Perl (mtn-browse hace uso de esto)
Desventajas
A partir de enero de 2008 [update], los posibles inconvenientes de Monotone incluyen:
- Los usuarios potenciales no pueden realizar el check-out (o confirmar) desde detrás de un proxy (muy común en entornos corporativos) debido al protocolo no http.
- Problemas de rendimiento para ciertas operaciones (el más notorio es el tirón inicial)
Implementación
Monotone se implementa en C++ en dialecto moderno sobre la biblioteca Boost , la biblioteca de criptografía Botan y la biblioteca de base de datos SQLite . Monotone admite la personalización y la extensión a través de funciones de enlace escritas en el lenguaje de programación Lua . El proceso de compilación de Monotone está automatizado con BuildBot e incluye pruebas de regresión exhaustivas .
Véase también
Referencias
- ^ "NOTICIAS". 4 de mayo de 2014. Consultado el 16 de julio de 2019 .
- ^ "7 Version Control Systems Reviewed". 18 de septiembre de 2008. Consultado el 1 de noviembre de 2010 .
- ^¿ Qué son los rosters?
- ^ ab Linus Torvalds (6 de abril de 2005). "LKML: Linus Torvalds: saga Kernel SCM". LKML .
- ^ Linus Torvalds (6 de septiembre de 2007). "Re: [RFC] Convertir builin-mailinfo.c para utilizar la mejor biblioteca de cadenas". GMANE . Archivado desde el original el 6 de febrero de 2016.
- ↑ David Woodhouse (7 de abril de 2005). «LKML: David Woodhouse: saga Kernel SCM» . Consultado el 23 de febrero de 2017 .
- ^ Linus Torvalds (7 de abril de 2005). "LKML: Linus Torvalds: Re: Saga de Kernel SCM". LKML .
- ^ "Cómo manejar una bifurcación: documentación monótona" . Consultado el 21 de noviembre de 2010 .
Enlaces externos
- Sitio web oficial