# Berkeley Open Infrastructure for Network Computing

La Infraestructura Abierta de Berkeley para la Computación en Red (en inglés Berkeley Open Infrastructure for Network Computing), o BOINC por sus siglas en inglés, es una infraestructura para la computación distribuida, desarrollada originalmente para el proyecto SETI@home, pero que actualmente se utiliza para diversos campos como física, medicina nuclear, climatología, etc. La intención de este proyecto es obtener una capacidad de computación enorme utilizando computadores personales alrededor del mundo. Los proyectos en los que trabaja este software tienen un denominador común, y es que requieren una gran capacidad de cálculo.
BOINC ha sido desarrollado por un equipo ubicado en Space Sciences Laboratory en la Universidad de California en Berkeley, liderado por David P. Anderson, que también lideraba SETI@home. Como una plataforma "cuasi-supercomputador", BOINC tiene, al 9 de junio de 2018, alrededor de 311.742 participantes activos con 834.343 computadoras (hosts) alrededor del mundo, que procesan un promedio de 26,43 PetaFLOPS, lo que lo ubicaría como el quinto sistema más potente del mundo comparado con las supercomputadoras de la lista TOP 500. El Libro Guinness de los récords clasifica a BOINC como la red de computadoras más grande del mundo.
La plataforma puede correr bajo varios sistemas operativos, incluyendo Microsoft Windows y varios sistemas Unix-like incluyendo Mac OS X, Linux y FreeBSD. BOINC es software libre y disponible bajo la licencia GNU LGPL.

## Historia

BOINC fue originalmente desarrollado para administrar el proyecto SETI@home.
El cliente de SETI original era un programa diseñado exclusivamente para SETI@home. Como uno de los primeros proyectos de computación distribuida, nunca fue diseñado con niveles altos de seguridad. Algunos miembros intentaban engañar al proyecto para ganar más "créditos", mientras otros simplemente enviaban resultados totalmente falsos. BOINC fue diseñado, en parte, para combatir esta brecha en la seguridad.
El proyecto BOINC empezó en febrero de 2002 y su primera versión fue publicada el 10 de abril de 2002. El primer proyecto basado en BOINC fue Predictor@home (Artículo en inglés), lanzado el 9 de junio de 2004.
BOINC fue financiado por la agencia gubernamental National Science Foundation a través de becas desde 2002 hasta 2015. Actualmente no cuenta con financiamiento externo y depende de voluntarios.

## Diseño y estructura

BOINC está diseñado para ser una plataforma libre para cualquiera que quiera crear un proyecto de computación distribuida.
En esencia, BOINC es un software que puede utilizar los ciclos que no se ocupan de la CPU o GPU de un computador para hacer cómputos científicos - lo que un individuo no ocupa de su computador, BOINC lo utiliza. A finales del 2008, el sitio web oficial de BOINC anunció que NVIDIA (un fabricante importante de GPUs) había desarrollado un sistema llamado CUDA que ocupa las GPUs para el cómputo científico. Con la ayuda de NVIDIA, algunos proyectos basados en BOINC (como SETI@home, MilkyWay@home) ahora tienen aplicaciones que corren en las GPUs de NVIDIA ocupando CUDA. En octubre del 2009, BOINC agregó soporte para la familia de GPUs ATI/AMD. Estas aplicaciones corren desde 2x a 10x más rápido que las aplicaciones que corren solamente en la CPU.
BOINC consiste en un servidor y un cliente que se comunican para distribuir, procesar, y retornar unidades de trabajo (mejor conocidas en inglés como workunits).

### Estructura

En terminología de BOINC, un proyecto es una entidad,organización o grupo de investigación que utiliza BOINC para realizar sus cómputos. Cada proyecto es autónomo e independiente y cuenta con un servidor encargado de distribuir trabajos a dispositivos voluntarios. El software del servidor es proporcionado por BOINC. El complejo de servidores de un proyecto BOINC gira en torno a una base de datos relacional que almacena descripciones de aplicaciones, plataformas, versiones, unidades de trabajo, resultados,cuentas, equipos y más. En respuesta a la vasta heterogeneidad de los dispositivos que pueden participar en un proyecto, BOINC provee un marco de trabajo para la construcción de programas destinados para combinaciones específicas de software y hardware. A éstos se les conoce como versiones de aplicaciones. La colección de estas versiones para un programa en particular se conoce como aplicación. Los proyectos pueden asociarse a un sitio web dedicado al público. El software de BOINC facilita scripts web para el registro y autenticación de voluntarios, tableros de mensajes,perfiles, tableros de líderes, medallas, y otras funciones comunitarias e incentivos. Un proyecto se identifica por el URL de su sitio web.

### Interfaz de usuario

BOINC puede ser controlado a distancia mediante llamadas a procedimiento remoto (RPC), desde la línea de comandos, o desde el administrador de cuentas de BOINC.
El Mánager de BOINC actualmente cuenta con 2 modos de "vista": La Vista Avanzada (Advanced View) y la GUI Simplificada (Simplified GUI). La Vista Grid fue borrada desde la versión 6.6.x por ser redundante. La apariencia de la GUI Simplificada puede ser personalizable mediante skins y cada usuario puede hacer su propio diseño.

### Administradores de cuentas

Un administrador de cuenta de BOINC es una aplicación que administra múltiples cuentas de proyectos BOINC a través de múltiples computadores y sistemas operativos.
Los administradores de cuenta (Account managers en inglés) han sido diseñados para los que son nuevos en BOINC o tienen varios computadores trabajando para varias cuentas. El concepto de administrador de cuentas fue ideado y desarrollado por GridRepublic junto con BOINC. Entre los administradores actuales se encuentran:
* BAM! (BOINC Account Manager) (El primero que hubo, publicado el 30 de mayo de 2006)
* GridRepublic (Sigue la idea de mantener todo simple y ordenado)
* Dazzler (Account Manager Opensource, pensado para gestionar recursos propios)

### Sistema de créditos

El sistema de créditos está diseñado para evitar las trampas en la validación de resultados para la posterior entrega de créditos falsos. Existen varias razones por la que es necesario un sistema fiable de créditos:
* El sistema de créditos sirve para asegurarse que los resultados obtenidos son tanto científicamente como estadísticamente válidos.
* Los proyectos de computación distribuida son casi enteramente un esfuerzo voluntario. Por esta razón los proyectos son dependientes de un conjunto mezclado de variables complejas de nuevos usuarios, usuarios veteranos, y usuarios retirados.

## Funcionamiento

Se identifica con una llave maestra conocida, la cual es el URL de su página web el cual también tiene la funcionalidad de ser un directorio de servidores, en los cuales el voluntariado registra su proyecto con una o más aplicaciones que pueden variar según sea el caso. El conjunto de servidores de un proyecto en BOINC se basa en una base de datos relacional, en la cual se almacenan aplicaciones, plataformas, versiones, unidades de trabajo, resultados, cuentas, equipos, etc. Las funciones del servidor se llevan a cabo por un conjunto de servicios web y procesos Daemon (procesos que se ejecutan en segundo plano). En esta parte se cuentan con servidores de programación que son los responsables de emitir los trabajos y administrar los reportes de los resultados y los servidores de datos que son los que manejan los archivos con base en un certificado el cual les garantiza que solo puedan cargar archivos con las características deseadas como legitimidad y tamaño. Para poder realizar la descarga de los archivos se realiza mediante el protocolo de HTTP, teniendo la ventaja de que BOINC tiene distintas herramientas como scripts o interfaces, la cuales le permiten al científico crear, detener y consultar proyectos, además de agregar nuevas aplicaciones, plataformas y versiones de aplicaciones, creando unidades de trabajo y monitoreando el rendimiento del servidor.

## Software

El software requerido para donar tiempo de proceso (prestar la unidad de procesamiento), debe ser descargado desde la página oficial de BOINC, donde se puede elegir la plataforma de la descarga y el tipo de arquitectura que posea el hardware. También se puede disponer del código fuente del software cliente, para modificarlo a gusto del usuario.
Una vez descargado el software, el usuario debe suscribirse a un proyecto según sea su interés, tan sólo registrando su correo electrónico y una contraseña para acceder a sus estadísticas. Al hacerlo, se abrirá una ventana en el navegador y se podrá inscribir a un grupo de usuarios o personalizar la cuenta en el proyecto, para determinar el tiempo de funcionamiento o el espacio de disco duro que dispone el proyecto en el equipo del usuario.

## Proyectos que usan BOINC

* Unam@home es un programa dirigido por el Dr. Alejandro Velázquez Mena, que en octubre de 2016 encontró el número primo más grande de ese momento, con una computadora Windows 7 en un tiempo de dieciocho minutos. Este tiempo fue posible gracias a que la computadora estaba conectada a la plataforma BOINC, red de cómputo distribuido. Otro de los proyectos que se trabajan en Unam@home es Serpent que es dirigido por Juan Luis Francois Lacouture, en el que se busca modelar y analizar partículas nucleares.
* SETI@home es un proyecto de computación distribuida que funciona en la plataforma informática Berkeley Open Infrastructure for Network Computing (BOINC), desarrollado por el Space Sciences Laboratory, en la Universidad de California en Berkeley. SETI es un acrónimo en inglés para Search for extraterrestrial intelligence (Búsqueda de inteligencia extraterrestre). Su propósito es analizar señales de radio buscando señales de inteligencia extraterrestre y es una de las muchas actividades llevadas a cabo como parte de SETI.
* Climateprediction.net es un proyecto de la Universidad de Oxford el cual busca cuantificar y reducir las incertidumbres en las predicciones climatológicas a largo plazo basadas en simulaciones de computadora. Para lograrlo, cuenta con una enorme cantidad de simulaciones de diferentes escenarios. La aplicación Climatepredicton.net produce un archivo de salida de 2 GB por cada simulación de 50 años (la cual toma alrededor de tres meses de cálculos para una PC).
* Einstein@home es un proyecto en el cual participan investigadores de la Universidad de Wisconsin, la Universidad de California en Berkeley, el Instituto de Tecnología de California, el Observatorio LIGO de Hanford, la Universidad de Glasgow y el Instituto Albert Einstein. Su objetivo es detectar ciertos tipos de ondas gravitacionales, como las provenientes de estrellas de neutrones giratorias, que solo se pueden detectar usando tecnologías de filtro altamente selectivas que requieren un enorme poder computacional.
* UCB/Estudio de los recursos de Internet de Intel es un proyecto del departamento de Ciencias de la Computación de la Universidad de California en Berkeley en colaboración con Laboratorio de Investigación de Intel en Berkeley; busca estudiar la estructura y el desempeño del Internet, así como el desempeño, la confianza y las características de uso de PCs, con el objetivo de entender qué recursos están disponibles para servicios peer-to-peer.
* Predictor@home es un proyecto que tiene como objetivo estudiar el comportamiento de las proteínas utilizado CHARMM, mediante un programa de FROTRAM de dinámica y mecánica de cromolecular.
* Plegable@en es un proyecto realizado por la universidad de Stanford el cual busca estudiar el plegamiento, mal plegamiento, agregación y enfermedades relacionadas con las proteínas, haciendo uso de la computación distribuida para realizar simulaciones a escalas de tiempo significativas.
* Clima@home es un proyecto muy similar al antes mencionado, solo que este utiliza el modelo (CCSM) de NCAR, que en conjunto con Climaprediccion.net maximizan sus recursos buscando que el esfuerzo sea mínimo y permitiendo la comparación den los modelos.
* Proyecto CERN es un proyecto realizado en fortran y busca simular el comportamiento de gran colisionador de hadrones en función de los parámetros de los imanes superconductores individuales.