Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen

TL; DR: Haiku ass e Betribssystem speziell fir PCs entworf, sou datt et e puer Tricken huet, déi säin Desktopëmfeld vill besser maachen wéi anerer. Awer wéi funktionnéiert et?

Viru kuerzem Ech entdeckt Haiku, en onerwaart gutt System. Ech sinn nach ëmmer iwwerrascht wéi glat et leeft, besonnesch am Verglach mat Linux Desktop-Ëmfeld. Haut kucken ech ënnert der Hood. Wou néideg fir am-Déift Versteesdemech, Ech wäert Vergläicher mat der Original Macintosh, Mac OS X a Linux Desktop Ëmfeld maachen (XDG Standard vun freedesktop.org).

Ressourcen an ELF Dateien

Gëschter hunn ech geléiert datt IconOMatic Ikonen an rdef Ressourcen an ELF Ausféierbar späichere kann. Haut wëll ech kucken wéi et wierklech funktionnéiert.

Ressourcen? Zitat от Bruce Horn, den ursprénglechen Auteur vum Macintosh Finder an de "Papp" vum Macintosh Ressource Manager:

Ech si besuergt iwwer déi steif Natur vun der traditioneller Kodéierung. Fir mech ass déi ganz Iddi vun enger Applikatioun déi am Code gefruer ass, ouni d'Fäegkeet eppes dynamesch z'änneren, ass déi wildest Wild. Et sollt méiglech sinn sou vill wéi méiglech während der Runtime z'änneren. Natierlech kann den Applikatiounscode selwer net geännert ginn, awer sécher kann eppes geännert ginn ouni de Code nei ze kompiléieren?

Op dem Original Macintosh hunn se dës Dateien eng "Datenabschnitt" an eng "Ressource Sektioun" gemaach, wat et onheemlech einfach gemaach huet Saache wéi Ikonen, Iwwersetzungen an dergläiche ze späicheren. an ausführbare Dateien.

Op Mac gëtt dëst benotzt ResEdit, e grafesche Programm fir - op eemol - Ressourcen z'änneren.

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
ResEdit op der original Macintosh

Als Resultat gouf et méiglech Ikonen, Menüartikelen, Iwwersetzungen, asw. einfach genuch, awer se "reesen" nach ëmmer mat den Uwendungen.
Op alle Fall hat dës Approche e groussen Nodeel: et huet nëmmen op Apple Dateisystemer geschafft, wat ee vun de Grënn war firwat Apple d'"Ressource Sektioun" opginn huet wann se op Mac OS X geplënnert sinn.
Op Mac OS X wollt Apple eng Dateisystem-onofhängeg Léisung, sou datt se d'Konzept vu Packagen (vu NeXT) ugeholl hunn, Verzeichnisser déi als "opaken Objekter" vum Dateemanager behandelt ginn, wéi Dateien anstatt Verzeichnungen. All Package mat enger Applikatioun am Format .app huet ënner anerem en Dossier Info.plist (an enger Aart vun Apple Äquivalent vun JSON oder YAML) mat Applikatioun Metadaten.

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Schlësselen fir d'Info.plist Datei aus dem Mac OS X Applikatiounspaket.

Ressourcen, wéi Symboler, UI Dateien, an anerer, ginn am Package als Dateie gespäichert. D'Konzept ass tatsächlech zréck op seng Wuerzelen an NeXT.

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Mathematica.app op NeXTSTEP 1.0 am Joer 1989: erschéngt als Verzeechnes vun Dateien am Terminal, awer als eenzegen Objet am grapheschen Dateiemanager.

Loosst eis zréck op BeOS, d'Konzepter op deenen den Haiku baséiert. Seng Entwéckler, beim Wiessel vu PEF (PowerPC) op ELF (x86) (d'selwecht wéi op Linux benotzt), hunn decidéiert eng Ressource Sektioun um Enn vun den ELF Dateien ze addéieren. Et huet net seng eegen ELF Sektioun benotzt, et gouf einfach um Enn vun der ELF Datei bäigefüügt. Als Resultat vum Programm strip an anerer aus binutils, net bewosst vun dëser, einfach ofgeschnidden. Dofir, wann Dir Ressourcen op eng ELF Datei op BeOS bäidréit, ass et besser net mat Linux Tools ze manipuléieren.

Wat ass elo mam Haiku lass? Am Fong, méi oder manner d'selwecht.

Theoretesch wier et méiglech, Ressourcen an der gewënschter Sektioun vum ELF ze placéieren. Laut den Entwéckler um #haiku Kanal op irc.freenode.net:

Mat ELF géif d'Sektioun méi Sënn maachen ... deen eenzege Grond firwat mir et net esou maachen ass well et ass wat mir am BeOS gemaach hunn."
An et huet kee Sënn dat elo ze änneren.

Ressource Gestioun

Ressourcen ginn an engem strukturéierte "Ressource" Format geschriwwe: am Fong eng Lëscht vu Ressourcen mat Gréissten an dann hiren Inhalt. Ech erënnere mech ar Format.
Wéi kontrolléiert d'Ressourcen an Haiku? Gëtt et eppes wéi ResEdit?
Nëmmen Dokumentatioun:

Fir d'Ressourcen ze gesinn, déi am Applikatiounspaket geliwwert ginn, kënnt Dir déi ausführbar Datei op e Programm zéien wéi Ressourcer. Dir kënnt och op den Terminal goen an de Kommando ausféieren listres имя_файла.

Resourcer ass verfügbar an HaikuDepot, awer et klappt just fir mech.

Wéi verwalten ech Ressourcen an ELF Dateien? Benotzt rsrc и rdef. rdef Dateien gesammelt ginn rsrc. Fichier rdef ass am einfachen Textformat gespäichert, sou datt et vill méi einfach ass mat ze schaffen. Dateiformat rsrc um Enn vun der ELF Datei ugeschloss. Loosst eis probéieren ze spillen:

~> 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

Dir kënnt de Programm benotzen xres fir Iwwerpréiwung a Kontroll:

/> 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, loosst eis probéieren?

/> 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

Méi iwwer Ressourcen a Format rdef kann liesen hei.

Standard Ressource Zorte

Och wann Dir alles a Ressourcen setzen kënnt, ginn et e puer definéiert Standardtypen:

  • app_signature: MIME Applikatiounstyp, fir Datei oppe Mapping, Start, IPC, etc.
  • app_name_catalog_entry: Well den Applikatiounsnumm normalerweis op Englesch ass, kënnt Dir d'Plaze spezifizéieren wou déi iwwersat Nimm lokaliséiert sinn, sou datt Benotzer vu verschiddene Sprooche den iwwersaten Applikatiounsnumm gesinn wann Dir wëllt.
  • app_version: genau wat Dir geduecht hutt
  • app_flags: weist registrar wéi d'Applikatioun ze veraarbecht. Ech mengen, et ass méi dran, wéi et den Aen erlieft. Zum Beispill gëtt et B_SINGLE_LAUNCH, wat de System forcéiert, en neien Uwendungsprozess ze starten all Kéier wann de Benotzer et freet (dee selwechte Prinzip gëtt fir déi meescht Applikatiounen op Linux benotzt). Iessen B_MULTIPLE_LAUNCH, wouduerch de Prozess leeft fir all Fichier. Endlech gëtt et B_EXCLUSIVE_LAUNCH, wat de System forcéiert nëmmen ee Prozess gläichzäiteg ze lancéieren, egal wéi dacks d'Benotzer et lancéieren (zum Beispill, dëst ass wéi Firefox op Linux leeft; datselwecht Resultat kann an Qt Uwendungen mat der Funktioun erreecht ginn QtSingleApplication). Uwendungen mat B_EXCLUSIVE_LAUNCH ginn informéiert wann de Benotzer probéiert se erëm ze lafen: zum Beispill kréien se de Wee vun der Datei, déi de Benotzer mat hirer Hëllef opmaache wëllt.
  • vector_icon: Vektorapplikatiounsikon (BeOS hat keng Vektorikonen, déi meescht Uwendungen haten amplaz zwee Rasterikonen an hiren ausführbaren Dateien).

Natierlech kënnt Dir Ressourcen mat all gewënschten IDen an Typen addéieren, a liesen se dann an der Applikatioun selwer oder aner Uwendungen mat der Klass BResources. Awer als éischt, loosst eis dat faszinéierend Thema vun Ikonen kucken.

Vektor Symboler am Haiku Stil

Natierlech huet net nëmmen Haiku dat bescht Ikonformat gewielt; an dësem Deel ass d'Situatioun mat Linux Desktop-Ëmfeld wäit vun 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

Wann een dat ukuckt, kann ee scho spieren, wéi ee Stéck et ass.

Natierlech gëtt et skalierbar, déi enthält, wéi Dir kënnt verstoen, Vektorikonen. Firwat gëtt et dann soss eppes? Well d'Resultat vun Zeechnen Vecteure Grafiken a klenge Gréisste vläicht manner wéi ideal. Ech géif gären verschidden Optiounen fir verschidde Gréissten optimiséiert hunn. An Linux Desktop-Ëmfeld gëtt dëst erreecht andeems Ikonen vu verschiddene Gréissten am ganze Dateiesystem verdeelen.

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

Notéiert w.e.g.: et gëtt kee Konzept vu verschiddene Versioune vu Firefox. Also ass et net méiglech d'Situatioun graziéis ze handhaben vu multiple Versioune vun enger Applikatioun um System.

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Verschidde Firefox Symboler a verschiddene Versiounen. Et ass de Moment onméiglech dëst am Linux ouni verschidde Krutchen ze handhaben.

Mac OS X geréiert et e bësse méi subtil:

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

Et kann gesi ginn datt et eng Datei ass firefox.icns am Package Firefox.app, déi all Gréissten enthält, sou datt verschidde Versioune vun der selwechter Applikatioun verschidde Symboler hunn.
Vill besser! Ikonen reesen mat der Applikatioun, all Ressourcen sinn an enger Datei.

Komme mer zréck op Haiku. Eng verstänneg Léisung, keng Ausnahmen. Geméiss Dokumentatioun:

E spezielle HVIF Format, héich optimiséiert fir kleng Gréissten a séier Rendering, gouf entwéckelt. Dofir sinn eis Ikonen zum gréissten Deel vill méi kleng wéi am Raster oder am wäit benotzte SVG Format.

A si sinn nach ëmmer optimiséiert:

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Ikongréissten am HVIF am Verglach mat anere Formater.

Den Ënnerscheed ass eng Uerdnung vun der Gréisst!

Awer d'Magie hält net hei op. Déi selwecht HVIF kann verschidden Niveauen vun Detail weisen ofhängeg vun der ugewisen Gréisst, och wann et e Vecteure Format ass.

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Verschidden Niveau vun Detail (LOD) je Render- Gréisst

Elo iwwer d'Nodeeler: Dir kënnt SVG net huelen, et an ImageMagick werfen an en Dag nennen; Dir musst duerch e puer Zyklen goen fir eng Ikon am HVIF Format ze kreéieren. hei Erklärungen. Wéi och ëmmer, IconOMatic kann SVG ganz imperfekt importéieren; ongeféier 90% vun SVG Detailer sinn mat e puer Wahrscheinlechkeet importéiert, déi reschtlech 10% muss manuell konfiguréiert a geännert ginn. Liest méi iwwer wéi HVIF seng Magie mécht kënnen an der Rei Leah Ganson

Füügt eng Ikon an d'Applikatioun

Elo kann ech eng Ikon op de erstallt Package derbäisetzen d'lescht Kéier, all d'Informatioune berécksiichtegt.
Gutt, well ech net besonnesch gäeren meng eege Ikon fir meng "Hallo, Welt" QtQuickApp grad elo ze zéien, zéien ech et aus Qt Creator.

/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

Loosst eis kucken ob d'Ikon kopéiert gouf:

/Haiku/home> xres -l /Haiku/home/QtQuickApp/QtQuickApp/Haiku/home/QtQuickApp/QtQuickApp
resources:type           ID        size  name
------ ----------- -----------  --------------------
'VICN'         101      152238  BEOS:ICON

Gesäit gutt aus, awer firwat ass et datt wann déi nei Ikon kopéiert gëtt, se net opdaucht?

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Déi kopéiert VICN:101:BEOS:ICONs gëtt nach net als Applikatiounsikon am Dateiemanager benotzt

Wat hunn ech verpasst?

Entwéckler Kommentar:

Mir mussen eng Datei erstellen rdef mat all Ressourcen, fuert dann de Kommando aus rc имя.rdef, dëst wäert d'Datei erstellen .rsrc. Da musst Dir de Kommando ausféieren resattr -o имя_бинарника имя.rsrc. Op e Minimum benotzen ech Kommandoen wéi dës fir Ikonen op meng Skripte ze addéieren.

Gutt, ech wollt eng Ressource erstellen, net en Attribut. Ech si wierklech duercherneen.

Smart Caching mam Dateiesystem benotzt

ELF Attributer opzemaachen an ze liesen ass lues. Wéi ech uewen geschriwwen hunn, ass d'Ikon als Ressource an der Datei selwer geschriwwe ginn. Dës Method ass méi zouverlässeg an erlaabt Iech d'Kopie op en anere Dateiesystem z'iwwerliewen. Wéi och ëmmer, et gëtt dann och zum Beispill zum Dateiesystem Attribut kopéiert BEOS:ICON. Dëst funktionnéiert nëmmen op bestëmmte Dateiesystemer, wéi BFS. D'Ikonen, déi vum System ugewise ginn (an Tracker an Deskbar) ginn aus dësem erweiderten Attribut gelies, well dës Léisung séier funktionnéiert. Op e puer Plazen (wou Geschwindegkeet net wichteg ass, zum Beispill eng typesch "Iwwer" Fënster), kritt de System d'Ikon direkt vun der Ressource an der Datei. Mä dëst ass net d'Enn. Denkt drun, op Mac kënnen d'Benotzer Symboler vun Uwendungen, Verzeichnisser, Dokumenter mat hiren eegenen ersetzen, well op Mac ass et méiglech dës "wichteg" Saachen ze maachen, zum Beispill ersetzt eng nei Slack Ikon mat der viregter. Op Haiku sollt Dir un d'Ressource (an der Datei) denken als d'originell Ikon déi mat der Applikatioun kënnt, an den Attribut (am BFS Dateiesystem) als eppes wat de Benotzer erlaabt Ännerungen no Wëllen ze maachen (obwuel, Hiweis, d'GUI fir eng personaliséiert Ikon uewen op der Ikon ze setzen ass fakultativ).

Iwwerpréift Dateisystem Attributer

Mat der Hëllef vun resaddr Et ass méiglech Dateiesystemattributer ze kontrolléieren an ze setzen.

/> 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.
(...)

Et ass am Wesentlechen de "Kleb" deen d'Konversioun ausféiert tëscht (zouverlässeg) Ressourcen an (schnell) Dateiesystem Attributer. A well de System erwaart Ressourcen ze kréien an d'Kopie automatesch mécht, maachen ech mech keng Suergen doriwwer.

D'Magie vun hpkg Packagen

Momentan (meeschtens) Packagen gi benotzt fir Programmer op Haiku ze kréien .hpkg. Loosst Iech net duerch den einfachen Numm täuschen: den .hpkg-Format funktionnéiert ganz anescht wéi aner Formater mat ähnlechen Nimm, déi Dir begéint hutt, et huet richteg Supermuechten.

Mat traditionelle Packageformate war ech laang opgeregt wéinst dëser Tatsaach: Dir download eng Saach (Package), an eng aner ass um System installéiert (Dateien am Package). Et ass zimmlech schwéier Dateien ze verwalten (zum Beispill se läschen) wann Dir e Package op traditionell Manéier installéiert. An alles well den Inhalt vum Package duerch de Dateiesystem verspreet, dorënner Plazen wou den duerchschnëttleche Benotzer kee Schreifzougang huet. Dëst entsteet eng ganz Klass vu Programmer - Package Manager. Awer schonn installéiert Software iwwerdroen, zum Beispill, op eng aner Maschinn, eraushuelbare Scheif oder Dateiserver gëtt nach méi schwéier, wann net komplett onméiglech. Op engem typesche Linux-baséiert System kann et einfach e puer honnertdausend bis Millioune vun eenzelne Fichier sinn. Et ass onnéideg ze soen datt dëst souwuel fragil a lues ass, zum Beispill wann Dir e System am Ufank installéiert, wann Dir regelméisseg Packagen installéiert, aktualiséieren an deinstalléiert, a wann Dir de Bootvolumen (Root Partition) op en anert Medium kopéiert.

Ech schaffen um AppImage-Projet, eng partiell Krut fir Ennbenotzer Uwendungen. Dëst ass e Software Verdeelungsformat deen eng Applikatioun an all seng Ofhängegkeeten an en eenzegt Dateisystembild sammelt dat montéiert ass wann d'Applikatioun ufänkt. D'Saache bedeitend vereinfacht, well dee selwechte ImageMagick op eemol an eng eenzeg Datei verwandelt, an engem Dateiemanager verwaltet vu just Stierwen. Déi proposéiert Method funktionnéiert nëmme fir Software, wéi am Numm vum Projet reflektéiert, an huet och säin eegene Set vu Probleemer, well d'Leit involvéiert fir Software fir Linux ze liwweren ëmmer de Pfeil op mech weisen.

Komme mer zréck op Haiku. War et méiglech den optimale Gläichgewiicht tëscht traditionelle Packagesystemer a Bildbaséierter Software Liwwerung ze fannen? Hir Pakete .hpkg tatsächlech kompriméiert Dateisystembiller. Wann de System bootet, montéiert de Kernel all installéiert an aktiv Packagen mat ongeféier de folgende Kernel Messagen:

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, jo? Halt drun, et gëtt nach méi cool!

Et gëtt e ganz spezielle Package:

KERN: package_daemon [16040020:   924] active package: "haiku-r1~beta1_hrev53242-1-x86_64.hpkg"

Et enthält e ganz minimalistesche Betribssystem, dorënner de Kernel. Gleeft et oder net, och de Kernel selwer gëtt net vum Bootvolumen (Root Partition) geläscht, awer suergfälteg op seng Plaz aus dem Package gelueden .hpkg. Wow! Ech hu scho gesot datt ech denken datt en Deel vun der Gesamtverfeinerung an der Konsequenz vun Haiku aus der Tatsaach kënnt datt de ganze System, vum Kernel a Kär Benotzerraum bis Package Management a Runtime Infrastruktur, zesumme vun engem Team entwéckelt gëtt. Stellt Iech vir wéi vill verschidde Gruppen an Teams et brauche fir sou eppes op Linux ze lafen [Ech stellen de PuppyLinux Projet vir - ca. Iwwersetzer]. Stellt Iech dann vir wéi laang et dauert bis dës Approche an d'Verdeelungen ugeholl gëtt. Si soen: Huelt en einfache Problem, deelt en tëscht verschiddenen Interpreten, an et gëtt sou komplizéiert datt et net méi méiglech ass ze léisen. Haiku an dësem Fall opgemaach meng Aen. Ech mengen dat ass genau dat wat elo op Linux geschitt (Linux an dësem Fall ass e kollektive Begrëff fir de Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu Stack).

System rollback mat hpkg

Wéi oft geschitt déi folgend Situatioun: den Update war erfollegräich, an da stellt sech eraus datt eppes net funktionnéiert wéi et soll? Wann Dir konventionell Package Manager benotzt, ass et schwéier den Zoustand vum System op e Punkt an der Zäit zréckzekommen ier nei Packagen installéiert goufen (zum Beispill am Fall wou eppes falsch gaang ass). E puer Systemer bidden Léisungen a Form vun Dateiesystem-Snapshots, awer si sinn zimlech ëmständlech a ginn net op all Systemer benotzt. Haiku léist dëst mat Packagen .hpkg. Wann ëmmer Packagen am System änneren, ginn déi al Packagen net geläscht, awer am System an Ënnerverzeechnungen wéi /Haiku/system/packages/administrative/state-<...>/ stänneg. Ongeschloss Operatiounen späicheren hir Donnéeën an Ënnerverzeechnungen /Haiku/system/packages/administrative/transaction-<...>/.

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Inhalt /Haiku/system/packages/administrative. D'"Staat ..." Verzeichnisser enthalen Textdateien mat den Nimm vun aktive Packagen, an d'"Transaktioun ..." Verzeichnisser enthalen d'Packagen selwer.

"Alen aktiven Zoustand", d.h. Lëscht .hpkg Pakete aktiv ier Ännerungen no all Operatioun am Dateemanager an enger Textdatei opgeholl ginn /Haiku/system/packages/administrative/state-<...>/activated-packages. Op eng ähnlech Manéier gëtt en neien "aktive Staat" an enger Textdatei geschriwwe /Haiku/system/packages/administrative/activated-packages.

directory /Haiku/system/packages/administrative/state-<...>/ enthält nëmmen eng Textdatei mat enger Lëscht vun aktive Packagen vun dësem Staat (am Fall vun Installatioun vu Packagen ouni Entfernung), a wann Packagen geläscht oder aktualiséiert goufen - de Staatsverzeichnis enthält al Versioune vu Packagen.

Wann de System booten, baséiert op der Lëscht vu Packagen, gëtt eng Entscheedung getraff fir (Mount) Packagen ze aktivéieren. Et ass sou einfach! Wann eppes falsch geet während dem Download, kënnt Dir dem Download Manager soen eng aner, méi al Lëscht ze benotzen. Problem geléist!

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Haiku Downloader. All Entrée weist en entspriechende "aktiven Zoustand"

Ech hu gär d'Approche fir einfach Textdateien als "aktive Staat" Lëscht ze hunn, mat Nimm déi einfach ze verstoen sinn .hpkg. Dëst steet am staarke Kontrast zu gebaut-fir-Maschinnen-net-fir-Leit. an enger Rëtsch vun OSTree oder Flatpak am Dateiesystem (am selwechten Niveau wéi Microsoft GUID).

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Lëscht vun aktive Packagen fir all Zäitpunkt

Configuratioun Donnéeën

Anscheinend, am Katalog /Haiku/system/packages/administrative/writable-files enthält Konfiguratiounsdateien fir Packagen, awer si sinn schrëftlech. No allem, wéi Dir Iech erënnert, .hpkg montéiert nëmmen liesen. Also dës Dateie mussen aus de Packagen kopéiert ginn ier Dir schreift. Huet d'Bedeitung.

GUI Integratioun fir .hpkg System

Loosst eis elo kucken wéi dës glänzend Poschen .hpkg mat der Integratioun an d'Aarbechtsumgebung vum Benotzer (UX) këmmeren. No allem ass Haiku fir perséinlech Notzung geduecht. Perséinlech hunn ech d'Bar héich gesat wann Dir d'Benotzererfarung mat Packagen vergläicht .app op Macintosh mat der selwechter Erfahrung op .hpkg. Ech wäert d'Situatioun net emol mat Aarbechtsëmfeld op Linux vergläichen, well et ass absolut schrecklech am Verglach mat all aneren.

Déi folgend Szenarie kommen am Kapp:

  • Ech wëll den Inhalt vun engem Package kucken .hpkg
  • Ech wëll e Pak installéieren
  • Ech wëll de Pak ewechhuelen
  • Ech wëll eppes ewechhuelen, wat an de System komm ass als Deel vun engem Package
  • Ech wëll eppes kopéieren wat an de System komm ass als Deel vun engem Package
  • Ech wëll all Ofhängegkeete vun engem Package eroflueden, wat vläicht net Deel vun all Haiku Installatioun ass (zum Beispill, ech hunn eng kierperlech isoléiert Maschinn ouni Internetzougang.)
  • Ech wëll meng Packagen (oder en Deel vun hinnen) getrennt op eng aner Plaz réckelen, getrennt vum Bootvolumen (Root Partition) (well ech zum Beispill net genuch Plaz drop hunn).

Dëst sollt déi meescht vun de grousse Fäll vu menger alldeeglecher Aarbecht ofdecken. Gutt, loosst eis ufänken.

Iwwerpréift Package Inhalt

Op Mac Ech klickt einfach op de Package fir opzemaachen an den Inhalt am Finder ze gesinn. No allem ass et an der Realitéit just e verkleeden Verzeechnes! (Ech weess datt et Packagen gëtt .pkg fir en Deel vum System deen net Uwendungen ass, awer normal Benotzer interagéiere meeschtens net mat hinnen).

Op Haiku Ech klickt op de Package, klickt dann op "Inhalter" fir ze kucken wat dobannen ass. Awer hei ass just eng Lëscht vu Dateien ouni d'Fäegkeet se opzemaachen andeems Dir duebel klickt.
Et wier vill besser wann et e Wee wier fir (temporär) de Package ze montéieren .hpkg duerch en Dateiemanager gekuckt ze ginn, an de Benotzer muss sech keng Suergen iwwer d'Implementatiounsdetailer këmmeren. (Iwwregens, Dir kënnt opmaachen .hpkg packen an Expander, déi et wéi all aner Archiv auspacke kann).

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
D'Interface vun HaikuDepot erlaabt Iech eng Lëscht vu Paketdateien ze gesinn, awer et gëtt kee Wee fir den Inhalt ze gesinn andeems Dir zum Beispill duebelklickt op README.md

De Mac gewënnt an dëser Kategorie, awer d'HaikuDepot Funktionalitéit bäizefügen déi Dir wëllt sollt net ze schwéier sinn.

Installéiert e Package iwwer GUI

Op Mac, meescht Scheif Biller .dmg Packagen enthalen .app. Duebelklickt op d'Disk Bild a kopéiert dann de Package, zum Beispill, andeems Dir et an zitt /Applications am Finder. Dat ass fir mech selbstverständlech, mee ech hunn héieren, datt e puer Newbies dëst vläicht net kënnen ze handhaben. Par défaut, Apple "proposéiert" e System-breet Verzeechnes /Applications (op NeXT war et vernetzt wéi och individuell), awer Dir kënnt Är Uwendungen einfach op engem Dateiserver oder an engem Ënnerverzeechnes setzen $HOME/Applications, wann dir et esou gefält.

Op Haiku, duebel klickt op de Package, klickt dann op "Installéieren", et kéint net méi einfach sinn. Ech froe mech wat geschitt wann e Package Ofhängegkeeten huet déi an HaikuPorts verfügbar sinn awer nach net installéiert sinn. Op Linux wësse se wierklech net wat se an dëser Situatioun maache sollen, awer d'Léisung ass offensichtlech - frot de Benotzer ob se Ofhängegkeeten eroflueden an installéieren. Genau wat Haiku mécht.

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Ech hunn de 'Sanity' Package manuell erofgelueden an drop geklickt, de Package Manager weess vu wou hien seng Ofhängegkeete kritt (ugeholl datt d'Repositories scho um System registréiert sinn). Net all Linux Verdeelung kann dëst maachen.

Eng aner Manéier ass e Dateiemanager ze benotzen, just zitt a fällt .hpkg Package oder an /Haiku/system/packages (fir eng System-breet Installatioun, par défaut), oder an /Haiku/home/config/packages (fir individuell Installatioun; net disponibel beim Duebelklick - Ech generéiere mech nach ëmmer vum Wuert "config" op dëser Plaz, wat fir mech an dësem Fall Synonym mat "Astellungen" ass). An d'Konzept vu méi Benotzer ass nach net emol fir Haiku verfügbar (dat ass wahrscheinlech firwat et sou einfach ass - ech weess et net, vläicht Multi-User Fäegkeeten onnéideg komplizéiere Saachen fir en Desktop Desktop Ëmfeld).

Haiku gewënnt an dëser Kategorie well et net nëmme mat Applikatiounen funktionéiere kann, awer och mat Systemprogrammer.

E Paket aus der GUI erofhuelen

Op Mac, Dir musst d'Applikatioun Ikon an d'Poubelle zéien, an dat ass alles. Einfach!

Op Haiku, als éischt musst Dir fannen wou de Package um System läit, well Dir se seelen op der richteger Plaz installéiert (de System mécht alles). Normalerweis musst Dir kucken /Haiku/system/packages (mat enger systembreet Standardinstallatioun), oder an /Haiku/home/config/packages (Hunn ech erwähnt datt "config" e falsche Bezeechnung ass?). Da gëtt d'Applikatioun einfach an d'Dreckskëscht geschleeft, an dat ass et.
Einfach! Dat géif ech awer net soen. Hei ass wat wierklech geschitt:

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Dëst ass wat geschitt wann Dir eng Applikatioun an den Dreckskëscht zitt /Haiku/system/packages

Just probéiert meng gëschter "Hello World" Applikatioun op QtQuickApp an den Dreck ze réckelen. Ech hunn net probéiert de Systemverzeechnes ze réckelen, a well all Packagen am Systemverzeechnes installéiert sinn, ass et onméiglech de Package ze läschen .hpkg ouni Ännerung "säin Inhalt". En normale Benotzer géif Angscht kréien an dréckt op de "Ofbriechen" Knäppchen, deen als Standard zougewisen ass.

Erklärt Mr. waddlesplash:

Dëse Post ass iwwer 10 Joer al. Wahrscheinlech musse mir et konfiguréieren sou datt d'Warnung nëmmen erschéngt wann de Package selwer geréckelt gëtt. Regelméisseg Benotzer brauchen dat iwwerhaapt net ze maachen.

Okay, vläicht soll ech dat mat HaikuDepot maachen? Ech duebel klickt op de Package an /Haiku/system/packages, waart bis de "Uninstall" Knäppchen erschéngt. Nee, et gëtt (nëmmen) "Installéieren". "Uninstalléieren", wou bass du?

Just fir Spaass hunn ech probéiert ze kucken wat geschitt wann ech op "Installéieren" op engem schonn installéierten Package klickt. Et stellt sech esou eraus:

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Dëst geschitt wann Dir probéiert e scho installéierte Package z'installéieren.

Nächst erschéngt:

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Wann Dir an der viregter Fënster op "Ännerungen uwenden" klickt, gesäit et esou aus

Ech huelen un datt dëst e Softwarefehler ass; de Link op d'Applikatioun ass schonn do. [den Auteur huet kee Link geliwwert - ca. Iwwersetzer]

Schnell Léisung: Füügt en "Uninstall" Knäppchen wann de Package scho dran ass /Haiku/system/packages, oder an /Haiku/home/config/packages.

Wann Dir d'Lëscht vun de Pakete kuckt, déi am HaikuDepot installéiert sinn, gesinn ech mäi Package an der Lëscht a kann et ewechhuelen.

De Mac gewënnt an dëser Kategorie. Awer ech ka mir virstellen datt mat engem richtege Setup d'Benotzererfarung op Haiku besser ass wéi op Mac. (Ee vun den Entwéckler huet et esou bewäert: "Manner wéi eng Stonn fir déi spezifizéiert Funktionalitéit op HaikuDepot ze addéieren, wann Dir e bësse C ++ kennt", all Fräiwëlleger?)

Ewechzehuelen eppes aus engem Pak

Loosst eis probéieren d'Applikatioun selwer ze läschen, net de Package .hpkg, aus deem et koum (Ech bezweifelen datt et fir "nëmmen Stierwen" en Ënnerscheed ass).

Op Mac, de Benotzer schafft eigentlech normalerweis mat der Datei .dmgwou kënnt den Applikatiounspaket hier .app. Normalerweis Biller .dmg ginn am Downloadverzeichnis gesammelt, a Pakete ginn vum Benotzer kopéiert /Applications. Et gëtt ugeholl datt vill Benotzer selwer net wëssen wat se maachen, dës Hypothese gëtt vun engem fréiere Apple Employé bestätegt. (Ee vun de Saachen, déi ech um Mac net gär hunn. An zum Beispill, mat AppImage gëtt et keen Ënnerscheed tëscht der Applikatioun an dem Package an deem et war. Zréck d'Ikon an den Dreck = dat ass et. Einfach!)

Op Haiku, et gëtt och eng Divisioun tëscht apps/ и packages/, Also ech bezweifelen datt dëst et méi kloer fir d'Benotzer gemaach huet. Awer wat geschitt wann Dir eng Applikatioun zitt apps/ An de Weenche leeën:

Mäi sechsten Dag mat Haiku: ënner der Hood vu Ressourcen, Ikonen a Packagen
Dëst ass wat geschitt wann Dir probéiert eng Applikatioun aus enger Datei ze läschen .hpkg

Technesch ass et richteg (schliisslech ass d'Applikatioun op der éischter Plaz op engem read-only Dateisystem gehost), awer et ass net besonnesch nëtzlech fir de Benotzer.

Schnell Léisung: proposéiere GUI ze benotzen fir amplaz ze läschen .hpkg

Just fir Spaass hunn ech probéiert d'Applikatioun ze duplizéieren andeems Dir Alt + D dréckt. Ech krut de Message "Kënnt net réckelen oder kopéieren Objeten op engem liesen-nëmmen Volume." An alles well /system (ausserdeem /system/packages и /system/settings) ass de Packagefs Mountpunkt (erënnert un wéi et an der Ausgab erscheint df?). Leider ass d'Ausgab vum Kommando mount klärt d'Situatioun net (wéi an engem vun de fréieren Artikelen gesot gouf), mountvolume weist net wat Dir sicht (anscheinend Pakete montéiert iwwer Loop .hpkg ginn net als "Bänn" ugesinn, an ech hunn och déi alternativ Kommandoen vergiess.

Keen huet an dëser Kategorie gewonnen ausser AppImage (awer dëst, fir ganz éierlech ze sinn, ass eng partiell Meenung). Allerdéngs kann ee sech virstellen datt nom Tweaking d'Benotzererfarung op Haiku besser ass wéi op Mac.

Opgepasst: Dir musst erausfannen wat e "Volumen" a Relatioun zu enger "Sektioun" ass. Dëst ass méiglecherweis ähnlech wéi d'Relatioun vum "Dossier" zum "Verzeichnis": déi meescht Verzeechnes erschéngen als Ordner am Dateiemanager, awer net all (Packagen, déi als Dateie behandelt ginn, zum Beispill). Maacht dës Aart vu Display mech en offiziellen Nerd?

Kopéiert den Inhalt vun engem Package an en anere System

Op Mac, Ech zéien domm de Pak .app, a well d'Ofhängegkeeten am Package sinn, plënneren se zesummen.

Op Haiku, Ech zéien d'Applikatioun, awer d'Ofhängegkeete ginn guer net veraarbecht.

Schnell Léisung: Loosst eis amplaz proposéieren de ganze `.hpkg Package ze zéien, zesumme mat all Ofhängegkeeten, wann iwwerhaapt.

De Mac gewënnt kloer an dëser Kategorie. Op d'mannst fir mech, e Liebhaber vun hirem Paradigma. Ech sollt et op Haiku kopéieren .hpkg amplaz vun enger Applikatioun, awer de System bitt mir dat net ...

Luet e Package mat all sengen Ofhängegkeeten erof

Net all Maschinn ass déi ganzen Zäit mam Netz ugeschloss. Am Géigendeel, verschidde Maschinnen (jo, ech kucken op Iech, modern Windows, Mac a Linux) vergiessen dëst. Et ass wichteg fir mech datt ech zum Beispill an en Internetcafé goen, Software op en eraushuelbare Drive eroflueden, dësen Drive a mengem Heemcomputer setzen a sécher sinn datt alles funktionnéiert [riskéiert Guy, mécht dat op Windows ... - ca. Iwwersetzer].

Als Resultat hunn ech e bësse méi dacks wéi gewinnt mat onerfëllte Ofhängegkeeten op Windows a Linux ophalen.

Op Mac dëst ass normalerweis eng Datei, alles wat Dir maache musst ass erofzelueden .dmg. Meeschtens huet et keng Ofhängegkeeten ausser déi vu MacOS selwer als Standard geliwwert. Eng Ausnam ass komplex Uwendungen déi e passend Ausféierungsëmfeld erfuerderen, zum Beispill Java.

Op Haiku download Pak .hpkg fir, soen, déi selwecht Applikatioun am Java, kann net genuch sinn, well Java kann oder vläicht net op der Zil- Maschinn präsent sinn. Gëtt et e Wee fir all Ofhängegkeete fir e bestëmmte Package erofzelueden .hpkg, Ausser déi, déi als Standard an Haiku installéiert sinn an dofir op all Haiku System solle sinn?

De Mac gewënnt dës Kategorie mat engem klenge Spillraum.

Kommentare Mr. waddlesplash:

Fir e Programm ze schreiwen fir all Ofhängegkeete vun enger Applikatioun als Set vu Packagen ze sammelen .hpkg fir een kennt mat der bannenzeg Aarbecht vun Haiku, ongeféier 15 Minutten ass genuch. Ënnerstëtzung fir dëst ze addéieren ass net sou schwéier wann et e reelle Bedierfnes dofir ass. Awer fir mech ass dëst eng rar Situatioun.

Loosst eis den Otem halen bis den nächsten Artikel an dëser Serie.

Plënneren Packagen op eng separat Plaz

Wéi ech virdru geschriwwen hunn, wëll ech meng Packagen placéieren .hpkg (gutt, oder en Deel vun hinnen) op eng speziell Plaz, getrennt vun der üblecher Placement op de Stiwwel Volumen (root Partition). Am üblechen (net sou theoreteschen) Fall ass de Grond dofir datt ech dauernd fräi Plaz op meng (built-in) Disks hunn, egal wéi grouss se sinn. An ech verbannen normalerweis extern Drive oder Netzdeelen, wou meng Uwendunge sinn.

Op Mac Ech plënneren just Packagen .app zu engem eraushuelbare Fuert oder Netzwierkverzeechnes am Finder, an dat ass et. Ech kann nach ëmmer duebelklickt fir d'Applikatioun opzemaachen wéi ech normalerweis vum Bootvolumen. Just!

Op Haiku, Wéi ech gesot hunn, kann dëst erreecht ginn andeems Dir meng .hpkg Packagen op en eraushuelbare Drive oder Netzwierkverzeechnes, awer da musst Dir e puer ondokumentéiert Kommandoen an der Konsole benotzen fir se um System ze montéieren. Ech weess net wéi ech dat maache mat nëmmen de GUI.

De Mac gewënnt an dëser Kategorie.

Laut dem Mr. waddlesplash:

Dëst ass eng Optimisatioun baséiert op normaler Benotzung. Wann et Nofro vu méi wéi engem Benotzer ass, wäerte mir et ëmsetzen. Op alle Fall ass et d'Méiglechkeet vun Drëtt Partei Ëmsetzung.

Mir schwätzen iwwer dëst am nächsten Artikel.

Apropos Netzverzeichnungen, et wier super (ech schätzen LAN Parteien) fir einfach, entdeckbar, Netzwierkbreet Uwendungen (wéi Zeroconf) ze hunn, déi op de lokalen Computer kopéiert kënne ginn oder direkt vum lokalen Netzwierk lafen. Natierlech, hunn d'Entwéckler d'Optioun aus via app_flags.

Finale Bericht iwwer d'Integratioun vum hpkg System mat der GUI

Ech mengen dat virun allem wéinst der relativer Neiheet vun der Integratioun .hpkg der GUI léisst nach vill ze wënschen. Jiddefalls, et ginn e puer Saachen déi kéinte verbessert ginn a punkto UX ...

Eng Saach méi: Kernel Debug Land

Et wier super, wann Dir zum Beispill Kommandoe wärend der Kernel Panik kënnt aginn syslog | grep usb. Gutt, op Haiku ass et méiglech dank dem Kernel Debug Land. Wéi kënnt Dir dës Magie an Handlung gesinn wann alles funktionnéiert wéi et soll ouni an eng Kernel Panik ze kommen? Einfach andeems Dir Alt+PrintScn+D dréckt (Debug mnemonic). Ech erënnere mech direkt Programméierer Schlëssel, déi et erlaabt hunn d'Original Macintosh Entwéckler den Debugger anzeginn (wann een natierlech installéiert gouf).

Konklusioun

Ech fänken un ze verstoen datt d'Raffinesséierung vum Haiku System aus der Tatsaach kënnt datt d'Aarbecht vun engem klenge Team mat engem klore Fokus op d'Aarbechtsumgebung duerchgefouert gëtt, mat all Schichten vum System zougänglech.
E schaarfe Kontrast zu der Welt vu Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, wou alles esou a kleng Stécker gebrach ass, datt d'Abstraktioun op Abstraktioun sëtzt a mat Krutzen fiert.
Et war och e Verständnis wéi de System .hpkg kombinéiert déi bescht Praktiken vun traditionelle Packagemanager, Snappy, Flatpak, AppImage, souguer btrfs, a vermëscht se mat dem Mac senger "just works" Approche.

Et war wéi wann eppes "geschalt" a mengem Kapp, an ech verstan wéi de System .hpkg weess wéi een ewechrullt, just andeems se op hatt kuckt. Awer et ass net ech, awer d'Schéinheet an d'Einfachheet vum System. Vill vun dësem ass vum Geescht vum Original Mac inspiréiert.

Jo, Surfen am Browser kann ruckeleg sinn a lafen wéi e Schleeke, Applikatioune kënnen feelen (kee Gtk, Electron - d'Entwéckler hunn ofgeschloss datt se net gutt mat Raffinesséierung goen), Video an 3D Beschleunigung kënne komplett fehlen, awer ech sinn ëmmer nach wéi et dëse System. Iwwerhaapt kënnen dës Saache korrigéiert ginn a si wäerte fréier oder spéider optrieden. Et ass nëmmen eng Fro vun Zäit a vläicht e bësse rout Aen.

Ech ka keng Hëllef ubidden, awer ech mengen, et fänkt vun elo un un Joer vun Haiku op Desktop.

Zoufälleg Problemer

Vläicht ginn et schonn Ufroen, oder soll ech se opmaachen?

  • BeScreenCapture soll fäeg sinn op GIF ze exportéieren wéi Peek. Dëst kann mat ffmpeg gemaach ginn, scho verfügbar fir Haiku. Applikatioun.
  • Screenshot Software feelt eng modal Fënster opzehuelen, amplaz de ganzen Écran opzehuelen
  • Dir kënnt Screenshots net mat WonderBrush's Cropping-Tool ernähren an dann d'Resultat op eng Datei späicheren
  • Den Handcursor am Haiku gefällt mer net besonnesch, mee ech mengen et huet mam waarme Nostalgesche Gefill ze dinn. Dëst ass besonnesch lästeg wann Dir de Crop-Tool a Krita benotzt, well et zu enger ongenauer Ausschneiden resultéiert (kuckt Screenshots vu modalen Dialogen an dësem Artikel). E Crosshair Cursor wier wonnerbar. Applikatioun.

Probéiert et selwer! No allem bitt den Haiku-Projet Biller fir op DVD oder USB ze booten, generéiert deeglech. Fir ze installéieren, luet just d'Bild erof a schreift se op e Flash Drive mat Etcher

Hutt Dir Froen? Mir invitéieren Iech op de russesch-allgemengen Telegramm Kanal.

Feeler Iwwersiicht: Wéi schéisst Dir Iech selwer an de Fouss an C an C++. Haiku OS Rezept Sammlung

aus Auteur Iwwersetzung: Dëst ass de sechsten Artikel an der Serie iwwer Haiku.

Lëscht vun den Artikelen: Déi éischt Déi zweet Drëtt Véierten Fënneften

Source: will.com

Setzt e Commentaire