Amibian.js: Emulando un Commodore Amiga en un clúster ODROID-XU4

Amibian es lo todo que necesitas para convertir tu ODROID en un Amiga. Es una imagen de tarjeta SD muy liviana apta para tarjetas SD de 2 GB en adelante. Está diseñada para ofrecerte la mejor experiencia de Amiga que puedes conseguir sin tener un Amiga real. Amibian te va a permitir recordar, revivir y redescubrir el placer de tener un Amiga fácilmente con un hardware barato y un esfuerzo mínimo.

A principios de este mes, anuncié que el hardware oficial estaría basado en los SBCs (ordenadores de placa reducida) de la línea ODROID-XU4 de Hardkernel que ofrecen buen rendimiento, estabilidad excepcional y bajo consumo de energía a un precio bastante razonable. También comenté que la primera configuración de Amibian.js consistiría en cinco placas ODROID-XU4 funcionando conjuntamente en un clúster, lo que significa que la carga de trabajo queda dividida entre estas cinco placas para lograr una alta eficiencia y que se compartan los recursos disponibles.

Amibian.js está ganando cada vez más adeptos a medida que más y más desarrolladores, arquitectos de sistemas integrados, jugadores y aficionados a los ordenadores retro descubren el proyecto. ¡Tengo que admitir que estoy muy contento con lo que estamos desarrollando!

Sin embargo, al igual que ocurre con cualquier nueva tecnología o invento, existen dos trampas muy comunes en las que la gente suele caer: La primera es subestimar seriamente una tecnología. Sin duda, JavaScript incita a ello, porque hace solo una década este lenguaje era poco más que un juguete. Desde entonces, JavaScript ha evolucionado hasta convertirse en el lenguaje de programación más ampliamente usado en el todo el mundo, y los motores de tiempo de ejecución como el V8 de Google ejecutan el JavaScript casi tan rápido como el código binario compilado. "Nativo" viene a ser un código máquina como el producido por un compilador C / C ++, compilador Pascal o cualquier otra cosa que produzca programas que se ejecuten bajo Linux o Windows.

Es necesario llevar a cabo algunos ajustes, especialmente por los programadores tradicionales que no han prestado demasiada atención hacía donde van los navegadores, pero hace mucho que está entre nosotros el JavaScript interpretado. El JavaScript moderno primero se analiza, se tokeniza y se compila en bytecodes. Luego, estos bytecodes se compilan en JIT ("justo a tiempo", lo que significa que la compilación se realiza dentro del navegador) sobre un código de máquina real utilizando técnicas de vanguardia (LLVM). Así que el JavaScript del 2018 no se parece para nada al JavaScript del 2008.

La segunda trampa en la que puedes caer es en exagerar lo que puede hacer una nueva tecnología y añadir posibilidades y expectativas a un producto que simplemente no se puede presentar. Para mí es muy importante que la gente no caiga en ninguna de las dos trampas, y que todo el mundo conozca lo que realmente es Amibian.js y lo que puede llegar ofrecer, así como lo que no. Roma no se construyó en un día, y es de sabios estudiar todos los factores antes de emitir un juicio.

Me siento muy afortunado de ver cómo las personas han apoyado financieramente el proyecto a través de Patreon y, como tal, siento que es mi deber documentar y explicar todo cuanto me sea posible. Soy programador y a menudo olvido que no todo el mundo entiende de lo que estoy hablando. Todos somos humanos y cometemos errores. Esperemos que este artículo dibuje una imagen más clara de lo que es Amibian.js y de lo que estamos desarrollando. El proyecto está dividido en dos fases: una primera, donde terminaremos Amibian.js; y una segunda, donde escribiremos un clon de Visual Studio que se ejecute totalmente en el navegador.

¿Qué diablos es Amibian.js?

Amibian.js es un conjunto de servicios y librerías que combinados crean un sistema operativo portátil que se procesa en HTML5. Un sistema que ha sido escribió utilizando la tecnología web fácilmente disponible, y fue diseñado para ofrecer funcionalidades de escritorio avanzadas con aplicaciones web.

Los servicios que conforman Amibian.js se diseñaron para ser usados sobre una delgada capa de Linux, donde Linux se ocupa del hardware, los controladores y los aspectos básicos que damos por sentado. No tiene sentido intentar escribir un kernel mejor en 2018, porque nunca vas a alcanzar a Linus Torvalds. Es mucho más interesante llevar la tecnología web moderna a los límites absolutos, y desarrollar un sistema que sea verdaderamente portátil y distribuido.

Figura 1: Amibian.js está creado en Smart Pascal y compilado con JavaScript

La capa de servicio está escrita completamente en node.js (JavaScript), lo cual garantiza el mismo comportamiento independientemente de la plataforma del host. Uno de los beneficios de usar la tecnología web es que puedes copiar físicamente todo el sistema de una máquina a otra sin necesidad de tener que realizar cambios. Por lo tanto, si tienes un sistema Amibian.js ejecutándose en tu PC x86 y copias todos los archivos en un ordenador ARM, ni siquiera tiene que volver a compilar el sistema. Simplemente arranca los servicios y estarás de vuelta en la partida.

Ahora, antes de descartar esto como "otro simple modelo web", recuerda lo que he dicho sobre el JavaScript: el JavaScript del 2018 no es el JavaScript del 2008. Ningún otro lenguaje en el planeta ha visto tanto desarrollo como el JavaScript, y ha evolucionado desde un "juguete de navegador" hasta convertirse en el lenguaje de programación más importante de nuestra era.

Así que Amibian.js no es un simple modelo superficial de un ordenador de escritorio (el señor sabe que hay muchos de esto online). Ejecuta tecnologías avanzadas como el mapeo de sistemas de archivos remotos, un protocolo de mensajes orientado a objetos (Ragnarok), RPCS (pila de invocación de llamada a procedimiento remoto), funciones de códec de video y mucho más, todo ello hecho con JavaScript.

De hecho, una de las demos con las que se envía Amibian.js incluye el Quake III, compilado nuevamente en JavaScript. Ofrece 120 fps sin fallos (el navegador está limitado a 60 fps) y hace uso completo de las tecnologías estándar de navegador (WebGL). En efecto, el JavaScript del que estamos hablando es bastante puntero. La mayor parte de Amibian.js está compilado como "Asm.js", lo que significa que el tiempo de ejecución del V8, el código que ejecuta JavaScript dentro del navegador o como un programa bajo node.js, compilará JIT en un código de máquina altamente eficiente, que es por ello que Amibian.js puede hacer cosas que la gente ni si quiera imagina.

¿De qué se compone Amibian.js?

Amibian.js tiene muchos componentes, pero podemos dividirlo en dos grandes categorías:

  • Un cliente de escritorio HTML5
  • Un servidor de sistema y varios procesos secundarios

Estas dos categorías guardan exactamente la misma relación que el escritorio X y el kernel de Linux. El cliente se conecta al servidor, activa determinados procedimientos para realizar alguna tarea y luego representa visualmente la respuesta. Es idéntico a cómo el escritorio X llama a las funciones en el kernel o a una de las librerías de Linux. La diferencia entre un sistema operativo tradicional, basado en código máquina y nuestra variante web, es que nuestra versión no tiene que preocuparse por el hardware. También podemos asignar diferentes roles a Amibian.js. Trataremos esta cuestión más adelante.

Figura 2: Disfrutar de aplicaciones en la nube es fácil con Amibian.js. Aquí tienes Plex, un sistema basado en el mismo concepto que Amibian.js

Para que así conste: estoy intentando evitar un simple sistema operativo, de lo contrario habría escrito el sistema usando un lenguaje de programación nativo como C u Object Pascal. Así que no uso JavaScript porque me falta habilidad en los idiomas nativos, estoy usando JavaScript porque el código nativo no es aplicable a las tareas que resuelve Amibian.js. Si usara un back-end nativo, podría haber terminado el proyecto en un par de meses, pero un servidor nativo no podría replicarse entre las instancias de la nube porque el chipset y la CPU serían factores determinantes.

El servidor Amibian.js no es un programa único. El back-end para Amibian.js se compone de varias aplicaciones de servicio (demonios en Linux) que ofrecen características específicas. La funcionalidad combinada de estos servicios conforma "el kernel Amibian" en nuestra analogía con Linux. Puede pensar en estos servicios como archivos de librerías en un sistema tradicional, y los programas que están escritos para Amibian.js pueden utilizarlos para una amplia gama de tareas. Puede ser tan simple como leer un archivo, o tan complejo como registrar un nuevo usuario o solicitar derechos de administrador.

La mayor fortaleza de Amibian.js es que está diseñado para ejecutarse en un clúster, utilizando tantos núcleos de CPU como le sea posible. También está diseñado para escalar, lo que significa que se replicará y dividirá el trabajo entre las diferentes instancias. Aquí es donde las cosas se ponen interesantes, ya que un clúster Amibian.js no necesita el hardware más moderno e increíble que exista para ofrecer un buen rendimiento. Puedes montar un clúster con los viejos PCs de tu oficina o con un puñado de placas integradas. Un ODROID-XU4, una Raspberry Pi o una Tinker Board son candidatos perfectos.

¿Por qué no seguir adelante con Linux?

Es una pregunta aceptable, y aquí es donde entran en juego los roles que mencioné anteriormente. Como desarrollador de software, muchos de mis clientes trabajan con dispositivos integrados y sistemas Kiosco. Tenemos empresas que fabrican routers y decodificadores, cajas NAS de diversa complejidad, sistemas de ticket para trenes y autobuses; Y todos ellas terminan teniendo que resolver las mismas necesidades.

Lo que todos y cada uno de estos fabricantes tiene en común es la necesidad de un sistema de escritorio web que pueda adaptarse a un programa específico. Cualquier novato puede escribir una aplicación web, pero cuando necesitas un acceso seguro al sistema de archivos, APIs unificadas que puedan delegar señales a Amazon, Azure o al servidor de tu empresa, las cosas se complican de repente. Incluso cuando tiene todo eso, aún necesitas un modelo de aplicación sólido y apto para la informática distribuida. Es posible que tengan 1 stand de ticket, o 10.000 repartidos por todo el país. No hay sistemas disponibles que estén diseñados para lidiar con la tecnología web a esa escala, Todavía.

Veamos un par de escenarios de la vida real que he encontrado. Estoy seguro de que identificarás una necesidad común. Existen algunos roles que Amibian.js puede asumir para ayudar a presentar una solución con rapidez. También te dará algunas ideas de las posibilidades económicas.

Ten en cuenta que estamos hablando de JavaScript, no de código nativo. Existen muchas soluciones nativas por ahí, pero aquí la cuestión principal es olvidarse de la CPU, los chips, y el objetivo es tener un sistema flotante independientemente de lo que haya debajo.

  • Cuando quieres cambiar algunas configuraciones en tu router, inicias sesión en tu router. Éste contiene un pequeño servidor Apache (o algo similar) que te permite realizar todo su mantenimiento a través de una interfaz web. La interfaz web suele ser bastante superficial, es un fastidio trabajar con ella, y le suponen auténticos quebraderos de cabeza a los desarrolladores actualizarla, ya que está conectada a un módulo Apache nativo que depende 100% del firmware. Cada proveedor termina reinventando la rueda una y otra vez..
  • Cuando visitas un gran museo observas las pantallas. Un museo necesita mostrar contenido multimedia, preferiblemente en dispositivos con capacidad táctil, a lo largo de diferentes objetos expuestos. El coste de hacer que un desarrollador cree aplicaciones nativas que muestren contenidos multimedia, reproduzca películas y ofrezca retroalimentación visual es enorme. Esta es la razón por la que la mayoría de los museos adoptan la tecnología web para gestionar la interacción y la presentación de los contenidos multimedia, una vez más reinventando la rueda con diferentes niveles de éxito.
  • Los hoteles también tienen más o menos exactamente la misma necesidad, pero a menor escala, especialmente los hoteles más grandes donde el vestíbulo cuenta con puestos de información, y cada habitación muestra una interfaz web a través del televisor.
  • Los centros comerciales se enfrentan al mismo desafío y, dependiendo del tamaño, pueden necesitar cualquier cosa, desde uno hasta cien nodos.
  • Las escuelas gastan millones en software de formación y lenguajes de programación cada año. Amibian.js puede ofrecer ambos, lo cual permite a las escuelas pagar solo por el mantenimiento y la adaptación; el producto en sí es gratuito. ¡Los niños obtienen el beneficio de aprender lenguajes tradicionales y disfrutar del feedback visual instantáneo! Pueden aprender Basic, Pascal, JavaScript y C. Creo firmemente que los lenguajes clásicos les ayudarán a ser mejores programadores a medida que vayan evolucionando.

Probablemente estés empezando a ver el denominador común que existe: todos necesitan un sistema de escritorio basado en web, que pueda ejecutar aplicaciones multimedia complejas basadas en HTML5 y que proporcione la misma exhaustividad que un sistema operativo nativo, lo cual es bastante difícil de lograr con solo JavaScript.

Amibian.js proporciona una base rica de más de 4000 clases que los desarrolladores pueden usar para escribir aplicaciones voluminosas, complejas y ricas en contenido multimedia (consulta Smart Mobile Studio más abajo). Al igual que Linux y Windows que proporcionan una gran cantidad de librerías y funciones para el desarrollo de aplicaciones nativas, Amibian.js aspira a proporcionar lo mismo para la nube y los sistemas integrados. Como su nombre lo indica, Amibian.js tiene sus orígenes en el pasado en la máquina que definió el contenido multimedia, el Commodore Amiga. El parentesco es más que simplemente visual: Amibian.js usa la misma arquitectura de sistema porque creemos que es uno de los mejores sistemas jamás diseñado.

Si JavaScript es tan pobre, ¿por qué deberíamos confiar en ti para que nos ofrezcas tanto?

En primer lugar, no estoy vendiendo nada. No es que este proyecto sea algo que me vaya a aportar un montón de dinero. Solicito soporte durante el período de desarrollo porque quiero destinar el suficiente y adecuado tiempo para ello, pero cuando termine Amibian.js será gratis para todo el mundo (LGPL). Y también lo estoy escribiendo porque es algo que necesito y que no he visto en ningún otro sitio. Creo que tienes que escribir software para ti mismo, de lo contrario la calidad se verá mermada.

En segundo lugar, escribir Amibian.js en JavaScript puro y duro con la misma cantidad de funciones y exhaustividad llevaría años de trabajo. La razón por la que puedo ofrecer tanta funcionalidad en tan poco tiempo es porque uso un sistema de compilación llamado Smart Mobile Studio. Éste me ahorra meses y años de desarrollo, pudiendo usar todos los beneficios de la OOP (programación orientada a objetos).

Antes de empezar el proyecto Amibian.js, pasé aproximadamente unos 9 años creando Smart Mobile Studio. Smart no es un proyecto en solitario, muchas personas han participado en el mismo. El producto proporciona un compilador, IDE (editor y herramientas) y una extensa librería en tiempo de ejecución de clases precompiladas (aproximadamente 4000 clases listas para usar, o bloques de compilación).

Figura 3 - ¡Escribir servicios node.js a gran escala en Smart es fácil, divertido y muy eficiente!

A diferencia de otros sistemas de desarrollo, Smart Mobile Studio compila en JavaScript en lugar de código máquina. Hemos dedicado mucho tiempo para asegurarnos de usar el OOP más adecuado, y hemos pasado más de tres años perfeccionando un entorno de trabajo de aplicación visual con la misma exhaustividad que VCL o FMX (los principales entornos de trabajo visuales para C ++ Builder y Delphi).

El resultado es que puedo derribar en un solo día una gran aplicación en la que un programador de JavaScript normal a pasado semanas trabajando.

Smart Mobile Studio utiliza el lenguaje Object Pascal, un dialecto que es aproximadamente un 70% compatible con Delphi. Delphi es excepcionalmente adecuado para escribir grandes aplicaciones de manejo de datos. También es apto para sistemas integrados y servicios de sistemas de bajo nivel. En pocas palabras, es mucho más fácil mantener 50.000 líneas de código pascal de objetos, que 500.000 líneas de código JavaScript.

En Amibian.js, tanto la capa de servicio como la aplicación cliente visual HTML5, están escritas totalmente usando Smart Mobile Studio. Esto me proporciona, como desarrollador principal de ambos sistemas, una gran ventaja: ¿quién lo conoce mejor que el propio diseñador, verdad? Además, puedo escribir código que verdaderamente sea OOP (clases, herencia, interfaces, métodos virtuales y abstractos, clases parciales, etc.), porque nuestro compilador crea algo llamado VMT (tabla de métodos virtuales) en JavaScript.

El JavaScript tradicional no tiene OOP, tiene algo llamado prototipos. Con Smart Pascal puedo importar código de la comunidad de Object Pascal, componentes y librerías escritas en Delphi o Freepascal, que varían en cientos de miles. Delphi solo tiene una enorme librería de códigos para elegir. Ha sido un conjunto de herramientas muy popular por el tiempo (C es tres años más antiguo que pascal).

Pero, ¿Cómo usaría Amibian.js?

Amibian.js se puede configurar y utilizar de cuatro formas diferentes:

  • Como un autentico escritorio, arrancar directamente en Amibian.js en pantalla completa.
  • Como un servicio en la nube, al que se accede a través de cualquier navegador moderno.
  • Como un front-end de Kiosko o NAS.
  • Como un sistema local sobre tu sistema operativo existente. Un script batch lo iniciará y podrías acceder a él introduciendo en tu navegador https://127.0.0.1:8090.

De modo que la respuesta breve es sí, lo puedes instalar. Pero es lo mismo que instalar Chrome OS. No es como una aplicación que acaba de instalar en tu maquina Linux, Windows o OSX. El objetivo principal de Amibian.js es tener un sistema agnóstico que no dependa de la plataforma. Algo de lo que no tienes que preocuparte si estás utilizando ARM, x86, PPC o Mips como CPU de preferencia. Los desarrolladores sin duda lo instalarán en las máquinas que tienen. Amibian.js no es intrusivo y no afecta ni toca archivos fuera de su propio ecosistema. Sin embargo, el típico no-programador probablemente lo instalará en una máquina dedicada (o varias) o simplemente la implementará en su NAS doméstico.

La primera forma de disfrutar Amibian.js es instalarlo en un PC o dispositivo ARM. Se ofrecerá una imagen de disco a los fanáticos para que lo puedan poner en funcionamiento lo antes posible. Esta imagen de disco estará basada en una configuración muy liviana de Linux, la suficiente para que todos los controladores funcionen (pero no el escritorio X). Arrancará todos los servicios de node.js y finalmente iniciará una página web a pantalla completa (basada en Chromium) que mostrará el escritorio. Este es el método que la mayoría de los usuarios preferirán para trabajar con Amibian.js.

La segunda forma es usarlo como un servicio en la nube. Instala Amibian.js como he mencionado anteriormente, pero hazlo en Amazon o Azure. De esta manera, puede iniciar sesión en su escritorio utilizando únicamente un navegador web. Esta es una forma muy rentable de disfrutar Amibian.js ya que el alquiler de una instancia virtual es bastante asequible y el almacenamiento del que se dispone es abundante.

La tercera opción es para desarrolladores. Amibian.js es un sistema de escritorio, lo que significa que está diseñado para alojar aplicaciones más complejas. Normalmente tú simplemente insertarías un sitio web externo en un IFrame, pero Amibian.js no es tan primitivo. El alojamiento de aplicaciones externas requiere que escribas un archivo de seguridad expresamente, aunque lo más importante: la aplicación debe interactuar con el escritorio a través del puerto de mensajes de la ventana. Este es un objeto especial que se envía a la aplicación para establecer la comunicación entre ambos, la única forma de que la aplicación acceda a cosas como el sistema de archivos y la funcionalidad del servidor, es a través de este puerto de mensajes.

La llamada a las funciones a nivel de "kernel" desde una aplicación alojada se realiza únicamente a través del puerto de mensajes que hemos mencionado anteriormente. Los datos reales del mensaje están en JSON y deben cumplir con la especificación del protocolo del cliente Ragnarok. Esto no es tan difícil como parece, pero Amibian.js se toma muy en serio la seguridad, de modo que las aplicaciones que intenten causar daños se cerrarán rápidamente.

Has mencionado aplicaciones alojadas, ¿te refiere a sitios web?

Tanto sí como no: Amibian.js admite 3 tipos de aplicaciones:

  • Aplicaciones comunes basadas en HTML5/JS, o "sitios web", como muchos las llamarían. Pero como he dicho anteriormente, tienen que establecer un diálogo con el escritorio antes de que puedan hacer algo útil.
  • Aplicaciones híbridas donde la mitad se instalan como un servicio de node.js, y la otra actúan como una aplicación HTML5 normal. Este es el mejor modelo de programa, los desarrolladores básicamente escriben ambos: un servidor y un cliente y luego lo implementan como un paquete único.
  • Aplicaciones bytecode compiladas en LDEF, un lenguaje ensamblador inspirado en 68k que esta compilado en JIT por el navegador (comúnmente llamado "asm.js") y se ejecuta extremadamente rápido. La máquina virtual LDEF es un subproyecto en Amibian.js

La última opción, bytecodes, es un poco como Java. Una parte del proyecto Amibian.js es un compilador y un sistema en tiempo de ejecución llamado LDEF.

Figura 4 - El ensamblador LDEF de Amibian.js, en este caso lista opcodes y desmonta un método

La primera parte del proyecto Amibian.js es implementar el escritorio y los servicios back-end. La segunda parte del proyecto es crear la primera plataforma de desarrollo basada en la nube del mundo. Un completo clon de Visual Studio, si quieres, que le permita a cualquiera persona escribir aplicaciones nativas, móviles y en la nube directamente desde el navegador.

LDEF admite varios lenguajes, puedes escribir programas en Object Pascal, Basic y C. El dialecto Basic es especialmente divertido para trabajar, ya que es una reimplementación de BlitzBasic, con muchos extras adicionales. Los desarrolladores de Amiga sin duda recordarán BlitzBasic, ya fue utilizado para crear algunos excelentes juegos en los años 80 y 90. Es ideal para juegos y programación multimedia y, sobre todo, es muy fácil de aprender.

Los desarrolladores más avanzados pueden disfrutar de Object Pascal (leer: Delphi) o un subconjunto de C/C ++. Ten en cuenta: este IDE está diseñado para aplicaciones a gran escala, no simples fragmentos de código. El objetivo final de Amibian.js es mover todo el ciclo de desarrollo a la nube y alejarlo del escritorio. Con Amibian.js puede escribir una buena "app" en BlitzBasic, ejecutarla directamente en el navegador o compilarla en el servidor e implementarla en tu teléfono Android como una aplicación real compilada de forma nativa. Cualquier idea sobre un "escritorio simulado para HTML" debe dejarse firmemente a un lado. No estoy jugando con este producto y las apuestas son muy reales.

Pero, ¿por qué no usar ChromeOS?

Hay muchas razones, aunque la más importante es la independencia del conjunto de chips. Chrome OS es un sistema nativo, lo que significa que sus servicios centrales están escritos en C / C ++ y están compilados en código máquina. El principio fundamental de Amibian.js es ser 100% independiente de la plataforma, y "no se permite código nativo". Es por esto que todo el back-end y la capa de servicio está orientado a node.js. Esto garantiza el mismo comportamiento independientemente del procesador o sistema host (siendo Linux el host por defecto).

Node.js tiene la ventaja de ser 100% independiente de la plataforma. Descubrirás que node.js funciona para ARM, x86, Mips y PPC. Esto significa que puedes aprovechar cualquier hardware disponible. Incluso puede reutilizar ordenadores antiguos que ya no tiene soporte y usarlos para ejecutar Amibian.js.

Una segunda razón es la siguiente: Chrome OS puede ser gratuito, pero esta tan abierto como Google quiere que lo esté. Chrome OS no es simplemente algo que coges y empiezas a modificar. La dependencia de los lenguajes de programación nativos, las cadenas de herramientas del compilador y un gran conjunto de librerías lo hacen extremadamente especifico. Además, tiene totalmente blindadas las partes más interesantes, en concertó, los servicios back-end. Es francamente aburrido y presenta muchas limitaciones para cualquier uso práctico, excepto para Google y sus socios tecnológicos, claro está.

Quería un sistema por el que pudiera moverme, que pudiera ejecutarse en la nube sobre económicos SBCs. Un sistema que permitiese escalar de 10 a 1000 usuarios, un sistema que soporte clústeres y se pueda instalar en múltiples máquinas dentro de un swarm.

Un sistema que cualquier persona con conocimientos de JavaScript pueda usar para crear nuevos y brillantes sistemas, que se pueda expandir fácilmente y servir como base para sustanciosas aplicaciones multimedia.

¿Qué es esto de Amiga, no es una máquina antigua?

En términos de computación sí, pero también lo es Unix. Viejo no significa que automáticamente sea malo, en realidad significa que ha sabido adaptarse y ha sobrevivido a los desafíos más allá de su diseño inicial. Aunque la mayoría de nosotros recordamos e Amiga por sus juegos, yo en particular la recuerdo por su elegante y potente sistema operativo. Un sistema tan flexible que aún continua utilizandose en todo el mundo, 33 años después de que la máquina llegase al mercado. Esto es todo un logro.

Figura 5: el sistema operativo original de Amiga, ¡no está nada mal para ser un sistema operativo de 33 años! Fue y sigue estando muy por delante de todos los demás. Un testimonio de la creatividad de sus autores.

Amibian.js, tal y como su nombre indica, toma prestados elementos en masa de la arquitectura del sistema operativo Amiga. Sencillamente, porque la forma en que se organiza el sistema operativo Amiga y la forma en que se aborda la informática en el Amiga es brillante. Amiga OS es mucho más intuitivo y fácil de entender que Linux y Windows. Es un sistema que puedes aprender a usar completamente con solo un par de días explorando y sin necesidad de recurir a manuales.

Pero las similitudes no son solo visuales o a nivel de aquitectura. ¿Recuerdas que comenté que las aplicaciones alojadas pueden acceder y usar los servicios de Amibian.js? Estos servicios implementan la mayor cantidad posible de funciones originales del Kernel ROM. Naturalmente, no puedo exportarlo todo, porque realmente no es necesario para Amibian.js. Cosas como los controladores del dispositivo no sirven para Amibian.js porque Amibian.js habla con node.js, y node habla con el sistema real, que a su vez gestiona los dispositivos de hardware. Pero la forma en las que crean ventanas, los controles visuales, los eventos de enlace y la creación de aplicaciones modernas, basada en eventos las he conservado lo mejor que he podido.

¿Cómo arranca esta cosa?

Si has configurado una máquina dedicada con Amibian.js, la secuencia de inicio es la misma que la de Linux, excepto que los servicios de node.js se ejecutan como procesos en segundo plano (demonios o servicios que son llamados), el servidor central se inicia y luego se configura una vista HTML5 en pantalla completa que muestra el escritorio.

Pero esto es solo para iniciar el sistema. Tu secuencia de inicio personal se ocupa de tu cuenta, tus preferencias y adaptaciones, que se inician cuando te conectas al sistema.

Cuando inicias sesión en tu cuenta de Amibian.js, no importa si solo lo haces localmente en un PC, un clúster distribuido, o a través del navegador en tu cuenta de la nube, suceden varias cosas:

  • El cliente (página web si lo deseas) se conecta al servidor mediante WebSocket.
  • El inicio de sesión es validado por el servidor.
  • El cliente empieza a cargar los archivos de preferencias a través del sistema de archivos asignado y luego los aplica al escritorio.
  • Un archivo con un script de secuencia de inicio se carga desde tu cuenta y luego se ejecuta. El motor de tiempo de ejecución de shell-script está integrado en el cliente, al igual que la ejecución del REXX.
  • El script de inicio pondrá en marcha las configuraciones, creará enlaces simbólicos (cesiones), montará dispositivos externos (Dropbox, Google drive, ubicaciones de FTP, etc.)
  • Cuando finalice, los programas que haya dentro de la carpeta ~ / WbStartup se iniciaran. Estos pueden ser tanto visuales como no visuales.

Como puedes ver, Amibian.js no es un modelo o escritorio "falso". Implementa todas las funciones avanzadas que esperas de un escritorio "real". La asignación del sistema de archivos es especialmente avanzada, donde los datos del archivo se cargan a través de controladores especiales; controladores que actúan como un puente entre un servicio de almacenamiento (un disco duro, un recurso compartido de red, un host FTP, Dropbox o lo que sea) y el escritorio. Los desarrolladores pueden agregar tantos controladores como quieran. Si tienen tu propio sistema de almacenamiento casero en tus servidores, pueden implementar un controlador para él. Esto garantiza que Amibian.js pueda acceder a cualquier dispositivo de almacenamiento, siempre que la unidad cumpla con el estándar del controlador.

