Boss (Système d'exploitation à base de faisceau avec sécurité) est un système d'exploitation de preuve de concept écrit en erlang avec rouille. Ses caractéristiques distinctives incluent:

Ce projet s'efforce de réaliser les éléments suivants, par ordre décroissant:
Oui. Erlang est un langage concurrent fonctionnel (à un niveau bas) / orienté objet (à un niveau élevé). Erlang facilite l'écriture de code qui évolue presque sans effort sur plusieurs cœurs, processeurs ou même machines. Les implémentations existantes d'Erlang (notamment, la machine virtuelle de faisceau officielle) sont très performantes dans les opérations monocRE et multi-core. Cette implémentation ne l'est pas. Comme, pas du tout. Mais ça marche et c'est un point de départ!
La base de ce projet est l' émulateur , une machine virtuelle Erlang multiprocesseur qui fonctionne sur du matériel nu. Il n'implémente que le strict minimum qu'il doit mettre en œuvre afin d'atteindre cet objectif; Par exemple, il analyse certaines tables ACPI (car cela est nécessaire pour le multiprocessement pour fonctionner) (ou, au moins, il sera une fois que cette fonctionnalité sera réellement implémentée), mais il n'exécute pas de bytecode AML - cette tâche est laissée au bytecode de faisceau qu'il fonctionne. L'émulateur prend uniquement en charge les X86_64 ISA, UEFI et ACPI 2.0+, c'est-à-dire qu'il fonctionnera sur des machines à partir de 2010 environ. On pourrait faire valoir que l'émulateur est un micro-littoral car il met en œuvre les choses qu'un Royaume-Uni ferait (planification et IPC), mais c'est mon projet et je préfère ne pas le nommer.
Même si l'émulateur est un faisceau, ce n'est pas le faisceau. Il est compatible avec le format de module binaire standard d'Erlang et ses instructions de bytecode, mais c'est à peu près là où les similitudes se terminent. Cette incompatibilité est une décision de conception consciente qui a été prise pour introduire l'isolement et la sécurité basée sur les capacités dans le faisceau. Voici une liste incomplète des différences:
% 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 .L'implémentation actuelle n'est pas la plus rapide, mais c'est un point de départ pour faire fonctionner les choses.
Au démarrage, l'émulateur charge l' image de base de boss ( BOSBAIMA.TAR ) qui contient la configuration initiale de l'émulateur et juste assez de modules de faisceau pour bootstrap un système d'exploitation fonctionnel. Cela s'apparente à l'application kernel d'OTP.
Comme cela a été dit précédemment, il n'y a pas de fracture claire des utilisateurs de noyau; Au lieu de cela, Boss opte pour le modèle d'arbre de supervision qui constitue la base d'Erlang / OTP.
Émulateur:
Image de base:
"Userland":
Actuellement, le système d'exploitation n'affiche rien à l'écran. Au lieu de cela, reportez-vous à la sortie du port série. Les scripts Nix et Just Demandent à QemU de rediriger la sortie du port série vers le terminal.
Vous pouvez télécharger un ISO construit à partir du dernier engagement sur la page des versions. Cependant, je vous suggère de construire le système d'exploitation à partir de zéro.
Clone le projet avec:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossConstruisez un ISO avec:
$ nix --extra-experimental-features flakes build . # isoLancez dans Qemu avec:
$ nix --extra-experimental-features flakes --extra-experimental-features nix-command runClone le projet avec:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossPour construire un ISO, vous aurez besoin:
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 et moins ne fonctionnera pas )Construisez un ISO avec:
$ just isoPour exécuter l'ISO dans Qemu, vous aurez besoin:
Lancez Qemu avec:
$ just qemuMerci à: