
¿Quien soy?
¿Que es NodeOS?
- Sistema operativo ligero basado en Linux , Node.js y npm
- Originalmente desarrollado por
Jacob Groundwater
- ...y actualmente soy el lider del proyecto :-)
¿Que tiene de especial?
Diseño minimalista
- Solo un kernel Linux y Node.js, sin capas intermedias ni bloatware
- Menor uso de RAM y CPU
- Ideal para servidores cloud y sistemas embebidos
- Altamente customizable
Seguro
- Javascript = maquina virtual = aislamiento del sistema
- Permisos de archivos (demasiado) restrictivos
- Usuarios aislados entre si
- su propio sistema de archivos raiz virtual
- Descentralizado, no hay usuarios privilegiados
- root solo se usa para administrar el arranque
- Todos los componentes y programas son instalados por cada usuario
- Usuarios aislados entre si
- El usuario tiene la sensación de poder controlar todo el sistema... sin ser verdad ;-)
Bastante popular :-P
- 3500 stargazers en GitHub... y subiendo
-
Twitter tiene sentimientos enfrentados
- Algunos piensan que es genial...
- ...y otros vaticinan la llegada del anticristo...
- ...o la rebelión de las maquinas :-P
¿A quien va dirigido?
Cloud computing
- Menos recursos = mas instancias
- Fácil administración
- Todo controlado por npm...
- ...incluido el proceso de construcción :-)
- Sistemas solo con las aplicaciones necesarias
- sin shell de usuario
- lo que Docker quiere ser pero no puede ;-)
Educación y homebrew
- Todo el código es accesible
- Unicos binarios son kernel, nodeos-init y Node.js
- Inacesibles por los usuarios
- Fácil de aprender, entender y programar
- Altamente personalizable y "hackeable"
- Si lo "rompes", solo afecta a tu usuario
NodeOS en 5 pasos
- Descarga el código desde GitHub
- Ejecuta
npm install
- Coge palomitas y vete
a ver una pelicula ;-) - Ejecuta
npm start
- Enjoy!!! :-)
Arquitectura de NodeOS

Capa 0: cross-toolchain
- Basada en Cross Linux from Scratch
- usando musl en vez de glibc
- menos memoria y mas rendimiento
- Totalmente automatizado
- Descarga, parchea y compila automaticamente los fuentes de Linux, GCC y musl
- Definir la plataforma de destino y listo (por defecto la actual)
- Integrado como paquete npm
- usable por otros modulos
Capa 1: barebones

Capa 1: barebones
- Linux 4.5
- Compilado estáticamente (sin módulos)
- Configuración por defecto para cada plataforma
- Eliminados componentes superfluos
- Sistemas de archivos (¿minix fs? ¿en serio?)
- debug, profiling...
- Añadidos FUSE, CUSE y OverlayFS
- Node.js v4.4.0 LTS
Capa 1: barebones
- nodeos-init
-
- proceso /init minimalista
- "red de seguridad" ante procesos zombie
- montar /dev (necesario para Node.js, increible...)
- apagar el sistema limpiamente cuando no hay mas procesos ejecutandose
- Arranca directamente a REPL
-
- Los 80 nunca pasaran de moda ;-)
Capa 2: initramfs

Capa 2: initramfs
- Prepara un entorno basico y monta la partición con los directorios de los usuario
- Ejecuta los 'init' de los usuarios
- /usr/bin/env... ¡hecho en Javascript!
Capa 3: rootfs

Capa 3: rootfs
- Genera la partición de arranque (solo lectura) con el kernel de Linux y el initramfs
- VFAT para Raspberry Pi (genfatfs)
- ISO9660 para CD y USB (IsoHybrid)
- Despues se combinara con la partición de usuarios para hacer un sistema persistente
- pendrive USB
- disco duro
- En una futura versión se eliminara esta capa y se integrara con el sistema de generación global
Capa 4: usersfs

Capa 4: usersfs
- Genera una partición de demo para los usuarios del sistema (lectura-escritura)
- Permite persistencia de los datos en un USB
- Facilmente sustituible por un sistema en red
- Dropbox, Google Drive, Amazon AWS...
root
- Opcional, solo usado para inicializar servicios
- bin-getty: manejador de pseudo-terminales
- ExclFS: acceso exclusivo a los dispositivos en /dev, un usuario cada vez
-
logon: gestión distribuida de los usuarios
- datos de acceso en el directorio del usuario
- acceso a cualquiera, protección a los archivos
- se puede sustituir por un sistema externo como Facebook Connect, Google Account...
- Único con acceso a los directorios de los demas
- necesario para logon y administración del sistema
-
un gran poder implica una gran responsabilidad
- solo accesible arrancando en modo administrador
- deshabilita el resto de usuarios
nodeos
- Usuario raso
- Shell, comandos basicos, checkeo y demos
- UX similar a sistemas operativos "normales"
- Mas limpio y simple al no ser POSIX... ;-)
- Entorno optimizado para aplicaciones Node.js
- Inspirado en Plan9
Futuro
- Interfaz gráfica en HTML5
- ¿Contenedores LXC para cada usuario?
- puertos TCP
- "Sabores": mainframe y workstation
- ARM y MIPS
Pull-request welcome!!!
+ info
NodeOS
By Jesús Leganés-Combarro
NodeOS
- 939