¿Qué es NodeOS?
- Sistema operativo minimalista basado en Linux , Node.js y npm
- Originalmente desarrollado por Jacob Groundwater
- Actualmente, soy el desarrollador principal del proyecto
¿Qué tiene de especial?
- Diseño minimalista
- kernel Linux + Node.js
- Altamente personalizable
- Seguro
- máquina virtual = aislado del sistema subyacente
- Permisos de archivos (demasiado) restrictivos
- Usuarios aislados entre sí y del sistema
- No hay usuarios privilegiados
¿A quién va dirigido?
- Cloud computing
- Menos recursos = más instancias
- Fácil administración (npm)
- Sistemas solo con las aplicaciones necesarias
- Educación y "Homebrew"
- Todo el código es accesible directamente
- Fácil de aprender, entender y programar
- Altamente personalizable y "hackeable"
Arquitectura de NodeOS
Capa 0: cross-toolchain
- Basada en
Cross Linux from Scratch
- usando musl en vez de glibc
- menos memoria y más rendimiento
- Totalmente automatizado
- Descarga, parchea y compila automáticamente las cabeceras de Linux y los fuentes GCC y musl
- Solo necesario definir la plataforma de destino (por defecto, la actual)
- Integrado como paquete npm
- usable por otros módulos
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 (minixfs, amiga...)
- debug, profiling...
- Añadidos FUSE, CUSE y OverlayFS
- CJKTTY patch
- Node.js v4.4.0 LTS
- Añadida version de NodeOS
Capa 1: barebones
-
nodeos-init
- proceso /init minimalista
- "red de seguridad" ante procesos huerfanos
- montar /dev (necesario para Node.js)
- apagar el sistema limpiamente cuando no hay más procesos ejecutandose
- Arranca directamente un intérprete Javascript
Capa 2: initramfs
Capa 2: initramfs
- Prepara un entorno básico y monta la partición con los directorios de los usuario
- Ejecuta los 'init' de los usuarios
- /usr/bin/env esta 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)
- Después se combina con la partición de usuarios para hacer un sistema persistente
- pendrive USB
- disco duro
- En una futura versión se eliminará esta capa y se integrará 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
- Fácilmente sustituible por un sistema en red
- Dropbox, Google Drive, Amazon S3...
- Dos usuarios de ejemplo: root y nodeos
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 de acceso de los usuarios
- datos de acceso en el directorio del usuario
- acceso a cualquiera, protección de los archivos
- se puede sustituir por un sistema externo como Facebook Connect, Google Account...
- Único con acceso a los directorios de los demás
- necesario para logon y administración del sistema
- solo accesible arrancando en
modo administrador
- deshabilita el resto de usuarios
nodeos
- Usuario raso
- Shell, comandos básicos, comprobación y demos
- Entorno similar a sistemas operativos "normales"
- Más limpio y simple al no ser POSIX
- Optimizado para aplicaciones Node.js
- Inspirado en Plan9
Proyectos propios
- NodeOS
- nodeos-cross-toolchain
- nodeos-mount-filesystems
- nodeos-reverse-proxy
- Davius
- ExclFS
- logon
- nodeos-init
- oneshoot
- usrbinenv
- nodeos-media
- nodeos-console-font
- nodeos-mount-utils
- coverdeeps
- download-checksum
- download-manager
- coreutils.js
- cpio2tar
- DebugFS
- pstree
- recv
- blessed
- noGUI
- cpio-stream
- prompt
- node-kexec
- decompress-tar
- download
- jsdiff
- node-scanf
- tar-fs
- tar-stream
- cjktty-patch
- fuse-bindings
- GitBlog
- ifconfig
- node-canvas
Contribuciones
- node-bin-getty
- node-dhcpjs
- nodeos.github.com
- nodeos-mount
- sockios
- vinyl-fs
- node
- node-lib-pathsearch
- npm-remote-ls
- npm-path
- nsh
- prebuild
- publish-release
- serve-static
- node-byline
- node-suppose
NodeOS en 4 pasos
- Descarga el código desde GitHub
- Instalar dependencias del sistema
bin/install-dependencies
- Generar imagen
npm install
- Ejecutar imagen
npm start
Conclusiones
- 3891 stargazers en GitHub... y subiendo
- Colaboraciones externas, proyectos independientes, artículos en portales de tecnología...
Final del 9º Concurso Universitario de Software Libre
Futuro
- Interfaz gráfica en HTML5
- Compilar en Mac y Windows (vagrant)
- Contenedores LXC para cada usuario
- "Sabores" : mainframe y workstation
- Soporte de Unicode en el terminal
- Múltiples framebuffers en Linux
- Reducir consumo de memoria
- Usar kernels alternativos
- ARM y MIPS
Más información
NodeOS - pfc
By Jesús Leganés-Combarro
NodeOS - pfc
- 850