lunes, 22 de marzo de 2010

Sistemas de control de versiones

La principal clasificación que se puede establecer está basada en el almacenamiento del código:

* Centralizados: existe un repositorio centralizado de todo el código, del cual es responsable un único usuario (o conjunto de ellos). Se facilitan las tareas administrativas a cambio de reducir flexibilidad, pues todas las decisiones fuertes (como crear una nueva rama) necesitan la aprobación del responsable. Algunos ejemplos son CVS, Subversion.
* Distribuidos: cada usuario tiene su propio repositorio. No es necesario tomar decisiones centralizadamente. Los distintos repositorios pueden intercambiar y mezclar revisiones entre ellos. Ejemplos: Git, Mercurial.


Aquí se presentan amplias tablas comparativas de los distintos sistemas de control de versiones que existen en la actualidad. Sin embargo, voy a centrarme en comparar dos sistemas de uso extendido y muy diferentes entre sí: Subversion (SVN) y GIT.

Toda la documentación que he leído coincide en que GIT es un innovador diseño de sistema de control de versiones pensado para ganar eficiencia y confiabilidad en el mantenimiento de versiones de aplicaciones cuando estas tienen un gran número archivos de código fuente. Este sistema resulta de la experiencia del diseñador de Linux, Linus Torvalds.
La principal diferencia ya la he mencionado en la introducción y es que SVN es un sistema centralizado mientras que GIT es distribuido. Esto significa que GIT le da a cada programador una copia local del historial del desarrollo entero y los cambios se propagan entre los repositorios locales. Los cambios externos se importan como ramificaciones adicionales y pueden ser fusionados en la misma manera que se hace con la ramificación local. De este modo realiza una gestión eficiente de proyectos grandes, dada la rapidez de gestión de diferencias entre archivos, entre otras mejoras de optimización de velocidad de ejecución.
Una desventaja de GIT frente a SVN es que resulta algo más caro trabajar con ficheros concretos frente a proyectos, ya que SVN trabaja con base en cambios de fichero. Otra desventaja importante de GIT es que no puede ejecutarse de modo nativo en Windows, reduciendo quizá así su número de usuarios.

Para concluir, a pesar de alguna desventaja los sistemas distribuidos y en concreto GIT están desbancando a los sistemas centralizados tradicionales. Las principales ventajas son:

1. Se trabaja con el repositorio completo de forma local.
2. Flexibilidad total para trabajar con distintas ramas y fusionarlas.
3. Velocidad de actualizaciones: el tiempo de actualizar un repositorio remoto es superior al tiempo que tarda SVN.


En cuanto a mi experiencia, únicamente he trabajado con subversion tanto de manera personal para gestionar mis prácticas y PFCs de la universidad así como desarrolladora de un proyecto de software libre (Jderobot) de unas 200.000 líneas de código y ahora mismo con dos ramas de desarrollo. Mi impresión en general es que de gran utilidad un sistema de control de versiones incluso para proyectos de pequeña escala. Sin embargo, sí me he encontrado con ciertas limitaciones utilizando subversion para Jderobot al ser varios desarrolladores los que introducimos cambios. La primera es que, antes de modificar nada, explícitamente hay que actualizar tu copia de trabajo por si alguien hubiera añadido cambios al repositorio. La segunda y principal es que si la versión más reciente por algún motivo no funciona correctamente, te obliga a trabajar con la copia anterior no actualizada (si es que la has guardado) y esperar que tus cambios no entren en conflicto con los nuevos cambios.
Por lo que he leído GIT resuelve este tipo de conflictos, pero aún no he tenido la oportunidad de trabajar con este nuevo sistema. Supongo que en un futuro no muy lejano migraremos al nuevo sistema distribuido.

Aquí dejo las fuentes en las que me he basado y algunos enlaces interesantes que he encontrado sobre este tema.

http://en.wikipedia.org/wiki/Source_Control_Management
http://entrevistas.barrapunto.com/article.pl?sid=07/06/02/147209&threshold=-1
http://markmcb.com/2008/10/18/3-reasons-to-switch-to-git-from-subversion/
http://versioncontrolblog.com/comparison/Git/Subversion/index.html
http://slnc.me/hola-git-sayonara-subversion/

sábado, 13 de marzo de 2010

EyeOS

eyeOS es un proyecto iniciado en agosto del 2005 por un pequeño grupo de jóvenes programadores originarios de Barcelona. Es un escritorio virtual multiplataforma, libre y gratuito, basado sobre el estilo del escritorio de un sistema operativo. El paquete básico de aplicaciones que vienen por defecto, incluye toda la estructura de un sistema operativo y algunas aplicaciones de tipo suite ofimática como un procesador de textos, un calendario, un gestor de archivos, un mensajero, un navegador, una calculadora y más. El paquete entero está autorizado bajo la licencia libre AGPL. Existe un sitio paralelo que provee aplicaciones externas para eyeOS, llamadas eyeApps.

Se trata de un nuevo concepto en almacenaje virtual, el cual se considera como revolucionario al ser un servicio clave para el Web 2.0 ya que dentro de una web que combina el poder del actual HTML, PHP, AJAX y JavaScript para crear un entorno gráfico de tipo desktop.

La diferencia entre otros entornos desktop al hacer posible iniciar el desktop eyeOS y todas sus aplicaciones desde un navegador web. No se requiere instalar ningún software adicional, ya que solo se necesita un navegador que soporte AJAX, Java y Macromedia Flash (dependiendo de las aplicaciones que se deseen ejecutar).

La idea fue todo un éxito, pues en tan solo dos meses obtuvieron gran aceptación ya que se inscribieron al servicio más de 27.000 usuarios diferentes países como Canadá, Francia, Estados Unidos e incluso países con regímenes esctrictos que regulan ciertos servicios de almacenaje como China. Desde entonces, les llovieron colaboradores los cuales crearon cantidad de software para ese servicio y tradujeron su servicio a más de 30 idiomas.

Este servicio se destaca principalmente por sus fuertes medidas de seguridad, toda la comunicación que se haga dentro del sitio, y todo el contenido almacenado por los usuarios queda totalmente cifrado y sin acceso alguno por parte de sus administradores, lo que da una ventaja adicional en cuanto a privacidad de uso.


Mi opinión personal sobre los sistemas de Cloud Computing y en concreto éste es que son el futuro del software para empresas. Desde el punto de vista de una empresa, sólo tendría que mantener los equipos de sus empleados con un navegador y muy poco disco duro, cosas que el ordenador más básico ofrece. Por tanto, la empresa ahorraría recursos en instalación y mantenimiento de equipos.
Por otra parte, este tipo de sistema también es útil para personas que viajan con frecuencia, ya que siempre van a disponer en línea de su información y trabajo.
Además, al ser código GPL permite que cualquiera pueda descargar el código e instalarlo en su propio servidor, garantizando la confidencialidad total de los datos.