Monótono (software)
Monotone es una herramienta de software de código abierto para el control de revisiones distribuido.
Monotone realiza un seguimiento de las revisiones de archivos, agrupa conjuntos de revisiones en conjuntos de cambios y realiza un seguimiento del historial de cambios de nombre. El enfoque del proyecto está en la integridad por encima del desempeño. Monotone está diseñado para operaciones distribuidas y hace un uso intensivo de primitivas criptográficas para rastrear revisiones de archivos (a través del hash seguro SHA-1) y para autenticar las acciones del usuario (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 la base de datos, incluida una nueva estructura conocida por los desarrolladores de Monotone como lista. Las bases de datos Monotone creadas con la versión 0.26 no pueden intercambiar revisiones con bases de datos Monotone más antiguas. Las bases de datos más antiguas primero deben actualizarse 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 mayor interés en la comunidad FOSS 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 menospreció a Subversion (y, por extensión, a todos los sistemas de control de versiones cliente-servidor):
No te molestes en contarme sobre la subversión. Si es necesario, comience a leer en "monotone". Eso parece ser la alternativa más viable, pero no acostumbres a los desarrolladores tanto que no consiguen trabajo hecho. Ellos ya están conscientes de mis problemas;)
—
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 principal. 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 desempeño de Monotone:
Si quieres un VCS que está escrito en C++, ve a jugar con Monotone. En serio. Usan una base de datos real. Utilizan "nuevas bibliotecas orientadas al objeto". Utilizan "nice C++ abstracciones". Y francamente, como resultado de todas estas decisiones de diseño que suenan tan atractivas para algunas personas de CS, el resultado final es un desastre horrible e inmantenible.
—
Un tema clave debatido fue si el reemplazo de BitKeeper debería admitir la selección selectiva, mediante la cual un mantenedor de árboles puede aprobar un subconjunto de parches mientras rechaza otros de forma individual. Torvalds argumentó que este enfoque “da como resultado una dinámica y una psicología incorrectas en el sistema” transfiriendo la carga a los mantenedores ascendentes en lugar de obligar a los mantenedores descendentes a esforzarse más 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 característica, pero luego no logró llevarla lo suficientemente lejos al no hacer que fuera lo suficientemente fácil "desechar" las cosas. árboles de trabajo inmundos después de haber cumplido su propósito. Torvalds también destacó 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 kernel 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 o grupos de archivos específicos, como con 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 una gran optimización en la revisión 0.27, el énfasis de Monotone en la corrección sobre la optimización a menudo se culpaba por las malas experiencias iniciales. La primera acción de un nuevo usuario suele ser sincronizar (clonar) una gran base de datos Monotone existente, una acción que a menudo tomaba horas para bases de datos grandes, debido a la extensa validación y verificación de integridad que Monotone realiza cuando las revisiones se mueven a través de la red. Una vez que se completa la base de datos inicial (clon), las acciones posteriores generalmente avanzan más rápidamente. A partir de julio de 2010, todavía hay margen para una mayor optimización de algunas funciones más raras.
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.
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 transmisión, incluidas las conexiones ssh). Netsync tiene su propio puerto asignado por la IANA (4691 ) y las versiones anteriores son compatibles con un complemento Wireshark para análisis de tráfico. No existe un servidor Monotone independiente porque cualquier cliente Monotone puede actuar como servidor.
Otras características
Otras características de Monotone incluyen:
- Buen apoyo a la internacionalización y localización
- Diseño portátil, implementado en C++
- Alta integridad es un objetivo de diseño clave
- Monotone puede importar proyectos CVS.
- Signing of revisions using RSA certificates
- Fácil de aprender, debido a un conjunto de comandos similar al de CVS
- Muy bueno en ramificación (ambas divergencias dentro de una rama y ramas nombradas) y fusión
- Buena documentación
- Mantenimiento muy bajo
- Completa y amplia Biblioteca Perl que le permite controlar completamente Monotone de un script Perl (mtn-browse hace uso de esto)
Inconvenientes
A partir de enero de 2008, los posibles inconvenientes de Monotone incluyen:
- Los usuarios potenciales no pueden comprobar (o comprometerse) por detrás de un proxy (muy común en entornos corporativos) debido al protocolo no-http.
- Cuestiones de rendimiento para ciertas operaciones (la mayor atracción inicial notable)
Aplicación
Monotone se implementa en C++ en dialecto moderno además de la biblioteca Boost, la biblioteca de criptografía Botan y la biblioteca de base de datos SQLite. Monotone admite personalización y extensión a través de funciones de enlace escritas en el lenguaje de programación Lua. El proceso de construcción monótono está automatizado con BuildBot e incluye pruebas de regresión exhaustivas.
Contenido relacionado
Historia de la cámara
Tubo de vacío
Señales de humo