
TL;DR: Haiku â ett operativsystem speciellt utvecklat för PC, vilket ger det flera knep som gör dess arbetsmiljö mycket bĂ€ttre Ă€n andra. Men hur fungerar det?
Jag upptÀckte Haiku, ett ovÀntat bra system. Jag Àr fortfarande förvÄnad över hur smidigt det fungerar, sÀrskilt jÀmfört med arbetsmiljöer pÄ Linux. Idag ska jag titta under huven. DÀr det Àr nödvÀndigt för en djupare förstÄelse kommer jag att göra jÀmförelser med den ursprungliga Macintosh, Mac OS X och Linux-arbetsmiljöer (standard XDG frÄn freedesktop.org).
Resurser i ELF-filer
IgÄr fick jag veta att IconOMatic kan spara ikoner i rdef-resurser i ELF-körbara filer. Idag vill jag se hur det egentligen fungerar.
Resurser? frÄn , den ursprungliga skaparen av Macintosh Finder och "fadern" till Macintosh Resource Manager:
Jag oroar mig för det styva sĂ€ttet att skriva kod pĂ„. För mig Ă€r sjĂ€lva idĂ©n om en applikation fryst i kod, utan möjlighet att förĂ€ndra nĂ„got dynamiskt â en avskyvĂ€rd galenskap. Det bör finnas en möjlighet att Ă€ndra sĂ„ mycket som möjligt vid körningstid. Naturligtvis kan sjĂ€lva koden för applikationen inte Ă€ndras, men visst gĂ„r det att förĂ€ndra nĂ„got utan att recompilera koden?
PÄ den ursprungliga Macintosh gjorde man sÄ att dessa filer hade en "datasektion" och en "resurssektion", vilket oerhört underlÀttade lagring av olika saker, till exempel ikoner, översÀttningar och sÄ vidare i körbara filer.
PĂ„ Mac anvĂ€nds detta , ett grafiskt program för â överraskande nog â att redigera resurser.

ResEdit pÄ den ursprungliga Macintosh
Som ett resultat blev det möjligt att redigera ikoner, menyval, översÀttningar och sÄ vidare ganska enkelt, men de "reser" ÀndÄ tillsammans med applikationerna.
Hur som helst hade detta tillvÀgagÄngssÀtt en stor nackdel: det fungerade endast pÄ Apples filsystem, vilket blev en av anledningarna till att Apple övergav "resurssektionen" nÀr de övergick till Mac OS X.
PÄ Mac OS X ville Apple ha en lösning oberoende av filsystemet, sÄ de anvÀnde konceptet paket (frÄn NeXT), kataloger som hanteras av filhanteraren som "opaka objekt", liknande filer, snarare Àn kataloger. Varje paket med en applikation i formatet .*.app innehÄller, bland annat, en fil Info.plist (i nÄgot motsvarande JSON eller YAML frÄn Apple), som innehÄller metadata för applikationen.

Nycklarna i Info.plist-filen frÄn Mac OS X-applikationspaketet.
Resurser som ikoner, UI-filer och andra lagras i paketet som filer. Konceptet har i stort sett ÄtergÄtt till sina rötter i NeXT.

Mathematica.app pÄ NeXTSTEP 1.0 Är 1989: visas som en katalog med filer i terminalen, men som ett enda objekt i den grafiska filhanteraren.
LÄt oss gÄ tillbaka till BeOS, som Haiku Àr baserat pÄ. Dess utvecklare bestÀmde sig vid övergÄngen frÄn PEF (PowerPC) till ELF (x86) (samma som anvÀnds pÄ Linux) för att lÀgga till en resurssektion i slutet av ELF-filer. Ingen egen lÀmplig ELF-sektion anvÀndes, den skrivs helt enkelt till slutet av ELF-filen. Resultatet var att program strip och andra frÄn binutils, som inte kÀnde till detta, helt enkelt klippte bort den. DÀrför, för att lÀgga till resurser i ELF-filer pÄ BeOS, bör man undvika att arbeta med dem med Linux-verktyg.
Vad hÀnder nu med Haiku? I princip ganska samma sak.
Teoretiskt sett skulle det vara möjligt att placera resurser i den lÀmpliga ELF-sektionen. Enligt utvecklarna pÄ #haiku-kanalen pÄ irc.freenode.net:
Med ELF skulle sektionen ha mer mening... den enda anledningen till att vi inte gör det Àr att sÄ gjordes i BeOS.
Och det Àr inte vÀrt att Àndra nu.
Resurshantering
Resurser skrivs i ett strukturerat "resurs"-format: i grunden en lista av resurser med storlekar och sedan deras innehÄll. Jag tÀnker pÄ .
Hur kan man kontrollera resurser i Haiku? Finns det nÄgot som ResEdit?
Enligt :
För att visa resurser som levereras i applikationspaketet kan man dra den körbara filen till ett program som Du kan ocksÄ gÄ in i terminalen och köra kommandot
listres filnamn..
Resourcer finns i HaikuDepot, men jag fÄr bara programmet att krascha.
Hur hanterar man resurser i ELF-filer? Med hjÀlp av rsrc. och rdef.. rdef. Filerna kompileras till rsrc.. Filen rdef. lagras i ett vanligt textformat, sÄ det Àr mycket enklare att arbeta med. Filer i formatet rsrc. lÀgger till nÄgot i slutet av ELF-filen. LÄt oss prova att leka lite:
~> rc -h
Haiku Resurskompilator 1.1 För att kompilera ett rdef-skript till en resursfil:
rc [alternativ] [-o ] ... För att konvertera en resursfil tillbaka till ett rdef-skript:
rc [alternativ] [-o ] -d ... Alternativ:
-d --dekompilera skapa ett rdef-skript frÄn en resursfil
--auto-namn konstruera resursnamn frÄn ID-symboler
-h --hjÀlp visa detta meddelande
-I --inkludera lÀgg till i listan över inkluderingsvÀgar
-m --sammanfoga radera inte befintligt innehÄll i utdatafilen
-o --utdata specificera namn pÄ utdatafil, standard Àr out.xxx
-q --tyst visa inga felmeddelanden
-V --version visa programvaruversion och licens.Programmet kan anvÀndas xres för att kontrollera och hantera:
/> 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.
(...)Okej, ska vi prova?
/> 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_VERSIONMer om resurser och format rdef. kan lÀsas .
Standardtyper av resurser
Ăven om man kan lĂ€gga vad som helst i resurser, finns det nĂ„gra specifika standardtyper:
app_signature: MIME-typen för applikationen, för att matcha öppningsbara filer, start, IPC osv.app_name_catalog_entry: Eftersom applikationens namn vanligtvis Àr pÄ engelska, kan man hÀr ange platser dÀr översatta namn finns, sÄ att anvÀndare av olika sprÄk kan se det översatta namnet vid behov.app_version: precis det du tÀnker pÄapp_flags: angerregistrarhur applikationen ska behandlas. Jag tror att det finns mer Àn det verkar vid första anblicken. Till exempel finns detB_SINGLE_LAUNCH, vilket fÄr systemet att starta en ny applikationsprocess varje gÄng, pÄ begÀran av anvÀndaren (samma princip anvÀnds för de flesta applikationer pÄ Linux). Det finnsB_MULTIPLE_LAUNCH, vilket tvingar att starta en process för varje fil. Slutligen finns detB_EXCLUSIVE_LAUNCH, vilket fÄr systemet att starta endast en process Ät gÄngen, oavsett hur ofta anvÀndare försöker starta den (till exempel, sÄ startar Firefox pÄ Linux; samma resultat kan uppnÄs i Qt-applikationer med hjÀlp av funktionen ). Applikationer medB_EXCLUSIVE_LAUNCHinformeras nÀr anvÀndaren försöker starta dem igen: till exempel fÄr de sökvÀgen till den fil som anvÀndaren vill öppna med hjÀlp av dem.vector_icon: Vektorikon för applikationen (I BeOS fanns det inga vektorikoner, de flesta applikationer hade istÀllet tvÄ rasterikoner i exekverbara filer).
SjÀlvklart kan man lÀgga till resurser med valfria ID och typer, och sedan lÀsa dem i sjÀlva applikationen eller andra applikationer med hjÀlp av klassen BResources. Men lÄt oss först pausa vid det intressanta Àmnet ikoner.
Vektorikoner i Haiku-stil
SjÀlvklart valde inte bara Haiku det bÀsta formatet för ikoner, situationen med skrivbordsmiljöerna i Linux Àr lÄngt ifrÄn perfekt:
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.cacheAtt se nÄgot sÄdant kan man redan kÀnna vad det hÀr stycket handlar om.
SjÀlvklart finns det skalbara, vilket man kan förstÄ, vektorikoner. Varför finns det dÄ nÄgot annat? För att resultatet av rendering av vektorgrafik i smÄ storlekar kan vara sÀmre Àn perfekt. Man vill ha olika alternativ, optimerade för olika storlekar. I Linux-miljöer uppnÄs detta genom att sprida ut ikoner med olika storlekar över filsystemet.
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.pngObservera: det finns inget begrepp för olika versioner av Firefox. DÀrför kan man inte sofistikerat hantera situationen med nÀrvaron av flera versioner av applikationen i systemet.

Olika ikoner för Firefox i olika versioner. För nu Àr det omöjligt att hantera detta i Linux utan olika nödlösningar.
Mac OS X hanterar detta nÄgot mer sofistikerat:
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.icnsDet syns att det finns en fil firefox.icns i paketet Firefox.app, som innehÄller alla storlekar, sÄ att olika versioner av samma applikation har olika ikoner.
Mycket bÀttre! Ikonerna reser med applikationen, alla resurser i en fil.
LÄt oss Äterkomma till Haiku. En fantastisk lösning, utan undantag. Enligt :
Det har utvecklats ett sÀrskilt, högoptimerat format för smÄ storlekar och snabb rendering, HVIF. DÀrför Àr vÄra ikoner för det mesta mycket mindre Àn i raster- eller det allmÀnt anvÀnda SVG-formatet.
Och de Àr faktiskt optimerade:

Storlekarna pÄ ikonerna i HVIF jÀmfört med andra format.
Skillnaden Àr en ordning!
Men magin slutar inte hÀr. Samma HVIF kan visa olika detaljnivÄer beroende pÄ den visade storleken, trots att det Àr ett vektorformat.

Olika detaljnivÄer (LOD) beroende pÄ storleken pÄ rendering
Nu om nackdelarna: man kan inte bara ta SVG, slÀnga den i ImageMagick och vara klar, man mÄste gÄ igenom flera cykler för att skapa en ikon i HVIF-format. förklaringar. Men IconOMatic kan ganska ofullstÀndigt importera SVG; omkring 90% av detaljrikedomen i SVG importeras med viss sannolikhet, de resterande 10% mÄste justeras och Àndras manuellt. LÀs mer om hur HVIF gör sin magi i bloggen
Att lÀgga till en ikon i applikationen
Nu kan jag lÀgga till ikonen till paketet som skapades , med tanke pÄ all information som har mottagits.
Eftersom jag för nĂ€rvarande inte har nĂ„got som helst intresse av att rita en egen ikon för min "Hej, VĂ€rld" QtQuickApp â tar jag den frĂ„n Qt Creator.
/Haiku/home> xres /Haiku/system/apps/QtCreator/bin/Qt Creator -o /Haiku/home/QtQuickApp/QtQuickApp -a VICN:101:BEOS:ICON /Haiku/system/apps/QtCreator/bin/Qt CreatorLÄt oss kontrollera att ikonen har kopierats:
/Haiku/home> xres -l /Haiku/home/QtQuickApp/QtQuickApp/Haiku/home/QtQuickApp/QtQuickApp
resources:type ID size name
------ ----------- ----------- --------------------
'VICN' 101 152238 BEOS:ICONSer bra ut, men varför visas inte den nya ikonen nÀr den har kopierats?

Den kopierade VICN:101:BEOS:ICON anvÀnds fortfarande inte som ikon för applikationen i filhanteraren.
Vad har jag missat?
Utvecklarens kommentar:
Jag behöver skapa en fil
rdef.med alla resurser, sedan köra kommandotrc namn.rdef, det kommer att skapa en fil.rsrc. Sedan behöver jag köra kommandotresattr -o namn_binÀr namn.rsrc. à tminstone anvÀnder jag liknande kommandon för att lÀgga till ikoner till mina skript.
Men, jag ville ju skapa en resurs, inte en attribut. Jag Àr verkligen förvirrad.
Intelligent caching med hjÀlp av filsystemet.
Att öppna och lÀsa attribut frÄn ELF fungerar lÄngsamt. Som jag skrev ovan, skrivs ikonen som en resurs i sjÀlva filen. Denna metod Àr mer pÄlitlig och klarar av att överleva kopiering till ett annat filsystem. Men den kopieras ocksÄ till filsystemattributet, till exempel BEOS:ICON. Detta fungerar endast pÄ vissa filsystem, som BFS. Ikoner som visas av systemet (i Tracker och Deskbar) lÀses frÄn detta utökade attribut, eftersom en sÄdan lösning fungerar snabbt. PÄ vissa stÀllen (dÀr hastighet inte spelar nÄgon roll, som i det vanliga "Om-programmet"-fönstret) fÄr systemet ikonen direkt frÄn resursen i filen. Men det Àr inte slutet. Kom ihÄg, pÄ Mac kunde anvÀndare ersÀtta ikoner för applikationer, mappar, dokument med sina egna, eftersom Mac har möjlighet att göra dessa "viktiga" saker, till exempel I Haiku bör resursen (i filen) ses som den ursprungliga ikonen som levereras med applikationen, medan attributet (i BFS-filsystemet) Àr nÄgot som gör att anvÀndaren kan göra Àndringar efter eget val (Àven om,tips, det grafiska grÀnssnittet för att sÀtta en anvÀndarikon ovanpÄ standardikonen Ànnu inte Àr implementerat).
Kontroll av filsystemets attribut.
Med hjÀlp av resaddr möjligheten att kontrollera och stÀlla in filsystemets attribut.
/> 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.
(...)I grunden handlar det om ett "klister" som utför omvandling fram och tillbaka mellan (pÄlitliga) resurser och (snabba) attribut hos filsystemet. Och eftersom systemet Àr utformat för att hÀmta resurser och automatiskt utföra kopiering, behöver jag inte lÀngre oroa mig för detta.
Magin med hpkg-paket
För nÀrvarande anvÀnds paket oftast för att fÄ program pÄ Haiku .hpkg. LÄt dig inte luras av det enkla namnet: .hpkg-formatet fungerar helt annorlunda Àn andra format med liknande namn som du kan ha stött pÄ, det har verkliga superkrafter.
Med traditionella paketformat har jag lĂ€nge varit frustrerad över den hĂ€r faktorn: du laddar ner en (paket), men i systemet installeras nĂ„got annat (filer inne i paketet). Det Ă€r ganska svĂ„rt att hantera filer (till exempel att ta bort dem) nĂ€r en paketinstallation görs pĂ„ det traditionella sĂ€ttet. Anledningen till detta Ă€r att innehĂ„llet i paketet sprids ut över hela filsystemet, inklusive platser dĂ€r en vanlig anvĂ€ndare kanske inte har skrivĂ„tkomst. Detta ger upphov till en helt ny klass av program â paketförvaltare. Att flytta redan installerad programvara, till exempel till en annan dator, extern enhet eller filserver, blir Ă€nnu svĂ„rare, om inte helt omöjligt. I ett vanligt Linux-baserat system kan det lĂ€tt finnas frĂ„n flera hundratusen till miljontals separata filer. SjĂ€lvklart Ă€r detta samtidigt bĂ„de skört och lĂ„ngsamt, till exempel vid den första installationen av systemet, vid installation, uppdatering och borttagning av vanliga paket, samt vid kopiering av en startpartition (rotpartition) till en annan lagringsenhet.
Jag arbetar pÄ projektet AppImage, en delvis lösning för slutanvÀndarprogram. Det Àr ett distributionsformat för programvara som samlar applikationen och alla dess beroenden i en enda filsystemavbild, som monteras vid körning av applikationen. Det förenklar saker avsevÀrt, eftersom samma ImageMagick plötsligt blir en enda fil som hanteras i filhanteraren av vanliga dödliga. Det föreslagna sÀttet fungerar endast för programvara, som namnet pÄ projektet Äterspeglar, och har ocksÄ en egen uppsÀttning problem, eftersom mÀnniskor som arbetar med att distribuera programvara för Linux alltid skyller pÄ mig.
LÄt oss Äterkomma till Haiku. Har vi lyckats hitta en optimal balans mellan traditionella paketbaserade system och programvaruleverans baserad pÄ avbildningar? Dess paket .hpkg Àr i praktiken komprimerade avbildningar av filsystemet. Vid systemstart monterar kÀrnan alla installerade och aktiva paket med följande kÀrnmeddelanden:
KERN: package_daemon [16042853: 924] aktivt paket: "gawk-4.2.1-1-x86_64.hpkg"
KERN: package_daemon [16043023: 924] aktivt paket: "ca_root_certificates_java-2019_01_23-1-any.hpkg"
KERN: package_daemon [16043232: 924] aktivt paket: "python-2.7.16-3-x86_64.hpkg"
KERN: package_daemon [16043405: 924] aktivt paket: "openjdk12_default-12.0.1.12-1-x86_64.hpkg"
KERN: package_daemon [16043611: 924] aktivt paket: "llvm_libs-5.0.0-3-x86_64.hpkg"Coolt, eller hur? HÄll i er, det kommer att bli Ànnu bÀttre!
Det finns ett mycket speciellt paket:
KERN: package_daemon [16040020: 924] aktivt paket: "haiku-r1~beta1_hrev53242-1-x86_64.hpkg"Det innehĂ„ller ett ganska minimalistiskt operativsystem, inklusive kĂ€rnan. Trots att det lĂ„ter otroligt, sĂ„ extraheras inte ens kĂ€rnan frĂ„n startvolymen (rotpartitionen) utan laddas noggrant pĂ„ sin plats frĂ„n paketet. .hpkg. TĂ€nk pĂ„ det! Jag har redan nĂ€mnt att, enligt mig, en del av den övergripande elegansen och enheten av Haiku beror pĂ„ att hela systemet, frĂ„n kĂ€rnan och det grundlĂ€ggande anvĂ€ndarutrymmet till paketförvaltningen och arbetsmiljöinfrastrukturen, utvecklas tillsammans av ett enda team. TĂ€nk pĂ„ hur mĂ„nga olika grupper och team som skulle behövas för att fĂ„ nĂ„got liknande att fungera baserat pĂ„ Linux. [jag förestĂ€ller mig projektet PuppyLinux, â anm. översĂ€ttaren]. TĂ€nk sedan pĂ„ hur lĂ„ng tid det skulle ta att implementera detta till distros. Man sĂ€ger ju: ta en enkel uppgift, fördela den mellan olika utförare, sĂ„ blir den sĂ„ komplicerad att den inte gĂ„r att lösa lĂ€ngre. Haiku har i det hĂ€r fallet öppnat mina ögon. Jag tror att det precis Ă€r vad som hĂ€nder med Linux just nu (Linux Ă€r hĂ€r en samlande term för Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu).
SystemÄterstÀllning med hpkg
Hur ofta uppstÄr följande situation: uppdateringen har genomförts utan problem, men sen visar det sig att nÄgot inte fungerar som det ska? NÀr man anvÀnder vanliga paketshanterare Àr det svÄrt att ÄterstÀlla systemets tillstÄnd till tiden innan de nya paketen installerades (till exempel nÀr nÄgot gÄr fel). Vissa system erbjuder lösningar i form av avbilder av filsystemet, men de Àr ganska skrymmande och anvÀnds lÄngt ifrÄn i alla system. I Haiku löser vi detta med paket. .hpkg. Varje gÄng paket Àndras i systemet tas inte gamla paket bort, utan de lagras i systemet i underkataloger av typen /Haiku/system/packages/administrative/state-<...>/ konstant. OfullstÀndiga operationer lagrar sina data i underkataloger /Haiku/system/packages/administrative/transaction-<...>/.

InnehĂ„ll /Haiku/system/packages/administrative. Katalogerna "state..." innehĂ„ller textfiler med namn pĂ„ aktiva paket, "transaction..." â sjĂ€lva paketen.
"Gammalt aktivt tillstÄnd", dvs. listan .hpkg över paket som var aktiva innan Àndringarna skrivs efter varje operation i filhanteraren i en textfil /Haiku/system/packages/administrative/state-<...>/activated-packages. PÄ liknande sÀtt skrivs det nya "aktiva tillstÄndet" i en textfil /Haiku/system/packages/administrative/activated-packages.
Katalog /Haiku/system/packages/administrative/state-<...>/ innehÄller endast en textfil med listan över aktiva paket i detta tillstÄnd (vid installation av paket utan borttagning), och om paket raderades eller uppdaterades, sÄ innehÄller state-katalogen gamla versioner av paketen.
Vid systemstart fattas beslut om aktivering (montering) av paket baserat pÄ listan över paket. SÄ enkelt Àr det! Om nÄgot gÄr fel vid uppstart kan man ange att bootloadern ska anvÀnda en annan, Àldre lista. Problemet Àr löst!

Haikus bootloader. Varje inmatningspunkt representerar motsvarande "aktiva tillstÄnd".
Jag gillar tillvÀgagÄngssÀttet med enkla textfiler som lista över "aktiva tillstÄnd", dÀr begripliga namn skrivs. .hpkgDetta stÄr i skarp kontrast till den maskinskapade röran Listan över aktiva paket för varje tidpunkt

Konfigurationsdata
Tycks finnas i katalogen
innehÄller instÀllningsfiler för paketen, men tillgÀngliga för skrivning. Eftersom, som ni minns, /Haiku/system/packages/administrative/writable-files monteras endast för lÀsning. DÀrför mÄste dessa filer kopieras frÄn paketen innan de skrivs. Det Àr meningsfullt. .hpkg GUI-integration för systemet .hpkg
GUI-integration för systemet .hpkg
LÄt oss nu titta pÄ hur dessa fantastiska paket .hpkg hanterar integrationen i anvÀndarens arbetsmiljö (UX). Haiku Àr ju avsett för personligt bruk, trots allt. Jag har stÀllt en hög standard genom att jÀmföra anvÀndarupplevelsen med paket .*.app pÄ Macintosh med samma erfarenhet pÄ .hpkg. Jag kommer inte ens att jÀmföra situationen med arbetsmiljöer pÄ Linux, eftersom den Àr helt förfÀrlig i jÀmförelse med andra.
Följande scenarier kommer att tÀnka pÄ:
- Jag vill se innehÄllet i paketet
.hpkg - Jag vill installera paketet
- Jag vill ta bort paketet
- Jag vill ta bort nÄgot som kom in i systemet som en del av paketet
- Jag vill kopiera nÄgot som kom in i systemet som en del av paketet
- Jag vill ladda ner alla beroenden för paketet som kanske inte ingÄr i varje Haiku-installation (till exempel har jag en fysiskt isolerad maskin utan internetÄtkomst).
- Jag vill flytta mina paket (eller en del av dem) till en annan plats, skilt frÄn startvolymen (roten) (eftersom jag till exempel har ont om utrymme dÀr).
Detta borde tÀcka de flesta grundlÀggande fallen frÄn mitt dagliga arbete. NÄvÀl, lÄt oss sÀtta igÄng.
Kontroll av paketets innehÄll
PÄ Mac högerklickar jag enkelt pÄ paketet för att öppna det och se innehÄllet i Finder. För det Àr ju egentligen bara en maskerad katalog! (Jag vet att det finns paket .pkg för delar av systemet som inte Àr applikationer, men vanliga anvÀndare interagerar sÀllan med dem).
PÄ Haiku högerklickar jag pÄ paketet, sedan klickar jag pÄ 'InnehÄll' för att se vad som finns inuti. Men hÀr Àr det bara en lista med filer utan möjlighet att öppna dem med dubbelklick.
Det skulle vara mycket bÀttre om det fanns ett sÀtt att (temporÀrt) montera paketet .hpkg för att se genom filhanteraren, utan att anvÀndaren behövde bekymra sig om implementationsdetaljer. (För övrigt, man kan öppna .hpkg paketet i Expander, som kan packa upp det precis som en vanlig arkivfil).

I grÀnssnittet HaikuDepot kan man se en lista med paketets filer, men det finns inget sÀtt att se innehÄllet, till exempel genom att dubbelklicka pÄ README.md.
I denna kategori vinner Mac, men det borde inte vara sÀrskilt svÄrt att lÀgga till den nödvÀndiga funktionaliteten i HaikuDepot.
Installera paketet via GUI
PÄ Mac, de flesta diskavbilder .dmg innehÄller paket .*.app. Vi öppnar diskavbilden med dubbelklick, och kopierar paketet, till exempel genom att dra det till /Applications Finder. För mig Àr det en sjÀlvklarhet, men jag har hört att vissa nybörjare kan ha problem med det. Som standard "erbjuder" Apple en systemomfattande katalog /Applications (pÄ NeXT var den nÀtverksbaserad, samt individuell), men man kan enkelt placera sina program pÄ en filserver eller i underkatalogen $HOME/Applications, om det Àr vad du föredrar.
PĂ„ Haiku, dubbelklicka pĂ„ paketet, klicka sedan pĂ„ "Installera", enklare Ă€n sĂ„ blir det inte. Jag undrar vad som hĂ€nder om paketet har beroenden som Ă€r tillgĂ€ngliga i HaikuPorts, men som Ă€nnu inte Ă€r installerade. PĂ„ Linux vet man faktiskt inte vad man ska göra i den situationen, men svaret Ă€r uppenbart â frĂ„ga anvĂ€ndaren om de vill ladda ner och installera beroenden. Precis vad Haiku gör.