En resumen, puede crear, eliminar, mover y copiar archivos entre dispositivos tal como lo haces en el escritorio de Windows, OSX o Linux. Y las aplicaciones alojadas que se ejecutan dentro de tu propia ventana también pueden solicitar acceso a estos controladores y trabajar con el sistema de archivos (¡y mucho más!).

¿Puede Amibian.js realmente ejecutar programas reales?

Amibian.js cuenta con una versión JavaScript de UAE (Unix Amiga Emulator). Se trta de una bifurcación de SAE (scripted Amiga Emulator) que ha sido altamente optimizada para la web. No solo está escrita en JavaScript sino que funciona de una manera brillante y, por lo tanto, nos permite iniciar un sistema Amiga real. Asi que, si tienes algunas imágenes de disquete con juegos que te gusta, estos se ejecutarán perfectamente en el navegador. Incluso yo he llegado a arrancar una imagen de disco duro de 2 gigabytes.

Aunque la emulación de Amiga es solo el comienzo. Más y más emuladores han sido exportados a JavaScript; tienes NES, SNES, N64, PSX I y II, Sega Megadrive e incluso una versión de NEO GEO. ¡Jugar a tus juegos de consola favoritos directamente en el navegador es bastante sencillo!

Pero la parte más interesante sera probablemente QEmu. Éste te permite ejecutar instancias x86 directamente en el navegador. Puedes arrancar Windows 7 o Ubuntu dentro de una ventana de Amibian.js si quieres. Quizás no sea práctico llegar a ese punto, pero pone de manifiesto el gran potencial del sistema.

He estado experimentando con un sistema de emulación distribuida, donde la emulación se ejecuta en el servidor, y solo los gráficos y el sonido se transmiten al cliente Amibian.js en tiempo real. Esto ha sido posible durante años a través de Apache Guacamole, pero hacerlo en puro JS encaja más con nuestra filosofía: ¡Sin código nativo!

¿He oído algo de clustering?

¿Recuerdas lo que he escrito sobre los servicios que tiene Amibian.js? ¿Aquellos que actúan casi como librerías en un ordenador físico? Bueno, estos servicios no tienen por que estar en la misma máquina, puedes ubicarlos en máquinas separadas y, por lo tanto, pueden trabajar más rápido.

Figura 6 - El cluter oficial Amibian.js, 4 x SBCs ODROID-XU4 en un micro-rack

Un clúster suele ser varios ordenadores conectadas entre sí, con el único propósito de tener más núcleos CPU para dividir el trabajo. Lo bueno de Amibian.js es que no le importa la CPU que hay de fondo. Siempre y cuando nodos.js esté disponible, gustosamente ejecutará cualquier servicio que quieras con el mismo comportamiento y resultado.

El clúster oficial de Amibian.js consta de cinco SBCs ODROID-XU4 (ordenadores de placa reducida). Cuatro de ellas son los llamados ordenadores "secundarios", lo que significa que no tienen un puerto HDMI y están diseñados para iniciar sesión y configurarles el software a través de SSH o herramientas similares. La última máquina es un ODROID-XU4 con un puerto de salida HDMI, que actúa de “maestro” o “central".

La arquitectura es bastante simple: asignamos un SBC completo a un único servicio y permitimos que el servicio se replique para usar todos los núcleos de CPU disponibles; cada SBC tiene ocho núcleos CPU. Con esta arquitectura, la máquina que gestiona los clientes de escritorio no tiene que hacer todo el trabajo. Aceptará tareas del usuario y las aplicaciones alojadas, y luego delegará las tareas entre las otras cuatro máquinas.

Ten en cuenta que el número de SBCs no es fijo. Dependiendo de tu uso, es posible que no necesite más de un único SBC en la configuración de tu hogar, o quizás dos. Yo he empezado con cinco porque quiero que cada componente de la arquitectura tenga la mayor cantidad de potencia de CPU posible. Así que la primera configuración "oficial" de Amibian.js es un monstruo de 40 núcleos que se envía por alrededor de 250$.

Pero como he dicho, no tienes que comprar todo esto para usar Amibian.js. Puede instalarlo en una PC X86 que tengas de sobra, o conectar en cadena un par de PC antiguos a un switch para lograr el mismo resultado.

¿Por qué SBC secundarios?

Los SBCs secundarios sin pantalla en el diseño inicial tienen una GPU (unidad de procesamiento gráfico) así como capacidad para reproducir audio. Lo que les falta son pines GPIO y 3 puertos USB adicionales. Por lo tanto, cada uno de los nodos de nuestro clúster puede manejar gráficos a gran velocidad, pero a fin de cuentas no es su tarea. Sirven más como módulos informáticos a los que se asignarán tareas para que las lleven a cabo con rapidez, mientras que la máquina principal se ocupa de los usuarios, las sesiones, el tráfico y la seguridad.

