
TL; DR : Haiku ist ein Betriebssystem, das speziell für PCs entwickelt wurde. Es hat also einige Tricks, um seine Arbeitsumgebung viel besser als andere zu machen. Aber wie funktioniert es?
Ich habe kürzlich Haiku entdeckt, ein unerwartet gutes System. Es ist immer noch erstaunt, wie reibungslos es funktioniert, insbesondere im Vergleich zu Linux-Desktop-Umgebungen. Heute schaue ich unter die Haube. Wo es für ein gründliches Verständnis erforderlich ist, werde ich einen Vergleich mit den ursprünglichen Macintosh-, Mac OS X- und Linux-Arbeitsumgebungen (XDG-Standard von freedesktop.org) anstellen.
Ressourcen in ELF-Dateien
Gestern habe ich erfahren, dass IconOMatic Symbole in rdef-Ressourcen in ausführbaren ELF-Dateien speichern kann. Heute möchte ich sehen, wie es tatsächlich funktioniert.
Ressourcen? Ein Zitat von Bruce Horne , dem ursprünglichen Autor des Macintosh Finder-Programms und „Vater“ des Macintosh Resource Managers:
Ich mache mir Sorgen über die harte Natur des traditionellen Code-Schreibens. Für mich ist die Idee einer im Code eingefrorenen Anwendung ohne die Fähigkeit, etwas dynamisch zu ändern, die wildeste Wildheit. Es sollte möglich sein, zur Laufzeit so viel wie möglich zu ändern. Natürlich kann der Anwendungscode selbst nicht geändert werden, aber etwas kann geändert werden, ohne den Code neu zu kompilieren?
Auf dem ursprünglichen Macintosh haben diese Dateien einen "Datenbereich" und einen "Ressourcenbereich" erstellt, wodurch das Speichern verschiedener Dinge wie Symbole, Übersetzungen usw. extrem einfach wurde. in ausführbaren Dateien.
Auf dem Mac wird hierfür ResEdit verwendet, ein grafisches Programm zum plötzlichen Bearbeiten von Ressourcen.

ResEdit auf dem Original-Macintosh
Dadurch wurde es möglich, Symbole, Menüelemente, Übersetzungen usw. zu bearbeiten. einfach genug, aber sie "reisen" immer noch mit Anwendungen.
In jedem Fall hatte dieser Ansatz einen großen Nachteil: Er funktionierte nur auf Apple-Dateisystemen. Dies war einer der Gründe, warum Apple den "Ressourcenbereich" beim Wechsel zu Mac OS X aufgab.
Unter Mac OS X wollte Apple eine dateisystemunabhängige Lösung, daher wurde das Konzept von Paketen (von NeXT) angewendet, Verzeichnissen, die der Dateimanager als „undurchsichtige Objekte“ behandelt, wie Dateien, nicht Verzeichnisse. Jedes Paket mit einer Anwendung im .app
Format verfügt unter anderem über eine Info.plist
Datei (analog zu JSON oder YAML von Apple), die Anwendungsmetadaten enthält.

Schlüssel für die Datei Info.plist aus dem Mac OS X-Anwendungspaket.
Ressourcen, z. B. Symbole, UI-Dateien und andere, werden im Paket als Dateien gespeichert. Das Konzept ist tatsächlich zu den Grundlagen in NeXT zurückgekehrt.

Mathematica.app unter NeXTSTEP 1.0 im Jahr 1989: Wird als Verzeichnis mit Dateien im Terminal angezeigt, jedoch als einzelnes Objekt in einem grafischen Dateimanager.
Zurück zu BeOS, auf dem Haiku basiert. Beim Wechsel von PEF (PowerPC) zu ELF (x86) (das gleiche, das unter Linux verwendet wird) haben die Entwickler beschlossen, am Ende von ELF-Dateien einen Ressourcenabschnitt hinzuzufügen. Dafür wurde unser eigener ELF-Abschnitt nicht verwendet, sondern einfach an das Ende der ELF-Datei angehängt. Infolgedessen schnitten das strip
und der Rest der Binutils, die sich dessen nicht bewusst waren, es einfach ab. Wenn Sie der ELF-Datei unter BeOS Ressourcen hinzufügen, ist es daher besser, nicht mit Linux-Tools zu arbeiten.
Was passiert jetzt mit Haiku? Im Prinzip mehr oder weniger gleich.
Theoretisch könnten Sie Ressourcen im rechten Bereich des ELF platzieren. Laut den Entwicklern des # haiku-Kanals im irc.freenode.net-Netzwerk:
Mit ELF wäre der Abschnitt sinnvoller ... der einzige Grund, warum wir dies nicht tun, ist, dass sie es auf BeOS getan haben. "
Und es lohnt sich nicht, jetzt etwas zu ändern.
Ressourcenmanagement
Ressourcen werden in einem strukturierten "Ressourcen" -Format geschrieben: Tatsächlich handelt es sich um eine Liste von Ressourcen mit Größen und deren Inhalt. Ich erinnerte mich an das Format ar .
Wie überprüfe ich Ressourcen in Haiku? Gibt es so etwas wie ResEdit?
Laut Dokumentation :
Um die im Anwendungspaket enthaltenen Ressourcen anzuzeigen, können Sie die ausführbare Datei auf ein Programm wie Resourcer ziehen . Sie können auch zum Terminal gehen und den listres _
.
Es gibt einen Resourcer in HaikuDepot, aber für mich stürzt es einfach ab.
Wie verwalte ich Ressourcen in ELF-Dateien? Mit rsrc
und rdef
. rdef
Dateien werden in rsrc
gesammelt. Die rdef
Datei wird im rdef
Text-Format gespeichert, sodass die Arbeit damit viel einfacher ist. Eine rsrc
Datei rsrc
an das Ende der ELF-Datei angehängt. Versuchen wir zu spielen:
~> rc -h Haiku Resource Compiler 1.1To compile an rdef script into a resource file: rc [options] [-o <file>] <file>...To convert a resource file back into an rdef script: rc [options] [-o <file>] -d <file>...Options: -d --decompile create an rdef script from a resource file --auto-names construct resource names from ID symbols -h --help show this message -I --include <dir> add <dir> to the list of include paths -m --merge do not erase existing contents of output file -o --output specify output file name, default is out.xxx -q --quiet do not display any error messages -V --version show software version and license
xres
Programm xres
können Sie xres
überprüfen und verwalten:
/> xres Usage: xres ( -h | --help ) xres -l <file> ... xres <command> ...The first form prints this help text and exits.The second form lists the resources of all given files.The third form manipulates the resources of one or more files according to the given commands. (...)
Okay, lass es uns versuchen?
/> xres -l /Haiku/system/apps/WebPositive/Haiku/system/apps/WebPositive resources:type ID size name ------ ----------- ----------- -------------------- 'MIMS' 1 36 BEOS:APP_SIG 'APPF' 1 4 BEOS:APP_FLAGS 'MSGG' 1 421 BEOS:FILE_TYPES 'VICN' 101 7025 BEOS:ICON 'VICN' 201 91 kActionBack 'VICN' 202 91 kActionForward 'VICN' 203 300 kActionForward2 'VICN' 204 101 kActionStop 'VICN' 206 243 kActionGoStart 'MSGG' 205 1342 kActionGo 'APPV' 1 680 BEOS:APP_VERSION
Weitere rdef
Ressourcen und zum rdef
Format finden Sie hier .
Standardressourcentypen
Obwohl Sie alles in Ressourcen einfügen können, gibt es einige definierte Standardtypen:
app_signature
: MIME-Anwendungstyp zum Abgleichen geöffneter Dateien, zum Starten, zum IPC usw.app_name_catalog_entry
: Da der Anwendungsname normalerweise in Englisch ist, können Sie hier angeben, wo die übersetzten Namen liegen, sodass Benutzer verschiedener Sprachen den übersetzten Anwendungsnamen auf Wunsch sehen können.app_version
: genau das, was du gedacht hastapp_flags
: teilt dem registrar
wie mit der Anwendung app_flags
. Ich denke, es gibt etwas mehr, als es auf den ersten Blick scheint. Zum Beispiel gibt es B_SINGLE_LAUNCH
, das das System zwingt, auf Wunsch des Benutzers jedes Mal einen neuen Anwendungsprozess zu starten (dasselbe Prinzip wird für die meisten Linux-Anwendungen verwendet). Es gibt B_MULTIPLE_LAUNCH
, das das Starten eines Prozesses für jede Datei erzwingt. Schließlich gibt es B_EXCLUSIVE_LAUNCH
, das das System zwingt, jeweils nur einen Prozess zu starten, unabhängig davon, wie oft Benutzer ihn starten (z. B. startet Firefox auch unter Linux; dasselbe Ergebnis kann in Qt-Anwendungen mit der Funktion QtSingleApplication erzielt werden). Anwendungen mit B_EXCLUSIVE_LAUNCH
benachrichtigt, wenn der Benutzer versucht, sie erneut auszuführen. Beispielsweise erhalten sie den Dateipfad, den der Benutzer mit seiner Hilfe öffnen möchte.vector_icon
: Vektoranwendungssymbol (In BeOS gab es keine Vektorsymbole, die meisten Anwendungen hatten stattdessen zwei Rastersymbole in ausführbaren Dateien).
Natürlich können Sie Ressourcen mit beliebigen IDs und Typen hinzufügen und diese dann in der Anwendung selbst oder in anderen Anwendungen mithilfe der BResources
Klasse BResources
. Aber zuerst wollen wir uns mit dem faszinierenden Thema der Ikonen befassen.
Vektorsymbole im Haiku-Stil.
Natürlich hat nicht nur Haiku das beste Symbolformat gewählt, in diesem Teil ist die Situation mit Linux-Arbeitsumgebungen alles andere als ideal:
me@host:~$ ls /usr/share/icons/hicolor/ 128x128 256x256 512x512 index.theme 160x160 28x28 64x64 scalable 16x16 32x32 72x72 symbolic 192x192 36x36 8x8 22x22 42x42 96x96 24x24 48x48 icon-theme.cache
Wenn Sie dies betrachten, können Sie bereits fühlen, wovon es ein Stück ist.
Natürlich gibt es eine skalierbare Datei, die, wie Sie verstehen können, Vektorsymbole enthält. Warum gibt es dann noch etwas? Weil das Ergebnis des Renderns von Vektorgrafiken in kleinen Größen schlechter als ideal sein kann. Ich möchte verschiedene Optionen für verschiedene Größen optimieren lassen. In Linux-Arbeitsumgebungen wird dies durch Streuen von Symbolen unterschiedlicher Größe im Dateisystem erreicht.
me@host:~$ find /usr/share/icons/ -name 'firefox.*' /usr/share/icons/HighContrast/16x16/apps/firefox.png /usr/share/icons/HighContrast/22x22/apps/firefox.png /usr/share/icons/HighContrast/24x24/apps/firefox.png /usr/share/icons/HighContrast/256x256/apps/firefox.png /usr/share/icons/HighContrast/32x32/apps/firefox.png /usr/share/icons/HighContrast/48x48/apps/firefox.png /usr/share/icons/elementary-xfce/apps/128/firefox.png /usr/share/icons/elementary-xfce/apps/16/firefox.png /usr/share/icons/elementary-xfce/apps/22/firefox.png /usr/share/icons/elementary-xfce/apps/24/firefox.png /usr/share/icons/elementary-xfce/apps/32/firefox.png /usr/share/icons/elementary-xfce/apps/48/firefox.png /usr/share/icons/elementary-xfce/apps/64/firefox.png /usr/share/icons/elementary-xfce/apps/96/firefox.png /usr/share/icons/hicolor/128x128/apps/firefox.png
Bitte beachten Sie: Es gibt kein Konzept für verschiedene Versionen von Firefox. Daher können Sie die Situation nicht subtil behandeln, wenn mehrere Versionen der Anwendung im System vorhanden sind.

Verschiedene Firefox-Symbole in verschiedenen Versionen. Unter verschiedenen Krücken ist dies unter Linux noch nicht möglich.
Mac OS X handhabt etwas raffinierter:
Mac:~ me$ find /Applications/Firefox.app | grep icns /Applications/Firefox.app/Contents/MacOS/crashreporter.app /Contents/Resources/crashreporter.icns /Applications/Firefox.app/Contents/MacOS/updater.app/Contents/Resources/updater.icns /Applications/Firefox.app/Contents/Resources/document.icns /Applications/Firefox.app/Contents/Resources/firefox.icns
Es ist ersichtlich, dass das Paket firefox.icns
Datei Firefox.app
enthält, die alle Größen enthält, sodass unterschiedliche Versionen derselben Anwendung unterschiedliche Symbole haben.
Viel besser! Symbole werden mit der Anwendung übertragen, alle Ressourcen in einer Datei.
Zurück nach Haiku. Eine umwerfende Entscheidung, ohne Ausnahmen. Laut Dokumentation :
Für kleine Größen und schnelles Rendern wurde ein spezielles, hochoptimiertes HVIF- Format entwickelt. Daher sind unsere Symbole größtenteils viel kleiner als im Raster oder im weit verbreiteten SVG-Format.
Und sie sind optimiert:

Symbolgrößen in HVIF im Vergleich zu anderen Formaten.
Der Unterschied ist eine Größenordnung!
Aber die Magie endet hier nicht. Das gleiche HVIF kann je nach angezeigter Größe unterschiedliche Detaillierungsgrade anzeigen, obwohl es sich um ein Vektorformat handelt.

Unterschiedliche Detailebenen (LOD) je nach Größe des Renderings
Nun zu den Mängeln: Sie können SVG nicht verwenden, es in ImageMagick ablegen und dort enden. Sie müssen mehrere Zyklen durchlaufen, um ein Symbol im HVIF-Format zu erstellen. Hier sind die Erklärungen. IconOMatic kann SVG jedoch nicht perfekt importieren. Etwa 90% der SVG-Teile werden mit einiger Wahrscheinlichkeit importiert, die restlichen 10% müssen manuell angepasst und geändert werden. Weitere Informationen darüber, wie HVIF seine Magie entfaltet, finden Sie in Lea Gansons Blog .
Hinzufügen eines Symbols zur Anwendung
Jetzt kann ich dem zuletzt erstellten Paket ein Symbol hinzufügen, das alle erhaltenen Informationen berücksichtigt.
Nun, da ich nicht wirklich darauf aus bin, mein eigenes Symbol für meine "Hello World" -QtQuickApp zu zeichnen, ziehe ich es aus Qt Creator heraus.
/Haiku/home> xres /Haiku/system/apps/QtCreator/bin/Qt\ Creator -o /Haiku/home/QtQuickApp/QtQuickApp -a VICN:101:BEOS:ICON /Haiku/system/apps/QtCreator/bin/Qt\ Creator
Lassen Sie uns überprüfen, ob das Symbol kopiert wurde:
/Haiku/home> xres -l /Haiku/home/QtQuickApp/QtQuickApp/Haiku/home/QtQuickApp/QtQuickApp resources:type ID size name ------ ----------- ----------- -------------------- 'VICN' 101 152238 BEOS:ICON
Es sieht gut aus, aber warum wird das neue Symbol beim Kopieren nicht angezeigt?

Kopiert VICN: 101: BEOS: ICONs wird noch nicht als Symbol für eine Anwendung im Dateimanager verwendet
Was fehlt mir?
Entwicklerkommentar:
Es ist erforderlich, eine rdef
Datei mit allen Ressourcen zu erstellen und dann den rc .rdef
.rsrc
. .rsrc
wird eine .rsrc
Datei erstellt. Anschließend müssen Sie den resattr -o _ .rsrc
. Zumindest verwende ich ähnliche Befehle, um meinen Skripten Symbole hinzuzufügen.
Nun, ich wollte eine Ressource erstellen, kein Attribut. Ich bin direkt verwirrt.
Smart Dateisystem-Caching
Das Öffnen und Lesen von ELF-Attributen ist langsam. Wie ich oben geschrieben habe, wird das Symbol als Ressource in die Datei selbst geschrieben. Diese Methode ist zuverlässiger und ermöglicht es Ihnen, das Kopieren in ein anderes Dateisystem zu überleben. Dann wird es jedoch auch in das Dateisystemattribut kopiert, beispielsweise BEOS:ICON
. Dies funktioniert nur auf bestimmten Dateisystemen, z. B. BFS. Vom System angezeigte Symbole (in Tracker und Deskbar) werden aus diesem erweiterten Attribut gelesen, da eine solche Lösung schnell funktioniert. An einigen Stellen (an denen die Geschwindigkeit nicht wichtig ist, z. B. in einem typischen "Info" -Fenster) erhält das System das Symbol direkt von der Ressource in der Datei. Dies ist jedoch nicht das Ende. Denken Sie daran, dass Benutzer auf einem Mac Anwendungssymbole, Verzeichnisse und Dokumente durch eigene ersetzen können, da auf einem Mac diese „wichtigen“ Dinge möglich sind, z. B. ein neues Slack-Symbol durch ein vorheriges zu ersetzen . In Haiku sollten Sie die Ressource (in der Datei) als Quellensymbol verwenden, das mit der Anwendung geliefert wird, und das Attribut (im BFS-Dateisystem) als etwas, mit dem der Benutzer die gewünschten Änderungen vornehmen kann (obwohl ein Hinweis die grafische Oberfläche zum Einfügen des Benutzersymbols über dem Symbol ist Standard wurde noch nicht implementiert).
Überprüfen der Dateisystemattribute
Mit resaddr
können die Attribute des Dateisystems überprüft und festgelegt werden.
/> resattr Usage: resattr [ <options> ] -o <outFile> [ <inFile> ... ] Reads resources from zero or more input files and adds them as attributes to the specified output file, or (in reverse mode) reads attributes from zero or more input files and adds them as resources to the specified output file. If not existent the output file is created as an empty file. (...)
Im Wesentlichen handelt es sich hierbei um einen „Klebstoff“, der eine Hin- und Her-Konvertierung zwischen (zuverlässigen) Ressourcen und (schnellen) Dateisystemattributen durchführt. Und da das System den Empfang von Ressourcen übernimmt und die Kopie automatisch ausführt, werde ich mich darüber nicht weiter Gedanken machen.
Magische HPKG-Pakete
Derzeit (meistens) werden .hpkg
Pakete verwendet, um Haiku- .hpkg
zu erhalten. Lassen Sie sich nicht von einem einfachen Namen täuschen: Das .hpkg-Format funktioniert ganz anders als andere Formate mit ähnlichen Namen, auf die Sie gestoßen sind. Es hat echte Superkräfte.
Bei herkömmlichen Paketformaten war ich lange Zeit wegen dieser Tatsache verärgert: Sie laden eines herunter (Paket) und ein anderes ist auf dem System installiert (Dateien im Paket). Es ist schwierig genug, Dateien zu verwalten (z. B. zu löschen), wenn das Paket auf herkömmliche Weise installiert wird. Und das alles, weil der Paketinhalt über das gesamte Dateisystem verteilt ist , einschließlich der Orte, an denen der durchschnittliche Benutzer möglicherweise keinen Schreibzugriff hat. Das gleiche erzeugt eine ganze Klasse von Programmen - Paketmanager . Das Übertragen bereits installierter Software beispielsweise auf einen anderen Computer, einen Wechseldatenträger oder einen Dateiserver wird jedoch noch schwieriger, wenn nicht sogar unmöglich. In einem typischen Linux-basierten System können leicht mehrere hunderttausend bis Millionen separate Dateien vorhanden sein. Es versteht sich von selbst, dass es sowohl zerbrechlich als auch langsam ist, beispielsweise während der Erstinstallation des Systems, während der Installation, Aktualisierung und Entfernung regulärer Pakete sowie beim Kopieren eines Startvolumes (Root-Partition) auf ein anderes Medium.
Ich arbeite am AppImage-Projekt, einer Teilkrücke für Endbenutzeranwendungen. Dies ist ein Softwareverteilungsformat, das eine Anwendung und alle ihre Abhängigkeiten in einem einzigen Dateisystem-Image sammelt, das beim Start der Anwendung bereitgestellt wird. Dies vereinfacht die Dinge erheblich, da derselbe ImageMagick plötzlich zu einer einzigen Datei wird, die im Dateimanager von bloßen Sterblichen verwaltet wird. Die vorgeschlagene Methode funktioniert nur für Software, wie im Namen des Projekts angegeben, und hat auch eigene Wunden, da Leute, die Software für Linux liefern, immer ihre Pfeile auf mich richten.
Zurück nach Haiku. Haben Sie es geschafft, das optimale Gleichgewicht zwischen herkömmlichen Paketsystemen und der Bereitstellung von bildbasierter Software zu finden? Die .hpkg
Pakete .hpkg
tatsächlich komprimierte Dateisystem-Images. Beim Systemstart stellt der Kernel alle installierten und aktiven Pakete mit ungefähr den folgenden Kernelmeldungen bereit:
KERN: package_daemon [16042853: 924] active package: "gawk-4.2.1-1-x86_64.hpkg" KERN: package_daemon [16043023: 924] active package: "ca_root_certificates_java-2019_01_23-1-any.hpkg" KERN: package_daemon [16043232: 924] active package: "python-2.7.16-3-x86_64.hpkg" KERN: package_daemon [16043405: 924] active package: "openjdk12_default-12.0.1.12-1-x86_64.hpkg" KERN: package_daemon [16043611: 924] active package: "llvm_libs-5.0.0-3-x86_64.hpkg"
Cool, oder? Warte, es wird noch cooler!
Es gibt ein ganz besonderes Paket:
KERN: package_daemon [16040020: 924] active package: "haiku-r1~beta1_hrev53242-1-x86_64.hpkg"
Es enthält ein sehr minimales Betriebssystem, einschließlich des Kernels. Ob Sie es glauben oder nicht, selbst der Kernel selbst wird nicht aus dem Boot-Volume (Root-Partition) extrahiert, sondern sorgfältig aus dem .hpkg
Paket an seine Stelle .hpkg
. Wow! Ich habe bereits erwähnt, dass für mich ein Teil der allgemeinen Raffinesse und Kohärenz von Haiku darauf zurückzuführen ist, dass das gesamte System aus dem Kernel und dem Basisbenutzerbereich sowie die Verwaltung von Paketen und Infrastrukturen der Arbeitsumgebung gemeinsam von einem Team entwickelt werden. Stellen Sie sich vor, wie viele verschiedene Gruppen und Befehle erforderlich sind , um ein Linux-basiertes Projekt wie dieses auszuführen [Ich stelle mir ein PuppyLinux-Projekt vor - ca. Übersetzer] . Stellen Sie sich dann vor, wie lange es dauert, bis dieser Ansatz in Distributionen implementiert ist. Sie sagen: Nehmen Sie eine einfache Aufgabe, die auf verschiedene Darsteller aufgeteilt ist, und sie wird so kompliziert, dass sie nicht gelöst wird. Haiku öffnete in diesem Fall meine Augen. Ich denke, genau das passiert jetzt unter Linux (Linux ist in diesem Fall ein Sammelbegriff für den Stack Linux / GNU / dpkg / apt / systemd / Xorg / dbus / Gtk / GNOME / XDG / Ubuntu).
System-Rollback mit hpkg
Wie oft passiert die folgende Situation: Das Update war erfolgreich und es stellt sich heraus, dass etwas nicht so funktioniert, wie es sollte? Wenn Sie die üblichen Paketmanager verwenden, ist es schwierig, den Status des Systems auf den Zeitpunkt vor der Installation neuer Pakete zurückzusetzen (z. B. wenn ein Fehler aufgetreten ist). Einige Systeme bieten Problemumgehungen in Form von Snapshots des Dateisystems, sind jedoch recht umständlich und werden nicht auf allen Systemen verwendet. Bei Haiku wird dies mithilfe von .hpkg
Paketen gelöst. Wenn sich Pakete im System ändern, werden alte Pakete nicht gelöscht, sondern dauerhaft in Unterverzeichnissen der Form /Haiku/system/packages/administrative/state-<...>/
im System gespeichert. Unvollständige Vorgänge speichern ihre Daten in den Unterverzeichnissen /Haiku/system/packages/administrative/transaction-<...>/
.

Inhalt /Haiku/system/packages/administrative
. Verzeichnisse "state ..." enthalten Textdateien mit den Namen der aktiven Pakete, "transaction ..." - die Pakete selbst.
"Alter aktiver Zustand", d.h. Die Liste der .hpkg
Pakete, die vor den Änderungen aktiv sind, wird nach jedem Vorgang im Dateimanager in die Textdatei /Haiku/system/packages/administrative/state-<...>/activated-packages
. In ähnlicher Weise wird der neue "aktive Zustand" in die Textdatei /Haiku/system/packages/administrative/activated-packages
.
Das Verzeichnis /Haiku/system/packages/administrative/state-<...>/
enthält nur eine Textdatei mit einer Liste der aktiven Pakete dieses Status (wenn die Pakete ohne Deinstallation installiert wurden). Wenn die Pakete gelöscht oder aktualisiert wurden, enthält das /Haiku/system/packages/administrative/state-<...>/
alte Versionen von Paketen .
Wenn das System basierend auf der Liste der Pakete startet, wird die Entscheidung getroffen, die Pakete zu aktivieren (zu mounten). So einfach! Wenn während des Downloads etwas schief geht, können Sie den Download-Manager anweisen, eine andere, ältere Liste zu verwenden. Das Problem ist gelöst!

Haiku Bootloader. Jeder Einstiegspunkt zeigt einen entsprechenden "aktiven Zustand" an
Ich mag den Ansatz mit einfachen Textdateien als Liste des „aktiven Zustands“, in dem verständliche .hpkg
Namen .hpkg
. Dies steht in starkem Kontrast zu dem OSTree- oder Flatpak- Heap, der für Computer-aber-nicht-Personen im Dateisystem erstellt wurde (dieselbe Ebene wie die Microsoft-GUID).

Liste der aktiven Pakete für jeden Zeitpunkt
Konfigurationsdaten
Anscheinend enthält das Verzeichnis /Haiku/system/packages/administrative/writable-files
Konfigurationsdateien für Pakete, ist aber beschreibbar. Wie Sie sich erinnern, werden .hpkg
nur zum Lesen .hpkg
. Daher müssen diese Dateien vor dem Schreiben aus den Paketen kopiert werden. Es macht Sinn.
GUI-Integration für das .hpkg-System
Lassen Sie uns nun sehen, wie diese brillanten .hpkg
Pakete mit der Integration in eine User Experience (UX) -Umgebung .hpkg
. Schließlich ist Haiku für den persönlichen Gebrauch bestimmt. Persönlich habe ich die Messlatte hoch gelegt, indem ich die Benutzererfahrung mit .app
Paketen auf Macintosh mit der gleichen Erfahrung auf .hpkg
. Ich werde die Situation nicht einmal mit Arbeitsumgebungen unter Linux vergleichen, da sie im Vergleich zu anderen absolut schrecklich ist.
Folgende Szenarien fallen mir ein:
- Ich möchte den Inhalt des Pakets
.hpkg
- -,
- -,
- , Haiku ( , .)
- (, ) , ( ) ( , , ).
. , .
Mac Finder. ! ( , .pkg
, , ).
Haiku , "Contents" , . .
, () .hpkg
, . ( , .hpkg
Expander
, ).

HaikuDepot , , , README.md
Mac , HaikuDepot .
GUI
Mac , .dmg
.app
. , , , /Applications
Finder. , , . - Apple "" /Applications
( NeXT , ), $HOME/Applications
, .
Haiku , , "Install", . , , , HaikuPorts, . Linux , , — , . , Haiku.

'sanity' , , ( , ). Linux .
— , .hpkg
/Haiku/system/packages
( , -), /Haiku/home/config/packages
( ; — "config" , "settings"). Haiku (, — , , ).
Haiku, , .
GUI
Mac , , . Einfach!
Haiku , -, , , ( ). /Haiku/system/packages
( -), /Haiku/home/config/packages
( , "config" — ?). , .
Einfach! , . :

, /Haiku/system/packages
", " QtQuickApp. , — .hpkg
" " . , "", -.
mr. waddlesplash :
10 . , . .
, , , HaikuDepot? /Haiku/system/packages
, , "Uninstall". -, () «Install». «Uninstall», ?
, , "Install" . :

, .
:

"Apply changes" —
, , . [ , — . Übersetzer]
: "Uninstall", /Haiku/system/packages
, /Haiku/home/config/packages
.
, HaikuDepot, .
Mac. , Haiku , Mac. ( : " HaikuDepot, ++", ?)
-
, .hpkg
, (, " " - ).
Mac , .dmg
, .app
. .dmg
, /Applications
. , , , Apple. ( , Mac. , , AppImage , . = . !)
Haiku , apps/
packages/
, , . , apps/
:

, .hpkg
( , ), .
: GUI .hpkg
, Alt+D. " ". , /system
( /system/packages
/system/settings
) packagefs (, df
?). , mount
( ), mountvolume
( loop .hpkg
""), .
, AppImage ( , , ). , , Haiku , Mac.
: , "" «». , "" «": , ( , , ). ?
Mac , .app
, — .
Haiku , , .
: ```.hpkg , , .
Mac. , . Haiku .hpkg
, ...
. , (, , Windows, Mac Linux) . , -, , , [ , Windows… — . ].
, , Windows Linux.
Mac , — .dmg
. , , MacOS -. , , java.
Haiku .hpkg
, , java, , java , . .hpkg
, , Haiku - , , Haiku?
Mac.
mr. waddlesplash:
, .hpkg
-, Haiku, 15 . , . .
.
, .hpkg
(, ) , ( ). ( ) — , () , . , .
Mac .app
Finder, . . Einfach!
Haiku , , .hpkg
, , . , , GUI.
Mac.
mr. waddlesplash:
. , , . .
.
: ( LAN ) , , (, Zeroconf), . , app_flags
.
hpkg c GUI
, - .hpkg
GUI . , , UX...
: Kernel Debug Land
kernel panic , syslog | grep usb
. , Haiku Kernel Debug Land. , kernel panic? , Alt+PrintScn+D ( Debug). Programmer's Key , Macintosh ( , ).
Fazit
, Haiku , .
Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, , .
, .hpkg
, Snappy, Flatpak, AppImage, btrfs, " " Mac.
- "" , , .hpkg
, — . , . Mac.
, , , ( Gtk, Electron — , ), 3d , . . , , .
, Haiku .
, ?
- BeScreenCapture GIF, Peek. ffmpeg, Haiku. .
- ,
- WonderBrush, —
- Haiku, , . Krita, (. ). . .
Probieren Sie es selbst aus! Schließlich bietet das Haiku-Projekt tägliche Download-Bilder von DVD oder USB. Laden Sie zur Installation einfach das Image herunter und schreiben Sie es mit Etcher auf ein USB-Flash-Laufwerk
Hast du eine Frage? Wir laden Sie zum russischsprachigen Telegrammkanal ein .
Fehlerübersicht: Wie Sie sich in C und C ++ in den Fuß schießen. Haiku OS Rezeptsammlung
: Haiku.
: