Boss (операционная система на основе луча с безопасностью)-это операционная система подтверждения концепции, написанная в Erlang вместе с Rust. Его отличительные особенности включают:

Этот проект стремится достичь следующего, в порядке снижения важности:
Да. Erlang-очень крутой функциональный (на низком уровне) / объектно-ориентированный (на высоком уровне) параллельный язык. Erlang позволяет легко писать код, который практически без особых усилий масштабируется по нескольким ядрам, процессорам или даже на машинах. Существующие реализации Erlang (в частности, официальная виртуальная машина луча) очень эффективны как в одноядерных, так и в многоядерных операциях. Эта реализация нет. Мол, совсем не. Но это работает, и это отправная точка!
Основой этого проекта является эмулятор , многопроцессорная виртуальная машина Erlang Erlang, которая работает на оборудовании. Он только реализует минимум, который должен реализовать, чтобы достичь этой цели; Например, он проанализирует некоторые таблицы ACPI (поскольку это требуется для работы многопроцессы) (или, по крайней мере, она будет реализована, но она не запускает байт -код AML - эта задача остается до байт -кода, которую он работает. Эмулятор поддерживает только x86_64 ISA, UEFI и ACPI 2.0+, то есть он будет работать на машинах примерно с 2010 года. Можно утверждать, что эмулятор - это микрокернел, поскольку он реализует вещи, которые Великобритания будет (планирование и МПК), но это мой проект, и я предпочитаю не называть этого.
Несмотря на то, что эмулятор является лучом , это не луч . Он совместим со стандартным форматом бинарного модуля Erlang и его инструкциями по байт -коду, но это то, где заканчивается сходство. Эта несовместимость является сознательным дизайнерским решением, которое было принято для введения изоляции и безопасности на основе возможностей в луч. Вот неполный список различий:
% 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 .Текущая реализация не самая быстрая, но это отправная точка, чтобы заставить вещи работать.
При запуске эмулятор загружает базовое изображение босса ( BOSBAIMA.TAR ), которое содержит начальную конфигурацию эмулятора и достаточно модулей луча для начальной загрузки функциональной ОС. Это похоже на приложение OTP от kernel .
Как было сказано ранее, нет четкого разрыва ядра с пользователем пространства; Вместо этого босс идет на модель дерева надзора, которая составляет основу Erlang/OTP.
Эмулятор:
Базовое изображение:
«Пользовательская часть»:
В настоящее время ОС не отображает ничего на экране. Вместо этого обратитесь к выводу из последовательного порта. NIX и Just Scripts инструктируют QEMU для перенаправления вывода последовательного порта на терминал.
Вы можете скачать ISO, построенный с последней страницы Commit Out on the Releseses. Тем не менее, я предлагаю вместо этого построить ОС с нуля.
Клонировать проект с помощью:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossСоздайте ISO с:
$ nix --extra-experimental-features flakes build . # isoЗапустить в Qemu с:
$ nix --extra-experimental-features flakes --extra-experimental-features nix-command runКлонировать проект с помощью:
$ git clone https://github.com/portasynthinca3/boss.git
$ cd bossЧтобы построить ISO, вам понадобится:
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 и ниже не будут работать)Создайте ISO с:
$ just isoЧтобы запустить ISO в QEMU, вам понадобится:
Запустить Qemu с:
$ just qemuСпасибо: