
TL;DR: Haiku â operatsioonisĂŒsteem, mis on spetsiaalselt kavandatud isiklikele arvutitele, mistĂ”ttu on sellel mitu nĂ”ksu, mis muudavad töö keskkonna palju paremaks kui teised. Kuidas see aga töötab?
Avastasin Haiku, ĂŒllatavalt hea sĂŒsteemi. Olen siiani rabatud selle sujuvast toimimisest, eriti vĂ”rreldes Linuxi töö keskkondadega. TĂ€na uurin, mida kĂ”ike see endast kujutab. Seal, kus see on vajalik sĂŒvitsi minekuks, teen vĂ”rdluse originaalse Macintosh'i, Mac OS X ja Linuxi töö keskkondadega (freedesktop.org'i standard XDG).
Ressursid ELF failides
Eile sain teada, et IconOMatic suudab salvestada ikoone rdef ressurssides ELF tÀidesaatvates failides. TÀna tahan vaadata, kuidas see tegelikult töötab.
Ressursid? alates , originaalse Macintosh Finderi looja ja Macintosh Resource Manageri âisaâ:
Mind hĂ€irib traditsioonilise koodikirjutamise jĂ€ik iseloom. Minu jaoks on idee rakendusest, mis on kĂŒlmutatud koodis, ilma vĂ”imaluseta midagi dĂŒnaamiliselt muuta â ÀÀrmiselt tobe. Tuleb olla vĂ”imalus muuta nii palju kui vĂ”imalik kĂ€itamise ajal. Loomulikult ei saa rakenduse koodi muuta, aga kas midagi ei saa vahetada ka ilma koodi uuesti kompileerimata?
Originaalses Macintosh'is tehti nii, et nende failide puhul on olemas âandmeosaâ ja âressursside osaâ, mis teeb ÀÀrmiselt lihtsaks erinevate asjade, nĂ€iteks ikoone, tĂ”lkeid jne, salvestamise tĂ€idesaatvates failides.
Mac'is kasutatakse selleks , graafiline programm â ĂŒllatus, ĂŒllatus â ressursside redigeerimiseks.

