
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?
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? alates , 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 , graafikaprogrammi jaoks â ootamatult â ressursside redigeerimiseks.

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.

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.

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 .
Kuidas kontrollida ressursse Haikus? Kas on midagi sarnast ResEdit-ile?
Vastavalt :
Rakenduse paketiga kaasnevaid ressursse saab vaadata, lohistades kÀivitatava faili programmi, nagu . 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 litsentsiSaab 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_VERSIONRessurssidest ja formaatidest rohkem rdef vÔib lugeda .
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Ă”tlesidapp_flags: nĂ€itabregistrarkuidas rakendust töödelda. Ma arvan, et on midagi enam, kui see esmapilgul paistab. NĂ€iteks onB_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). OnB_MULTIPLE_LAUNCH, mis sunnib kĂ€ivitama protsessi iga faili. LĂ”puks on olemasB_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 ). Rakendused saavadB_EXCLUSIVE_LAUNCHteavitusi, 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.cacheSeda 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.pngPange tĂ€hele: Firefoxi erinevate versioonide mĂ”isted ei eksisteeri. Seega ei saa olukorda, kus sĂŒsteemis on mitu versiooni rakendusest, peenelt kĂ€sitleda.

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.icnsOn 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 :
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:

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.

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. 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 blogis
Ikooni lisamine rakendusse
NĂŒĂŒd saan ma lisada ikooni paketti, mille olen loonud , 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 CreatorVaatame, 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:ICONNÀeb hea vÀlja, kuid miks ei kuvata uut ikooni pÀrast selle kopeerimist?

Kopeeritud VICN:101:BEOS:ICONs ei kasutata rakenduse ikoonina failihalduris
Mida ma olen maha maganud?
Arendaja kommentaar:
Pean looma faili
rdefkÔigi ressurssidega, seejÀrel kÀitama kÀskurc nimi.rdef, see loob faili.rsrc. Siis pean kÀivitama kÀsuresattr -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 . 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-<...>/.

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!

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. OSTree vĂ”i Flatpaki sĂŒsteemifailide seas (seal, kus on ka Microsofti GUID).

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

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.

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:

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

Nii juhtub, kui proovite installida juba installitud paketti.
JĂ€rgmiseks kuvatakse:

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:

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
.hpkgon 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 , 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. .
- 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. .
Katsuge ise! Haiku projekt pakub allalaadimiseks pilte DVD vÔi USB, mis on loodud . Paigaldamiseks piisab pildi allalaadimisest ja selle kirjutamisest USB-mÀlupulgale koos
Kas on kĂŒsimusi? Olete oodatud venekeelsesse .
Vea ĂŒlevaade:
Alates TÔlge: see on kuues artikkel Haiku seeriast.
Artiklite nimekiri:
Allikas: habr.com
