Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid

TL;DR: Haiku — operatsioonisĂŒsteem, mis on spetsiaalselt loodud arvutitele, seetĂ”ttu on sellel mĂ”ned nipid, mis muudavad selle töökeskkonna oluliselt paremaks kui teistel. Kuidas see aga töötab?

Hiljuti Avastasin Haiku, ĂŒllatavalt hea sĂŒsteemi. Olen jĂ€tkuvalt hĂ€mmingus, kui sujuvalt see töötab, eriti vĂ”rreldes Linuxi töökeskkondadega. TĂ€na heidan pilgu selle alla. Seal, kus on vajalik sĂŒgavam mĂ”istmine, teen vĂ”rdlusi originaalse Macintosh'i, Mac OS X ja Linuxi töökeskkondadega (freedesktop.org’i XDG standard).

Ressursid ELF-failides

Eile sain teada, et IconOMatic suudab salvestada ikoone rdef-resurssidena ELF-tÀidesaatevates failides. TÀna tahan vaadata, kuidas see tegelikult töötab.

Ressursid? Tsitaat alates Bruce Horn, originaalne Macintosh Finderi looja ja „isa“ Macintosh Resource Manager'ile:

Mind ajab, et traditsiooniline koodikirjutamise stiil on nii jĂ€ik. Minu jaoks on idee rakendusest, mis on koodis kĂŒlmutatud, ilma et oleks vĂ”imalik midagi dĂŒnaamiliselt muuta – ÀÀrmiselt ebaefektiivne. Peab olema vĂ”imalus muuta nii palju kui vĂ”imalik kĂ€itusaja jooksul. Loomulikult ei saa rakenduskoodi muuta, kuid kas midagi ei saaks siiski muuta ilma koodi taas kompileerimata?

Originaalsel Macintoshil oli vĂ”imalus, et nendel failidel on „andmesection” ja „ressursside section”, mis tegi erinevate asjade, nĂ€iteks ikoonide ja tĂ”lgete salvestamise, erakordselt lihtsaks.exe faile.

Macil kasutatakse selleks ResEdit, graafikaprogrammi jaoks – ootamatult – ressursside redigeerimiseks.

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
ResEdit originaalsel Macintoshil

Tulemusena tekkis vĂ”imalus redigeerida ikoone, menĂŒĂŒelemente, tĂ”lkeid jne piisavalt lihtsalt, kuid nad liiguvad ikkagi rakendustega.
Igal juhul oli selle lĂ€henemise suur puudus: see töötas ainult Apple’i failisĂŒsteemidel, mis oli ĂŒks pĂ”hjusi, miks Apple loobus „ressursside section’ist”, kui nad lĂ€ksid ĂŒle Mac OS X-ile.
Mac OS X-is soovis Apple lahendust, mis ei sĂ”ltu failisĂŒsteemist, seega kasutati pakettide (NeXTist) kontsepti, katalooge, mida failihaldur kĂ€sitleb kui "lĂ€bipaistmatuid objekte", sarnaselt failidega, mitte katalogidega. Iga rakenduse paketiga seotud juhul .app on, muu hulgas, fail Info.plist (Apple'i mingi JSON vĂ”i YAML analoog), mis sisaldab rakenduse metaandmeid.

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Mac OS X rakenduse paketi Info.plist faili vÔtmed.

Ressursid, nÀiteks ikoonid, UI failid ja muud, salvestatakse paketti failidena. Kontseptsioon on tegelikult tagasi toonud juured NeXTist.

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Mathematica.app NeXTSTEP 1.0-l 1989. aastal: kuvatakse terminalis kui kataloog failidega, kuid kui ĂŒhtne objekt graafilises failihalduris.

Tagasi BeOS-i, mille kontseptsioonide pÔhjal Haiku rajatud. Selle arendajad, kui nad lÀksid PEF (PowerPC) pealt ELF (x86) (sama, mida kasutatakse Linuxis), otsustasid lisada ressursside sektsiooni ELF-failide lÔppu. Selleks ei kasutatud omaette ELF-i sektsiooni, see lihtsalt kirjutati ELF-faili lÔppu. Tulemusena programmid strip ja muud binutils, kes sellest ei teadnud, lihtsalt kustutasid selle. SeetÔttu, kui lisada ressursse ELF-faili BeOS-is, on parem mitte kasutada Linuxi tööriistu.

Mis praegu Haikuga toimub? PÔhimÔtteliselt enam-vÀhem sama.

Teoreetiliselt oleks vÔimalik ressursse paigutada ELF-i vajalikku sektsiooni. Vastavalt arendajatele #haiku kanalil irc.freenode.net-is:

ELF-i sektsioonil oleks rohkem mÔtet... ainus pÔhjus, miks me seda ei tee, on see, et nii tehti BeOS-is.
Ja seda ei tasu nĂŒĂŒd muuta.

Ressursside haldamine

Ressursid kirjutatakse struktureeritud 'ressursi' formaadis: pÔhimÔtteliselt on see ressursside nimekiri suurustega ja seejÀrel nende sisu. Meenub formaat ar.
Kuidas kontrollida ressursse Haikus? Kas on midagi sarnast ResEdit-ile?
Vastavalt dokumentatsioonis:

Rakenduse paketiga kaasnevaid ressursse saab vaadata, lohistades kÀivitatava faili programmi, nagu Resourcer. Samuti saab minna terminali ja kÀivitada kÀsu listres failinimi.

Resourcer on HaikuDepot-is, kuid mul see lihtsalt laguneb.

Kuidas hallata ressursse ELF-failides? Kasutades rsrc ja rdef. rdef failid kogutakse rsrc. Fail rdef on tavalises tekstiformaadis, seega on sellega palju lihtsam töötada. Fail formaadis rsrc lisatakse ELF-faili lÔppu. Proovime mÀngida:

~> rc -h
Haiku Resursikompilaator 1.1Rdef skripti kompileerimiseks ressursifailiks:
    rc [valikud] [-o ] ... Ressursifaili tagasi rdef skriptiks teisendamiseks:
    rc [valikud] [-o ] -d ...Valikud:
    -d --decompile       loo rdef skript ressursifailist
       --auto-names      konstrueeri ressursi nimed ID sĂŒmbolitest
    -h --help            nÀita seda teadet
    -I --include    lisa  kaasaja teede loendisse
    -m --merge           Àra kustuta vÀljundi faili olemasolevaid sisu
    -o --output          mÀÀrake vÀljundfaili nimi, vaikevÀÀrtus on out.xxx
    -q --quiet           Ă€rge kuvage ĂŒhtegi veateadet
    -V --version         nÀita tarkvara versiooni ja litsentsi

Saab kasutada programmi xres kontrollimiseks ja haldamiseks:

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

No hÀsti, proovime?

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

Ressurssidest ja formaatidest rohkem rdef vÔib lugeda siit.

Standardsed ressursitĂŒĂŒbid

Kuigi ressursidesse vĂ”ib panna kĂ”ike, on mĂ”ned kindlad standardsed tĂŒĂŒbid:

  • app_signature: rakenduse MIME-tĂŒĂŒp, faili avamise, kĂ€ivitamise, IPC jne. vastavuse jaoks.
  • app_name_catalog_entry: Kuna rakenduse nimi on tavaliselt inglise keeles, siis siia saab mĂ€rkida kohad, kus asuvad tĂ”lgitud nimed, et erinevate keelte kasutajad saaksid soovikorral nĂ€ha tĂ”lgitud rakenduse nime.
  • app_version: tĂ€pselt see, mida sa mĂ”tlesid
  • app_flags: nĂ€itab registrar kuidas rakendust töödelda. Ma arvan, et on midagi enam, kui see esmapilgul paistab. NĂ€iteks on B_SINGLE_LAUNCH, mis sunnib sĂŒsteemi rakenduse uut protsessi kĂ€ivitama iga kord, kui kasutaja seda kĂŒsib (sama pĂ”himĂ”tet kasutatakse enamikus Linuxi rakendustes). On B_MULTIPLE_LAUNCH, mis sunnib kĂ€ivitama protsessi iga faili. LĂ”puks on olemas B_EXCLUSIVE_LAUNCH, mis sunnib sĂŒsteemi kĂ€ivitama ainult ĂŒhte protsessi korraga, olenemata sellest, kui sageli kasutajad seda kĂ€ivitavad (nĂ€iteks kĂ€ivitub Firefox Linuxis samamoodi; samu tulemusi vĂ”ib saavutada Qt rakendustes, kasutades funktsiooni QtSingleApplication). Rakendused saavad B_EXCLUSIVE_LAUNCH teavitusi, kui kasutaja proovib neid uuesti kĂ€ivitada: nĂ€iteks saavad nad faili tee, mida kasutaja soovib avada nende abiga.
  • vector_icon: Rakenduse vektoriikoon (BeOS-is ei olnud vektoriikoone, enamikul rakendustest olid selle asemel kaks rasterdatat ikooni kĂ€ivitatavates failides).

Muidugi saate lisada ressursse mis tahes soovitud IDde ja tĂŒĂŒpidega ning seejĂ€rel lugeda neid rakenduses vĂ”i teistes rakendustes klassi kaudu. BResources. Aga enne, kui liigume edasi, peatume pĂ”neval teemal ikoonidest.

Haiku stiilis vektorikoonid

Loomulikult ei valinud ainult Haiku parimat ikooniformaati. Linuxi töökeskkondade olukord on selles osas kaugel ideaalist:

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

Seda nÀhes vÔib juba tunda, millega on tegemist.

Muidugi on olemas scalable, mis sisaldab, nagu vĂ”ib arvata, vektorikoone. Miks siis on midagi veel? Sest vektorgraafika joonistamise tulemused vĂ€ikestes mÔÔtmetes vĂ”ivad olla halvemad kui ideaalne. Soovime, et meil oleks erinevad variandid, mis on optimeeritud erinevate suuruste jaoks. Linuxi töökeskkondades saavutatakse see ikoonide erinevate suurustega hajutamisega failisĂŒsteemis.

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

Pange tĂ€hele: Firefoxi erinevate versioonide mĂ”isted ei eksisteeri. Seega ei saa olukorda, kus sĂŒsteemis on mitu versiooni rakendusest, peenelt kĂ€sitleda.

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Firefoxi erinevad ikoonid erinevates versioonides. Hetkel ei ole vÔimalik seda Linuxis ilma erinevate lahendusteta kÀsitleda.

Mac OS X kÀsitleb seda veidi peenelt:

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

On nĂ€ha, et ĂŒks fail firefox.icns pakendis Firefox.app, mis sisaldab kĂ”iki mÔÔtmeid, seega on erinevatel versioonidel ĂŒhel rakendusel erinevad ikoonid.
Kaugel parem! Ikoonid reisivad koos rakendusega, kĂ”ik ressursid on ĂŒhes failis.

Naaseme Haiku juurde. Üks hĂ€mmastav lahendus, ilma eranditeta. Vastavalt dokumentatsioonis:

on loodud eriline, vÀikesemahuline ja kiirelt joonistatud HVIF-formaat. SeetÔttu on meie ikoonid peamiselt palju vÀiksemad kui raster- vÔi laialdaselt kasutatav SVG-formaat.

Ja nad on tÔesti optimeeritud:

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Ikooni suurused HVIF-s vÔrreldes teiste formaatidega.

Erinevus on kordades!

Kuid siin ei lĂ”pe maagia. Üks ja sama HVIF vĂ”ib nĂ€idata erinevaid detailitasemeid sĂ”ltuvalt kuvatavast suurusest, hoolimata sellest, et see on vektorig formaat.

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Erinevad detailitasemed (LOD) sÔltuvalt joonistuse suurusest

NĂŒĂŒd puudutame puudusi: ei saa lihtsalt vĂ”tta SVG-d, visata selle ImageMagick'isse ja sellega lĂ”petada, tuleb lĂ€bida mitu tsĂŒklit HVIF formaadis ikooni loomiseks. Siin selgitusi. Siiski vĂ”ib IconOMatic SVG importida piisavalt ebaĂŒhtlaselt; umbes 90% SVG detailidest imporditakse teatud tĂ”enĂ€osusega, ĂŒlejÀÀnud 10% tuleb seadistada ja muuta kĂ€sitsi. Loe lĂ€hemalt, kuidas HVIF oma maagia teostab saab blogis Lea Gensson

Ikooni lisamine rakendusse

NĂŒĂŒd saan ma lisada ikooni paketti, mille olen loonud eelmisel korral, arvesse vĂ”ttes kĂ”iki saadud andmeid.
Kuna ma ei soovi praegu oma «Tere, maailm» QtQuickApp'i jaoks oma ikooni joonistada — tĂ”mban selle Qt Creatorist.

/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

Vaatame, kas ikoon on kopeeritud:

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

NÀeb hea vÀlja, kuid miks ei kuvata uut ikooni pÀrast selle kopeerimist?

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Kopeeritud VICN:101:BEOS:ICONs ei kasutata rakenduse ikoonina failihalduris

Mida ma olen maha maganud?

Arendaja kommentaar:

Pean looma faili rdef kÔigi ressurssidega, seejÀrel kÀitama kÀsku rc nimi.rdef, see loob faili .rsrc. Siis pean kÀivitama kÀsu resattr -o nimi_binaar nime.rsrc. Ma kasutan vÀhemalt selliseid kÀske, et lisada ikoone oma skriptidele.

Aga ma tahtsin luua ressursi, mitte atributi. Olen tÔeliselt segaduses.

Nutikas vahetamine failisĂŒsteemi kasutamisega

ELFi atribuutide avamine ja lugemine on aeglane. Nagu juba varem mainisin, kirjutatakse ikoon ressursina faili endasse. See meetod on usaldusvÀÀrsem ja talub kopeerimist teise failisĂŒsteemi. Kuid see kopeeritakse ka failisĂŒsteemi atribuudiks, nĂ€iteks BEOS:ICON. See töötab ainult teatud failisĂŒsteemides, nĂ€iteks BFS. SĂŒsteem nĂ€itab ikoonid (Trackeris ja Deskbaris) sellest laiendatud atribuudist, kuna taoline lahendus toimib kiiresti. MĂ”nes kohas (seal, kus kiirus ei ole oluline, nĂ€iteks „Teave programmi” aken) saab sĂŒsteem ikooni otse failist. Kuid see ei ole veel lĂ”pp. Pidage meeles, et Macis said kasutajad asendada rakenduste, kataloogide, dokumentide ikoone oma ikoonidega, kuna Mac pakub vĂ”imalust teha neid „olulisi” asju, nĂ€iteks Slacki uue ikooni asendamine varasema vastu. Haikus tuleks ressurssi (failis) kĂ€sitleda kui rakenduse tarnitavat algset ikoont, ja atribuudina (BFS failisĂŒsteemis) kui midagi, mis lubab kasutajal soovi korral muudatusi teha (kuigi, vihje, graafiline liides kasutajaikooni lisamiseks vaikimisi ikoonile ei ole veel rakendatud).

FailisĂŒsteemi atribuutide kontrollimine

KĂ€esoleva abil resaddr on vĂ”imalik kontrollida ja seada failisĂŒsteemi atribuute.

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

Sisuliselt on see "liim", mis teostab ĂŒmberkujundust usaldusvÀÀrsete ressursside ja kiirete failisĂŒsteemi atribuutide vahel. Kuna sĂŒsteem eeldab ressursside hankimist ja teostab kopeerimist automaatselt, ei pea ma enam selle pĂ€rast muretsema.

hpkg pakettide maagia

Praegu (kĂ”ige sagedamini) kasutatakse Haiku programmide hankimiseks pakette .hpkg. Ärge laske end petta lihtsast nimest: .hpkg formaat töötab tĂ€iesti erinevalt kui teised sarnaste nimedega formaadid, millega olete kokku puutunud, sellel on reaalsed supervĂ”imed.

Klassikaliste paketiformaatidega olin ma pikalt hĂ€iritud sellisest faktist: laadid alla ĂŒhe (paketi), kuid sĂŒsteemi installitakse midagi muud (failid paketi sees). Failidega on keeruline ĂŒmber kĂ€ia (nĂ€iteks need kustutada), kui paketti installitakse traditsiooniliselt. Ja kĂ”ik see juhtus seetĂ”ttu, et paketi sisu jaotub kogu failisĂŒsteemis, sealhulgas kohtadesse, kuhu tavaline kasutaja ei pruugi kirjutamisĂ”igust omada. See tekitab terve klassi programme — paketihaldureid. Ja juba installitud tarkvara, nĂ€iteks teise arvutisse, vĂ€lisele kĂ”vakettale vĂ”i failiserverisse edasiviimine muutub isegi keeruliseks vĂ”i sootuks vĂ”imatuks. Tavalises Linuxi pĂ”hises sĂŒsteemis vĂ”ib kergesti eksisteerida sadu tuhandeid kuni miljoneid isoleeritud faile. Loomulikult on see samal ajal ebastabiilne ja aeglane, nĂ€iteks sĂŒsteemi esmasel installimisel, tavaliste paketide installimisel, uuendamisel ja eemaldamisel, samuti kĂ€ivitustsĂŒmboli (juurkatalooge) teisele kandjale kopeerimisel.

Ma töötan projekti AppImage kallal, mis on osaline lahendus lĂ”ppkasutajate rakenduste jaoks. See on tarkvara levitusformaadi, mis kogub rakenduse ja kĂ”ik selle sĂ”ltuvused ĂŒhte failisĂŒsteemi pildisse, mida monteeritakse rakenduse kĂ€ivitamisel. See lihtsustab asju mĂ€rkimisvÀÀrselt, kuna sama ImageMagick muutub Ă€kitselt ĂŒheks failiks, mida saavad tavalised inimesed failihalduris juhtida. Pakutud lĂ€henemine töötab ainult tarkvara jaoks, nagu projektinimi nĂ€itab, ja tal on oma probleemide kogum, kuna Linuxi tarkvara tarnimisega tegelejad suunavad alati nĂ€puga minu poole.

JĂ”uame tagasi Haiku juurde. Kas Ă”nnestus leida optimaalne tasakaal traditsiooniliste paketisĂŒsteemide ja pildipĂ”hise tarkvarajagamise vahel? Selle paketid .hpkg on tegelikult tihendatud failisĂŒsteemi pildid. SĂŒsteemi kĂ€ivitamisel monteerib ydas kogu paigaldatud ja aktiivsed paketid jĂ€rgmiste tuumateadete pĂ”hjal:

KERN: package_daemon [16042853:   924] aktiivne pakett: "gawk-4.2.1-1-x86_64.hpkg"
KERN: package_daemon [16043023:   924] aktiivne pakett: "ca_root_certificates_java-2019_01_23-1-any.hpkg"
KERN: package_daemon [16043232:   924] aktiivne pakett: "python-2.7.16-3-x86_64.hpkg"
KERN: package_daemon [16043405:   924] aktiivne pakett: "openjdk12_default-12.0.1.12-1-x86_64.hpkg"
KERN: package_daemon [16043611:   924] aktiivne pakett: "llvm_libs-5.0.0-3-x86_64.hpkg"

Lahe, eks? Hoidke kinni, edasi lÀheb veelgi huvitavamaks!

On ĂŒks vĂ€ga eriline pakett:

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

See sisaldab vĂ€ga minimaliseeritud operatsioonisĂŒsteemi, sealhulgas tuuma. Usuge vĂ”i mitte, aga isegi tuum ei ekstraheerita kĂ€ivitusmahtudest (juurdehĂ”ivatud osast), vaid laaditakse hoolikalt paketti oma kohale. .hpkg. See, I already mentioned that part of the overall refinement and consistency of Haiku comes from the fact that the entire system, from the kernel and the basic user space to the package management and the infrastructure of the working environment, is developed by a single team. Just imagine how many different groups and teams would be needed to launch something like this based on Linux. [I imagine the PuppyLinux project, — translator's note]. Then imagine how much time it would take for this approach to be implemented in distributions. They say: take a simple task, divide it among different performers, and it will become so complicated that it will no longer be solvable. Haiku opened my eyes in this case. I think this is exactly what is happening in Linux right now (Linux here is a collective term referring to the Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu stack).

System rollback using hpkg

Kui sageli juhtub jĂ€rgmine olukord: uuendus lĂ€ks edukalt, kuid seejĂ€rel selgub, et midagi ei tööta nii, nagu peaks? Tavaliste paketihalduritega on vĂ€ga raske taastada sĂŒsteemi seisundit enne uute pakettide installimist (nĂ€iteks juhul, kui midagi lĂ€ks valesti). MĂ”ned sĂŒsteemid pakuvad lahendusi failisĂŒsteemi koopiate nĂ€ol, kuid need on ĂŒsna mahukad ja neid ei kasuta kĂ”ik sĂŒsteemid. Haikus on see lahendatud pakettide kaudu. .hpkgIga kord, kui sĂŒsteemis pakette muudetakse, ei kustutata vanu pakette, vaid need salvestatakse sĂŒsteemis alamkataloogidesse, mis nĂ€evad vĂ€lja nagu. /Haiku/system/packages/administrative/state-<...>/ pidevalt. Katkised toimingud salvestavad oma andmed alamkataloogidesse. /Haiku/system/packages/administrative/transaction-<...>/.

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Sisu /Haiku/system/packages/administrativeKataloogid "state
" sisaldavad tekstifaile aktiivsete paketide nimedega, "transaction
" – need on ise paketid.

"Vana aktiivne seisund", st loend .hpkg pakettidest, mis olid aktiivsed enne muudatusi, salvestatakse iga toimingu jÀrel failihaldurisse tekstifaili. /Haiku/system/packages/administrative/state-<...>/activated-packagesSarnaselt kirjutatakse uus "aktiivne seisund" tekstifaili. /Haiku/system/packages/administrative/activated-packages.

Kataloog /Haiku/system/packages/administrative/state-<...>/ sisaldab ainult tekstifaili, kus on loetelu selle oleku aktiivsetest pakettidest (pakettide installimise korral ilma kustutamiseta), ja kui pakette on kustutatud vÔi uuendatud, siis state kataloog sisaldab vanemaid versioone.

SĂŒsteemi kĂ€ivitamisel otsustatakse pakettide aktiveerimine (mountimine) pakettide loendi alusel. Just nii lihtsalt! Kui kĂ€ivitamisel peaks midagi valesti minema, saab laadimishaldurile öelda, et kasutada teist, vanemat loendit. Probleem lahendatud!

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Haiku laadija. Iga sisenemispunkt peegeldab vastavat "aktiivset olekut"

Mulle meeldib lĂ€henemine, kus lihtsad tekstifailid on "aktiivse oleku" loendina, milles on arusaadavad nimed .hpkg. See on terav kontrast masinatele loodud, mitte inimestele. kogum OSTree vĂ”i Flatpaki sĂŒsteemifailide seas (seal, kus on ka Microsofti GUID).

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Iga hetke aktiivsete pakettide loetelu

Seaded

Tundub, et kataloogis /Haiku/system/packages/administrative/writable-files on seadistuste failid pakettide jaoks, kuid kirjutamiseks saadaval. Nagu me mÀletame, .hpkg on ainult lugemiseks. Seega tuleb need failid enne kirjutamist paketist kopeerida. See on mÔistlik.

GUI integreerimine sĂŒsteemile .hpkg

Vaatame nĂŒĂŒd, kuidas need sĂ€ravad paketid .hpkg integreeruvad kasutaja töökeskkonda (UX). LĂ”ppude lĂ”puks on Haiku mĂ”eldud isiklikuks kasutamiseks. Isiklikult seadsin kĂ”rge lati, vĂ”rreldes kasutajakogemust paketiga .app Macintoshes sama kogemusega .hpkg. Ma ei hakka isegi vĂ”rdlema olukorda Linuxi töökeskkondades, kuna see on absoluutselt kohutav vĂ”rreldes teistega.

KÀivad jÀrgmised stsenaariumid:

  • Soovin vaadata paketi sisu .hpkg
  • Soovin installida paketi
  • Soovin eemaldada paketi
  • Soovin eemaldada midagi, mis tuli sĂŒsteemi osana paketist
  • Soovin kopeerida midagi, mis tuli sĂŒsteemi osana paketist
  • Soovin alla laadida kĂ”ik paketi sĂ”ltuvused, mis ei saa olla osa igast Haiku installatsioonist (nĂ€iteks mul on fĂŒĂŒsiliselt isoleeritud masin, millel ei ole internetiĂŒhendust.)
  • Soovin, et mu paketid (vĂ”i nende osa) oleks eraldi teises kohas, eraldi laadimise mahust (juurkataloogist) (sest mul on nĂ€iteks seal ruumi vĂ€he).

See peaks katma enamik pÔhijuhtumeid minu igapÀevases töös. Alustame.

Paketi sisu kontrollimine

Macis klikin paketi peal hiire parema nupuga selle avamiseks ja sisu vaatamiseks Finderis. Tegelikult on see lihtsalt maskeeritud kataloog! (Tean, et on olemas pakette .pkg sĂŒsteemi osa jaoks, mis ei ole rakendused, aga tavalised kasutajad nendega ĂŒldiselt ei suhtle).

Haikus klikin paketti hiire parema nupuga, seejÀrel klikin "Contents" sisu vaatamiseks. Siin on lihtsalt failide loend, ilma et saaks neid kahekordse klÔpsuga avada.
Oleks palju parem, kui oleks vÔimalik (ajutiselt) paketti monteerida .hpkg failihalduri kaudu vaatamiseks, nii et kasutaja ei peaks tegelema teostuse detailidega. (Muide, paketti saab avada .hpkg pakettis Expanderis, mis suudab selle vÀlja pakkida nagu mis tahes muu arhiiv).

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
HaikuDepot liideses saab vaadata paketi failide loendit, kuid ei ole vÔimalik vaadata sisu, nÀiteks kahekordse klikiga README.md failile.

Selles kategoorias vÔidab Mac, kuid vajalike funktsioonide lisamine HaikuDepot ei tohiks olla suurem probleem.

Paketi installimine GUI kaudu

Macis, enamikketta pilte .dmg sisaldavad pakette. .appAvame kahekordse klikiga kettapildi, seejĂ€rel kopeerime paketi, nĂ€iteks lohistades selle /Applications Finderisse. Minu jaoks on see iseenesestmĂ”istetav, kuid olen kuulnud, et mĂ”ned algajad vĂ”ivad selle ĂŒle saada. Vaikimisi „soovitab” Apple ĂŒldsĂŒsteemi katalooge /Applications (NeXT-is oli see vĂ”rgus ja individuaalne), kuid oma rakenduste paigutamine faili serverisse vĂ”i alamkausta $HOME/Applications, kui see teile sobib.

Haikus, kahekordne klikk paketile, siis klikk „Install”, ei saa lihtsam olla. Mind huvitab, mis juhtub, kui paketil on sĂ”ltuvused, mis on HaikuPorts saadaval, kuid veel mitte installitud. Linuxi puhul ei teata, mida sellises olukorras teha, kuid lahendus on selge — kĂŒsida kasutajalt, kas ta soovib sĂ”ltuvusi alla laadida ja installida. TĂ€pselt sellist asja teebki Haiku.

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Laadin paketi 'sanity' kĂ€sitsi ja klĂ”psasin selle peale, paketihaldur teab, kust saada selle sĂ”ltuvusi (kui repositooriumid on juba sĂŒsteemis mÀÀratud). Mitte iga Linuxi jaotamine ei oska seda.

Teine vĂ”imalus on failihalduri kasutamine, piisab, kui lohistada .hpkg pakett vĂ”i /Haiku/system/packages (ĂŒldiseks installimiseks, vaikimisi), vĂ”i /Haiku/home/config/packages (isiklikuks installimiseks; ei ole saadaval kahekordse klĂ”psuga - mind hĂ€irib ikka veel sĂ”na „config” siin, mis minu jaoks on sellel juhul sĂŒnonĂŒĂŒm sĂ”nale „settings”). Ehkki mitme kasutaja kontseptsioon pole Haikus veel saadaval (vĂ”ib-olla seetĂ”ttu on kĂ”ik nii lihtne - ma ei tea, vĂ”ib-olla liitkasutajate vĂ”imalused muudavad asju isikliku arvuti töökeskkonna jaoks liiga keeruliseks).

Selles kategoorias vĂ”idab Haiku, kuna see suudab töötada mitte ainult rakendustega, vaid ka sĂŒsteemiprogrammidega.

Paketist GUI kaudu eemaldamine

Macis, peate lohistama rakenduse ikooni prĂŒgikasti, ja sellega on kĂ”ik. Lihtne!

Haikus, esmalt peate leidma, kus pakett sĂŒsteemis asub, kuna te harva installite selle Ă”iges kohta (kĂ”ike hallab sĂŒsteem). Tavaliselt tuleb otsida /Haiku/system/packages (ĂŒldise sĂŒsteemi vaikeseade), vĂ”i /Haiku/home/config/packages (ma juba ĂŒtlesin, et «config» ei ole Ă”ige nimetus?). Siis rakendus lohistatakse lihtsalt prĂŒgikasti ja sellega kĂ”ik.
Lihtne! Kuigi, ma ei ĂŒtleks niimoodi. Mis tegelikult juhtub:

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Nii on tulemuseks, kui rakendus lohistada prĂŒgikasti /Haiku/system/packages

Proovisin lihtsalt oma eelmise pĂ€eva rakendust «Tere, maailm» QtQuickApp'ist prĂŒgikasti viia. Ma ei pĂŒĂŒdnud sĂŒsteemikausta liigutada, ja kuna kĂ”ik paketid installitakse sĂŒsteemikausta - ei ole vĂ”imalik pakk .hpkg ilma selle «sisu». Tavaline kasutaja kardaks seda, vajutaks vaikimisi nuppu «TĂŒhista».

Selgitab mr. waddlesplash:

Sellel teadetel on juba ĂŒle 10 aasta. TĂ”enĂ€oliselt peame selle seadma nii, et hoiatust kuvatakse ainult siis, kui paketti liigutatakse. Tavalised kasutajad ei pea seda niikuinii tegema.

HÀsti, vÔib-olla peaksin seda tegema HaikuDepot'iga? TopeltklÔpsan pakettide peal /Haiku/system/packages, ootades, et tuleks nupp «Eemalda». Ei, on (ainult) «Install». «Eemalda», kus sa oled?

Naljaks proovisin vaadata, mis juhtub, kui ma klÔpsan nuppu «Install» juba installitud paketi puhul. Tulemus on jÀrgmine:

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Nii juhtub, kui proovite installida juba installitud paketti.

JĂ€rgmiseks kuvatakse:

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Kui eelmisel aknas klÔpsate «Apply changes», siis tulemuseks on see

Eeldan, et see on tarkvaraline viga, link taotlusele on juba olemas. [autor linki ei esitanud, — tĂ”lkija mĂ€rk.]

Kiire lahendus: lisada nupp «Uninstall», kui pakett on juba /Haiku/system/packages, vÔi /Haiku/home/config/packages.

Vaadates HaikuDepotis installitud paketid loendit, nÀen ma oma paketti ja saan selle eemaldada.

Selles kategoorias vĂ”idab Mac. Kuid ma suudan ette kujutada, et korraliku seadistusega on kasutajakogemus Haikus parem kui Macil. (Üks arendajatest hindas seda nii: «Alla tunni, et lisada mÀÀratud funktsionaalsust HaikuDepotisse, kui natuke C++-st tead,» on vabatahtlikke?)

Mingite asjade eemaldamine paketist

Proovime eemaldada ise rakenduse, mitte paketi .hpkg, kust see pÀrines (kahtlen, et «tavalistele surelikele» on mingit vahet).

Macis, tegelikult töötab kasutaja tavaliselt failiga .dmg, kust rakenduse pakett tuleb .app. Tavaliselt kujutised .dmg kogunevad allalaadimiskausta, paketid aga kopeerib kasutaja /Applications. On arvamus, et paljud kasutajad ei tea ise, mida nad teevad, seda hĂŒpoteesi kinnitab endine Apple'i töötaja. (Üks asi, mis mulle Mac'is ei meeldi. NĂ€iteks AppImage'i puhul pole vahet rakenduse ja selle sisaldava paketi vahel. TĂ”mbas ikooni prĂŒgikasti = ja see on kĂ”ik. Lihtne!)

Haikus, samuti on erinevus rakendustes/ ja pakettides/, nii et kahtlen, kas kasutajad saavad sellest selgemaks. Aga mis juhtub, kui tĂ”mmata rakendus rakendustes/ prĂŒgikasti:

Minu kuuendat pÀeva Haikus: all olevad ressursid, ikoonid ja paketid
Nii see vÀlja nÀeb, kui proovitakse eemaldada rakendust, mis on saadud failist .hpkg

Tehniliselt on see Ă”ige (sest rakendus on paigutatud ainult lugemiseks mĂ”eldud failisĂŒsteemi), kuid see ei ole kasutajale eriti kasulik.

Kiire lahendus: pakkuda selle asemel GUI kaudu eemaldamist .hpkg

PĂ”nevuse mĂ”ttes proovisin rakendust dubleerida, vajutades Alt+D. Tulin vastu teate 'Objekte ei saa kirjutada vĂ”i kopeerida ainult lugemiseks mĂ”eldud jaosal'. Ja kĂ”ik sellepĂ€rast, et /system (peale /system/packages ja /system/settings) on packagefs-i mount-punkt (mĂ€letate, kuidas see ilmub vĂ€ljundis df?). К ŃĐŸĐ¶Đ°Đ»Đ”ĐœĐžŃŽ, ĐČыĐČĐŸĐŽ ĐșĐŸĐŒĐ°ĐœĐŽŃ‹ mount ei selgita olukorda (nagu juba ĂŒhes varasemas artiklis öeldud), mountvolume ei nĂ€ita otsitavat (ilmselt loop'i kaudu monteeritud paketid .hpkg ei loeta «mahtudeks»), ning ma unustasin alternatiivsed kĂ€sud.

Selles kategoorias ei vÔitnud keegi peale AppImage'i (aga see on, kui aus olla, kaldu arvamus). Siiski vÔib ette kujutada, et pÀrast kohandamist on kasutajakogemus Haikus parem kui Mac'is.

MÀrkus: tuleb vÀlja selgitada, mis on «maht» seoses «jaotusega». TÔenÀoliselt on see sarnane «kausta» ja «katalooge» suhtega: enamik katalooge kuvatakse failihaldurites kaustadena, kuid mitte kÔik neist (nÀiteks paketid, mida kÀsitletakse failidena). Kas sellised vÀidavad, et ma olen ametlikult nörd?

Paketi sisu kopeerimine teisele sĂŒsteemile

Macis, lihtsalt lohistan paketti .app, ja kuna sĂ”ltuvused paketi sees — need liiguvad koos.

Haikus, ma lohistan rakenduse, aga sĂ”ltuvusi ei töödeldud ĂŒldse.

Kiire lahendus: Las pakkuda pigem `hpkg` paketiga koos selle sÔltuvustega, kui need on olemas.

Selles kategoorias vĂ”idab kindlasti Mac. Igè‡łć°‘ olen mina, nende paradigmade armastaja. Haiku peaks selle kopeerima. .hpkg rakenduse asemel, kuid sĂŒsteem ei paku mulle seda


Paketi allalaadimine koos kÔigi selle sÔltuvustega

Kaup iga masin ei ole alati internetiga ĂŒhendatud. Vastupidi, mĂ”ned masinad (jah, ma vaatan teie poole, tĂ€napĂ€eva Windows, Mac ja Linux) unustavad selle. Minu jaoks on oluline, et ma saaksin nĂ€iteks minna internetikohvikusse, laadida tarkvara mĂ€lupulgale, panna selle mĂ€lupulga kodutornist ja olla kindel, et kĂ”ik töötab [riskialti poiss, sellist asja Windowsis teha... — tĂ”lkija mĂ€rkus].

Tulemuseks on veidi sagedamini, kui alati, et ma tavaliselt saan rahulolematud sÔltuvused Windowsi ja Linuxi puhul.

Macis see on tavaliselt ĂŒks fail, kĂ”ik, mis on vajalik — alla laadida .dmg. Enamasti pole tal sĂ”ltuvusi, vĂ€lja arvatud need, mis on vaikimisi MacOS-i poolt esitatud. Erandina vĂ”ib tuua keerulised rakendused, mis vajavad vastavat kĂ€ivituskeskkonda, nĂ€iteks java.

Haikus alla laadida pakett .hpkg nĂ€iteks jaava rakenduse jaoks vĂ”ib osutuda piisavaks, kuna jaavakeel vĂ”ib sihtmasinas puududa. Kas on vĂ”imalik alla laadida kĂ”ik sĂ”ltuvused selle paketi jaoks? .hpkg, vĂ€lja arvatud need, mis installitakse Haikus vaikimisi ja peaks seetĂ”ttu olema igas Haiku sĂŒsteemis?

Selles kategoorias vÔidab vaieldamatult Mac.

Kommenteerib hr. waddlesplash:

Selleks, et kirjutada programm, mis kogub kÔik rakenduse sÔltuvused pakettide kogumina .hpkg on kellelegi, kes tunneb Haiku sisemist toimimist, piisavalt umbes 15 minutit. Selle toetuse lisamine ei peaks olema liiga keeruline, kui see on tÔeline vajadus. Kuid minu jaoks on see haruldane olukord.

Hoidke hinge kinni jÀrgmise artikli ootuses selle sarja jooksul.

Pakettide liigutamine eraldi kohta

Nagu ma juba varem mainisin, tahan ma paigutada oma paketid .hpkg (vĂ”i nende osa) eraldi kohta, mis on tavalisest allika koha pealt eraldatud (juurpartitsioon). Tavaline pĂ”hjus (mis ei ole sugugi teoreetiline) on see, et ruum minu (sisseehitatud) kĂ”vaketastel lĂ”peb pidevalt, olgu need kui suured tahes. Ja tavaliselt ĂŒhendan ma vĂ€list kĂ”vaketast vĂ”i vĂ”rguressursse, kus asuvad minu rakendused.

Macis lihtsalt liigutame paketid .app vÀlisele kettale vÔi vÔrgu katalooge Finderis ja see ongi kÔik. Ma saan endiselt kahekordse klÔpsuga avada rakenduse nagu tavaliselt tegin laadimisruumis. Lihtne!

Haikus, nagu mulle öeldi, on seda vĂ”imalik saavutada muude pakettide liigutamise teel .hpkg vĂ€lisele kettale vĂ”i vĂ”rgu katalooge, kuid seejĂ€rel peab kasutama mĂ”ningaid dokumenteerimata kĂ€ske terminalis, et neid sĂŒsteemis monteerida. Ma ei tea, kuidas seda teha, kasutades ainult GUI-d.

Selles kategoorias vÔidab Mac.

Kohas mr. waddlesplash:

Siin on optimeerimine tavalise kasutuse kriteeriumide jĂ€rgi. Kui nĂ”udlus ĂŒletab ĂŒhe kasutaja oma, siis me viib sellise lahenduse ellu. Igatahes on lisalahenduste vĂ”imalus olemas.

Sellega rÀÀgime jÀrgmisel korral.

Kui rÀÀkida vĂ”rgukataloogidest: oleks tore (eeldan LAN peo korral) omada lihtsaid, leitavaid, vĂ”rguĂŒlevaate rakendusi (nt Zeroconfi kaudu), mida saaks kohalikule arvutile kopeerida vĂ”i otse kohalikust vĂ”rgust kĂ€ivitada. Loomulikult on arendajatel vĂ”imalus sellele vastu seista app_flags.

HPKG sĂŒsteemi integreerimise lĂ”pparuanne koos GUI-ga

Ma arvan, et eeskĂ€tt seoses suhtelise uudsusega jÀÀb integreerimine .hpkg GUI-ga siiski soovida. Igal juhul on mitmeid asju, mida kasutajakogemuse osas saaks parandada


Veel ĂŒks asi: Kernel Debug Land

Oleks suurepĂ€rane omad kernel panic'i korral vĂ”imalus sisestada kĂ€ske, nĂ€iteks syslog | grep usb. Noh, Haikus on see vĂ”imalik tĂ€nu Kernel Debug Landile. Kuidas nĂ€ha seda maagiat tegevuses, kui kĂ”ik töötab nagu peab, ilma kernel panic'ita? Lihtne, vajutades Alt+PrintScn+D (mnemoonika Debug). Tulekse kohe meelde Programmer’s Key, mis lubas algsetel Macintosh'i arendajatel siseneda tĂ”rkeotsingu tööriistasse (kui see oli installitud, muidugi).

KokkuvÔte

Mina hakkan aru saama, et Haiku sĂŒsteemi peenust toob vĂ€lja see, et tööd teeb vĂ€ike meeskond, kes on selgelt orienteeritud töökeskkonnale, kus kĂ”ik sĂŒsteemi kihid on kergesti kĂ€ttesaadavad.
Terav kontrast Linuxi/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu maailmaga, kus kĂ”ik on nii vĂ€ikesteks tĂŒkkideks lĂ”hustatud, et abstraktsioon seisab abstraktsiooni peal ning toimetab puudega.
Samuti tuli arusaam, kuidas sĂŒsteem .hpkg kombineerib traditsiooniliste pakihaldurite, Snappy, Flatpaki, AppImage’i, isegi btrfs parimaid praktikaid ning segab need kokku Mac'i pĂ”himĂ”ttega «lihtsalt töötab».

Nagu midagi oleks peas «lĂŒlitunud» ja ma sain aru, kuidas sĂŒsteem .hpkg suudab tagasiviimist, — lihtsalt sellele pilgu heitmine. Kuid see ei ole mina, vaid sĂŒsteemi ilu ja lihtsus. Paljuski on siin tunda algse Mac'i vaimu.

Jah, lehevaatamine brauseris vĂ”ib olla kohmakas ja toimida nagu sisalik, rakendustest vĂ”ib puududa (GTK, Electron — arendajad on tulnud jĂ€reldusele, et need ei sobi hĂ€sti peenuse tĂ”ttu), video ja 3D kiirendust vĂ”idakse ĂŒldse mitte olla, aga mulle see sĂŒsteem siiski meeldib. Need asjad on parandatavad ja need tulevad varem vĂ”i hiljem. See on vaid aja kĂŒsimus ja ehk veidi punaseid silmi.

Ma ei saa aidata, aga arvan, et sellest hetkest alates algab aasta Haiku töölaual.

Juhuslikud probleemid

VĂ”ib-olla on juba pĂŒsikĂŒsimused, vĂ”i peaksin need avama?

  • BeScreenCapture peaks suutma eksportida GIF-ina, nagu Peek. Seda saab teha ffmpeg'i abil, mis on Haiku jaoks juba olemas. PĂŒsikĂŒsimus.
  • KuvapĂŒĂŒdja programm ei suuda teha ekraanipilti modaalaknast, hoopis jÀÀb kinni kogu ekraanile
  • Ekraanipilte ei saa kĂ€rpida WonderBrush'i lĂ”ikamise tööriistaga ja seejĂ€rel salvestada tulemust faili
  • Mulle ei meeldi Haiku's kĂ€e kujuga kursori idee, aga ma arvan, et see on seotud sooja nostalgiaga. See on eriti hĂ€iriv Kritas lĂ”ikeriista kasutamisel, kuna tulemuseks on ebatĂ€pne lĂ”ikus (vt ekraanipilte dialoogidest selles artiklis). Ristkursori kasutamine oleks imeline. PĂŒsikĂŒsimus.

Katsuge ise! Haiku projekt pakub allalaadimiseks pilte DVD vÔi USB, mis on loodud igal pÀeval.. Paigaldamiseks piisab pildi allalaadimisest ja selle kirjutamisest USB-mÀlupulgale koos Etcher

Kas on kĂŒsimusi? Olete oodatud venekeelsesse telegrami kanalisse..

Vea ĂŒlevaade: Kuidas endale jalga tulistada C ja C++-ga. Haiku OS retseptide kogumik.

Alates autori TÔlge: see on kuues artikkel Haiku seeriast.

Artiklite nimekiri: Esimene Teine Kolmas Neljas Viies

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster