Superada la fase en la que un ordenador había de ser compartido por muchos usuarios (mainframe), se pasó a una segunda fase en la que un ordenador estaba asociado a una persona: la fase del PC u ordenador personal. En la actualidad estamos entrando en una tercera fase en la que una persona tendrá acceso a una gran capacidad de cálculo. Se trata de una fase en la que el ordenador propiamente dicho desaparecerá del primer plano. Su presencia, no importa donde, quedará reducida a la inteligencia que podrán exhibir ciertos dispositivos o ambientes cotidianos o las posibilidades aumentadas que se obtienen por el hecho de comunicar muchos ordenadores entre si. En este tutorial se presentarán dos facetas del acceso omnipresente a la capacidad de cálculo: En la primera parte se hará énfasis en los ordenadores embebidos en todo tipo de dispositivos limitados y la segunda parte se centrará en los sistemas virtuales integrados por muchos ordenadores conectados a Internet.
Los avances en tamaño, prestaciones y potencia consumida de los procesadores, hacen posible que éstos se puedan embeber cada vez en más tipos de dispositivos, dotándoles de cierta inteligencia. Agendas electrónicas, teléfonos móviles, etiquetas inteligentes, dispositivos de electrónica de consumo, componentes "vestibles" son algunos de estos dispositivos. Por otro lado, los avances en tecnologías de red inalámbrica, tanto WAN (GSM, GPRS, UMTS) como especialmente LAN y PAN (Bluetooth, IEEE 802.11) permiten dotar de capacidad de comunicación a estos dispositivos. Se crean redes entre los mismos basadas en su proximidad, redes de las que aparecen y desaparecen nodos según se mueven, se encienden o se apagan. Son las denominadas redes a medida o "ad-hoc".
Las aplicaciones software en los pequeños dispositivos deben adaptarse a las mencionadas restricciones de memoria, procesamiento y comunicación. El desarrollo de aplicaciones en computación ubicua encuentra una de sus mayores dificultades en la diversidad de procesadores y de sistemas operativos que se usan. Los sistemas operativos más importantes hoy en día son Palm OS, Symbian OS y Windows CE. Para superar este obstáculo, Sun Microsystems lanza en 1999 Java 2 Micro Edition (J2ME). J2ME permite que aplicaciones Java se ejecuten en dispositivos limitados. Una de sus principales ventajas es que es una arquitectura modular, que se adapta a las limitaciones de los diferentes dispositivos en las que se quiere integrar.
En esta primera parte del tutorial se incidirá en la problemática de la programación de dispositivos limitados y en las soluciones existentes, haciendo un especial énfasis en J2ME.
Se han propuesto e implementado varios esquemas para utilizar la capacidad de cómputo ociosa de los millones de procesadores conectados a Internet. Estas ideas van desde la instalación de un "salva-pantallas" como el del proyecto SETI@home (http://setiathome.ssl.berkeley.edu), que permite activar un programa que obtiene datos de señales captadas por un radiotelescopio para encontrar patrones que denuncien inteligencia extraterrestre, pasando por varios esquemas que generalizan este concepto, como el de Peer-to-Peer (P2P) Computing. Recientemente ha aparecido un caso que dado mucho de que hablar, en el que una compañía secretamente ha distribuido junto con KazaA (http://www.kazaa.com), que es un software de intercambio de archivos similar a Napster o Gnutella, un módulo añadido que permite convertir la red de usuarios de KazaA en una plataforma de cómputo controlada centralizadamente por dicha compañía.
Por otro lado, el acceso a poderosos recursos computacionales remotos para incrementar el poder de cómputo disponible también ha tenido un gran desarrollo en el sector académico, con la aparición de plataformas que facilitan dicho acceso, comúnmente denominadas "metasistemas" o "grids". Tenemos ejemplos reconocidos de este tipo de sistemas en Globus (http://www.globus.org) y Legion (http://legion.virginia.edu). Estas plataformas pueden ser analizadas desde varias perspectivas, relacionadas con los niveles de especificidad, transparencia, seguridad, tolerancia a fallas y planificación (scheduling) entre otros. Los sistemas de P2P computing y los proyectos iniciados con la finalidad de dar acceso a centros de computación paralela tienen mucho en común, y se percibe una convergencia de características y métodos de acceso.
En esta segunda parte se analizarán estos aspectos, tomando como ejemplo algunas propuestas desarrolladas en la literatura sobre el tema.