Fusion, ein in Nim implementiertes Hobby-Betriebssystem
(github.com/khaledh)- Fusion OS ist ein Hobby-Betriebssystem für x86-64 und verwendet Nim als Implementierungssprache
- Die derzeit implementierten Funktionen gliedern sich in UEFI-Bootloader, Speicherverwaltung, Aufgabenverwaltung, Systemaufrufe, IPC und Hardware-Unterstützung
- Zur Speicher- und Aufgabenverwaltung gehören Demand Paging, präemptives Multitasking, prioritätsbasierte Planung und ein ELF-Loader
- Die Ausführungsumgebung ist derzeit QEMU; zum Build werden Nim,
clang·lldvon LLVM und Just benötigt - Zu den künftigen Plänen gehören capability-basierte Sicherheit, Disk I/O, Dateisystem, Shell, GUI und Networking
Überblick über Fusion OS
- Fusion ist ein Hobby-Betriebssystem für x86-64 und in Nim implementiert
- Der Entwicklungsprozess ist unter 0xc0ffee.netlify.app dokumentiert
- Der Bereich mit Screenshots enthält den UEFI-Bootloader sowie Bildschirme zum Booten und Ausführen des Kernels
- Der GUI-Screenshot zeigt den Stand des
graphics-Branches, der sich noch in Arbeit befindet
Derzeit implementierte Funktionen
-
Boot
- UEFI-Bootloader implementiert
-
Speicherverwaltung
- Higher-Half-Kernel mit Single-Address-Space-Struktur
- Physical Memory Manager
- Virtual Memory Manager
- Demand Paging
-
Aufgabenverwaltung
- Kernel Tasks
- User-Mode-Tasks
- Präemptives Multitasking
- Prioritätsbasierte Planung
- ELF-Loader mit Unterstützung für Demand Paging und Relocation
-
Systemaufrufe
- System-Call-Interface
- User-Mode-Bibliothek
-
IPC
- Kanalbasierte IPC
- Message Passing
-
Hardware
- PCI Device Enumeration
- ACPI-Konfiguration
- Local APIC Timer
- I/O APIC Interrupts
- PS/2-Tastaturtreiber
- Bochs Graphics Adapter Driver
Geplante Funktionen
- Capability-based Security
- Event-basierte Task-State-Machines
- Disk I/O
- Dateisystem
- Shell
- GUI
- Networking
Build und Ausführung
- Für den Build werden Nim,
clang·lldvon LLVM und Just benötigt - Die Binärdateien
clangundlldmüssen sich imPATHbefinden- Wenn sie nicht im
PATHliegen, können die Pfade zu diesen Binärdateien in der Datei.envangegeben werden
- Wenn sie nicht im
- Der Build-Befehl lautet wie folgt
just build
- Fusion läuft derzeit unter QEMU
- Der Ausführungsbefehl lautet wie folgt
just run
Lizenz
- Die Lizenz ist MIT
1 Kommentare
Meinungen auf Hacker News
Ich bin der Autor. Wenn ihr Fragen habt, beantworte ich sie gern
Falls nicht: Glaubst du, dass das an Nims besonderem nicht-stop-the-world-GC liegt?
https://nim-lang.org/1.4.0/gc.html
Im Moment wirken die beiden ziemlich ähnlich, aber Swift scheint mir in der Praxis deutlich stärker erprobt zu sein
Der Blog und die Dokumentation sind ausgezeichnet. Die Balance zwischen Zeigen und Erklären ist sehr gut; danke fürs Teilen
Weil man alles rechtfertigen muss, hilft es, unnötige Komplexität zu entfernen und sich auf die wichtigeren Teile zu konzentrieren
Entwicklungstagebuch des Fusion-Autors:
https://0xc0ffee.netlify.app/osdev/01-intro.html
Schön, so etwas zu sehen. Ich war über die Jahre immer mal wieder lose im Nim-Ökosystem involviert, und es freut mich, dass dieses kleine, erfreuliche Projekt weiterläuft
Cool. Ich habe mir das ELF-Modul angesehen; es war gut lesbar und hat Spaß gemacht
Irgendwann möchte ich einmal ein Echtzeitbetriebssystem in Nim schreiben. Ich schreibe gern Embedded-Programme in Nim, daher wäre es sicher spannend, auch ein RTOS zu bauen
Was ist Nim, und was sind die allgemeinen Designziele von Fusion?
Ich hoffe, das ist keine allzu grundlegende Frage. Ich habe keinerlei Hintergrundwissen und fände es gut, wenn es jemand erklären könnte
Warum Nim? Auf der begleitenden Website haben wir es so erklärt:
https://0xc0ffee.netlify.app/osdev/01-intro.html
Ich freue mich, mehr Nim-Projekte zu sehen. Ich nutze hauptsächlich Python und JavaScript, interessiere mich aber für den Vorteil, zusätzlich eine moderne, schnelle, statisch typisierte Sprache zu kennen
Unter Go, Rust, Zig und Nim gefällt mir Nim am besten. Es wirkt im Sinne geringer syntaktischer Störgeräusche beim Lesen von Code am Python-artigsten
Beim Prototyping von neuem Code nutze ich sehr gern eine REPL, und INim macht das gut
Das derzeit größte Problem von Nim ist die geringe Community-Größe. Dadurch ist die Welt der nutzbaren und gepflegten Bibliotheken kleiner als in anderen Sprach-Communitys. Es ist ein Henne-Ei-Problem, aber mehr Entwickler, mich eingeschlossen, können es lösen, indem sie „die Veränderung sind, die sie in der Welt sehen wollen“
Die Sprache entwickelt sich außerdem umsichtig weiter, und da Araq sie leitet, dürfte sie langfristig noch besser werden
Das Ökosystem ist nicht so groß wie das von Python oder Rust, aber überraschenderweise enthält die Standardbibliothek das meiste, was man braucht. Ich suche selten nach Third-Party-Paketen, um etwas umzusetzen
Natürlich gebe ich zu, dass Nim zu den weniger bekannten Sprachen gehört. Das ändert aber nichts daran, dass es eine vielversprechende Sprache ist, die ihre Aufgaben sehr gut erledigt
Der Bereich, auf den sich die Community stärker konzentrieren sollte, ist meiner Meinung nach IDE-Unterstützung. Die VSCode-Erweiterung ist okay, hat aber raue Kanten. Ich bevorzuge JetBrains-IDEs, und das offizielle Nim-Plugin ist, wohlwollend gesagt, sehr lückenhaft
Es gibt auch ein Nebenprojekt, das ein JetBrains-Plugin für Nim erstellt, aber ich bin damit noch nicht sehr weit gekommen
[0] https://forum.nim-lang.org
[1] https://github.com/khaledh/nimjet
Nim ist eine hervorragende Systemprogrammiersprache und sollte populärer sein