Boss (sistema operativo basado en haz con seguridad) es un sistema operativo de prueba de concepto escrito en Erlang junto con Rust. Sus características distintivas incluyen:

Este proyecto se esfuerza por lograr lo siguiente, en orden de importancia decreciente:
Sí. Erlang es un lenguaje concurrente funcional (en un nivel bajo) / orientado a objetos (a un alto nivel). Erlang facilita la escritura de código que escala casi sin esfuerzo en múltiples núcleos, procesadores o incluso máquinas. Las implementaciones existentes de Erlang (sobre todo, la máquina virtual del haz oficial) son muy desempeñadas en las operaciones de un solo núcleo y multicore. Esta implementación no lo es. Como, en absoluto. ¡Pero funciona y es un punto de partida!
La base de este proyecto es el emulador , una VM Erlang consciente de multiprocesamiento que se ejecuta con hardware desnudo. Solo implementa el mínimo que debe implementar para alcanzar este objetivo; Por ejemplo, analiza algunas tablas de ACPI (ya que eso es necesario para que funcione el multiprocesamiento) (o, al menos, una vez que esta característica se implementa realmente), pero no ejecuta Bytecode AML; esa tarea se deja hasta el bytecodo de haz que se ejecuta. El emulador solo admite el X86_64 ISA, UEFI y ACPI 2.0+, es decir, se ejecutará en máquinas desde aproximadamente 2010 en adelante. Se podría argumentar que el emulador es un microkernel, ya que implementa las cosas que un Reino Unido (Programación e IPC), pero es mi proyecto y prefiero no nombrarlo.
Aunque el emulador es un haz, no es el haz. Es compatible con el formato de módulo binario estándar de Erlang y sus instrucciones en el código de byto, pero ahí es dónde terminan las similitudes. Esta incompatibilidad es una decisión de diseño consciente que se tomó para introducir la seguridad basada en el aislamiento y la capacidad en el haz. Aquí hay una lista incompleta de las diferencias:
% this calls the function `baz' from the module `bar' in the application `foo'
% this will only be allowed if `foo' "exports" the module `bar'
'foo:bar' : baz (). % far call
% this calls the function `baz' from the module `bar' in the current app
bar : baz (). % external call
% this calls the function `baz' from the current module in the current app
baz (). % local call Self = self (),
Self ! hello ,
receive
{ Self , hello } -> yay ,
hello -> nay
end .La implementación actual no es la más rápida, pero es un punto de partida para que las cosas funcionen.
En el inicio, el emulador carga la imagen base de Boss ( BOSBAIMA.TAR ) que contiene la configuración inicial del emulador y los módulos de haz suficientes para arrancar un sistema operativo funcional. Es similar a la aplicación kernel de OTP.
Como se dijo anteriormente, no hay una división clara del espacio de kernel-users; En cambio, Boss opta por el modelo de árbol de supervisión que forma la base de Erlang/OTP.
Emulador:
Imagen base:
"Userland":
Actualmente, el sistema operativo no muestra nada en la pantalla. En su lugar, consulte la salida del puerto serie. NIX y Just Scripts instruye a QEMU que redirige la salida del puerto serie al terminal.
Puede descargar un ISO construido a partir de la última confirmación en la página de lanzamientos. Sin embargo, sugiero que en su lugar construya el sistema operativo desde cero.
Clon el proyecto con:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossConstruye un ISO con:
$ nix --extra-experimental-features flakes build . # isoLanzamiento en QEMU con:
$ nix --extra-experimental-features flakes --extra-experimental-features nix-command runClon el proyecto con:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossPara construir un ISO, necesitará:
1.33.0 )4.0.44 )2.42.0 )1.82.0-nightly (7120fdac7 2024-07-25) ))Erlang/OTP 27 [erts-15.0.1] , 26 y menos no funcionará)Construye un ISO con:
$ just isoPara ejecutar el ISO en QEMU, necesitará:
Iniciar QEMU con:
$ just qemuGracias a: