Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov

TL; DR: Haiku je operačný systém špeciálne navrhnutý pre PC, takže má niekoľko trikov, vďaka ktorým je jeho desktopové prostredie oveľa lepšie ako ostatné. Ale ako to funguje?

nedávno Objavil som Haiku, nečakane dobrý systém. Stále som prekvapený, ako hladko to beží, najmä v porovnaní s desktopovými prostrediami Linuxu. Dnes nahliadnem pod kapotu. Ak je to potrebné pre hlbšie pochopenie, urobím porovnanie s pôvodnými desktopovými prostrediami Macintosh, Mac OS X a Linux (štandard XDG z freedesktop.org).

Zdroje v súboroch ELF

Včera som sa dozvedel, že IconOMatic dokáže ukladať ikony do zdrojov rdef v spustiteľných súboroch ELF. Dnes chcem vidieť, ako to naozaj funguje.

Zdroje? citácie od Bruce Horn, pôvodný autor Macintosh Finder a „otec“ Macintosh Resource Manager:

Obávam sa rigidnej povahy tradičného kódovania. Pre mňa je najdivokejšou divokosťou samotná myšlienka aplikácie zamrznutej v kóde bez možnosti dynamicky meniť čokoľvek. Za behu by sa malo dať zmeniť čo najviac. Samotný kód aplikácie sa samozrejme zmeniť nedá, ale určite sa dá niečo zmeniť aj bez prekompilovania kódu?

Na pôvodnom počítači Macintosh urobili tieto súbory „údajovou sekciou“ a „sekciou zdrojov“, vďaka čomu bolo neuveriteľne jednoduché ukladať veci, ako sú ikony, preklady a podobne. v spustiteľných súboroch.

Na Macu sa to používa ResEdit, grafický program na - náhle - úpravu zdrojov.

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
ResEdit na pôvodnom počítači Macintosh

V dôsledku toho bolo možné upravovať ikony, položky ponuky, preklady atď. dosť jednoduché, ale stále „cestujú“ s aplikáciami.
V každom prípade mal tento prístup veľkú nevýhodu: fungoval iba na súborových systémoch Apple, čo bol jeden z dôvodov, prečo Apple pri prechode na Mac OS X opustil „sekciu zdrojov“.
Na Mac OS X chcel Apple riešenie nezávislé na súborovom systéme, a tak prijal koncept balíčkov (od NeXT), adresárov, ktoré správca súborov považuje za „nepriehľadné objekty“, ako súbory, nie adresáre. Akýkoľvek balík s aplikáciou vo formáte .app má okrem iného aj súbor Info.plist (v nejakom ekvivalente JSON alebo YAML od Apple) obsahujúce metadáta aplikácie.

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Kľúče pre súbor Info.plist z balíka aplikácií Mac OS X.

Prostriedky, ako sú ikony, súbory používateľského rozhrania a iné, sú uložené v balíku ako súbory. Koncept sa vlastne vrátil ku svojim koreňom v NeXT.

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Mathematica.app na NeXTSTEP 1.0 v roku 1989: objavuje sa ako adresár súborov v termináli, ale ako jeden objekt v grafickom správcovi súborov.

Vráťme sa k BeOS, konceptom, na ktorých je založené Haiku. Jeho vývojári sa pri prechode z PEF (PowerPC) na ELF (x86) (rovnako ako sa používa na Linuxe) rozhodli pridať na koniec súborov ELF sekciu zdrojov. Nepoužil svoju vlastnú sekciu ELF, bol jednoducho pripojený na koniec súboru ELF. V dôsledku programu strip a iní z binutilov, ktorí si to neuvedomujú, to jednoducho odrežú. Preto pri pridávaní zdrojov do súboru ELF na BeOS je lepšie s ním nemanipulovať pomocou nástrojov Linuxu.

Čo sa teraz deje s Haiku? V podstate viac-menej to isté.

Teoreticky by bolo možné umiestniť zdroje do požadovanej časti ELF. Podľa vývojárov na kanáli #haiku na irc.freenode.net:

S ELF by sekcia dávala väčší zmysel... jediný dôvod, prečo to tak nerobíme, je ten, že sme to robili v BeOS."
A nemá zmysel to teraz meniť.

Riadenie zdrojov

Zdroje sú napísané v štruktúrovanom formáte „zdrojov“: v podstate ide o zoznam zdrojov s veľkosťami a potom ich obsahom. Som si spomenul formát ar.
Ako skontrolovať zdroje v Haiku? Existuje niečo ako ResEdit?
Podľa dokumentáciu:

Ak chcete zobraziť zdroje poskytované v balíku aplikácie, môžete spustiteľný súbor pretiahnuť do programu, ako je napr Resourcer. Môžete tiež prejsť na terminál a spustiť príkaz listres имя_файла.

Resourcer je dostupný v HaikuDepot, ale jednoducho mi spadne.

Ako spravovať zdroje v súboroch ELF? Použitím rsrc и rdef. rdef súbory sa zhromažďujú v rsrc. Súbor rdef je uložený vo formáte obyčajného textu, takže sa s ním oveľa jednoduchšie pracuje. Formát súboru rsrc pripojený na koniec súboru ELF. Skúsme sa zahrať:

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

Môžete použiť program xres na kontrolu a kontrolu:

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

Dobre, skúsime?

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

Viac o zdrojoch a formáte rdef môžeš čítať tu.

Štandardné typy zdrojov

Hoci do zdrojov môžete vložiť čokoľvek, existuje niekoľko definovaných štandardných typov:

  • app_signature: Typ aplikácie MIME, na mapovanie otvoreného súboru, spustenie, IPC atď.
  • app_name_catalog_entry: Keďže názov aplikácie je zvyčajne v angličtine, môžete určiť miesta, kde sa nachádzajú preložené názvy, aby používatelia v rôznych jazykoch v prípade potreby videli preložený názov aplikácie.
  • app_version: presne ako si myslel
  • app_flags: označuje registrar ako spracovať žiadosť. Myslím, že je v tom viac, ako sa na prvý pohľad zdá. Napríklad existuje B_SINGLE_LAUNCH, ktorá núti systém spustiť nový aplikačný proces vždy, keď o to používateľ požiada (rovnaký princíp sa používa pre väčšinu aplikácií na Linuxe). Jedzte B_MULTIPLE_LAUNCH, čo spôsobí spustenie procesu každý súbor. Nakoniec existuje B_EXCLUSIVE_LAUNCH, ktorá núti systém spúšťať vždy iba jeden proces bez ohľadu na to, ako často ho používatelia spúšťajú (takto beží napríklad Firefox na Linuxe; rovnaký výsledok možno dosiahnuť aj v Qt aplikáciách pomocou funkcie QtSingleApplication). Aplikácie s B_EXCLUSIVE_LAUNCH sú upozornení, keď sa ich používateľ pokúsi znova spustiť: napríklad dostanú cestu k súboru, ktorý chce používateľ s ich pomocou otvoriť.
  • vector_icon: Vektorová ikona aplikácie (BeOS nemal vektorové ikony, väčšina aplikácií namiesto toho mala vo svojich spustiteľných súboroch dve rastrové ikony).

Samozrejme, môžete pridať zdroje s ľubovoľnými požadovanými ID a typmi a potom ich prečítať v samotnej aplikácii alebo iných aplikáciách pomocou triedy BResources. Najprv sa však pozrime na fascinujúcu tému ikon.

Vektorové ikony v štýle Haiku

Samozrejme, nielen Haiku zvolilo najlepší formát ikony, v tejto časti je situácia s prostrediami Linuxu ďaleko od ideálu:

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

Už pri pohľade na to cítite, aký je to kus.

Samozrejmosťou je škálovateľnosť, ktorá obsahuje, ako iste chápete, vektorové ikony. Prečo potom existuje niečo iné? Pretože výsledok kreslenia vektorovej grafiky v malých veľkostiach môže byť menej ako ideálny. Chcel by som mať rôzne možnosti optimalizované pre rôzne veľkosti. V prostrediach Linuxu sa to dosiahne rozptýlením ikon rôznych veľkostí v celom súborovom systéme.

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

Poznámka: neexistuje žiadna koncepcia rôznych verzií Firefoxu. Nie je teda možné elegantne zvládnuť situáciu s viacerými verziami aplikácie v systéme.

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Rôzne ikony Firefoxu v rôznych verziách. V Linuxe to momentálne nie je možné zvládnuť bez rôznych barličiek.

Mac OS X to rieši o niečo jemnejšie:

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

Je vidieť, že existuje jeden súbor firefox.icns v balíku Firefox.app, ktorý obsahuje všetky veľkosti, takže rôzne verzie tej istej aplikácie majú rôzne ikony.
Oveľa lepšie! Ikony putujú s aplikáciou, všetky zdroje sú v jednom súbore.

Vráťme sa k Haiku. Ohromujúce riešenie, žiadne výnimky. Podľa dokumentáciu:

Bol vyvinutý špeciálny formát HVIF, vysoko optimalizovaný pre malé veľkosti a rýchle vykresľovanie. Preto sú naše ikony z väčšej časti oveľa menšie ako v rastri alebo v široko používanom formáte SVG.

A stále sú optimalizované:

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Veľkosti ikon v HVIF v porovnaní s inými formátmi.

Rozdiel je rádový!

Tu však kúzlo nekončí. Ten istý HVIF môže zobrazovať rôzne úrovne detailov v závislosti od zobrazenej veľkosti, aj keď ide o vektorový formát.

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Rôzne úrovne detailov (LOD) v závislosti od veľkosti renderu

Teraz o nevýhodách: nemôžete vziať SVG, hodiť ho do ImageMagick a zavolať ho deň; musíte prejsť niekoľkými cyklami, aby ste vytvorili ikonu vo formáte HVIF. tu vysvetlenia. IconOMatic však dokáže importovať SVG dosť nedokonale; asi 90 % detailov SVG je s určitou pravdepodobnosťou importovaných, zvyšných 10 % bude potrebné nakonfigurovať a zmeniť manuálne. Prečítajte si viac o tom, ako HVIF robí svoje kúzla jeden môže na blogu Leah Gansonová

Pridanie ikony do aplikácie

Teraz môžem pridať ikonu do vytvoreného balíka naposledyberúc do úvahy všetky prijaté informácie.
No, keďže práve teraz nechcem kresliť svoju vlastnú ikonu pre moju QtQuickApp „Ahoj, svet“, vytiahnem ju z 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

Skontrolujte, či bola ikona skopírovaná:

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

Vyzerá dobre, ale prečo sa nová ikona po skopírovaní nezobrazuje?

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Skopírované VICN:101:BEOS:ICONs sa zatiaľ nepoužívajú ako ikona aplikácie v správcovi súborov

O čo som prišiel?

Komentár vývojára:

Musíme vytvoriť súbor rdef so všetkými zdrojmi, potom vykonajte príkaz rc имя.rdef, tým sa vytvorí súbor .rsrc. Potom musíte spustiť príkaz resattr -o имя_бинарника имя.rsrc. Minimálne používam takéto príkazy na pridávanie ikon do mojich skriptov.

No, chcel som vytvoriť zdroj, nie atribút. Som naozaj zmätený.

Inteligentné ukladanie do vyrovnávacej pamäte pomocou systému súborov

Otváranie a čítanie atribútov ELF je pomalé. Ako som písal vyššie, ikona je zapísaná ako zdroj v samotnom súbore. Táto metóda je spoľahlivejšia a umožňuje vám prežiť kopírovanie do iného súborového systému. Potom sa však skopíruje napríklad aj do atribútu súborového systému BEOS:ICON. Toto funguje len na určitých súborových systémoch, ako je BFS. Ikony zobrazené systémom (v Trackeri a Deskbare) sa čítajú z tohto rozšíreného atribútu, pretože toto riešenie funguje rýchlo. Na niektorých miestach (kde rýchlosť nie je dôležitá, napríklad typické okno „O aplikácii“) systém dostane ikonu priamo zo zdroja v súbore. To však nie je koniec. Pamätajte, že na Macu môžu používatelia nahradiť ikony aplikácií, adresárov, dokumentov svojimi vlastnými, keďže na Macu je možné tieto „dôležité“ veci robiť napr. nahradenie novej ikony Slack predchádzajúcou. Na Haiku by ste mali považovať zdroj (v súbore) za pôvodnú ikonu, ktorá sa dodáva s aplikáciou, a atribút (v systéme súborov BFS) za niečo, čo používateľovi umožňuje vykonávať zmeny podľa vlastného uváženia (hoci, nápoveda, GUI na vloženie vlastnej ikony nad ikonu je voliteľné).

Kontrola atribútov systému súborov

S resaddr Je možné skontrolovať a nastaviť atribúty systému súborov.

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

Je to v podstate "lepidlo", ktoré vykonáva konverziu tam a späť medzi (spoľahlivými) zdrojmi a (rýchlymi) atribútmi súborového systému. A keďže systém očakáva príjem zdrojov a kopíruje automaticky, nebudem sa tým ďalej zaoberať.

Kúzlo hpkg balíkov

V súčasnosti (najčastejšie) sa na získanie programov na Haiku používajú balíčky .hpkg. Nenechajte sa zmiasť jednoduchým názvom: formát .hpkg funguje úplne inak ako iné formáty s podobnými názvami, s ktorými ste sa stretli, má skutočné superschopnosti.

Pri tradičných formátoch balíkov som bol kvôli tejto skutočnosti dlho rozrušený: stiahnete si jednu vec (balík) a ďalšia je nainštalovaná v systéme (súbory v balíku). Pri inštalácii balíka tradičným spôsobom je dosť ťažké spravovať súbory (napríklad ich mazať). A to všetko kvôli obsahu balenia rozptýlené po celom súborovom systémevrátane miest, kde bežný používateľ nemusí mať prístup na zápis. Vzniká tak celá trieda programov - správcov balíkov. Prenos už nainštalovaného softvéru, napríklad na iný počítač, vymeniteľný disk alebo súborový server, sa však stáva ešte zložitejším, ak nie úplne nemožným. Na typickom systéme založenom na Linuxe môže ľahko existovať niekoľko stoviek tisíc až miliónov jednotlivých súborov. Netreba dodávať, že je to krehké a pomalé, napríklad pri počiatočnej inštalácii systému, pri inštalácii, aktualizácii a odinštalovaní bežných balíkov a pri kopírovaní zavádzacieho zväzku (koreňového oddielu) na iné médium.

Pracujem na projekte AppImage, čiastočnej barličke pre aplikácie pre koncových používateľov. Toto je formát distribúcie softvéru, ktorý zhromažďuje aplikáciu a všetky jej závislosti do jedného obrazu systému súborov, ktorý sa pripojí pri spustení aplikácie. Výrazne to zjednodušuje, pretože rovnaký ImageMagick sa zrazu zmení na jeden súbor, ktorý v správcovi súborov spravujú obyčajní smrteľníci. Navrhovaná metóda funguje iba pre softvér, ako sa odráža v názve projektu, a má tiež svoj vlastný súbor problémov, pretože ľudia zapojení do dodávania softvéru pre Linux vždy ukazujú šípku na mňa.

Vráťme sa k Haiku. Podarilo sa nájsť optimálnu rovnováhu medzi tradičnými balenými systémami a poskytovaním softvéru založeného na obrázkoch? Jej balíčky .hpkg skutočne komprimované obrazy systému súborov. Keď sa systém spustí, jadro pripojí všetky nainštalované a aktívne balíky s približne nasledujúcimi správami jadra:

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"

Skvelé, áno? Vydržte, bude ešte chladnejšie!

Existuje veľmi špeciálny balík:

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

Obsahuje veľmi minimalistický operačný systém vrátane jadra. Verte tomu alebo nie, dokonca ani samotné jadro nie je odstránené zo zavádzacieho zväzku (koreňového oddielu), ale je starostlivo načítané na svoje miesto z balíka .hpkg. Wow! Už som spomenul, že si myslím, že časť celkovej prepracovanosti a konzistentnosti Haiku pochádza zo skutočnosti, že celý systém, od jadra a základného používateľského priestoru až po správu balíkov a runtime infraštruktúru, vyvíja spoločný tím jeden tím. Predstavte si, koľko rôznych skupín a tímov by si vyžadovalo spustenie niečoho takého na Linuxe [Predstavujem si projekt PuppyLinux - cca. prekladateľ]. Potom si predstavte, ako dlho bude trvať, kým sa tento prístup prevezme do distribúcií. Hovorí sa: zoberte jednoduchý problém, rozdeľte ho medzi rôznych interpretov a stane sa tak komplikovaným, že ho už nebude možné vyriešiť. Haiku mi v tomto prípade otvorilo oči. Myslím, že presne toto sa teraz deje na Linuxe (Linux je v tomto prípade súhrnný termín pre Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu stack).

Vrátenie systému pomocou hpkg

Ako často nastáva nasledujúca situácia: aktualizácia prebehla úspešne a potom sa ukáže, že niečo nefunguje tak, ako by malo? Ak používate konvenčných správcov balíkov, je ťažké vrátiť stav systému do bodu v čase pred nainštalovaním nových balíkov (napríklad v prípade, že sa niečo pokazilo). Niektoré systémy ponúkajú riešenia vo forme snímok systému súborov, ale sú dosť ťažkopádne a nepoužívajú sa na všetkých systémoch. Haiku to rieši pomocou balíkov .hpkg. Kedykoľvek sa balíky v systéme zmenia, staré balíky sa nevymažú, ale sú uložené v systéme v podadresároch ako /Haiku/system/packages/administrative/state-<...>/ neustále. Nedokončené operácie ukladajú svoje dáta do podadresárov /Haiku/system/packages/administrative/transaction-<...>/.

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
obsah /Haiku/system/packages/administrative. Adresáre „state...“ obsahujú textové súbory s názvami aktívnych balíkov a adresáre „transaction...“ obsahujú samotné balíky.

„Starý aktívny stav“, t.j. zoznam .hpkg balíčky aktívne pred zmenami sa zaznamenajú po každej operácii v správcovi súborov do textového súboru /Haiku/system/packages/administrative/state-<...>/activated-packages. Podobným spôsobom sa do textového súboru zapíše nový „aktívny stav“. /Haiku/system/packages/administrative/activated-packages.

adresár /Haiku/system/packages/administrative/state-<...>/ obsahuje iba textový súbor so zoznamom aktívnych balíkov tohto stavu (v prípade inštalácie balíkov bez odstránenia) a ak boli balíky odstránené alebo aktualizované - adresár stavu obsahuje staré verzie balíkov.

Keď sa systém nabootuje, na základe zoznamu balíkov sa rozhodne o aktivácii (pripojení) balíkov. Je to také jednoduché! Ak sa počas sťahovania niečo pokazí, môžete povedať správcovi sťahovania, aby použil iný, starší zoznam. Problém je vyriešený!

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Haiku downloader. Každý vstupný bod zobrazuje zodpovedajúci „aktívny stav“

Páči sa mi prístup k jednoduchým textovým súborom ako zoznamu „aktívnych stavov“ s názvami, ktoré sú ľahko zrozumiteľné .hpkg. To je v ostrom kontraste s tým, že sú vyrobené pre stroje, nie pre ľudí. v hromade z OSTree alebo Flatpak v súborovom systéme (na rovnakej úrovni ako Microsoft GUID).

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Zoznam aktívnych balíkov pre každý bod v čase