El clúster de 40 núcleos que uso tiene más potencia de calculo que el que tenía el norte de Europa a principios de los 80. Eso es algo que te da para pensar. ¡Y su precio es de menos de 300$! No sé tú, pero yo siempre he querido tener mi propio superordenador, una plataforma informática distribuida en la que pudiera iniciar sesión y realizar grandes tareas mientras hago cualquier otra cosa. Esto es lo más cercano a un presupuesto limitado, ¡Aún así las limitaciones me parecen muy emocionantes y divertidas!

Parte de la razón por la que opté por un diseño con cluter tiene que ver con el desarrollo futuro. Mientras que UAE.js es brillante para emular Amiga directamente en el navegador, un diseño más interesante es desacoplar la emulación de la salida. En otras palabras, ejecutar la emulación a toda velocidad en el servidor y simplemente transmita la imagen y los sonidos a la pantalla de Amibian.js. Esto nos aseguraría que la emulación de cualquier plataforma se ejecute lo más rápido posible, haciendo uso del multi-procesamiento (lectura: subprocesos múltiples) y de todo el ancho de banda de la red dentro del diseño (el clúster se ejecuta en su propio switch, separado de la world-wide-web exterior).

También estoy muy interesado en la informática distribuida, donde dividimos un programa y ejecutamos cada parte en diferentes núcleos. Este es un tema que quiero investigar más a fondo cuando se complete Amibian.js. Sin duda, requerirá un nuevo diseño del sistema de bytecode LDEF, aunque esto es algo que investigaremos más adelante.

¿Amibian.js reemplazará mi maquina Windows?

Eso depende completamente de para qué uses Windows. El objetivo es crear un sistema autosuficiente. Para la infromática retro, la emulación y el desarrollo de increíbles aplicaciones, Amibian.js será increíble. Pero Roma no se construyó en un día, de modo que es aconsejable ser paciente y tratar Amibian.js como lo harías con Chrome OS. Algunas tareas son más adecuadas para sistemas nativos como Linux, aunque cada vez más habrá tareas que se ejecutarán en un escritorio en la nube como Amibian.js.

Una vez que el IDE y los compiladores estén en su lugar después de la fase dos, el sistema se parecerá más a un sistema operativo integrado. Cuando el compilador LDEF y el IDE estén listos, la gente empezará a usarlo en masa y desarrollaran aplicaciones para él. Siempre supone un poco de esfuerzo llegar a ese punto y crear una masa crítica.

Figura 7: Object Pascal es increíble, aunque los modernos sistemas de desarrollo nativos son bastante exigentes

Mis necesidades personales tienen que ver con el desarrollo. Algunos de los lenguajes que utilizo instalan gigabytes de datos en mi PC y necesitas un completo ordenador portátil para acceder a ellos. Me encanta Amibian.js porque podré trabajar en cualquier parte del mundo, siempre que tenga disponible un navegador y una línea de Internet normal. En mi caso, puedo instalar un compilador nativo en uno de los nodos del clúster y hacer que LDEF emita un código compatible. Voila, puedes crear aplicaciones listas para ser incluidas en app-store desde un entorno de navegador.

También me encanta poder configurar una plataforma dedicada que ejecute aplicaciones y juegos heredados, y poder escribir nuevas aplicaciones y servicios utilizando lenguajes modernos y comercilaes. Si un nodo del clúster se estropea, puedo copiar todo el sistema a un nuevo y económico SBC y continuar mi trabajo. No es necesario comprar un costoso hardware, ni pagar absurdas tarifas de alojamiento y, por ultimo, contamos un sistema que todos podemos configurar y utilizar en una gran cantidad de sistemas. Desde un completo escritorio hasta un super avanzado NAS o router que utiliza Amibian.js para proporcionar a los usuarios una experiencia fantástica.

Y sí, puedo recrear la maravillosa realidad de Amiga OS sin el egoísmo absurdo que domina a los propietarios de Amiga hasta hoy día. Ni siquiera sé por dónde empezar con los actuales titulares de licencias, y estoy harto de que mi drama parezca el único camino razonable para avanzar.

Espero que esto te ayude a aclarar cualquier idea falsa sobre Amibian.js, y que lo encuentres tan interesante como lo hago yo. A medida que más y más servicios pasen a la nube, más relevante se volverá Amibian.js. Es perfecto como base para aplicaciones a gran escala, sistemas integrados y, de hecho, como una plataforma individual que se ejecuta en dispositivos integrados. ¡No puedo esperar a terminar los servicios y poner en práctica este sitema en el rack ODROID!

Si encuentras este proyecto interesante, diríjase a mi sitio web de Patreon en http://www.patreon.com/quartexNow e involucrate! Realmente me resultaría muy útil tu apoyo, incluso con solo un “apoyo” de 5$.  Para comentarios, preguntas y sugerencias, visita el artículo original en https://jonlennartaasenden.wordpress.com/2018/12/05/amibian-js-under-the-hood/.

Be the first to comment

Leave a Reply