# IST-MUSIC

MUSIC, acrónimo de Self-Adapting Applications for Mobile USers In Ubiquitous Computing Environments (en español, Aplicaciones auto-adaptativas para usuarios móviles en entornos informáticos ubicuos), es un proyecto que implementa un entorno de desarrollo de software, de código abierto (open source), para aplicaciones auto-adaptativas y reconfigurables que se adaptan al usuario dinámico y al contexto de ejecución. Este contexto de ejecución, como se explica debajo, se refiere a la información que puede obtenerse del entorno, como la localización o los recursos del dispositivo. Las aplicaciones que tienen en cuenta el contexto son capaces de explotar el conocimiento sobre condiciones operativas externas, y serán auto-adaptativas si se adaptan durante su ejecución a contextos variantes, como el cambio de las necesidades del usuario o de los entornos operativos.
El proyecto MUSIC pertenece al Sixth Framework Programme (VI Programa Marco de Investigación y Desarrollo) de la Unión Europea, dentro de la temática de las tecnologías de la sociedad de la información (en inglés, Information Society Technologies, IST). El proyecto empezó en octubre de 2006 y terminó en junio de 2010.

## Introducción a MUSIC

MUSIC es una plataforma tecnológica abierta para los desarrolladores de software, abordando un paradigma de "cualquier red, cualquier dispositivo" con contenido relevante y contexto correcto de una forma segura y de confianza. MUSIC proveerá tecnología para el desarrollo de aplicaciones móviles innovadoras, que representarán un papel en el futuro en las vidas de los ciudadanos europeos. Conforme el público se acostumbra al uso de servicios móviles, las expectativas sobre qué servicios deberían proveerse, dónde deberían estar disponibles y como deben adaptarse a las expectativas de los usuarios se han puesto de actualidad, exigentes. Sin embargo, la gama actual de dispositivos móviles (como PDAs, teléfonos inteligentes, GPS, etc.) y la variedad de infraestructuras han aumentado los retos de construir y mantener esos servicios en una forma cómoda para el usuario. Debido a eso, los desarrolladores de software deben enfrentarse a un número enorme de cuestiones relacionadas con la configuración, las operaciones, el mantenimiento y el manejo de los cambios para poder producir sistemas que puedan adaptarse de forma dinámica, segura y automática a las expectativas públicas en distintos escenarios y circunstancias.
MUSIC proveerá una metodología de diseño y una arquitectura de sistema distribuida para el diseño y la implementación de aplicaciones auto-adaptativas en entornos informáticos ubicuos. Esto se complementará con lenguajes de modelado extendidos para la especificación de las dependencias de contexto y las capacidades de adaptación, soportado por herramientas de especificación de modelos, validación y simulación. Esta plataforma se utilizará para desarrollar servicios de prueba, basados en un conjunto de escenarios de aplicaciones con potencial real de mercado, teniendo un papel central: como fuente de requisitos, para valorar la adecuación técnica de los resultados y para promocionar los resultados.

## Investigación previa
### El proyecto MADAM

El proyecto MUSIC parte de la base del proyecto MADAM, también de IST. El proyecto MADAM, Mobility and ADaptation enAbling Middleware (en español, Middleware para permitir movilidad y adaptación) suministró a los ingenieros de software extensiones a los lenguajes de modelado, herramientas y middleware que fomentan colectivamente el diseño, la implementación y la operación de aplicaciones y servicios innovadores para el usuario y el trabajador móviles. Para alcanzar este objetivo, el proyecto ha estudiado los requisitos de adaptación de las aplicaciones móviles y ha desarrollado una teoría de la adaptación. Se ha desarrollado un conjunto de estrategias y mecanismos reutilizables de adaptación, basado en una arquitectura de componentes reconfigurable dinámicamente. El proyecto también ha desarrollado extensiones a los lenguajes de modelado y herramientas permitiendo a los diseñadores de aplicaciones especificar las capacidades de adaptación en el momento del diseño.
MADAM ha proporcionado prototipos implementados en la plataforma del middleware así como extensiones a herramientas de modelado. Las aplicaciones piloto se han desarrollado para validar el enfoque y los prototipos.
El proyecto MADAM terminó en la primavera de 2007.

### Relación entre MADAM y MUSIC

El enfoque técnico de MUSIC esta fuertemente inspirado en los resultados preliminares del proyecto MADAM. MUSIC extenderá y generalizará las soluciones experimentales desarrolladas en MADAM y las llevará al nivel de madurez necesario para facilitar la captación de la industria del software europea. Hay varias innovaciones comparado con MADAM, incluyendo la generalización a la informática ubicua y a las arquitecturas orientadas a servicios (en inglés, SOA, Service-Oriented Architecture)

## Objetivos

MUSIC proveerá una plataforma abierta que hace técnicamente y comercialmente factible para la amplia industria de las tecnologías de la información (no sólo operadores de telecomunicaciones) el desarrollo de aplicaciones móviles innovadoras que:
* tengan en cuenta el contexto: entienden el contexto de usuario en el sentido más amplio, incluyendo factores relacionados con los usuarios mismos (función, localización, condiciones ambientales, etc.) y factores relacionados con la cambiante disponibilidad de las facilidades de la informática y las comunicaciones.
* sean auto-adaptativas: adaptan dinámicamente a cambios en el contexto la funcionalidad y los mecanismos internos de implementación.
* sean incoherentemente distribuidas en naturaleza, y que puedan involucrar directamente interacciones entre múltiples usuarios.
* estén dirigidas principalmente a los usuarios móviles, aunque puedan incluir también usuarios fijos.
* dirijan aspectos extra-funcionales (como seguridad, fiabilidad,...) de acuerdo a las necesidades del usuario.
* puedan describirse como innovadoras, bien porque provean a los usuarios con servicios enteramente nuevos o porque hagan disponibles los servicios tradicionales de una forma práctica y utilizable en un entorno móvil.
El resultado principal del proyecto será la plataforma, formado por los siguientes componentes principales:
* Una metodología de diseño para aplicaciones auto-adaptativas.
* Una arquitectura de sistema distribuida formando una base sólida para el diseño y la implementación de aplicaciones auto-adaptativas en entornos informáticos ubicuos.
* Un entorno extenso, de código abierto, de desarrollo de software que facilite el desarrollo de software auto-adaptativo y reconfigurable que se adapte al usuario dinámico y al contexto de ejecución, y que mantenga un alto nivel de uso y utilidad de las aplicaciones al cambiar el contexto.
* Lenguajes de modelado extendidos para la especificación de las dependencias del contexto y las capacidades de adaptación, junto con herramientas de especificación y validación del modelo.
* Middleware y servicios de infraestructura soportando funcionalidades comúnmente necesitadas en el tipo de aplicaciones móviles adaptables gestionadas en el proyecto. Un ejemplo sería el soporte para realizar decisiones distribuidas sobre adaptaciones colaborativas.
* Un entorno de testeo y simulación de prototipos, para permitir a los desarrolladores observar y analizar los efectos de los cambios de contexto y adaptaciones y poder realizar así una depuración de la adaptación.

## Auto-adaptación y conocimiento del contexto
### Auto-adaptación

Los sistemas de software auto-adaptativos son capaces de adaptarse durante su ejecución a entornos operativos cambiantes. La auto-adaptación hoy en día es compleja y costosa de implementar, y se ha aplicado en dominios particulares donde los sistemas deben tener una fiabilidad garantizada, como por ejemplo, centralitas de telecomunicación o vehículos espaciales. Sin embargo, la auto-adaptación se ha convertido en un requisito para una mayor cantidad de sistemas de software, incluidos sistemas móviles.
MUSIC reducirá la complejidad del desarrollo y la implementación de estas aplicaciones.

### Conocimiento del contexto