Konfiguračné údaje

Zrejme v katalógu /Haiku/system/packages/administrative/writable-files obsahuje konfiguračné súbory pre balíčky, ale je možné do nich zapisovať. Koniec koncov, ako si pamätáte, .hpkg namontované len na čítanie. Takže tieto súbory musia byť pred zápisom skopírované z balíkov. Má význam.

Integrácia GUI pre systém .hpkg

Poďme sa teraz pozrieť, ako tieto lesklé tašky .hpkg vyrovnať sa s integráciou do pracovného prostredia používateľa (UX). Koniec koncov, Haiku je určené na osobné použitie. Osobne som pri porovnávaní používateľskej skúsenosti s balíčkami nastavil latku vysoko .app na počítači Macintosh s rovnakými skúsenosťami .hpkg. Nebudem ani porovnávať situáciu s pracovnými prostrediami na Linuxe, pretože je to úplne hrozné v porovnaní s inými.

Do úvahy prichádzajú nasledujúce scenáre:

  • Chcem si pozrieť obsah balíka .hpkg
  • Chcem nainštalovať balík
  • Chcem odstrániť balík
  • Chcem odstrániť niečo, čo prišlo do systému ako súčasť balíka
  • Chcem skopírovať niečo, čo prišlo do systému ako súčasť balíka
  • Chcem si stiahnuť všetky závislosti balíka, ktoré nemusia byť súčasťou každej inštalácie Haiku (napríklad mám fyzicky izolovaný počítač bez prístupu na internet.)
  • Chcem svoje balíčky (alebo ich časť) presunúť samostatne na iné miesto, oddelene od zavádzacieho zväzku (koreňového oddielu) (pretože napríklad na ňom nemám dostatok miesta).

Toto by malo pokryť väčšinu hlavných prípadov z mojej každodennej práce. Nuž, začnime.

Kontrola obsahu balenia

Na Macu Jednoducho kliknem na balík pravým tlačidlom myši, otvorím ho a zobrazím obsah vo Finderi. Koniec koncov, v skutočnosti je to len prezlečený adresár! (Viem, že existujú balíčky .pkg pre časť systému, ktorá nie sú aplikáciami, ale bežní používatelia s nimi najčastejšie neinteragujú).

Na Haiku Kliknem pravým tlačidlom myši na balík a potom na „Obsah“, aby som zistil, čo je vo vnútri. Tu je však len zoznam súborov bez možnosti ich otvorenia dvojitým kliknutím.
Bolo by oveľa lepšie, keby existoval spôsob, ako (dočasne) namontovať balík .hpkg prezerať cez správcu súborov a používateľ by sa nemusel starať o detaily implementácie. (Mimochodom, môžete otvoriť .hpkg zabaliť do Expander, ktorý ho dokáže rozbaliť ako každý iný archív).

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Rozhranie HaikuDepot vám umožňuje zobraziť zoznam súborov balíkov, ale neexistuje spôsob, ako zobraziť obsah napríklad dvojitým kliknutím na súbor README.md

V tejto kategórii vyhráva Mac, ale pridanie požadovanej funkcie HaikuDepot by nemalo byť príliš ťažké.

Inštalácia balíka cez GUI

Na Macu, väčšina obrazov diskov .dmg obsahujú balíčky .app. Dvakrát kliknite na obraz disku a potom skopírujte balík, napríklad pretiahnutím /Applications vo Finderi. Pre mňa je to samozrejmé, ale počul som, že niektorí nováčikovia to nemusia zvládnuť. V predvolenom nastavení Apple „navrhuje“ adresár pre celý systém /Applications (na NeXT to bolo sieťové aj individuálne), ale svoje aplikácie môžete jednoducho umiestniť na súborový server alebo do podadresára $HOME/Applications, ak sa ti to tak páči.

Na Haiku, dvakrát kliknite na balík a potom kliknite na „Inštalovať“, už to nemôže byť jednoduchšie. Zaujímalo by ma, čo sa stane, ak má balík závislosti, ktoré sú dostupné v HaikuPorts, ale ešte nie sú nainštalované. Na Linuxe naozaj nevedia, čo robiť v tejto situácii, ale riešenie je zrejmé - opýtajte sa používateľa, či potrebuje stiahnuť a nainštalovať závislosti. Presne to, čo robí Haiku.

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Manuálne som stiahol balík 'sanity' a klikol naň, správca balíkov vie, odkiaľ získať jeho závislosti (za predpokladu, že úložiská sú už zaregistrované v systéme). Nie každá linuxová distribúcia to dokáže.

Ďalším spôsobom je použitie správcu súborov, stačí presunúť myšou .hpkg balík alebo v /Haiku/system/packages (predvolene pre celosystémovú inštaláciu) alebo v /Haiku/home/config/packages (pre individuálnu inštaláciu; nedostupné pri dvojitom kliknutí - stále ma na tomto mieste rozčuľuje slovo "config", ktoré je pre mňa v tomto prípade synonymom "nastavenia"). A koncept viacerých používateľov ešte nie je dostupný ani pre Haiku (asi preto je to také jednoduché – neviem, možno možnosti viacerých používateľov budú pre desktopové prostredie zbytočne komplikovať veci).

Haiku v tejto kategórii vyhráva, pretože dokáže pracovať nielen s aplikáciami, ale aj so systémovými programami.

Odstránenie balíka z GUI

Na Macu, musíte presunúť ikonu aplikácie do koša, a to je všetko. Jednoducho!

Na HaikuPo prvé, musíte nájsť, kde sa balík v systéme nachádza, pretože ho zriedka nainštalujete na správne miesto (systém robí všetko). Zvyčajne sa musíte pozrieť /Haiku/system/packages (s predvolenou inštaláciou pre celý systém) alebo v /Haiku/home/config/packages (Spomenul som, že „config“ je nesprávne pomenovanie?). Potom sa aplikácia jednoducho pretiahne do koša a je to.
Jednoducho! To by som však nepovedal. Tu je to, čo sa skutočne deje:

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
To sa stane, ak pretiahnete aplikáciu do koša /Haiku/system/packages

Práve som sa pokúsil presunúť moju včerajšiu aplikáciu „Hello World“ na QtQuickApp do koša. Nepokúšal som sa presunúť systémový adresár, a keďže všetky balíky sú nainštalované v systémovom adresári, nie je možné balík odstrániť .hpkg bez zmeny "jeho obsah". Bežný používateľ by sa zľakol a stlačil predvolene priradené tlačidlo „Zrušiť“.

Vysvetľuje Pán. waddlesplash:

Tento príspevok je starší ako 10 rokov. S najväčšou pravdepodobnosťou ho musíme nakonfigurovať tak, aby sa varovanie objavilo iba vtedy, keď sa presunie samotný balík. Bežní používatelia to aj tak nemusia robiť.

Dobre, možno by som to mal urobiť pomocou HaikuDepot? Dvakrát kliknem na balík /Haiku/system/packages, počkajte, kým sa zobrazí tlačidlo „Odinštalovať“. Nie, existuje (iba) „Inštalovať“. "Odinštalovať", kde si?

Len pre zábavu som sa pokúsil zistiť, čo by sa stalo, keby som klikol na „Inštalovať“ na už nainštalovanom balíku. Dopadá to takto:

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Toto sa stane, ak sa pokúsite nainštalovať už nainštalovaný balík.

Ďalej sa zobrazí:

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Ak v predchádzajúcom okne kliknete na „Použiť zmeny“, bude to vyzerať takto

Predpokladám, že ide o softvérovú chybu, odkaz na aplikáciu tam už je. [autor neuviedol link - cca. prekladateľ]

Rýchle riešenie: Ak je balík už vložený, pridajte tlačidlo „Odinštalovať“. /Haiku/system/packages, alebo v /Haiku/home/config/packages.

Pri prezeraní zoznamu balíkov nainštalovaných v HaikuDepot vidím svoj balík v zozname a môžem ho odstrániť.

V tejto kategórii víťazí Mac. Viem si však predstaviť, že pri správnom nastavení bude používateľská skúsenosť na Haiku lepšia ako na Macu. (Jeden z vývojárov to ohodnotil takto: „Menej ako hodinu na pridanie špecifikovanej funkcionality do HaikuDepot, ak viete trochu C++“, nejakí dobrovoľníci?)

Odstránenie niečoho z balíka

Pokúsme sa odstrániť samotnú aplikáciu, nie balík .hpkg, z ktorej pochádza (pochybujem, že pre „obyčajných smrteľníkov“ je v tom nejaký rozdiel).

Na Macu, používateľ v skutočnosti zvyčajne pracuje so súborom .dmgodkiaľ pochádza balík aplikácie .app. Zvyčajne obrázky .dmg sa zhromažďujú v adresári sťahovania a používateľ do nich skopíruje balíčky /Applications. Predpokladá sa, že mnohí používatelia sami nevedia, čo robia, túto hypotézu potvrdzuje bývalý zamestnanec Apple. (Jedna z vecí, ktoré sa mi na Macu nepáčia. A napríklad pri AppImage nie je rozdiel medzi aplikáciou a balíkom, v ktorom bola. Presuňte ikonu do koša = to je všetko. Jednoduché!)

Na Haiku, existuje aj rozdelenie medzi apps/ и packages/, takže pochybujem, že to bolo pre používateľov jasnejšie. Čo sa však stane, ak pretiahnete aplikáciu z apps/ Pridať do košíka:

Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
Toto sa stane, keď sa pokúsite odstrániť aplikáciu prevzatú zo súboru .hpkg

Technicky je to správne (napokon, aplikácia je v prvom rade hostená na súborovom systéme iba na čítanie), ale pre používateľa to nie je obzvlášť užitočné.

Rýchle riešenie: namiesto toho navrhnite použiť GUI na odstránenie .hpkg

Len pre zaujímavosť som skúsil duplikovať aplikáciu stlačením Alt+D. Dostal som správu „Nie je možné presúvať alebo kopírovať objekty na zväzku iba na čítanie.“ A to všetko preto /system (okrem toho /system/packages и /system/settings) je bod pripojenia packagefs (pamätajte, ako sa zobrazuje vo výstupe df?). Bohužiaľ, výstup príkazu mount neobjasňuje situáciu (ako bolo povedané v jednom z predchádzajúcich článkov), mountvolume nezobrazuje to, čo hľadáte (zrejme balíky pripojené cez slučku .hpkg sa nepovažujú za "objemy") a tiež som zabudol na alternatívne príkazy.

V tejto kategórii okrem AppImage nevyhral nikto (ale ak mám byť úprimný, je to neobjektívny názor). Dá sa však predstaviť, že po úprave bude používateľská skúsenosť na Haiku lepšia ako na Macu.

Poznámka: musíte zistiť, čo je „zväzok“ vo vzťahu k „sekcii“. Toto je pravdepodobne podobný vzťah medzi „priečinkom“ a „adresárom“: väčšina adresárov sa v správcovi súborov zobrazuje ako priečinky, ale nie všetky (napríklad balíky považované za súbory). Robí zo mňa takéto zobrazovanie oficiálneho hlupáka?

Kopírovanie obsahu balíka do iného systému

Na Macu, hlúpo ťahám balík .appa keďže závislosti sú vo vnútri balíka, pohybujú sa spolu.

Na Haiku, pretiahnem aplikáciu, ale závislosti sa vôbec nespracúvajú.

Rýchle riešenie: Namiesto toho navrhneme pretiahnutie celého balíka `.hpkg spolu s prípadnými závislosťami.

V tejto kategórii jednoznačne víťazí Mac. Aspoň pre mňa, milovníka ich paradigmy. Mal by som to skopírovať do Haiku .hpkg namiesto aplikácie, ale toto mi systém neponúka...

Stiahnite si balík so všetkými jeho závislosťami

Nie každý stroj je neustále pripojený k sieti. Naopak, niektoré stroje (áno, pozerám na teba, moderné Windows, Mac a Linux) na toto zabúdajú. Je pre mňa dôležité, aby som mohol ísť napríklad do internetovej kaviarne, stiahnuť si softvér na vymeniteľný disk, vložiť tento disk do domáceho počítača a mať istotu, že všetko bude fungovať [riskantný chlapík, ktorý to robí na Windows... - približne. prekladateľ].

V dôsledku toho mám tendenciu skončiť s nesplnenými závislosťami na Windows a Linux o niečo častejšie ako zvyčajne.

Na Macu toto je zvyčajne jeden súbor, všetko, čo musíte urobiť, je stiahnuť .dmg. Najčastejšie nemá žiadne iné závislosti okrem tých, ktoré poskytuje samotný MacOS v predvolenom nastavení. Výnimkou sú zložité aplikácie, ktoré vyžadujú vhodné spúšťacie prostredie, napríklad java.

Na Haiku stiahnuť balík .hpkg Napríklad tá istá aplikácia v jazyku Java nemusí byť dostatočná, pretože Java môže alebo nemusí byť prítomná na cieľovom počítači. Existuje spôsob, ako stiahnuť všetky závislosti pre daný balík .hpkg, okrem tých, ktoré sú štandardne nainštalované v Haiku, a preto by mali byť na každom systéme Haiku?

Mac vyhráva túto kategóriu s malým náskokom.

Komentáre Mr. waddlesplash:

Napísať program na zhromažďovanie všetkých závislostí aplikácie ako sady balíkov .hpkg pre niekoho, kto pozná vnútorné fungovanie Haiku, stačí asi 15 minút. Pridanie podpory nie je také ťažké, ak je to skutočne potrebné. Ale pre mňa je to zriedkavá situácia.

Zatajme dych do ďalšieho článku z tejto série.

Presun balíkov na samostatné miesto

Ako som už písal, chcem umiestniť svoje balíčky .hpkg (dobre, alebo ich časť) na špeciálne miesto, oddelené od obvyklého umiestnenia na zavádzacom zväzku (koreňový oddiel). V bežnom (nie až tak teoretickom) prípade je to spôsobené tým, že mi neustále dochádza voľné miesto na mojich (zabudovaných) diskoch, bez ohľadu na to, aké sú veľké. A zvyčajne pripájam externé disky alebo sieťové zdieľania tam, kde sú umiestnené moje aplikácie.

Na Macu Len presúvam balíky .app na vymeniteľnú jednotku alebo sieťový adresár vo Finderi a je to. Stále môžem dvojitým kliknutím otvoriť aplikáciu ako normálne zo zavádzacieho zväzku. Len!

Na Haiku, ako mi bolo povedané, to sa dá dosiahnuť posunutím môjho .hpkg balíky na vymeniteľnú jednotku alebo sieťový adresár, ale potom musíte použiť niektoré nezdokumentované príkazy v konzole, aby ste ich mohli pripojiť do systému. Neviem, ako to urobiť iba pomocou GUI.

V tejto kategórii víťazí Mac.

Podľa p. waddlesplash:

Ide o optimalizáciu založenú na bežnom používaní. Ak bude dopyt od viacerých používateľov, zrealizujeme ho. V každom prípade je tu možnosť implementácie treťou stranou.

O tom si povieme v ďalšom článku.

Keď už hovoríme o sieťových adresároch, bolo by skvelé (tipujem, že LAN strany) mať jednoduché, objaviteľné celosieťové aplikácie (ako Zeroconf), ktoré by sa dali skopírovať na lokálny počítač alebo spustiť priamo z lokálnej siete. Vývojári majú samozrejme možnosť odhlásiť sa cez app_flags.

Záverečná správa o integrácii systému hpkg s GUI

Myslím si, že predovšetkým kvôli relatívnej novosti integrácie .hpkg GUI stále ponecháva veľa na želanie. Každopádne, existuje niekoľko vecí, ktoré by sa mohli zlepšiť z hľadiska UX...

Ešte jedna vec: Kernel Debug Land

Bolo by skvelé mať možnosť zadávať príkazy napríklad počas kernel paniky syslog | grep usb. No, na Haiku je to možné vďaka Kernel Debug Land. Ako môžete vidieť túto mágiu v akcii, ak všetko funguje tak, ako má, bez toho, aby ste sa dostali do jadrovej paniky? Jednoduché stlačením Alt+PrintScn+D (ladiaca mnemotechnická pomôcka). Hneď si spomeniem Programátorský kľúč, čo umožnilo pôvodným vývojárom Macintoshu vstúpiť do debuggera (ak bol, samozrejme, nainštalovaný).

Záver

Začínam chápať, že prepracovanosť systému Haiku pochádza zo skutočnosti, že prácu vykonáva jeden malý tím s jasným zameraním na pracovné prostredie, pričom všetky vrstvy systému sú dostupné.
Ostrý kontrast so svetom Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, kde je všetko rozbité na malé kúsky do takej miery, že abstrakcia sedí na abstrakcii a poháňa s barličkami.
Došlo aj k pochopeniu toho, ako systém .hpkg kombinuje osvedčené postupy tradičných správcov balíkov, Snappy, Flatpak, AppImage, dokonca aj btrfs, a spája ich s prístupom Macu „len funguje“.

Akoby sa mi v hlave niečo „preplo“ a ja som pochopil, ako funguje systém .hpkg vie, ako sa odkotúľať, len pri pohľade na ňu. Ale to nie som ja, ale krása a jednoduchosť systému. Veľa z toho je inšpirované duchom pôvodného Macu.

Áno, prehliadanie v prehliadači môže byť trhané a bežať ako slimák, aplikácie môžu chýbať (žiadne Gtk, Electron – vývojári dospeli k záveru, že so sofistikovanosťou neladia), úplne absentuje video a 3d akcelerácia, ale ja tento systém sa mi stále páči. Veď tieto veci sa dajú napraviť a skôr či neskôr sa objavia. Je to len otázka času a možno trochu červených očí.

Nemôžem vám ponúknuť pomoc, ale myslím, že to začne odteraz rok Haiku na ploche.

Náhodné problémy

Možno už existujú požiadavky, alebo ich mám otvoriť?

  • BeScreenCapture by mal byť schopný exportovať do GIF ako Peek. Dá sa to urobiť pomocou ffmpeg, ktorý je už dostupný pre Haiku. prihláška.
  • Softvér na snímanie obrazovky nedokáže zachytiť modálne okno, namiesto toho zachytí celú obrazovku
  • Snímky obrazovky nemôžete orezať pomocou nástroja na orezanie WonderBrush a potom uložiť výsledok do súboru
  • Nemám rád kurzor ručičky v Haiku, ale myslím si, že to súvisí s teplým nostalgickým pocitom. Toto je obzvlášť nepríjemné pri používaní nástroja na orezanie v Krite, pretože to vedie k nepresnému orezaniu (pozri snímky obrazovky modálnych dialógov v tomto článku). Zameriavací kurzor by bol úžasný. prihláška.

Skúste to sami! Koniec koncov, projekt Haiku poskytuje vygenerované obrázky na zavedenie z DVD alebo USB denná. Ak chcete nainštalovať, stačí stiahnuť obrázok a zapísať ho na flash disk pomocou ten, kto leptá

Máte nejaké otázky? Pozývame vás na rusky hovoriaci telegramový kanál.

Prehľad chýb: Ako si vystreliť do nohy v C a C++. Zbierka receptov Haiku OS

Od autora preklad: toto je šiesty článok zo série o Haiku.

Zoznam článkov: Prvé Druhý Третья štvrtý piaty

Zdroj: hab.com

Pridať komentár