Boss (Beam-basiertes Betriebssystem mit Sicherheit) ist ein in Erlang geschriebener Beweis für das Konzept-Betriebssystem zusammen mit Rost. Zu den unverwechselbaren Merkmalen gehören:

Dieses Projekt ist bestrebt, Folgendes in der Reihenfolge einer abnehmenden Bedeutung zu erreichen:
Ja. Erlang ist eine sehr coole funktionelle (auf niedrigem Niveau) / objektorientierte (auf hoher Ebene) gleichzeitiger Sprache. Erlang macht es einfach, Code zu schreiben, der fast mühelos über mehrere Kerne, Prozessoren oder sogar Maschinen skaliert wird. Bestehende Implementierungen von Erlang (insbesondere der offiziellen virtuellen Beam-Maschine) sind sowohl in Einzelkern- als auch in Multi-Core-Operationen sehr leistungsfähig. Diese Implementierung ist nicht. Wie überhaupt nicht. Aber es funktioniert und es ist ein Ausgangspunkt!
Die Grundlage dieses Projekts ist der Emulator , ein Multiprocessing-bewusstes Erlang-VM, das auf bloßen Hardware ausgeführt wird. Es implementiert nur das nötige Minimum, das es implementieren muss, um dieses Ziel zu erreichen. Zum Beispiel analysiert es einige ACPI -Tabellen (da dies für die Multiprozessierung mit der Arbeit erforderlich ist) (oder zumindest, sobald diese Funktion tatsächlich implementiert ist), aber es wird nicht AML -Bytecode ausgeführt - diese Aufgabe bleibt dem Beam -Bytecode, den es ausgeführt hat. Der Emulator unterstützt nur die x86_64 ISA, UEFI und ACPI 2.0+, dh er wird ab ungefähr 2010 auf Maschinen ausgeführt. Es könnte argumentiert werden, dass der Emulator ein Mikrokernel ist, da er die Dinge implementiert, die ein Großbritannien (Planen und IPC) implementiert, aber es ist mein Projekt, und ich bevorzuge es, das nicht zu nennen.
Obwohl der Emulator ein Strahl ist, ist er nicht der Strahl. Es ist mit Erlangs Standard -Binärmodulformat und seinen Bytecode -Anweisungen kompatibel, aber das ist ungefähr dort, wo die Ähnlichkeiten enden. Diese Inkompatibilität ist eine bewusste Designentscheidung, die getroffen wurde, um Isolations- und Fähigkeitssicherheit in den Strahl einzuführen. Hier ist eine unvollständige Liste der Unterschiede:
% 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 .Die aktuelle Implementierung ist nicht die schnellste, aber es ist ein Ausgangspunkt, um die Dinge zum Laufen zu bringen.
Beim Start lädt der Emulator das Boss -Basisbild ( BOSBAIMA.TAR ), das die anfängliche Emulatorkonfiguration und gerade genügend Strahlmodule enthält, um ein funktionales OS -Os zu starten. Es ähnelt der kernel -App von OTP.
Wie bereits erwähnt, gibt es keine klare Kernel-Benutzer-Divide; Stattdessen geht der Boss für das Supervision -Baummodell, das die Grundlage von Erlang/OTP bildet.
Emulator:
Grundbild:
"Userland":
Derzeit zeigt das Betriebssystem auf dem Bildschirm nichts an. Beziehen Sie sich stattdessen auf die Ausgabe aus dem seriellen Anschluss. Nix und nur Skripte weisen QEMU an, die serielle Portausgabe in das Terminal umzuleiten.
Sie können eine ISO herunterladen, die aus dem neuesten Commit Over auf der Seite "Releases" erstellt wurde. Ich schlage jedoch vor, dass Sie das Betriebssystem stattdessen von Grund auf neu erstellen.
Klonen Sie das Projekt mit:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossBauen Sie eine ISO mit:
$ nix --extra-experimental-features flakes build . # isoStarten Sie in Qemu mit:
$ nix --extra-experimental-features flakes --extra-experimental-features nix-command runKlonen Sie das Projekt mit:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossUm eine ISO zu bauen, brauchen Sie:
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 und unten funktioniert nicht )Bauen Sie eine ISO mit:
$ just isoUm die ISO in QEMU zu führen, brauchen Sie:
Starten Sie Qemu mit:
$ just qemuDanke an: