Boss (sistema operacional baseado em feixe com segurança) é um sistema operacional de prova de conceito escrito em Erlang junto com a Rust. Seus recursos distintos incluem:

Este projeto se esforça para alcançar o seguinte, em ordem decrescente de importância:
Sim. O Erlang é um idioma simultâneo muito legal (em um nível baixo) / orientado a objetos (em um nível alto). Erlang facilita a gravação de código que dimensiona quase sem esforço em vários núcleos, processadores ou até máquinas. As implementações existentes de Erlang (principalmente, a máquina virtual oficial de feixe) são muito executivas nas operações de núcleo único e multi-core. Esta implementação não é. Como, de jeito nenhum. Mas funciona e é um ponto de partida!
A base deste projeto é o emulador , uma VM Erlang multiprocessante que é executada em hardware nu. Ele implementa apenas o mínimo necessário para implementar para atingir esse objetivo; Por exemplo, ele analisa algumas tabelas ACPI (uma vez que isso é necessário para o multiprocessamento funcionar) (ou, pelo menos, ele será realmente implementado), mas não executará a AML bytecode - essa tarefa for deixada para o bytecode ByTeam que ele é executado. O emulador suporta apenas o X86_64 ISA, UEFI e ACPI 2.0+, ou seja, ele será executado em máquinas a partir de aproximadamente 2010 em diante. Pode -se argumentar que o emulador é um microkernel, pois implementa as coisas que um Reino Unido faria (programação e IPC), mas é o meu projeto e eu prefiro não nomear isso.
Embora o emulador seja um feixe, não é o feixe. É compatível com o formato de módulo binário padrão de Erlang e suas instruções de bytecode, mas é sobre onde as semelhanças terminam. Essa incompatibilidade é uma decisão de design consciente que foi tomada para introduzir segurança baseada em isolamento e capacidade no feixe. Aqui está uma lista incompleta das diferenças:
% 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 .A implementação atual não é a mais rápida, mas é um ponto de partida para fazer as coisas funcionarem.
Na startup, o emulador carrega a imagem base do chefe ( BOSBAIMA.TAR ) que contém configuração inicial do emulador e módulos de feixe suficientes para inicializar um sistema operacional funcional. É semelhante ao aplicativo kernel da OTP.
Como foi dito anteriormente, não há divisão clara e desusra de espaço do kernel; Em vez disso, Boss opta pelo modelo de árvore de supervisão que forma a base do Erlang/OTP.
Emulador:
Imagem base:
"Userland":
Atualmente, o sistema operacional não exibe nada na tela. Em vez disso, consulte a saída da porta serial. Nix e apenas scripts instruem o qemu a redirecionar a saída da porta serial para o terminal.
Você pode baixar um ISO construído a partir da última confirmação na página de lançamentos. No entanto, sugiro que você construa o sistema operacional do zero.
Clone o projeto com:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossConstrua um ISO com:
$ nix --extra-experimental-features flakes build . # isoLançar em Qemu com:
$ nix --extra-experimental-features flakes --extra-experimental-features nix-command runClone o projeto com:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossPara construir um ISO, você precisará:
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 e abaixo não funcionará)Construa um ISO com:
$ just isoPara administrar a ISO em Qemu, você precisará:
Inicie o Qemu com:
$ just qemuObrigado a: