1 Punkte von GN⁺ 2024-07-15 | 1 Kommentare | Auf WhatsApp teilen
  • 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·lld von 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·lld von LLVM und Just benötigt
  • Die Binärdateien clang und lld müssen sich im PATH befinden
    • Wenn sie nicht im PATH liegen, können die Pfade zu diesen Binärdateien in der Datei .env angegeben werden
  • 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

 
GN⁺ 2024-07-15
Meinungen auf Hacker News
  • Ich bin der Autor. Wenn ihr Fragen habt, beantworte ich sie gern

    • Hat Nims Garbage Collector jemals Schwierigkeiten bereitet?
      Falls nicht: Glaubst du, dass das an Nims besonderem nicht-stop-the-world-GC liegt?
      https://nim-lang.org/1.4.0/gc.html
    • Was war der schwierigste Teil des Projekts? Und hast du Ratschläge für jemanden, der ein Betriebssystem von Grund auf schreiben möchte?
    • Wo sind die Screenshots?
    • Ich benutze Nim zwar nicht, halte es aber für eine interessante Sprache. Ich habe Beschwerden gesehen, dass frühere Projekte bei jedem erneuten Kompilieren angepasst werden mussten; deshalb frage ich mich, wie häufig und wie gravierend Breaking Changes vorkommen
    • Warum hast du Nim statt Swift gewählt?
      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

    • Der Schreibprozess hat mir mehrmals geholfen, Design und Implementierung zu verbessern. Schreiben zwingt mich, meine Annahmen zu hinterfragen und mich zu fragen, ob Leser verstehen können, warum ich bestimmte Entscheidungen getroffen habe
      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

    • Falls du dich entscheidest, ein RTOS zu bauen, würde ich das unbedingt verfolgen wollen
    • ELF ist ein sehr simples Dateiformat. Ich wäre eher überrascht gewesen, wenn es schwer zu lesen gewesen wäre
  • 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

    • Wie andere schon gesagt haben, ist Nim eine statisch typisierte Programmiersprache, die nach C, C++ und JavaScript kompiliert. Sie hat gute Interoperabilität mit C und erleichtert dadurch Systemprogrammierung
      Warum Nim? Auf der begleitenden Website haben wir es so erklärt:

      Warum Nim? Nim ist eine der wenigen Sprachen, die Low-Level-Systemprogrammierung mit deterministischer Speicherverwaltung, Destruktoren und Move-Semantik ermöglicht. Der Garbage Collector ist optional. Da Nim statisch typisiert ist, bietet es auch mehr Typsicherheit. Außerdem unterstützt es Inline-Assembly, was für die Betriebssystementwicklung unverzichtbar ist. Andere Optionen sind C, C++, Rust und Zig. Alles hervorragende Sprachen, aber wegen Einfachheit, Eleganz und Performance haben wir Nim gewählt.
      Die übergeordneten Designziele von Fusion sind ziemlich ambitioniert und auf derselben Seite aufgelistet. Ich möchte nicht einfach ein weiteres Unix-ähnliches Betriebssystem bauen, sondern grundlegende Fragen des Betriebssystemdesigns untersuchen, etwa einen einzigen Adressraum und fähigkeitsbasierte Sicherheit für den Schutz
      Ein weiterer Bereich, den ich erkunden möchte, ist die Frage, wie Prozesse und Tasks modelliert werden sollten. Meiner Ansicht nach sollten sie als Zustandsmaschinen modelliert werden, die über statisch typisierte Kanäle miteinander kommunizieren. Das ist keine neue Idee; sie wurde bereits in Singularity OS ausprobiert
      Im Kernel gibt es grundlegende Unterstützung für Kanäle und ihre Nutzung aus dem User Space, aber das befindet sich noch in einem frühen Stadium
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim ist eine tolle Sprache, die sich anfühlt, als sei sie von Ada und Python inspiriert
    • Es steht in der Projektdokumentation:
      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“

    • Ehrlich gesagt habe ich die Community-Größe nie als Problem empfunden. Das Nim-Forum ist aktiv, und wenn man dort Hilfe sucht, bekommt man normalerweise schnelle und präzise Antworten
      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

    • Vielleicht liegt es daran, dass ich älter werde, aber wenn Einrückung mit zwei Leerzeichen erzwungen wird, fällt es mir schwer, Nim-Code zu lesen. Codeblöcke springen kaum ins Auge, und ich möchte nicht auf eine IDE angewiesen sein, um eine Sprache lesbar zu machen