# Computación voluntaria

La Computación voluntaria (en inglés un saludo goya) es un tipo de computación distribuida en la cual los usuarios donan, usualmente de manera anónima, parte de su potencia computacional sin utilizar a distintos proyectos e iniciativas, especialmente a proyectos académicos o de investigación. La idea se basa en el aprovechamiento de los recursos disponibles en los computadores comunes, debido a la infrautilización de estos por parte de los usuarios durante lo que se considera un uso corriente de los sistemas.
La principal ventaja de la computación voluntaria es la capacidad de hacer disponible una gran cantidad de potencia de computación a múltiples proyectos de investigación con un coste mínimo para los investigadores de estos. Debido a la gran cantidad de ordenadores personales disponibles a día de hoy en el mundo, la computación voluntaria puede proveer una mayor capacidad de procesamiento que cualquier otro tipo de computación. Además, el hecho de que los usuarios sean los que proveen esta potencia, supone una participación activa de la población en los proyectos de investigación académica, aumentando el interés general en el desarrollo científico y dictando la dirección de las distintas investigaciones hacia lo que el público considere de mayor interés.

## Historia

El primer proyecto de computación voluntaria data de enero de 1996, denominado como el Great Internet Mersenne Prime Search. Durante los años venideros, la computación voluntaria se extendió a otras áreas, especialmente relacionadas con el ámbito académico. Una de las iniciativas a destacar es distributed.net, un proyecto basado en la utilización de la potencia de la CPU y la GPU para resolver diferentes problemas a gran escala. Además, aparecieron múltiples proyectos basados en Java más cercanos a la investigación como Bayanihan, Popcorn, Superweb o Charlotte.
En 1999, los proyectos SETI@home y Folding@home fueron lanzados. Ambos proyectos recibieron en su momento un gran interés por parte de los medios de comunicación, manteniéndose hasta la actualidad como dos de los proyectos de computación voluntaria con un mayor número de participantes de forma habitual. En consecuencia, múltiples empresas como Popular Power, Parabon, Entropia o United Devices aparecieron al comienzo de la década de los 2000, con una visión de negocio y una participación en proyectos relacionados con distintos aspectos de la computación voluntaria.
En el año 2002, el sistema de middleware denominado como el Berkeley Open Infraestructure for Network Computing, comúnmente conocido como BOINC, fue lanzado como un soporte para el proyecto SETI@home. Fue desarrollado en la universidad de California, más concretamente en el Laboratorio de Ciencias Espaciales. BOINC provee a los voluntarios de un sistema de middleware completo que aprovecha distintos recursos tanto de la CPU como de la GPU para realizar las distintas tareas que se requieren. El primer proyecto que utilizó BOINC fue Predictor@home, en el año 2004. El uso del software se extendió hasta alcanzar los proyectos de mayor envergadura como SETI@home o Climateprediction.net. Desde entonces, su uso se estandarizó entre empresas e instituciones que participan en distintas iniciativas relacionadas con la computación voluntaria, incluyendo proyectos como Einstein@Home, AQUA@home o PrimeGrid.
En la actualidad, el proyecto SETI@home se encuentra en un estado de hibernación indefinida, por lo que muchos de sus usuarios se han trasladado a otros proyectos. Muchos de estos proyectos, además de BOINC, se han adaptado a las nuevas tecnologías, pudiendo utilizar otros tipos de hardware y arquitecturas más allá de computadores personales para el procesamiento y cálculo de operaciones. Algunas de las alternativas surgidas en los últimos años han sido las consolas PlayStation 3 o los teléfonos Android.
Recientemente, IBM abandonó y transfirió el proyecto World Community Grid al Instituto de Investigación Krembil. Desde 2004, esta había sido una de sus principales iniciativas filantrópicas, basada en la búsqueda de soluciones para problemas relacionados con el medio ambiente.

## Características

La computación voluntaria es la práctica de utilizar las computadoras personales comerciales de personas ordinarias (ordenadores, portátiles, tabletas, teléfonos inteligentes, etc.) para realizar computaciones y cálculos científicos de alto rendimiento y capacidad (high-throughput computing). Los voluntarios participantes deben instalar un programa cliente encargado de descargar y ejecutar trabajos (pequeños programas o procesos) provenientes de los servidores pertenecientes a los proyectos científicos a los cuales se desea contribuir. Los costos de la computación voluntaria se dividen entre los voluntarios que prestan sus computadoras y los investigadores que hacen uso de ellos. Los voluntarios cubren la compra y el mantenimiento de los dispositivos, la electricidad que los alimenta y la conexión a internet que les permite solicitar trabajos e intercambiar resultados. Los investigadores pagan por los servidores, los administradores de sistemas, los programadores y los desarrolladores de aplicaciones web requeridos para el proyecto. La computación voluntaria es óptima para computaciones de alta capacidad y rendimiento en las que existen grandes grupos o flujos de trabajos, lo cual conduce a la necesidad de una alta tasa terminación de trabajos (high rate of completion). Cuando se requiere de tamaños de memoria considerables o tiempos de finalización pequeños la computación voluntaria no suele ser la mejor opción. La computación voluntaria difiere de otras formas de computación de alta capacidad y rendimiento en seis maneras principales:
* Las computadoras son anónimas y no siempre confiables.
* Existe una gran heterogeneidad en los dispositivos participantes.
* Los tiempos de terminación son difíciles de predecirdebido a las variaciones de disponibilidad de las computadoras voluntarias.
* Los dispositivos participantes cambian confrecuencia: se unen y dejan el proyecto impredeciblemente.
* Se requiere de reclutamiento y retención de participantes para crear la red de dispositivos, así como del desarrollo de software cliente fácilmente instalable y operable para los voluntarios.
* Tiene la posibilidad de ser mucho más grande: millones computadoras completando millones de trabajos por día.

## Middleware

El middleware es una capa software que abstraerá los problemas del sistema distribuido. Los primeros proyectos de computación voluntaria consistían en un solo programa que combinaba el cálculo y la computación científica con la infraestructura de la computación distribuida. Este tipo de arquitectura monolítica resultaba inflexible y problemática a largo plazo, ya que dificultaba las actualizaciones y mejoras periódicas del software. La computación voluntaria ha avanzado hacia una serie de sistemas de middleware que proveen esta infraestructura de forma autónoma, acorde a la calidad y las posiblidades ofrecidas por el diseño de software actual.
Algunas de los ejemplos de middleware más utilizados:
* Berkeley Open Infrastructure for Network Computing (BOINC) es el más utilizado. Funciona como una plataforma de uso generalizado para otras áreas de la computación distribuida, además de ser el software habitual utilizado por los voluntarios en la mayoría de proyectos y sistemas operativos.
* XtremWeb que es una plataforma experimental para computación relacionada con la investigación.
* Xgrid está desarrollado por el Grupo de Computación Avanzada de Apple, y es exclusivo para sistemas MacOS.
* GridMP es un middleware de carácter comercial desarrollado por United Devices utilizado, especialmente en el pasado, en múltiples y grandes iniciativas de computación voluntaria como la World Community Grid.
* Cosm es una familia de protocolos y software de computación distribuida que ha sido utilizado en proyectos como Folding@home o Genome@Home.
Estos sistemas se basan en un cliente instalado y en funcionamiento situado en un ordenador personal o servidor proporcionado por los voluntarios. Utilizan principalmente un modelo "pull", donde se contacta de manera periódica a unos servidores centralizados que son controlados por los investigadores del proyecto. Este contacto supone una petición de trabajo y para reportar los resultados generados a partir de las operaciones realizadas. En la mayor parte de las ocasiones, existe un sistema de "créditos" por usuario que registra la cantidad de trabajo (potencia proporcionada y operaciones realizadas) que dicho usuario ha realizado sobre el proyecto en cuestión.

## Voluntarios

Los voluntarios de los proyectos de computación voluntaria proporcionan de manera altruista la potencia de sus dispositivos para que esta sea utilizada por las distintas iniciativas. Esta potencia será utilizada para el cálculo y reporte de datos y operaciones en distintos ámbitos e investigaciones.

### Ventajas

Existe un gran abanico de razones por los que los usuarios participan en proyectos de esta índole, destacando la satisfacción de ayudar a proyectos de investigación relevantes para la sociedad, o el entusiasmo de contribuir y trabajar en equipo (socializando a través de foros y proponiendo sugerencias y mejoras) para obtener un fin común. Además, existe un entusiasmo asociado a la publicación de resultados y el seguimiento de los créditos obtenidos por participar en los proyectos, por lo que las iniciativas de computación voluntaria y el middleware intentan impulsar el reconocimiento de los voluntarios una vez se realizan descubrimientos relevantes para la sociedad en general y los medios de comunicación.

### Desventajas

Existen una serie de desventajas intrínsecas en la utilización del hardware de los usuarios para la computación voluntaria. En primer lugar, existe un mayor consumo de energía asociado a la constante utilización de recursos del ordenador (CPU y GPU), independientemente de si el usuario se encuentra realizando otras tareas o no este. Además, cabe la posibilidad de detectar un menor rendimiento durante el uso del ordenador por parte del usuario, debido a la redirección de recursos a las tareas del cliente. Algunos middleware permiten limitar la cantidad de recursos proporcionados por usuario para paliar los efectos que el software pueda provocar sobre el rendimiento. Por último, el uso continuado del software supone un desgaste extra sobre los componentes del ordenador, que a largo plazo puede alcanzar una cierta notoriedad.

## Investigadores

Para los investigadores, la computación voluntaria supone una alternativa a otros tipos de tecnologías que pueden ser utilizadas en investigaciones de todo tipo de campos. Si un proyecto o iniciativa de investigación aprovecha los recursos proporcionados por los voluntarios, obtendrá una gran cantidad de potencia de computación, además del conocimiento y seguimiento activo de dicho proyecto por estos mismos voluntarios.

### Ventajas

La mayor ventaja para los investigadores es el acceso a una potencia de computación inalcanzable de cualquier otra forma. Los proyectos de computación voluntaria con el mayor número de participantes, como Folding@home, alcanzan cifras similares e incluso superiores a las de los mayores supercomputadores del mundo. El conocimiento e interés entre el público en la computación voluntaria se incrementó durante la pandemia del COVID-19, alcanzando cifras nunca vistas de computación que ayudaron de forma considerable en las investigaciones asociadas con el virus.

### Desventajas

Una clara desventaja es la necesidad de lograr un número suficiente de voluntarios para que la inmersión del proyecto dentro la computación distribuida sea económicamente eficiente para los investigadores. Existe un gran coste asociado al desarrollo de una aplicación que permita aprovechar de manera eficiente el middleware como BOINC, además de los datos y cálculos de los voluntarios. Deben desviarse una serie de recursos para atraer y mantener voluntarios al proyecto, y mantener un flujo de información constante con estos para evitar un creciente desinterés en el proyecto. También existe un gran riesgo asociado a la aceptación de datos por parte de los voluntarios, por lo que es necesario un control y filtrado continuado de estos para evitar errores en las investigaciones. Para paliar este problema, pueden tomarse medidas como la repetición de un mismo cálculo por parte de varios ordenadores, con el objetivo de comparar los resultados obtenidos y descubrir posibles discrepancias.

## Computación voluntaria vs Computación en malla

Los conceptos de computación voluntaria y Computación en malla son dos formas de computación distribuida que intentan utilizar una gran cantidad de recursos al mismo tiempo a través de la conexión de múltiples ordenadores en la red. Ambos conceptos, aunque similares a simple vista, difieren en una serie de aspectos clave que les afecta a lo largo de todos sus distintos procesos.
La computación voluntaria se basa en la utilización de forma masiva de recursos proporcionados por una serie de voluntarios "anónimos" en el sentido de que cualquier usuario, en cualquier momento, puede participar como contribuyente. Los usuarios serán los encargados de recibir una serie de instrucciones y reportar los datos o cálculos obtenidos, jamás siendo ellos los que proporcionen instrucciones a otros usuarios de la red. Este hecho se asocia con el riesgo de la aparición de hackers o el reporte de datos falsificados por parte de los voluntarios anónimos. Además, los voluntarios no obtienen nada a cambio del trabajo realizado, más allá de una serie de créditos o estadísticas que reflejan el uso de sus recursos por parte del software. Por último, los investigadores deben lidiar con una serie de problemas como son las relaciones públicas para atraer y mantener usuarios, además de la fluctuación de la potencia dependiente del momento y del hardware de los voluntarios disponibles.
La computación en malla se enfoca en el uso de redes de ordenadores y supercomputadores, en muchos casos mejor preparadas y con un hardware más homogéneo, por parte de organizaciones para realizar un trabajo o investigaciones. En muchos casos, la computación en malla puede basarse en un trabajo de colaboración entre organizaciones donde todas las partes obtienen un beneficio tangible. Las organizaciones pueden mandarse órdenes entre sí, por lo que no limitan sus recursos a ser simples ayudantes.
La principal diferencia de la computación voluntaria con la computación en malla es la necesidad del aspecto social inherente a esta, lo cual afecta a diferentes aspectos como el desarrollo del software hasta a la publicación de las investigaciones y descubrimientos realizados.