Mein sechster Tag mit Haiku: unter der Haube von Ressourcen, Symbolen und Paketen


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 hast
  • app_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.


:

Source: https://habr.com/ru/post/de464819/


All Articles