Jag laddade ner paketet 'sanity' manuellt och klickade pÄ det, paketmanagern vet var den ska hÀmta dess beroenden (förutsatt att repositoryn redan Àr konfigurerad i systemet). Inte alla Linux-distributioner kan göra detta.
Ett annat sĂ€tt Ă€r att anvĂ€nda filhanteraren, det rĂ€cker med att dra .hpkg paketet antingen till /Haiku/system/packages (för systemomfattande installation, som standard), eller till /Haiku/home/config/packages (för individuell installation; inte tillgĂ€nglig vid dubbelklick â jag stör mig fortfarande pĂ„ ordet "config" hĂ€r, som för mig i detta sammanhang Ă€r en synonym till "instĂ€llningar"). Och konceptet för flera anvĂ€ndare Ă€r inte ens tillgĂ€ngligt för Haiku (kanske dĂ€rför Ă€r allt sĂ„ enkelt â jag vet inte, kanske skulle fleranvĂ€ndarfunktioner komplicera saker för arbetsmiljön pĂ„ en personlig dator).
I denna kategori vinner Haiku eftersom den kan hantera inte bara program utan Àven systemprogram.
Borttagning av paket frÄn GUI
PÄ Mac, man behöver bara dra applikationsikonen till papperskorgen, sÄ Àr det klart. LÀtt!
PÄ Haiku, för det första, man mÄste hitta var paketet Àr installerat i systemet, eftersom man sÀllan installerar det dÀr det borde (systemet gör allt). Oftast mÄste man leta i /Haiku/system/packages (vid systemomfattande installation som standard), eller i /Haiku/home/config/packages (jag har redan sagt att "config" Àr ett felaktigt namn?). Sedan drar man bara applikationen till papperskorgen, sÄ Àr det klart.
LĂ€tt! ĂndĂ„ skulle jag inte sĂ€ga det. HĂ€r Ă€r vad som faktiskt hĂ€nder:

SÄ hÀr blir det om du drar en applikation till papperskorgen frÄn /Haiku/system/packages
Jag försökte bara flytta min gÄrdagens applikation "Hej, vÀrld" pÄ QtQuickApp till papperskorgen. Jag försökte inte flytta systemkatalogen, och eftersom alla paket installeras i systemkatalogen gÄr det inte att ta bort paketet .hpkg utan att Àndra "dess innehÄll".. En vanlig anvÀndare skulle bli skrÀmd, trycka pÄ knappen "Avbryt" som Àr standardinstÀlld.
Förklarar :
Detta meddelande Àr över 10 Är gammalt. Det Àr troligt att vi behöver stÀlla in det sÄ att varningen bara visas nÀr sjÀlva paketet flyttas. Vanliga anvÀndare behöver inte göra sÄ.
Okej, kanske jag ska göra detta med HaikuDepot? Jag dubbelklickar pÄ paketet i /Haiku/system/packages, och hoppas att knappen "Avinstallera" dyker upp. Nej, det finns (bara) "Installera". "Avinstallera", var Àr du?
För skojs skull försökte jag se vad som hÀnder om jag trycker pÄ "Installera" för ett redan installerat paket. Det blir sÄ hÀr:

Det blir sÄ hÀr om du försöker installera ett redan installerat paket.
DĂ€refter dyker detta upp:

Om du trycker pÄ "TillÀmpa Àndringar" i föregÄende fönster blir det sÄ hÀr
Jag misstĂ€nker att detta Ă€r en programvarubugg, en lĂ€nk till en Ă€rende finns redan. [författaren har inte tillhandahĂ„llit en lĂ€nk, â anm. översĂ€ttaren]
Snabb lösning: LÀgg till en knapp "Avinstallera" om paketet redan finns i
/Haiku/system/packages, eller i/Haiku/home/config/packages.
NÀr jag tittar pÄ listan över paket som Àr installerade i HaikuDepot ser jag mitt paket i listan och kan ta bort det.
I denna kategori vinner Mac. Men jag kan förestÀlla mig att med rÀtt instÀllningar skulle anvÀndarupplevelsen pÄ Haiku vara bÀttre Àn pÄ Mac. (En av utvecklarna bedömde detta sÄ hÀr: "Mindre Àn en timme för att lÀgga till den angivna funktionen i HaikuDepot, om du vet lite C++", finns det frivilliga?)
Att ta bort nÄgot frÄn paketet
LÄt oss försöka ta bort applikationen istÀllet för paketet .hpkg, varifrÄn den kom (jag tvivlar pÄ att det finns nÄgon skillnad för "vanliga dödliga").
PĂ„ Mac, anvĂ€ndaren arbetar faktiskt vanligtvis med filen .dmg, dĂ€r applikationspaketet kommer ifrĂ„n .*.app. Vanligtvis samlas bilder .dmg i nedladdningskatalogen, medan paket kopieras av anvĂ€ndaren till /Applications. Det finns en Ă„sikt om att mĂ„nga anvĂ€ndare sjĂ€lva inte vet vad de gör, denna hypotes bekrĂ€ftas av en tidigare anstĂ€lld pĂ„ Apple. (En av de saker jag inte gillar med Mac. Ă
andra sidan, med AppImage finns det ingen skillnad mellan applikationen och paketet som den kom i. Drag ikonen till papperskorgen = det Àr allt. LÀtt!)
PÄ Haiku, det finns ocksÄ en uppdelning mellan apps/ och packages/, sÄ jag tvivlar pÄ att det har blivit tydligare för anvÀndarna. Men vad hÀnder om man drar en applikation frÄn apps/ till papperskorgen:

SÄ hÀr ser det ut nÀr man försöker ta bort en applikation som tagits frÄn filen .hpkg
Tekniskt sett Àr det korrekt (eftersom applikationen endast Àr placerad pÄ en skrivskyddad filsystem till att börja med), men det Àr inte sÀrskilt anvÀndbart för anvÀndaren.
Snabb lösning: istÀllet erbjud en GUI-alternativ för att ta bort
.hpkg
Som ett experiment försökte jag duplicera applikationen genom att trycka pĂ„ Alt+D. Jag fick meddelandet "Det gĂ„r inte att flytta eller kopiera objekt pĂ„ en skrivskyddad volym". Och allt pĂ„ grund av /system (utöver /system/packages och /system/settings) Ă€r en punkt för montering av packagefs (minns hur den visas i utdata frĂ„n df?). Đ ŃĐŸĐ¶Đ°Đ»Đ”ĐœĐžŃ, ĐČŃĐČĐŸĐŽ ĐșĐŸĐŒĐ°ĐœĐŽŃ mount klargör inte situationen (som nĂ€mnts i en av tidigare artiklar), mountvolume visar inte det sökta (uppenbarligen rĂ€knas paket som monteras via loop .hpkg inte som "volymer"), och sĂ„ glömde jag de alternativa kommandona.
Ingen har vunnit i denna kategori förutom AppImage (men det Àr, om vi ska vara helt Àrliga, en partisk Äsikt). Men man kan tÀnka sig att efter justeringar, kommer anvÀndarupplevelsen pÄ Haiku vara bÀttre Àn pÄ Mac.
Observera: det mÄste avgöras vad en "volym" innebÀr i förhÄllande till "partitionen". Sannolikt Àr det relaterat till förhÄllandet mellan "mapp" och "katalog": de flesta kataloger visas i filhanteraren som mappar, men inte alla av dem (till exempel paket, hanteras som filer). Gör sÄdana slutsatser mig officiellt till en nörd?
Att kopiera innehÄllet i ett paket till ett annat system
PĂ„ Mac, jag drar bara paketet .*.app, och eftersom beroenden inuti paketet flyttas med.
PÄ Haiku, drar jag applikationen, men beroenden hanteras överhuvudtaget inte.
Snabb lösning: LÄt istÀllet föreslÄs att dra paketet "`.hpkg helt och hÄllet, tillsammans med dess beroenden, om de finns.
I denna kategori vinner Mac utan tvekan. Ă
tminstone för mig, som Ă€lskar deras paradigm. PĂ„ Haiku borde det kopieras .hpkg istĂ€llet för appen, men systemet erbjuder mig inte ett sĂ„dantâŠ
Nedladdning av paketet med alla dess beroenden
Inte varje maskin Ă€r ansluten till nĂ€tverket hela tiden. TvĂ€rtom, vissa maskiner (ja, jag tittar pĂ„ er, moderna Windows, Mac och Linux) glömmer bort det. För mig Ă€r det viktigt att jag kan gĂ„ till exempelvis ett internetcafĂ©, ladda ner programvara pĂ„ ett USB-minne, plugga in det i min hemmadator och vara sĂ€ker pĂ„ att allt kommer att fungera [riskabel kille, gör det hĂ€r pĂ„ Windows⊠â anm. översĂ€ttaren].
Som ett resultat fÄr jag lite oftare Àn vanligt olösta beroenden pÄ Windows och Linux.
PĂ„ Mac det Ă€r vanligtvis en fil, allt som behövs â ladda ner .dmg. Oftast har det inga beroenden, förutom de som tillhandahĂ„lls av MacOS som standard. Ett undantag kan vara komplicerade program som krĂ€ver en specifik körmiljö, till exempel Java.
PÄ Haiku ladda ner paketet .hpkg för, lÄt oss sÀga, samma Java-applikation kan visa sig vara otillrÀckligt, eftersom Java kan finnas eller inte finnas pÄ den mÄlmaskinen. Finns det nÄgot sÀtt att ladda ner alla beroenden för detta paket .hpkg, förutom de som installeras i Haiku som standard och dÀrför bör finnas i varje Haiku-system?
I den hÀr kategorin vinner Mac med en liten marginal.
Kommenterar mr. waddlesplash:
För att skriva ett program som samlar alla beroenden av en applikation i form av en uppsÀttning paket
.hpkgför nÄgon som Àr bekant med Haikus interna struktur, rÀcker det med cirka 15 minuter. Att lÀgga till stöd för detta Àr inte sÄ svÄrt om det finns ett verkligt behov. Men för mig Àr det en sÀllsynt situation.
Vi hÄller andan till nÀsta artikel i den hÀr serien.
Flytta paket till en avskild plats
Som jag nÀmnde tidigare vill jag lÀgga mina paket .hpkg (ja, eller en del av dem) pÄ en sÀrskild plats, Ätskild frÄn den vanliga placeringen pÄ startpartitionen (rotpartitionen). I vanliga fall (inte sÄ teoretiskt) beror anledningen pÄ att mitt (inbyggda) utrymme stÀndigt tar slut, oavsett hur stora de Àr. Jag kopplar ofta externa diskar eller nÀtverksresurser dÀr mina program finns.
PÄ Mac jag flyttar bara paketen .*.app till en extern enhet eller nÀtverkskatalog i Finder, och det Àr allt. Jag kan fortfarande öppna appen med dubbelklick som jag vanligtvis gjorde med startvolymen. Enkelt!
PÄ Haiku, som jag fick veta, kan detta uppnÄs genom att flytta mina .hpkg paket till en extern enhet eller nÀtverkskatalog, men dÄ mÄste man anvÀnda nÄgra icke-dokumenterade kommandon i terminalen för att montera dem i systemet. Jag vet inte hur jag gör det enbart med GUI.
Denna kategori vinner Mac.
Enligt mr. waddlesplash:
HÀr Àr optimeringen baserad pÄ vanlig anvÀndning. Om efterfrÄgan skulle vara större Àn vad en anvÀndare kan hantera, sÄ kommer vi att implementera det. I vilket fall som helst finns det möjlighet till tredjepartsimplementation.
Detta kommer vi att berÀtta mer om i nÀsta artikel.
NÀr det kommer till nÀtverkskataloger: det skulle vara fantastiskt (jag förmodar LAN-partyn) att ha enkla, upptÀckbara, nÀtverksapplikationer (till exempel via Zeroconf) som man kan kopiera till den lokala datorn eller köra direkt frÄn det lokala nÀtverket. SjÀlvklart har utvecklarna möjlighet att avstÄ genom app_flags.
Slutrapport om systemintegration av hpkg med GUI
Jag tror att det frÀmst beror pÄ den relativa nyheten av integrationen .hpkg med GUI som fortfarande lÀmnar en del att önska. I vilket fall som helst finns det flera aspekter som kan förbÀttras nÀr det gÀller UX...
En annan sak: Kernel Debug Land
Det skulle vara fantastiskt att kunna skriva kommandon vid kernel panic, till exempel syslog | grep usb. NÄvÀl, pÄ Haiku Àr detta möjligt tack vare Kernel Debug Land. Hur kan man se denna magi i aktion om allt fungerar som det ska utan att hamna i kernel panic? Enkelt, genom att trycka pÄ Alt+PrintScn+D (mnemonik Debug). Jag tÀnker genast pÄ , som tillÀt de ursprungliga utvecklarna av Macintosh att komma in i debuggern (om den var installerad, naturligtvis).
Slutsats
Jag börjar förstÄ att Haikus sofistikering kommer frÄn att arbetet utförs av ett litet team med tydligt fokus pÄ arbetsmiljö och tillgÄng till alla systemlag.
En skarp kontrast mot vÀrlden av Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, dÀr allt Àr splittrat i sÄ smÄ delar att abstraktionen stÄr pÄ abstraktion och klamrar sig fast med provisorier.
Det har ocksÄ blivit tydligt hur systemet .hpkg kombinerar bÀsta praxis frÄn traditionella paketförvaltare, Snappy, Flatpak, AppImage, till och med btrfs, och blandar dem med principen "bara fungerar" frÄn Mac.
Som om nÄgot har "slÄtt till" i huvudet och jag förstod hur systemet .hpkg kan ÄterstÀllas, - bara genom att titta pÄ det. Men det Àr inte jag, utan systemets skönhet och enkelhet. Mycket hÀr Àr genomdrÀngt av den ursprungliga Macens anda.
Ja, att blÀddra genom sidor i webblÀsaren kan vara hackigt och fungera lÄngsamt, det kan saknas appar (det finns ingen Gtk, Electron - utvecklarna har dragit slutsatsen att de inte passar ihop med subtiliteten), videouppspelning och 3d kan helt saknas, men jag gillar ÀndÄ detta system. För dessa saker kan ÄtgÀrdas och de kommer förr eller senare att dyka upp. Det Àr bara en tidsfrÄga och, eventuellt, lite röda ögon.
Jag kan inte erbjuda hjÀlp, men jag tror att det hÀr ögonblicket kommer att markera Äret Haiku pÄ skrivbordet.
Slumpproblem
Finns det redan förfrÄgningar, eller ska jag öppna dem?
- BeScreenCapture bör ha möjlighet att exportera till GIF, precis som i Peek. Detta kan göras med hjÀlp av ffmpeg, som redan finns för Haiku. .
- Programmet för att ta skÀrmdumpar kan inte ta en bild av ett modalt fönster, utan tar istÀllet en bild av hela skÀrmen.
- Det gÄr inte att beskÀra skÀrmdumpar med beskÀrningsverktyget i WonderBrush och sedan spara resultatet i en fil.
- Jag gillar inte sÀrskilt muspekaren i handform i Haiku, men jag tror att det Àr kopplat till varma nostalgiska kÀnslor. Det Àr sÀrskilt frustrerande nÀr jag anvÀnder beskÀrningsverktyget i Krita, eftersom det ger en otillrÀcklig beskÀrning (se skÀrmdumpar med modala dialoger i den hÀr artikeln). En korspekare skulle vara fantastisk. .
Prova sjÀlv! Eftersom Haiku-projektet tillhandahÄller bilder för nedladdning frÄn DVD eller USB, som skapas . För installationen rÀcker det med att ladda ner en bild och skriva den pÄ ett USB-minne med hjÀlp av
Har du frÄgor? VÀlkommen till vÄr svensksprÄkiga .
Felkod:
FrÄn översÀttning: detta Àr den sjÀtte artikeln i serien om Haiku.
Artikellista:
KĂ€lla: habr.com