ResEdit originaalses Macintosh'is
TĂ€nu sellele sai vĂ”imalikuks redigeerida ikoone, menĂŒĂŒelemente, tĂ”lkeid jne, piisavalt lihtsalt, kuid need ârĂ€ndavadâ ikkagi rakendustega.
Igal juhul sellel lĂ€henemisel oli suur puudus: see töötas ainult Apple'i failisĂŒsteemide peal, mis oli ĂŒheks pĂ”hjuseks, miks Apple loobus âressursside osastâ ĂŒleminekul Mac OS X-le.
Mac OS X-s soovis Apple lahendust, mis ei sĂ”ltuks failisĂŒsteemist, mistĂ”ttu kasutati pakettide (NeXT-ist) kontseptsiooni, kaustu, mida failihaldur kĂ€sitleb kui âlĂ€bipaistmatuid objekteâ, nagu faile, mitte kaustu. Iga rakenduse pakett formaadis .app oman, muu hulgas, faili Info.plist (millel on mingisugune analoog JSON-ile vĂ”i YAML-ile Apple'ilt), mis sisaldab rakenduse metaandmeid.

Info.plist faili vÔtmed Mac OS X rakenduste paketis.
Ressursid, nagu ikoonid, UI-failid ja muud, salvestatakse pakendis failidena. Kontseptsioon on tegelikult tagasi kÀinud NeXTi algusesse.

Mathematica.app NeXTSTEP 1.0-s 1989. aastal: kuvatakse kaustana failide terminalis, kuid kui ĂŒhtne objekt graafilises failihalduris.
RÀÀkides BeOSist, mille kontseptsioonid on aluseks Haikule. Selle arendajad, liikudes PEF-ilt (PowerPC) ELF-ile (x86), mis on sama, mida kasutatakse Linuxis, otsustasid lisada ressursside sektsiooni ELF failide lÔppu. Selleks ei kasutatud sobivat ELF sektsiooni, see lihtsalt lisati ELF faili lÔppu. strip ja muud binutils'i tööriistad, mis ei tea sellest, lÔikavad selle vÀlja. Seega, BeOSI ELF failide ressursse lisades on parem mitte kasutada Linuxi tööriistu.
Kuidas on olukord Haikuga praegu? Ăldiselt on see enam-vĂ€hem sama.
Teoreetiliselt oleks vÔimalik ressursse paigutada ELF vajalikkesse sektsioonidesse. Vastavalt arendajatele kanalis #haiku irc.freenode.net:
ELF sektsioonil oleks rohkem mÔtet ... ainus pÔhjus, miks me nii ei tee, on see, et BeOS-is tehti nii.
Ja selle muutmine ei ole praegu vajalik.
Ressursside haldamine
Ressursid kirjutatakse struktureeritud "ressursi" formaati: see on pÔhimÔtteliselt loend ressurssidest koos suurustega ja nende sisuga. Meenus .
Kuidas kontrollida ressursse Haikus? Kas on midagi nagu ResEdit?
Vastavalt :
Kasutades rakenduse pakis tarnitud ressurside vaatamiseks, saab kÀivitada programmi, nagu . Samuti saab terminalis kÀivitada kÀsu
listres failinimi.
Resourcer on HaikuDepotis, kuid mul see lihtsalt kokku kukub.
Kuidas hallata ressursse ELF-failides? Kasutades rsrc ja rdef. rdef failid kogub rsrc. Fail rdef salvestatakse tavalises tekstiformaadis, seega on selle töötamine palju lihtsam. Fail format rsrc lisatakse ELF faili lÔppu. Proovime mÀngida:
~> rc -h
Haiku Resource Compiler 1.1
Rdef skripti kompileerimiseks ressursifailiks:
rc [valikud] [-o ] ...
Ressursifaili tagasi rdef skriptiks konverteerimiseks:
rc [valikud] [-o ] -d ...
Valikud:
-d --decompile loo rdef skript ressursifailist
--auto-names koostage ressursinimed ID sĂŒmbolite pĂ”hjal
-h --help nÀita seda teadet
-I --include lisa lisateede loendisse
-m --merge Àra kustuta vÀljundfaili olemasolevaid sisu
-o --output tÀpsusta vÀljundfaili nimi, vaikimisi on out.xxx
-q --quiet Àra kuva vigu
-V --version nÀita tarkvara versiooni ja litsentsiSaate 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.
(...)Olgu, proovime siis?
/> 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_VERSIONRohkem ressursidest ja vormingust rdef saab lugeda .
Standardsed ressursitĂŒĂŒbid
Kuigi ressursse vĂ”ib lisada mis tahes sisu, on olemas mitmeid kindlaid standardtĂŒĂŒpe:
app_signature: rakenduse MIME tĂŒĂŒp, failide avamise, kĂ€ivitamise, IPC jne jaoks.app_name_catalog_entry: Kuna rakenduse nimi on tavaliselt inglise keeles, saab siia mĂ€rkida kohad, kus asuvad tĂ”lgitud nimed, et erinevaid keeli rÀÀkivad kasutajad saaksid vajadusel nĂ€ha rakenduse tĂ”lgitud nime.app_version: just see, mida te arvasiteapp_flags: osutabregistrarkuidas rakendust kĂ€idelda. Ma arvan, et seal on midagi enamat, kui see esmapilgul nĂ€ib. NĂ€iteks, on olemasB_SINGLE_LAUNCH, mis sunnib sĂŒsteemi kĂ€ivitama uue rakenduse protsessi iga kord, kui kasutaja seda kĂŒsib (sama pĂ”himĂ”tet kasutatakse enamikus rakendustes Linuxis). On olemasB_MULTIPLE_LAUNCH, mis sunnib kĂ€ivitama protsessi iga faili. LĂ”puks on olemasB_EXCLUSIVE_LAUNCH, mis sunnib sĂŒsteemi kĂ€ivitama ainult ĂŒhe protsessi korraga, sĂ”ltumata sellest, kui tihti kasutajad seda kĂ€ivitavad (nĂ€iteks, nii kĂ€ivitatakse Firefox Linuxis; sama tulemust saab saavutada Qt rakendustes, kasutades funktsiooni ). Rakendused, misB_EXCLUSIVE_LAUNCHsaavad teateid, kui kasutaja pĂŒĂŒab neid uuesti kĂ€ivitada: nĂ€iteks saavad nad faili tee, mida kasutaja soovib avada nende kaudu.vector_icon: Rakenduse vektoriikoon (BeOS-is ei olnud vektoriikone, enamikul rakendustest oli nende asemel kaks rasterikoonut tĂ€itjatefailides).
Loomulikult saab lisada ressursse mis tahes soovitud ID-de ja tĂŒĂŒpidega, mille jĂ€rgnevalt saab lugeda rakenduses vĂ”i teistes rakendustes klassi BResourcesabil. Aga alustuseks peame peatuma pĂ”neval ikoonide teemal.
Vektoriikoonid Haiku stiilis
Muidugi ei valinud ainult Haiku parimat ikooniformaati, selles osas on Linuxi töölaudades olukord 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.cacheSellist vaadates vĂ”ib juba tunda, mida see tĂŒkk tĂ€hendada vĂ”iks.
Muidugi on olemas skaleeritavad vektorikoonid. Miks siis on midagi muud? Sest vektorgraafika renderdamise tulemus vĂ€ikestes mÔÔtmetes vĂ”ib olla halvem kui ideaalne. Tahaks olla erinevaid variatsioone, optimeeritud erinevatele suurustele. Linuxi töökoormustes saavutatakse seda ikoonide hajutamisega failisĂŒsteemis, millel on erinevad suurused.
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.pngPange tÀhele: ei ole olemas erinevaid Firefoxi versioone. SeetÔttu ei saa olukorda, kus arvutis on mitu rakenduse versiooni, vÀga tÀpselt töödelda.

Erinevad Firefoxi ikoonid erinevates versioonides. Praegu ei ole seda vÔimalik Linuxis ilma erinevate lahendusteta töödelda.
Mac OS X töötab veidi rafineeritumalt:
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.icnsOn nĂ€ha, et on olemas ĂŒks fail firefox.icns pakendis Firefox.app, mis sisaldab kĂ”iki suurusi, seega erinevates versioonides ĂŒhel rakendusel on erinevad ikoonid.
Oluliselt parem! Ikoonid reisivad koos rakendusega, kĂ”ik ressursid ĂŒhes failis.
Naaseme Haiku juurde. Geniaalne lahendus, ilma eranditeta. Vastavalt :
On vÀlja töötatud eriline, vÀikeste suuruste ja kiire renderdamise jaoks kÔrgelt optimeeritud formaat HVIF. SeetÔttu on meie ikoonid enamasti palju vÀiksemad kui raster- vÔi laialdaselt kasutatavad SVG formaadis.
Ja nad on tÔepoolest optimeeritud:

HVIF ikooni suurused vÔrreldes teiste formaatidega.
Erinevus on kĂŒmneid kordi!
Aga maagia ei lĂ”pe siin. Ăks ja sama HVIF vĂ”ib nĂ€idata erinevaid detailitasemeid sĂ”ltuvalt kuvatavast suurusest, hoolimata sellest, et see on vektorgraafika formaat.

Erinevad detailitasemed (LOD) sÔltuvalt renderdamise suurusest
NĂŒĂŒd puudutame puudusi: ei saa lihtsalt vĂ”tta SVG-d, visata seda ImageMagick'i ja sellega lĂ”petada, tuleb lĂ€bi kĂ€ia mitu tsĂŒklit, et luua ikoon HVIF formaadis. selgitusi. Kuid IconOMatic vĂ”ib SVG-d kĂŒllaltki ebakompetentselt importida; umbes 90% SVG ĂŒksikasjadest imporditakse mingil tĂ”enĂ€osusel, ĂŒlejÀÀnud 10% tuleb seadistada ja kĂ€sitsi muuta. VĂ”ite lugeda rohkem sellest, kuidas HVIF oma maagiat teeb blogist
Ikoni lisamine rakendusse
NĂŒĂŒd saan lisada ikooni pakendile, mille olen loonud , arvestades kogu saadud teavet.
Kuna mul ei ole nĂŒĂŒd erilist soovi joonistada oma ikooni minu 'Tere, Maailm' QtQuickApp jaoks, siis vĂ”taksin 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 CreatorKontrollime, et ikoon oleks kopeeritud:
/Haiku/home> xres -l /Haiku/home/QtQuickApp/QtQuickApp/Haiku/home/QtQuickApp/QtQuickApp
resources:type ID size name
------ ----------- ----------- --------------------
'VICN' 101 152238 BEOS:ICONTundub hÀsti, kuid miks, kui uus ikoon on kopeeritud, see ei kuva?

Kopeeritud VICN:101:BEOS:ICONs ei ole veel rakenduse ikoonina failihalduris kasutusel.
Mida ma siis vahele jÀtsin?
Arendaja kommentaar:
On vaja luua fail
rdefkÔigi ressurssidega, seejÀrel kÀitada kÀskrc nimi.rdef, see loob faili.rsrc. Siis tuleb kÀitada kÀskresattr -o nimi_binaar nime.rsrc. Minimaalselt kasutan sarnaseid kÀske oma skriptide ikoonide lisamiseks.
Oli ju vaja luua ressurss, mitte atribuut. Olen tÀiesti segaduses.
Nutikas vahemĂ€lu failisĂŒsteemi kasutamine.
ELF atribuutide avamine ja lugemine toimub aeglaselt. Nagu ma eelnevalt mainisin, kirjutatakse ikoon ressursina faili endasse. See meetod on usaldusvÀÀrsem, vĂ”imaldades ellu jÀÀda kopeerimisel teise failisĂŒsteemi. Siiski kopeeritakse see ka failisĂŒsteemi atribuudiks, nĂ€iteks BEOS:ICON. See töötab ainult teatud failisĂŒsteemides, nĂ€iteks BFS. SĂŒsteemile kuvatavad ikoonid (Trackeris ja Deskbaris) loetakse sellest laiendatud atribuudist, kuna selline lahendus töötab kiiresti. MĂ”nes kohas (kus kiirus ei ole oluline, nĂ€iteks 'Teave programmi kohta' aken) saab sĂŒsteem ikooni otse ressursist failis. Kuid see ei ole veel kĂ”ik. Pea meeles, et Macis said kasutajad asendada rakenduste, kataloogide ja dokumentide ikoone oma ikoonidega, kuna Macis on vĂ”imalus teha selliseid 'olulisi' asju, nĂ€iteks . Haikus tuleb ressursi (failis) vĂ”tta kui rakendusega kaasasolevat algset ikooni, ning atribuut (BFS failisĂŒsteemis) kui midagi, mis vĂ”imaldab kasutajal soovi korral muudatusi teha (kuigi, nĂ€punĂ€ide, graafiline liides kasutajateikooni vahetamiseks vaikeikooni kohal pole veel teostatud).
FailisĂŒsteemi atribuutide kontrollimine
EL-i 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.
(...)Olenemata sellest, see on nagu âliimâ, mis viib ressursid ja failisĂŒsteemi atribuudid usaldusvÀÀrsete ja kiirete vahel edasi-tagasi. Kuna sĂŒsteem eeldab ressursside hankimist ja kopeerib selle automaatselt, ei pea ma sellest enam muretsema.
hpkg pakettide vÔlu
Praegu (kĂ”ige sagedamini) kasutatakse Haikus programmide hankimiseks pakette .hpkg. Ărge laske end petta lihtsast nimest: .hpkg formaat töötab tĂ€iesti teisiti kui teised sarnaste nimedega formaadid, millega olete kokku puutunud, tal on reaalsed supervĂ”imed.
Traditsiooniliste pakettide formaatidega olen ma kaua aega mures olnud jĂ€rgmise asja pĂ€rast: laadid alla ĂŒhe (paketi), aga sĂŒsteemi installitakse teine (pakettide sees olevad failid). Failidega on ĂŒsna keeruline toime tulla (nĂ€iteks neid kustutada), kui paketti installitakse traditsiooniliselt. Ja kĂ”ik see sellepĂ€rast, et paketi sisu jaotub kogu failisĂŒsteemi, sealhulgas kohtadesse, kuhu tavaline kasutaja ei pruugi kirjutamisĂ”igust omada. See loob terve klassi programme â paketihaldureid. Ning juba installitud tarkvara, nĂ€iteks teisele masinale, eemaldatavale kettale vĂ”i failiserverisse liigutamine on veelgi keerulisem, kui mitte tĂ€iesti vĂ”imatu. Tavalises Linuxi sĂŒsteemis vĂ”ib kergesti eksisteerida sadu tuhandeid vĂ”i koguni miljoneid isoleeritud faile. Loomulikult on see samal ajal habras ja aeglane, nĂ€iteks sĂŒsteemi esialgse installimise, traditsiooniliste pakettide installimise, uuendamise ja kustutamise ning alglaadimise mahtude (juurkatalooge) teisele seadmele kopeerimise juures.
Töötan projekti AppImage kallal, mis on osaline tugimeetod lĂ”ppkasutajate rakenduste jaoks. See on tarkvara levitamise formaat, mis kogub rakenduse ja kĂ”ik selle sĂ”ltuvused ĂŒhe failisĂŒsteemi pildina, mis mountitakse rakenduse kĂ€ivitamisel. See lihtsustab asju mĂ€rgatavalt, kuna sama ImageMagick muutub ootamatult ĂŒheks failiks, mida lihtsad surelikud saavad failihalduris hallata. Pakutud meetod töötab ainult tarkvara jaoks, nagu projekt nimigi peegeldab, ning omab ka oma haigeid kohti, kuna Linuxi tarkvara tarnimisega tegelejad suunavad alati sĂŒĂŒdistused minu suunas.
Tagasi Haiku juurde. Kas leidus tasakaal traditsiooniliste paketisĂŒsteemide ja piltidele pĂ”hineva tarkvara tarnimise vahel? Selle paketid .hpkg on tegelikult tihendatud failisĂŒsteemi pildid. SĂŒsteemi kĂ€ivitamisel monteerib kernel kĂ”ik installitud ja aktiivsed paketid jĂ€rgmiste kerneliteadete puhul:
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 ĂŒsna minimalistlikku operatsioonisĂŒsteemi, sealhulgas kernelit. Uskuge vĂ”i mitte, kuid isegi kernel ei kaevata kĂ€ivitusmahtudest (juurpartitsioon) vĂ€lja, vaid laaditakse hoolikalt oma kohta paketti. .hpkgAga vau! Olen juba maininud, et minu arvates pĂ”hineb Haiku terviklikkus ja rafineerituse tunne asjaolul, et kogu sĂŒsteemi - kernelist ja pĂ”hikasutajakeskkonnast kuni pakettide haldamise ja töökeskkonna infrastruktuurini - arendab sama meeskond ĂŒhiselt. Kujutage ette, kui palju erinevaid gruppe ja meeskondi oleks vaja, et midagi sarnast Linuxi baasil kĂ€ivitada. [kujuneb mul meeles PuppyLinuxi projekt, - tĂ”lkija mĂ€rkus]. SeejĂ€rel kujutage ette, kui kaua kuluks, et see lĂ€henemine distrodesse rakendada. Ăeldakse ju, et vĂ”tke lihtne ĂŒlesanne ja jagage see erinevate tĂ€itjatega, ning see muudab selle niivĂ”rd keeruliseks, et see lĂ€heb lahendamatuks. Haiku avas selle koha pealt mu silmad. Arvan, et just see juhtub praegu Linuxiga (Linux, siin mĂ”eldud kui kogum, mis viitab Linuxi/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu virnale).
SĂŒsteemi tagasikĂ€ik hpkg abil
Kuidas sageli juhtub jĂ€rgmine olukord: vĂ€rskendus lĂ€ks edukalt, kuid hiljem selgub, et midagi ei tööta nii, nagu peab? Tavaliste paketihaldurite kasutamine muudab sĂŒsteemi seisundi taastamise enne uute pakettide installimist keeruliseks (nĂ€iteks kui midagi lĂ€heb valesti). MĂ”ned sĂŒsteemid pakuvad lahendusi failisĂŒsteemi klonide abil, kuid need on ĂŒsna kohmakad ning neid ei rakendata kĂ”ikides sĂŒsteemides. Haikus on see lahendatud pakettide abil. .hpkg. Iga kord, kui sĂŒsteemis pakette muudetakse, ei eemaldata vanu pakette, vaid need sĂ€ilitatakse sĂŒsteemis alamkaustades vormingus. /Haiku/system/packages/administrative/state-<...>/ pĂŒsivalt. KĂ”ik lĂ”petamata toimingud salvestavad oma andmed alamkaustades. /Haiku/system/packages/administrative/transaction-<...>/.

Sisu /Haiku/system/packages/administrative. âStateâŠâ kaustad sisaldavad tekstifaile aktiivsete pakettide nimedega, âtransactionâŠâ â ise paketid.
âVana aktiivne seisundâ, s.t. nimekiri .hpkg pakettidest, mis olid aktiivsed muudatuste eel, salvestatakse pĂ€rast iga toimingut failihalduris tekstifailina. /Haiku/system/packages/administrative/state-<...>/activated-packages. Sarnasel viisil kirjutatakse uus âaktiivne seisundâ tekstifaili. /Haiku/system/packages/administrative/activated-packages.
Kataloog /Haiku/system/packages/administrative/state-<...>/ sisaldab ainult tekstifaili aktiivsete pakettide nimekirjaga sellest seisundist (kui pakette installiti ilma eemaldamata), ja kui pakette eemaldati vĂ”i uuendati â state kaust sisaldab vanu versioone pakettidest.
SĂŒsteemi kĂ€ivitamisel otsustatakse pakettide aktiveerimise (mĂ€ountimise) ĂŒle pakettide nimekirja alusel. Nii lihtne ongi! Kui kĂ€ivitamisel lĂ€heb midagi valesti, saab laadimishaldurile öelda kasutada teist, vanemat nimekirja. Ălesanne on lahendatud!

Haiku laadimishaldur. Iga sisenemiskoht vastab vastavale âaktiivsele seisundileâ.
Mulle meeldib lĂ€henemine lihtsate tekstifailide kasutamiseks âaktiivse seisundiâ nimekirjana, kus on salvestatud arusaadavad nimed. .hpkg. See on terav vastand masinatele mĂ”eldud keerulistele sĂŒsteemidele. Aktiivsete pakettide nimekiri igas ajahetkes.

Konfiguratsiooniandmed.
Tundub, et kaustas
on seadistusfailid paketid, kuid kirjutamiseks saadaval. Nagu mĂ€letate, /Haiku/system/packages/administrative/writable-files mĂ€ountitakse ainult lugemiseks. Seega tuleb need failid enne kirjutamist paketidest kopeerida. See on mĂ”istlik. .hpkg GUI integreerimine .hpkg sĂŒsteemiga.
GUI integreerimine sĂŒsteemi .hpkg
NĂŒĂŒd vaatame, kuidas need sĂ€ravad paketid .hpkg kliendi töökeskkonda (UX) integreerumisega hakkama saavad. LĂ”ppude lĂ”puks on Haiku mĂ”eldud isiklikuks kasutamiseks. Isiklikult olen seadnud kĂ”rged ootused, vĂ”rdledes kasutajakogemust pakettide .app Macintoshis sama kogemusega .hpkg. Ma ei hakka isegi vĂ”rrelda olukorda Linuxi töökeskkondades, sest see on absoluutselt kohutav vĂ”rreldes ĂŒkskĂ”ik millise teisega.
Mulle tulevad meelde jÀrgmised stsenaariumid:
- Ma tahan paketi sisu vaadata
.hpkg - Ma tahan paketti installida
- Ma tahan paketti eemaldada
- Ma tahan eemaldada midagi, mis tuli sĂŒsteemi koos paketiga
- Ma tahan kopeerida midagi, mis tuli sĂŒsteemi koos paketiga
- Ma tahan alla laadida kĂ”ik paketi sĂ”ltuvused, mis ei pruugi olla osa igast Haiku installatsioonist (nĂ€iteks mulle on fĂŒĂŒsiliselt isoleeritud masin, millel pole internetiĂŒhendust).
- Ma tahan oma pakette (noh, vÔi nende osa) eraldi teise kohta liikuda, eraldi alglaadimise mahust (juurkett) (sest nÀiteks mul on seal ruumipuudus).
See peaks katma enamiku minu igapÀevase töö pÔhijuhtumeid. Noh, alustame.
Paketi sisu kontrollimine
Macis klĂ”psan ma lihtsalt paketi peal paremalla ja avan selle sisu Finderis. LĂ”ppude lĂ”puks on see lihtsalt maskeeritud kataloog! (Ma tean, et on olemas paketid .pkg sĂŒsteemi osade jaoks, mis ei ole rakendused, kuid tavalised kasutajad ei puutu nendega enamasti kokku).
Haikus klÔpsan paketi peal paremalla, seejÀrel valin "Contents", et vaadata, mis sees on. Kuid siin on lihtsalt failide nimekiri ilma vÔimaluseta neid topeltklÔpsuga avada.
Oleks palju parem, kui oleks vÔimalik (ajutine) paketi mountimine .hpkg failihalduri kaudu vaatamiseks, nii et kasutaja ei peaks muretsema teostuse detailide pÀrast. (Muide, paketti saab avada .hpkg Expanderis , mis vÔib selle vÀlja pakkida nagu iga teine arhiiv).HaikuDepot liideses saab vaadata paketi failide nimekirja, kuid pole viisi sisu vaatamiseks, nÀiteks topeltklÔpsates README.md

Selles kategoorias vÔidab Mac, kuid vajaliku funktsionaalsuse lisamine HaikuDepotis ei tohiks tekitada suuri raskusi.
Paketi installimine GUI kaudu
Paketihalduse installimine GUI kaudu
Macis, enamik ketaspilte .dmg sisaldab pakette .app. Avame ketaspildi kahekordse klÔpsuga, seejÀrel kopeerime paketi, nÀiteks lohistades selle /Applications Finderis. Minu jaoks tundub see iseenesestmÔistetav, kuid olen kuulnud, et mÔned algajad vÔivad sellega raskustes olles. Vaikimisi /Applications (NeXT-is oli see vÔrgus, samuti individuaalne), kuid oma rakendusi on lihtne paigutada ka failiserverisse vÔi alamkausta $HOME/Applications, kui see teile sobib.
Haikus, kahekordne klĂ”ps paketile, seejĂ€rel klĂ”ps "Install", lihtsam ei saa olla. Mind huvitab, mis juhtub, kui paketil on sĂ”ltuvused, mis on saadaval HaikuPorts'is, kuid veel mitte installitud. Linuxis ei osata selles olukorras tĂ”esti midagi teha, aga lahendus on ilmne â kĂŒsida kasutajalt, kas ta soovib sĂ”ltuvusi alla laadida ja installida. Just seda teebki Haiku.

Allalaadisin paketi 'sanity' kĂ€sitsi ja klĂ”psasin sellele, pakettide haldur teab, kust vĂ”tta selle sĂ”ltuvused (tingimusel, et hoidlad on juba sĂŒsteemis kirjas). Mitte iga Linuxi distributsioon ei oska seda.
Veel ĂŒks viis on failihalduri kasutamine, piisab lihtsalt paketi lohistamisest .hpkg kausta, vĂ”i /Haiku/system/packages (ĂŒldiseks paigaldamiseks, vaikimisi), vĂ”i /Haiku/home/config/packages (individuaalse paigaldamise jaoks; ei ole saadaval kahekordse klĂ”psuga â mind hĂ€irib endiselt sĂ”na "config" siin, mis minu jaoks on sel juhul sĂŒnonĂŒĂŒm "settings"-ile). Aga mitme kasutaja kontseptsioon pole Haiku jaoks veel saadaval (ilmselt ongi seetĂ”ttu kĂ”ik nii lihtne â ma ei tea, vĂ”ib-olla muudab mitmikkasutuse vĂ”imalused isikliku arvuti töökeskkonna jaoks liiga keeruliseks).
Selles kategoorias vĂ”idab Haiku, sest oskab töötada mitte ainult rakendustega, vaid ka sĂŒsteemiprogrammidega.
Paketi eemaldamine GUI-st
Macis, tuleb rakenduse ikoon lohistada prĂŒgikasti, ja sellega asi piirdub. Lihtne!
Haikus, kĂ”igepealt peate leidma, kus paketid sĂŒsteemis asuvad, kuna te harva installite neid Ă”igesse kohta (kĂ”ike teeb sĂŒsteem). TĂŒĂŒpiliselt tuleb otsida /Haiku/system/packages (ĂŒldise paigaldamise jaoks vaikimisi), vĂ”i /Haiku/home/config/packages (ma juba ĂŒtlesin, et "config" ei ole Ă”ige nimetus?). Siis lohistatakse rakendus lihtsalt prĂŒgikasti ja sellega asi piirdub.
Lihtne! Siiski, ma ei ĂŒtleks nii. Siin on, mis tegelikult juhtub:

Siit saab teada, mis juhtub, kui tĂ”ukate rakenduse prĂŒgikasti. /Haiku/system/packages
Lihtsalt proovisin viia oma eilse rakenduse "Tere, maailm" QtQuickApp-s prĂŒgikasti. Ma ei ĂŒritanud sĂŒsteemi katalooge liigutada, ja kuna kĂ”ik paketid installitakse sĂŒsteemi katalooge â ei saa paketti kustutada .hpkg ilma et muuta "tema sisu". Tavaline kasutaja ehmuks, vajutades vaikimisi "TĂŒhista" nuppu.
Selgitab :
Sellel teatega on juba ĂŒle 10 aasta. TĂ”enĂ€oliselt peaksime selle seadistama nii, et hoiatust kuvataks ainult paketi liigutamisel. Tavalised kasutajad ei pea niikuinii seda tegema.
Noh, vÔib-olla peaksin proovima seda teha HaikuDepot'i kasutades? Topeltklikin paketti /Haiku/system/packages, oodates, et kuvatakse "Eemalda" nupp. Ei, on (ainult) "Installi". "Eemalda", kus sa oled?
Proovisin nalja pÀrast, mis juhtub, kui vajutan "Installi" juba installitud paketi jaoks. Tuleb vÀlja nii:

Nii juhtub, kui proovite installida juba installitud paketti.
JĂ€rgmine ilmub:

Kui eelmisel aknas vajutada "Rakenda muudatused" â tuleb vĂ€lja nii
Eeldan, et see on tarkvaralööve, pilet on juba avatud. [autor ei jaganud linki, â tĂ”lkija mĂ€rkus]
Kiire lahendus: lisada "Eemalda" nupp, kui pakett on juba olemas
/Haiku/system/packages, vÔi/Haiku/home/config/packages.
HaikuDepot's installitud pakettide nimekirja vaadates nÀen oma paketti nimekirjas ja saan selle eemaldada.
Selles kategoorias vĂ”idab Mac. Aga ma suudan ette kujutada, et korraliku seadistuse korral vĂ”iks Haiku kasutajakogemus olla parem kui Macil. (Ăks arendajatest hindas seda nii: "Kuna vĂ€he aega, et lisada nĂ€idatud funktsionaalsust HaikuDepot'is, kui tead veidi C++-st", on vabatahtlikke?)
MÔne asja eemaldamine paketist
Proovime eemaldada rakenduse ennast, mitte paketti .hpkg, millest see ilmnes (kahtlen, et "tavalistele surelikel" on mingi vahe).
Macis, kasutaja töötab tegelikult tavaliselt faili .dmg, kust tuleb rakenduse pakett .app. Tavaliselt tekivad pildid .dmg allalaadimiste kataloogis, kuid paketid kopeeritakse kasutaja poolt /Applications. On arvamus, et paljud kasutajad ei tea, mida nad teevad, ja seda hĂŒpoteesi kinnitab endine Apple'i töötaja. (Ăks asi, mis mulle Mac'i juures ei meeldi. Aga nĂ€iteks AppImage'i puhul ei ole vahet rakenduse ja paketi vahel, milles see oli. Lihtsalt tĂ”mba ikoon prĂŒgikasti = ja see on kĂ”ik. Lihtne!)
Haikus, samuti on eristamine rakenduste/ ja pakettide/, nii et ma kahtlen, et kasutajatele on see selgemaks muutunud. Aga mis juhtub, kui tĂ”mbad rakenduse rakenduste/ prĂŒgikasti:

Siin on see, mis juhtub, kui proovid rakendust kustutada, mis on saadud failist .hpkg
Tehniliselt on see Ă”ige (sest rakendus on paigutatud ainult lugemiseks mĂ”eldud failisĂŒsteemile), aga see ei ole kasutajale eriti kasulik.
Kiire lahendus: selle asemel pakkuda GUI kaudu kustutamist
.hpkg
Huvi pĂ€rast proovisin rakendust dubleerida, vajutades Alt+D. Sai teate «Ei saa objekte kirjutada vĂ”i kopeerida ainult lugemiseks mĂ”eldud sĂ”ltumatu mahamonteerimisega». Ja see on kĂ”ik, sest /system (lisaks /system/packages ja /system/settings) on packagefs'i mountpunkt (pead meeles, kuidas see kuvab vĂ€ljundis df?). Đ ŃĐŸĐ¶Đ°Đ»Đ”ĐœĐžŃ, ĐČŃĐČĐŸĐŽ ĐșĐŸĐŒĐ°ĐœĐŽŃ mount ei selgita olukorda (nagu oli öeldud ĂŒhes varasemas artiklis), mountvolume ei nĂ€ita soovitud (nĂ€ib, et ainult loop kaudu monteeritud paketid .hpkg ei loe «mahdudena»), ja unustasin ka alternatiivsed kĂ€sud.
Selles kategoorias ei vÔitnud keegi peale AppImage'i (aga see on, kui olla tÀiesti aus, kallutatud arvamus). Siiski vÔib eeldada, et pÀrast kohandamist on Haiku kasutajakogemus parem kui Mac'il.
MÀrkus: tuleb vÀlja selgitada, mis on «maht» seoses «kotiga». TÔenÀoliselt on see vÔrreldav «kausta» ja «katalooge» vahel: enamus katalooge kuvatakse failihalduris kaustadena, kuid mitte kÔik neist (nÀiteks paketid, mida töödeldakse failidena). Kas need vÀljendid teevad mind ametlikult nerdiks?
Paketi sisu kopeerimine teisele sĂŒsteemile
Macis, tÔmban lihtsalt paketti .app, ja kuna sÔltuvused on paketti sees - need liiguvad koos.
Haikus, tĂ”mban rakenduse, aga sĂ”ltuvusi ei töödeldud ĂŒldse.
Kiire lahendus: laske selle asemel pakkuda paketi «.hpkg» tÀielikult koos sÔltuvustega, kui need on olemas.
Selles kategoorias on Mac selgelt vĂ”itja. VĂ€hemalt mina, kes armastan nende paradigmat. Haiku peaks seda kopeerima. .hpkg rakenduse asemel, kuid sĂŒsteem ei paku mulle sellist ...
Paketi allalaadimine koos kÔigi selle sÔltuvustega
Kaugel on iga masin pidevalt ĂŒhendatud. Vastupidi, mĂ”ned masinad (jah, ma vaatan teid, modernsed Windows, Mac ja Linux) unustavad selle. Minu jaoks on oluline, et ma saaksin nĂ€iteks minna internetikohvikusse, tĂ”mmata tarkvara eemaldatavasse seadmesse, sisestada see seade kodukompjutaatorisse ja olla kindel, et kĂ”ik töötab [riskialti inimene, tehes seda Windowsis... â tlk. mĂ€rk].
SeetÔttu satun ma natuke sagedamini, kui peaksin, tavaliselt rahulolematute sÔltuvuste pÀrast Windowsis ja Linuxis.
Macis see on tavaliselt ĂŒks fail, kĂ”ik, mis on vajalik â alla laadida .dmg. Enamasti ei ole tal sĂ”ltuvusi peale nende, mis MacOS-i vaikimisi kaasas. Erandiks vĂ”ib olla keerulised rakendused, mis vajavad vastavat töökeskkonda, nĂ€iteks java.
Haikus alla laadida pakett .hpkg nĂ€iteks sama rakenduse jaoks java, vĂ”ib osutuda ebapiisavaks, kuna java vĂ”ib olla nii kohal kui ka puududa sihtmasinal. Kas on vĂ”imalik alla laadida kĂ”ik sĂ”ltuvused antud paketi jaoks .hpkg, vĂ€lja arvatud need, mis installitakse Haikus vaikimisi ja seega peaksid olema igas Haiku sĂŒsteemis?
Selles kategoorias vÔidab Mac vÀikese edumaaga.
Kommenteerib hr. waddlesplash:
Et kirjutada programm, mis kogub kÔik rakenduse sÔltuvused pakettide kogumina
.hpkgkellegi jaoks, kes tunneb Haiku sisemist ĂŒlesehitust, piisab umbes 15 minutist. Toetuse lisamine pole sugugi keeruline, kui see on tĂ”eline vajadus. Kuid minu jaoks on see haruldane olukord.
Hoidke hinge kinni, kuni jĂ€rgmine artikkel selles tsĂŒklis ilmub.
Pakettide liigutamine eraldi kohta
Nagu ma juba varem mainisin, tahan panna oma paketid .hpkg (noh, vĂ”i nende osa) eraldi kohta, mis on eraldatud tavalise paigutuse laadimiskettal (juurkonnal). Tavalises olukorras (mitte sugugi teoreetilises) on pĂ”hjuseks see, et minu (sise)kettal lĂ”peb pidevalt vaba ruum, hoolimata sellest, kui suured nad on. Ja ma ĂŒhendangi tavaliselt vĂ€lised kettad vĂ”i vĂ”rguteenused, kus minu rakendused asuvad.
Macis ma lihtsalt liigutan pakette .app kaardile vÔi vÔrgu katalooge Finderis, ja sellega kÔik. Ma saan ikka veel kahekordse klÔpsuga avada rakenduse nagu tavaliselt tegin seda kÀivitusmahu kaudu. Lihtne!
Haikus, nagu mulle öeldi, seda saab saavutada mu muude .hpkg pakettide liigutamisega kaardile vĂ”i vĂ”rgu katalooge, kuid seejĂ€rel tuleb kasutada mĂ”ningaid dokumenteerimata kĂ€ske terminalis, et need sĂŒsteemi monteerida. Ma ei tea, kuidas seda teha, kasutades ainult graafilist liidest.
Selles kategoorias vÔidab Mac.
Vastavalt mr. waddlesplashile:
Siin on optimeerimine arvutuste pĂ”hjal tavalise kasutuse jaoks. Kui nĂ”udlus suureneb rohkem kui ĂŒhe kasutaja jaoks, rakendame seda kindlasti. Igatahes on vĂ”imalus kolmanda osapoole rakendamiseks.
RÀÀgime sellest jÀrgmises artiklis.
Kui rÀÀkida vĂ”rgu kataloogidest: oleks suurepĂ€rane (eeldan LAN-pidusid) omada lihtsaid, tuvastatavaid, vĂ”rguĂŒlesande rakendusi (nĂ€iteks Zeroconfi kaudu), mida saab kopeerida lokaalsesse arvutisse vĂ”i kĂ€ivitada otse kohalikust vĂ”rgust. Muidugi on arendajatel vĂ”imalus sellest loobuda lĂ€bi app_flags.
LĂ”pparuande integratsioonisĂŒsteemist hpkg koos GUI-ga
Ma arvan, et peamiselt sellel pĂ”hjusel, et suhteliselt uue integratsiooniga .hpkg GUI-ga jĂ€tkub veel ruumi parendamiseks. Igatahes on mitmeid asju, mida kasutajakogemuse osas saaks parandadaâŠ
Veel ĂŒks asi: Kernel Debug Land
Oleks suurepÀrane, kui kernel panics ajal oleks vÔimalik sisestada kÀske, nÀiteks syslog | grep usb. Noh, Haikus on see vÔimalik Kernel Debug Landi tÔttu. Kuidas aga nÀha seda maagiat toimimas, kui sul lÀheb kÔik hÀsti ilma kernel panicsita? Lihtne, klÔpsates Alt+PrintScn+D (mnemoonika Debug). Mulle meenuvad kohe , mis vÔimaldas algsetel Macintosh arendajatel pÀÀseda debugeerimisse (kui see oli loomulikult installitud).
KokkuvÔte
Hakkasin mĂ”istma, et Haiku sĂŒsteemi keerukus tuleneb sellest, et tööd teeb vĂ€ike meeskond, millel on selge suund töökeskkonnale, kui kĂ”ik sĂŒsteemi kihid on kergesti ligipÀÀsetavad.
Terav kontrast Linuxi / GNU / dpkg / apt / systemd / Xorg / dbus / Gtk / GNOME / XDG / Ubuntu maailmaga, kus kĂ”ik on tĂŒkkideks purustatud sellisel mÀÀral, et abstraktsioon istub abstraktsioonil ja toetub kĂ”igi kaudu.
Samuti tuli mĂ”istmine, kuidas sĂŒsteem .hpkg kombineerib parimaid tavasid traditsioonilistest paketihalduritest, Snappy, Flatpak, AppImage, isegi btrfs, ja segab need kokku Maci pĂ”himĂ”ttega "lihtsalt töötab".
Nagu midagi «lĂŒlitus» mu peas ja ma sain aru, kuidas sĂŒsteem .hpkg suudab tagasi pöörduda, â lihtsalt vaadates seda. Aga see ei ole mina, vaid sĂŒsteemi ilu ja lihtsus. Paljuski on siin tunda algse Mac'i vaimu.
Jah, lehekĂŒlgede sirvimine brauseris vĂ”ib olla tĂ”rkuv ja toimida nagu limukas, rakendusi vĂ”ib puududa (Gtk, Electron â arendajad jĂ€reldasid, et need ei sobi hĂ€sti elegantsiga), video ja 3D kiirendamine vĂ”ib tĂ€ielikult puududa, kuid siiski mulle meeldib see sĂŒsteem. Need asjad on parandatavad ja need tulevad varem vĂ”i hiljem. See on vaid aja ja vĂ”ib-olla veidi punaste silmade kĂŒsimus.
Ma ei saa abi pakkuda, kuid arvan, et just sellest hetkest algab aasta Haiku töölaual.
Juhuslikud probleemid
VÔib-olla on juba pÀringud esitatud, vÔi pean ma need avama?
- BeScreenCapture peaks saama GIF-formaadis eksportida, nagu Peek. Selle vÔib teha ffmpeg'iga, mis on juba Haikus olemas. .
- Ekraanipildi loomise programm ei saa teha pilti mudelaknast, vaid hoopis kogu ekraanist
- Ekraanipilte ei saa kÀrpida WonderBrush'i kÀrpimise tööriistaga ja seejÀrel salvestada tulemust failina
- Mulle ei meeldi eriti Haiku kĂ€e ikoon, kuid arvan, et see on seotud sooja nostalgiaga. See hĂ€irib eriti Kritas kĂ€rpimise tööriista kasutamisel, kuna see toob kaasa ebatĂ€pse kĂ€rpimise (vt ekraanipilte mudeldialoogidest selle artikli sissejuhatuses). RistkĂŒlikukujuline kursori oleks suurepĂ€rane. .
Proovige ise! LÔppude lÔpuks pakub Haiku projekt allalaetavaid pilte DVD-le vÔi USB-le, mis on loodud . Paigaldamiseks piisab pildi allalaadimisest ja selle kirjutamisest mÀlupulgale, kasutades
Kas teil on kĂŒsimusi? Kutsume teid venekeelsesse .
Vigade ĂŒlevaade:
Alates tÔlge: see on kuues artikkel Haiku teemal.
Artiklite nimekiri:
Allikas: habr.com