Hoy en día, cada vez más aplicaciones tienen en cuenta el contexto. Por ejemplo, una aplicación de este tipo es la publicidad contextual, en la que los visitantes de la página web ven anuncios que probablemente les impacten, de acuerdo con su situación contextual: de qué país y ciudad son, que términos buscaron recientemente, etc.
Tener en cuenta el contexto es uno de los ingredientes más importantes para alcanzar el paradigma de la informática ubicua. En este paradigma, la gente se protege de sobrecargarse con el requisito de interactuar con sistemas informáticos, parcialmente permitiendo a los sistemas que se auto-configuren de forma indirecta y autónoma. De esta forma, la interacción necesaria (y, por tanto, la atención humana) se minimiza. Aparentemente, para conseguir que la tecnología se sitúe en el fondo (de nuestra consciencia), se tienen que inventar nuevos métodos para que las decisiones necesarias se tomen de forma automática.
En el proyecto MUSIC, uno de los objetivos principales es desarrollar sistemas que puedan auto-adaptarse de forma autónoma y automática, con el propósito constante de optimizar la calidad del servicio (QoS, Quality-of-Service) ofrecida a los usuarios finales. Esto se consigue parcialmente permitiendo a los sistemas recoger continua y automáticamente información acerca del estado del usuario y sus correspondientes aplicaciones. Cuando esta información es suficientemente rica y está modelada de forma apropiada, entonces el sistema puede realizar frecuentemente decisiones que beneficien a los usuarios, sin necesitar ninguna intervención explícita por su parte.
El contexto que MUSIC tiene en cuenta cubre una gran cantidad de información, que se puede clasificar en tres categorías:
* Contexto informático: describe la colección de dispositivos informáticos en el sistema y los enlaces de comunicación entre ellos, proveyendo información sobre su estado actual (por ejemplo, uso, carga,...), capacidades y configurabilidad. Por ejemplo, la información relativa a las redes disponibles y los servicios, el tamaño de la pantalla del dispositivo y su orientación, la memoria y batería disponibles,...
* Contexto ambiental: en MUSIC, describe las condiciones del ambiente en las que el usuario y las máquinas residen y se mueve. Para detectar y dar una medida de este tipo de datos de contexto, se emplean sensores hardware dedicados. Por ejemplo, la localización, que permite conocer los objetos cercanos al usuario: iluminación, ruido,...
* Contexto de usuario: los usuarios pueden especificar sus preferencias sobre las propiedades configurables de su dispositivo. Esto puede incluir datos personales, compañía y lugar de trabajo, aficiones, necesidades,...

## El middleware MUSIC

El desarrollo del middleware MUSIC es el núcleo del proyecto. El middleware tendrá que evaluar el contexto descrito anteriormente y entonces seleccionar automáticamente la mejor configuración disponible que cumple los requisitos dados por el contexto. Este proceso debe ser transparente al usuario.
El middleware se desarrolla en dos partes: el middleware de contexto y el middleware de adaptación.

### Middleware de contexto

El middleware MUSIC de contexto es responsable de monitorizar el contexto, gestionando la información de contexto y detectando cambios en el contexto que deberían causar adaptación. El concepto general de contexto de MUSIC es necesario si queremos explotar todo el poder de los entornos informáticos ubicuos. Claramente, necesitamos medios descriptivos comúnmente aceptados para especificar el contexto actual. Todas las fuentes de contexto deben compartir la misma ontología de contexto, que el context consumer y el context broker usarán. Estos roles pueden definirse como sigue:
* El context provider (literalmente, proveedor de contexto): es un elemento de red o un dispositivo de usuario final que provee datos de contexto.
* El context consumer (literalmente, consumidor de contexto): es la capa de aplicación (tanto en el lado del servidor como del cliente) que usa o elabora información de contexto. Este rol puede ser representado también por el motor de razonamiento (reasoning engine), un elemento intermedio entre el context provider y la aplicación.
* El context broker (literalmente, agente de contexto): es un elemento servidor que recopila datos de contexto (actuando como context consumer) y los distribuye (como context provider) a petición. A menudo, el context broker añade valor a los datos individuales que recoge.
Un servicio distribuido de contexto en el middleware MUSIC monitoriza el contexto y provee información al middleware de adaptación cuando cambia el contexto. El servicio de contexto reparte una agrupación definida y un mapeado de eventos a bajo nivel con notificaciones de cambio de contexto a alto nivel. Por tanto, usa un motor de razonamiento que entenderá (semánticamente), compondrá y proveerá a la capa de aplicación con una sólida representación de contexto y con técnicas de aprendizaje.
Además, la información de contexto necesita protegerse contra malos usos. La seguridad y la privacidad necesitan ser parte del diseño del sistema y deben considerase en aquellos componentes de MUSIC que producen y remiten datos de contexto.

### Middleware de adaptación

El middleware de adaptación es capaz de adaptar una aplicación y de adaptarse a sí mismo dinámicamente al contexto en el que se ejecuta, proveído por el middleware de contexto. Adaptación puede significar que componentes de la aplicación se cambian o se reconfiguran. Como añadido a lo que MADAM ha demostrado, MUSIC modelará y notará las vinculaciones de los servicios así como contextos de situaciones extendidas como parte de las dependencias de contexto, basado en un enfoque orientado a servicios. Esto puede significar que si algún servicio apropiado se detecta durante la ejecución en el entorno de ejecución, puede ser integrado automáticamente y reemplazar otro componente del software. Esta reconfiguración dinámica y flexible puede aplicarse a los componentes de servicio tanto a nivel de plataforma como de aplicación. El mismo contexto puede afectar a diferentes aplicaciones de forma distinta. Para hacer las decisiones de adaptación a medida de la aplicación, se necesita conocimiento acerca de la aplicación en concreto, como la dependencia entre los parámetros de la aplicación, los recursos disponibles y el rendimiento. Este conocimiento se podría adquirir sólo durante la ejecución. El middleware necesita dar soporte a la aplicación para obtener ese conocimiento y así hacer decisiones sobre adaptación. Consideraciones sobre seguridad y fiabilidad controlarán esas decisiones y actividades de reconfiguración. El middleware debe dar soporte a la especificación y a la aplicación de políticas de seguridad.

### Historial de versiones del middleware MUSIC

Las descargas (desde la versión 0.4.0 en adelante) están disponibles en la página de archivos de la página web del proyecto MUSIC en BerliOS (en inglés) (para versiones anteriores, ir a ).

#### Versión 0.0.x

El consorcio MUSIC anunció el 17 de enero de 2008 el lanzamiento de la primera versión del middleware MUSIC, versión 0.0.1. Este lanzamiento incluye (en inglés):
* Distribución binaria del middleware, con algunas aplicaciones de ejemplo preinstaladas.
* Código fuente del middleware y de los ejemplos.
* Documentación relacionada para el desarrollo de aplicaciones sobre MUSIC.
También está disponible la última versión del middleware de MADAM (versión 2.0.1), en el que se basa el middleware MUSIC.

#### Versión 0.1.x

El 28 de julio de 2008, se publicó la segunda versión del middleware MUSIC, versión 0.1.1. Este lanzamiento incluye (en inglés):
* Distribución binaria del middleware, lista para ejecutarse en Windows XP.
* Código fuente del middleware.

#### Versión 0.2.x

La tercera versión del middleware MUSIC, versión 0.2.0, se publicó el 3 de noviembre de 2008. Contenía múltiples mejoras y nuevas características, incluyendo:
* Nuevo y avanzado middleware de contexto, basado en ontologías. También soporta distribución de contexto.
* Nuevo sistema de comunicación con una arquitectura basada en extensiones (plugins) y un mejor rendimiento. Soporta diferentes tecnologías de conexión remota y de descubrimiento de servicios, incluyendo SLP y UPnP.
* Un gestor de recursos rediseñado, con una arquitectura basada en extensiones (plugins).
* Soporte para arquitecturas orientadas a servicios. Los servicios descubiertos se pueden incorporar al mecanismo de adaptación.
El lanzamiento se compone de (en inglés):
* Distribución binaria.
* Código fuente.
* Documentación (incluyendo Javadoc).
Se lanzaron dos versiones intermedias:
* Versión 0.2.1: Esta versión menor se publicó el 24 de noviembre de 2008 y corregía varios errores detectados en la versión previa. También contenía mejoras menores y correcciones realizadas para asegurar la ejecución en dispositivos móviles. El lanzamiento estaba compuesto por la distribución binaria para Windows XP y Windows Vista y el código fuente del middleware.
* Versión 0.2.2: Esta versión de mantenimiento se publicó el 17 de febrero de 2009. Corregía errores de versiones anteriores y añadía algunas mejoras a las funcionalidades del middleware. Los cambios principales se realizaron para asegurar la compatibilidad entre Equinox y Knopflerfish, dos plataformas comunes de OSGi. Como los lanzamientos anteriores, éste estaba compuesto por una distribución binaria para Windows XP/Vista y el código fuente del middleware. Como nueva descarga, se publicó una distribución binaria lista para Windows Mobile 5 y 6.0, utilizando phoneME Advanced como máquina virtual de Java para dispositivos móviles.

#### Versión 0.3.x

La versión 0.3.0 del middleware se publicó el 13 de abril de 2009. Fue una versión con pequeñas mejoras y corrección de errores.

#### Versión 0.4.x

La versión 0.4.0 de MUSIC se publicó el 15 de julio de 2009. Esta versión mayor comprende importantes cambios:
* Cambios de los nombres de los proyects de MUSIC y de la estructura.
* Gestor de perfiles: el dominio de adaptación se configura dinámicamente.
* Múltiples GUIs: nueva GUI basada en Swing como alternativa a la basada en eSWT, así como una herramienta de monitorización de contexto.
* Mejoras en el rendimiento de SLP en el descubrimiento de servicios.
* Distribución de contexto v2.
* Repositorio distribuido: soporte para transferencia automática de las clases de utilidad.
* Plugins de contexto para localización, usando la dirección MAC del WiFi HotSpot y el ID de la celda GSM.

#### Versión 0.5.x

Disponible desde el 29 de septiembre de 2009, la versión 0.5.0 fue la primera en estar disponible únicamente en el sitio MUSIC en BerliOS. Los cambios principales eran:
* Nuevas funcionalidades: alojamiento de servicios y privacidad de contexto.
* Distribución de contexto v3.
* Nuevo algoritmo de razonamiento de adaptación, denominado sofisticado
* Corrección de errores y otras mejoras.

#### Versión 0.6.x

Disponible desde el 7 de enero de 2010, la versión 0.6.0 ofrece soporte completo para Android 1.6 o superior. Las características principales fueron:
* Soporte para Android.
* Sensores de contexto de localización para Android.
* Integración de SLA con el resto del middleware.
* Soporte para cambios de red (cambios de dirección IP).
* Otras mejoras pequeñas y corrección de errores.
Están disponibles distribuciones binarias para Windows/Linux, Windows Mobile y Android.

#### Versión 0.7.x

El 22 de febrero de 2010, se publicó la versión 0.7.0 como una actualización incremental del middleware MUSIC. Las principales actualizaciones fueron:
* Reorganización del proyecto del middleware de contexto.
* Repositorios de contexto como plugins.
* Mejoras en el GUI de Android: añadido el perfil de usuario y las prioridades de las aplicaciones.
* Soporte aumentado para alojamiento de servicios.
* El repositorio distribuido (para aplicaciones distribuidas) ha sido movido temporalmente al middleware de adaptación.
Esta versión fue además la primera en estar disponible como un paquete Debian, para distribuciones de Linux basadas en Debian.

#### Versión 0.8.x

La versión pre-final del middleware MUSIC, versión 0.8.0 fue publicada en primer lugar el 11 de marzo de 2010. Esta versión incluye:
* Nueva funcionalidad: adaptación del dispositivo.
* Nuevos sensores de contexto para Android y Windows Mobile.
* Nuevo repositorio de contexto para Android.
* Corrección de errores y mejoras en SLA, alojamiento de servicios y cambios de dirección IP.
Esta versión ha recibido varias actualizaciones menores, principalmente versiones de mantenimiento con corrección de errores:
* Versión 0.8.1, publicada el 16 de marzo de 2010.
* Versión 0.8.2, publicada el 20 de marzo de 2010, con corrección de errores para cambios de dirección IP.
* Versión 0.8.3, publicada el 28 de abril de 2010, con corrección de errores en el nivel de comunicaciones, en SLA y en los sensores de contexto de localización para Android y Windows Mobile.
* Versión 0.8.4, publicada el 5 de mayo de 2010.

#### Versión 1.0.0

La versión 1.0.0 es la versión final del middleware MUSIC, como resultado principal del proyecto MUSIC. Está versión se lanzó el 27 de mayo de 2010 e incluyó las últimas correcciones de errores antes de la finalización del proyecto.

### MUSIC en BerliOS

Comenzando con la versión 0.4.0, MUSIC es parte de la comunidad de código abierto BerliOS. El proyecto usará las herramientas disponibles en BerliOS, como el repositorio SVN y la herramienta de control de errores. El código fuente está ya disponible en el servidor SVN de BerliOS, para ser accesible por todo el mundo. Además, las versiones del middleware desde la 0.5.0 en adelante están disponible únicamente en la página del proyecto en BerliOS.

### MUSIC en el Android Market

MUSIC está disponible, como "IST-MUSIC", de forma gratuita en el Android Market desde la versión 0.8.0.

## El MUSIC Studio

El middleware es simplemente una herramienta que debe configurarse para adaptarse a los requisitos de la aplicación. Para simplificar el trabajo de los desarrolladores, se dispondrá de un entorno de desarrollo: el MUSIC Studio. Esta plataforma se usará para desarrollar aplicaciones con la tecnología MUSIC. Además, facilita sustancialmente la reutilización y la evolución de soluciones software adaptativas al ofrecer un almacén para componentes y modelos software reutilizables. El MUSIC Studio se construirá dentro del entorno Eclipse) y estará disponible públicamente como un proyecto de código abierto.
El objetivo es dar soporte a todas las tareas del desarrollo de la aplicación, integrando todas las herramientas de MUSIC en un entorno de desarrollo software completo que permita el desarrollo de aplicaciones adaptativas para informática ubicua de forma más eficiente y conveniente. Más concretamente, el MUSIC Studio integrará:
* Herramientas de modelado, que respalden la creación de modelos adaptativos. MUSIC se basa en el desarrollo orientado a modelos, así que se necesita una herramienta visual de modelado para construir modelos de aplicaciones auto-adaptativas de forma interactiva. MUSIC usará UML como lenguaje de modelado. El entorno de modelado de Eclipse (Eclipse Modeling Framework) será el fundamento para la arquitectura de la herramienta de modelado y desarrollo de MUSIC.
* Herramientas de transformación, que transformen los modelos de adaptación independientes de plataformas a modelos dependientes de plataformas y a código, con Java como lenguaje. Para poder generar, utilizar y validar las aplicaciones adaptativas necesitamos construir varias transformaciones específicas desde modelos. El resultado de las fases de la transformación serán modelos dependientes de plataformas dirigidos al middleware MUSIC y a facilidades de testeo de modelos.
* Herramientas de simulación, testeo y depuración de las aplicaciones. Un enfoque de desarrollo orientado a modelos permite muy bien la validación, testeo y depuración de las decisiones de diseño mediante la simulación de los modelos de la aplicación en las primeras fases del proceso de desarrollo. Estas herramientas ayudarán a descubrir defectos de diseño y propiedades de rendimiento. Basándose en estos hallazgos, la herramienta de depuración de MUSIC ofrecerá sugerencias para la depuración de la aplicación. Por ejemplo, políticas de adaptación conflictivas, conflictos de uso de recursos, reglas de seguridad conflictivas, etc., se descubrirán y repararán. Varias herramientas para estas tareas están disponibles de forma general (por ejemplo, Eclipse Test and Performance Tools Platform). Estas deberán extenderse y adaptarse para los propósitos de MUSIC.