Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè

TL; DR: Haiku se yon sistèm operasyon ki fèt espesyalman pou PC, kidonk li gen plizyè ke trik nouvèl ki fè anviwònman Desktop li pi bon pase lòt moun. Men, ki jan li travay?

Dènyèman Mwen dekouvri Haiku, yon sistèm san atann. Mwen toujou sezi wè ki jan li kouri san pwoblèm, espesyalman konpare ak anviwònman Desktop Linux. Jodi a mwen pral gade anba kapo a. Kote sa nesesè pou yon konpreyansyon apwofondi, mwen pral fè konparezon ak Macintosh orijinal, Mac OS X ak anviwònman Desktop Linux (estanda XDG soti nan freedesktop.org).

Resous nan dosye ELF

Yè mwen te aprann ke IconOMatic ka sove ikon nan resous rdef nan ègzèkutabl ELF. Jodi a mwen vle wè ki jan li vrèman travay.

Resous? Quote soti nan Bruce Horn, otè orijinal Macintosh Finder la ak "papa" Manadjè Resous Macintosh la:

Mwen enkyete sou nati a rijid nan kodaj tradisyonèl yo. Pou mwen menm, lide nan yon aplikasyon ki jele nan kòd, san yo pa kapasite nan chanje anyen dinamik, se sovaj ki pi sovaj. Li ta dwe posib chanje otank posib nan ègzekutabl. Natirèlman, kòd aplikasyon an tèt li pa ka chanje, men siman yon bagay ka chanje san yo pa recompiling kòd la?

Sou Macintosh orijinal la, yo te fè dosye sa yo gen yon "seksyon done" ak yon "seksyon resous," sa ki te fè li ekstrèmman fasil pou konsève pou bagay tankou ikon, tradiksyon, ak tankou. nan dosye ègzèkutabl.

Sou Mac sa a se itilize ReEdit, yon pwogram grafik pou - toudenkou - koreksyon resous yo.

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
ReEdit sou Macintosh orijinal la

Kòm yon rezilta, li te vin posib pou edite ikon, atik meni, tradiksyon, elatriye. fasil ase, men yo toujou "vwayaje" ak aplikasyon yo.
Nan nenpòt ka, apwòch sa a te gen yon gwo dezavantaj: li te travay sèlman sou sistèm dosye Apple, ki te youn nan rezon ki fè Apple abandone "seksyon resous" la lè w ap deplase nan Mac OS X.
Sou Mac OS X, Apple te vle yon solisyon sistèm fichye endepandan, kidonk yo te adopte konsèp pakè (ki soti nan NeXT), repèrtwar ke manadjè fichye a trete kòm "objè opak", tankou dosye olye ke anyè. Nenpòt pake ki gen yon aplikasyon nan fòma a .app gen, pami lòt bagay, yon dosye Info.plist (nan kèk sòt de ekivalan Apple la nan JSON oswa YAML) ki gen metadata aplikasyon an.

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Kle pou fichye Info.plist ki soti nan pake aplikasyon Mac OS X.

Resous, tankou ikon, dosye UI, ak lòt moun, yo estoke nan pake a kòm dosye. Konsèp la aktyèlman tounen nan rasin li nan NeXT.

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Mathematica.app sou NeXTSTEP 1.0 an 1989: parèt kòm yon anyè dosye nan tèminal la, men kòm yon sèl objè nan manadjè dosye grafik la.

Ann retounen nan BeOS, konsèp ki baze sou Haiku. Devlopè li yo, lè yo te chanje soti nan PEF (PowerPC) nan ELF (x86) (menm jan yo itilize sou Linux), deside ajoute yon seksyon resous nan fen fichye ELF yo. Li pa t sèvi ak pwòp seksyon ELF li yo, li te tou senpleman ajoute nan fen dosye ELF la. Kòm yon rezilta nan pwogram nan strip ak lòt moun ki soti nan binutils, pa okouran de sa a, tou senpleman koupe li koupe. Se poutèt sa, lè w ajoute resous nan yon dosye ELF sou BeOS, li pi bon pou pa manipile li ak zouti Linux.

Kisa k ap pase ak Haiku kounye a? Fondamantalman, plis oswa mwens menm bagay la.

Nan teyori, li ta posib yo mete resous nan seksyon an vle nan ELF la. Dapre devlopè yo sou chanèl #haiku sou irc.freenode.net:

Avèk ELF seksyon an ta gen plis sans... sèl rezon ki fè nou pa fè li konsa se paske li te fè konsa nan BeOS."
Epi pa gen okenn pwen nan chanje sa a kounye a.

Jesyon resous

Resous yo ekri nan yon fòma "resous" estriktire: esansyèlman yon lis resous ak gwosè ak Lè sa a, kontni yo. Mwen te sonje ar fòma.
Ki jan yo tcheke resous nan Haiku? Èske gen yon bagay tankou ResEdit?
Dapre dokiman:

Pou wè resous yo bay nan pake aplikasyon an, ou ka trennen dosye ègzèkutabl la sou yon pwogram tankou Resous. Ou kapab tou ale nan tèminal la epi kouri lòd la listres имя_файла.

Resous disponib nan HaikuDepot, men li jis aksidan pou mwen.

Ki jan yo jere resous nan fichye ELF? Sèvi ak rsrc и rdef. rdef dosye yo kolekte nan rsrc. File rdef yo estoke nan fòma tèks klè, kidonk li se pi fasil pou travay avèk yo. Fòma dosye rsrc ajoute nan fen dosye ELF la. Ann eseye jwe:

~> rc -h
Haiku Resource Compiler 1.1To compile an rdef script into a resource file:
    rc [options] [-o <file>] <file>...To convert a resource file back into an rdef script:
    rc [options] [-o <file>] -d <file>...Options:
    -d --decompile       create an rdef script from a resource file
       --auto-names      construct resource names from ID symbols
    -h --help            show this message
    -I --include <dir>   add <dir> to the list of include paths
    -m --merge           do not erase existing contents of output file
    -o --output          specify output file name, default is out.xxx
    -q --quiet           do not display any error messages
    -V --version         show software version and license

Ou ka itilize pwogram nan xres pou tcheke ak kontwòl:

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

Oke, ann eseye?

/> xres -l /Haiku/system/apps/WebPositive/Haiku/system/apps/WebPositive resources:type           ID        size  name
------ ----------- -----------  --------------------
'MIMS'           1          36  BEOS:APP_SIG
'APPF'           1           4  BEOS:APP_FLAGS
'MSGG'           1         421  BEOS:FILE_TYPES
'VICN'         101        7025  BEOS:ICON
'VICN'         201          91  kActionBack
'VICN'         202          91  kActionForward
'VICN'         203         300  kActionForward2
'VICN'         204         101  kActionStop
'VICN'         206         243  kActionGoStart
'MSGG'         205        1342  kActionGo
'APPV'           1         680  BEOS:APP_VERSION

Plis enfòmasyon sou resous ak fòma rdef ou ka li isit la.

Kalite resous estanda

Malgre ke ou ka mete anyen nan resous, gen kèk kalite estanda defini:

  • app_signature: Kalite aplikasyon MIME, pou kat louvri dosye, lansman, IPC, elatriye.
  • app_name_catalog_entry: Piske non aplikasyon an anjeneral nan lang angle, ou ka presize kote non tradui yo ye, pou itilizatè diferan lang yo pral wè non aplikasyon an tradui si yo vle.
  • app_version: egzakteman sa ou te panse
  • app_flags: endike registrar kijan pou trete aplikasyon an. Mwen panse ke gen plis pase satisfè je a. Pa egzanp, genyen B_SINGLE_LAUNCH, ki fòse sistèm nan lanse yon nouvo pwosesis aplikasyon chak fwa itilizatè a mande li (se menm prensip la itilize pou pifò aplikasyon sou Linux). Manje B_MULTIPLE_LAUNCH, sa ki lakòz pwosesis la kouri pou chak dosye. Finalman gen B_EXCLUSIVE_LAUNCH, ki fòse sistèm lan lanse yon sèl pwosesis nan yon moman, kèlkeswa konbyen fwa itilizatè yo lanse li (pa egzanp, se konsa Firefox kouri sou Linux; menm rezilta a ka reyalize nan aplikasyon Qt lè l sèvi avèk fonksyon an. QtSingleApplication). Aplikasyon ak B_EXCLUSIVE_LAUNCH yo notifye lè itilizatè a eseye kouri yo ankò: pou egzanp, yo resevwa chemen an nan fichye a ke itilizatè a vle louvri avèk èd yo.
  • vector_icon: Ikòn aplikasyon vektè (BeOS pa t gen ikon vektè, pifò aplikasyon yo te gen de ikon raster nan dosye ègzèkutabl yo).

Natirèlman, ou ka ajoute resous ak nenpòt idantite ak kalite vle, ak Lè sa a, li yo nan aplikasyon an li menm oswa lòt aplikasyon lè l sèvi avèk klas la. BResources. Men, anvan, kite a gade nan sijè a kaptivan nan ikon.

Ikon vektè nan style Haiku

Natirèlman, non sèlman Haiku te chwazi pi bon fòma ikòn; nan pati sa a, sitiyasyon an ak anviwònman Desktop Linux pa ideyal:

me@host:~$ ls /usr/share/icons/hicolor/
128x128  256x256  512x512           index.theme
160x160  28x28    64x64             scalable
16x16    32x32    72x72             symbolic
192x192  36x36    8x8
22x22    42x42    96x96
24x24    48x48    icon-theme.cache

Gade nan sa a ou ka deja santi ki sa yon moso li ye.

Natirèlman, gen évolutive, ki gen, jan ou ka konprann, ikon vektè. Lè sa a, poukisa gen yon lòt bagay? Paske rezilta a nan desen grafik vektè nan ti gwosè ka mwens pase ideyal. Mwen ta renmen gen diferan opsyon optimize pou diferan gwosè. Nan anviwònman Desktop Linux, sa a se reyalize pa gaye ikon nan gwosè diferan nan tout sistèm nan dosye.

me@host:~$ find /usr/share/icons/ -name 'firefox.*'
/usr/share/icons/HighContrast/16x16/apps/firefox.png
/usr/share/icons/HighContrast/22x22/apps/firefox.png
/usr/share/icons/HighContrast/24x24/apps/firefox.png
/usr/share/icons/HighContrast/256x256/apps/firefox.png
/usr/share/icons/HighContrast/32x32/apps/firefox.png
/usr/share/icons/HighContrast/48x48/apps/firefox.png
/usr/share/icons/elementary-xfce/apps/128/firefox.png
/usr/share/icons/elementary-xfce/apps/16/firefox.png
/usr/share/icons/elementary-xfce/apps/22/firefox.png
/usr/share/icons/elementary-xfce/apps/24/firefox.png
/usr/share/icons/elementary-xfce/apps/32/firefox.png
/usr/share/icons/elementary-xfce/apps/48/firefox.png
/usr/share/icons/elementary-xfce/apps/64/firefox.png
/usr/share/icons/elementary-xfce/apps/96/firefox.png
/usr/share/icons/hicolor/128x128/apps/firefox.png

Tanpri sonje: pa gen okenn konsèp diferan vèsyon Firefox. Kidonk, li pa posib pou byen jere sitiyasyon an nan gen plizyè vèsyon nan yon aplikasyon sou sistèm nan.

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Diferan ikon Firefox nan diferan vèsyon. Kounye a li enposib pou okipe sa nan Linux san plizyè beki.

Mac OS X okipe li yon ti kras plis sibtil:

Mac:~ me$ find /Applications/Firefox.app | grep icns
/Applications/Firefox.app/Contents/MacOS/crashreporter.app
/Contents/Resources/crashreporter.icns
/Applications/Firefox.app/Contents/MacOS/updater.app/Contents/Resources/updater.icns
/Applications/Firefox.app/Contents/Resources/document.icns
/Applications/Firefox.app/Contents/Resources/firefox.icns

Li ka wè ke gen yon sèl dosye firefox.icns nan pake a Firefox.app, ki gen tout gwosè pou diferan vèsyon menm aplikasyon an gen ikon diferan.
Miyò! Ikon vwayaje ak aplikasyon an, tout resous yo nan yon sèl dosye.

Ann tounen nan Haiku. Yon solisyon lide-mouche, pa gen eksepsyon. Dapre dokiman:

Yo te devlope yon fòma HVIF espesyal, trè optimize pou ti gwosè ak rann rapid. Se poutèt sa, ikon nou yo pi piti anpil pase nan raster oswa nan fòma SVG lajman itilize.

Epi yo toujou optimize:

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Gwosè ikon nan HVIF konpare ak lòt fòma.

Diferans lan se yon lòd nan grandè!

Men, majik la pa fini isit la. Menm HVIF a ka montre diferan nivo detay depann sou gwosè a parèt, menm si li se yon fòma vektè.

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Diferan nivo detay (LOD) depann sou gwosè rann

Koulye a, sou dezavantaj yo: ou pa ka pran SVG, jete li nan ImageMagick epi rele li yon jou; ou dwe ale nan plizyè sik yo kreye yon icon nan fòma HVIF. Isit la eksplikasyon. Sepandan, IconOMatic ka enpòte SVG byen enpafè; apeprè 90% nan detay SVG yo enpòte ak kèk pwobabilite, rès 10% yo pral bezwen yo dwe configuré ak chanje manyèlman. Li plis sou fason HVIF fè maji li yo yon sèl kapab nan blog la Leah Ganson

Ajoute yon icon nan aplikasyon an

Koulye a, mwen ka ajoute yon icon nan pake a kreye Denye fwa, pran an kont tout enfòmasyon yo resevwa.
Oke, piske mwen pa patikilyèman anvi trase pwòp ikòn mwen pou QtQuickApp "Bonjou, Mondyal" mwen an kounye a, mwen rale li soti nan Qt Creator.

/Haiku/home> xres /Haiku/system/apps/QtCreator/bin/Qt Creator  -o /Haiku/home/QtQuickApp/QtQuickApp  -a VICN:101:BEOS:ICON /Haiku/system/apps/QtCreator/bin/Qt Creator

Ann tcheke si yo te kopye icon nan:

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

Li sanble bon, men poukisa se li ke lè yo kopye ikòn nan nouvo li pa parèt?

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
VICN:101:BEOS:ICON yo kopye yo poko itilize kòm yon ikon aplikasyon nan manadjè dosye a.

Kisa mwen te manke?

Kòmantè devlopè:

Nou bezwen kreye yon fichye rdef ak tout resous, Lè sa a, egzekite lòd la rc имя.rdef, sa a pral kreye dosye a .rsrc. Lè sa a, ou bezwen kouri lòd la resattr -o имя_бинарника имя.rsrc. Omwen, mwen itilize kòmandman tankou sa yo pou ajoute ikon nan scripts mwen yo.

Oke, mwen te vle kreye yon resous, pa yon atribi. Mwen vrèman konfonn.

Cache entelijan lè l sèvi avèk sistèm dosye a

Ouvèti ak li atribi ELF se ralanti. Kòm mwen te ekri pi wo a, icon nan ekri kòm yon resous nan dosye a li menm. Metòd sa a pi serye epi li pèmèt ou siviv kopye nan yon lòt sistèm dosye. Sepandan, li se Lè sa a tou kopye nan atribi nan sistèm dosye, pou egzanp BEOS:ICON. Sa a sèlman travay sou sèten sistèm dosye, tankou BFS. Ikon yo montre nan sistèm nan (nan Tracker ak Deskbar) yo li nan atribi pwolonje sa a, paske solisyon sa a travay byen vit. Nan kèk kote (kote vitès pa enpòtan, pou egzanp, yon tipik "About" fenèt), sistèm nan resevwa icon nan dirèkteman nan resous ki nan dosye a. Men, sa a se pa fen a. Sonje byen, sou Mac, itilizatè yo ka ranplase ikon aplikasyon, anyè, dokiman ak pwòp yo, paske sou Mac li posib pou fè bagay "enpòtan" sa yo, pou egzanp. ranplase yon nouvo icon Slack ak youn anvan an. Sou Haiku, ou ta dwe panse nan resous la (nan fichye a) kòm ikòn orijinal la ki vini ak aplikasyon an, ak atribi a (nan sistèm nan dosye BFS) kòm yon bagay ki pèmèt itilizatè a fè chanjman nan volonte (menm si, allusion, entèfas pou mete yon ikòn koutim anlè ikòn nan opsyonèl). poko aplike pa default).

Tcheke atribi sistèm dosye yo

Avèk resaddr Li posib pou tcheke epi mete atribi sistèm dosye yo.

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

Li se esansyèlman "lakòl la" ki fè konvèsyon an retounen ak lide ant resous (fyab) ak (vit) atribi sistèm fichye. Epi depi sistèm nan espere resevwa resous epi fè kopi a otomatikman, mwen pa pral enkyete sou li ankò.

Majik la nan pakè hpkg

Kounye a (pi souvan) pakè yo itilize pou jwenn pwogram sou Haiku .hpkg. Pa twonpe pa senp non an: fòma .hpkg a travay yon fason konplètman diferan pase lòt fòma ak non menm jan ou te rankontre, li gen gwo pwisans reyèl.

Avèk fòma pake tradisyonèl yo, mwen te fache pou yon tan long akòz reyalite sa a: ou telechaje yon bagay (pake), ak yon lòt enstale sou sistèm nan (fichye andedan pake a). Li trè difisil pou jere fichye (pa egzanp, efase yo) lè w ap enstale yon pake nan fason tradisyonèl la. Ak tout paske sa ki nan pake a gaye nan tout sistèm nan dosye, ki gen ladan kote itilizatè an mwayèn pa ka gen aksè ekri. Sa a bay monte yon klas antye nan pwogram - manadjè pake yo. Men, transfere lojisyèl deja enstale, pou egzanp, nan yon lòt machin, disk detachable oswa sèvè dosye vin menm pi difisil, si se pa konplètman enposib. Sou yon sistèm tipik ki baze sou Linux, ka fasil pou plizyè santèn mil a dè milyon de dosye endividyèl. Evidamman di, sa a se tou de frajil ak ralanti, pou egzanp lè okòmansman enstale yon sistèm, lè w ap enstale, mete ajou ak dezenstalasyon pakè regilye, ak lè w kopye volim nan bòt (patisyon rasin) nan yon lòt mwayen.

Mwen ap travay sou pwojè AppImage, yon beki pasyèl pou aplikasyon pou itilizatè fen yo. Sa a se yon fòma distribisyon lojisyèl ki kolekte yon aplikasyon ak tout depandans li yo nan yon imaj sistèm fichye sèl ki monte lè aplikasyon an kòmanse. Siyifikativman senplifye bagay sa yo, depi menm ImageMagick a toudenkou tounen yon dosye sèl, jere nan yon manadjè dosye pa sèlman mòtèl. Metòd yo pwopoze a travay sèlman pou lojisyèl, jan yo reflete nan non pwojè a, epi tou li gen pwòp seri pwoblèm li yo, depi moun ki enplike nan livrezon lojisyèl pou Linux toujou pwen flèch la sou mwen.

Ann tounen nan Haiku. Èske li te posib jwenn balans ki pi bon ant sistèm pake tradisyonèl yo ak livrezon lojisyèl ki baze sou imaj? Pakè li yo .hpkg aktyèlman konprese imaj sistèm dosye. Lè sistèm lan kòmanse, nwayo a monte tout pake ki enstale ak aktif ak apeprè mesaj nwayo sa yo:

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

Cool, wi? Kwoke la, li pral menm pi fre!

Gen yon pake trè espesyal:

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

Li gen yon sistèm operasyon trè minimalist, ki gen ladan nwayo a. Kwè li oswa ou pa, menm nwayo a tèt li pa retire nan volim nan bòt (patisyon rasin), men li chaje ak anpil atansyon nan plas li nan pake a. .hpkg. Wow! Mwen te deja mansyone ke mwen panse ke yon pati nan bagay konplike jeneral Haiku a ak konsistans soti nan lefèt ke tout sistèm nan, soti nan nwayo a ak espas itilizatè debaz rive nan jesyon pake ak enfrastrikti ègzekutabl, se devlope kolaborasyon pa yon sèl ekip. Imajine konbyen gwoup diferan ak ekip li ta pran pou kouri yon bagay tankou sa a sou Linux [Mwen imajine pwojè PuppyLinux la - approx. tradiktè]. Lè sa a, imajine konbyen tan li pral pran pou apwòch sa a yo dwe adopte nan distribisyon. Yo di: pran yon pwoblèm senp, divize l ant diferan pèfòmè, epi li pral tèlman konplike ke li p ap posib ankò pou rezoud li. Haiku nan ka sa a louvri je m '. Mwen panse ke sa a se egzakteman sa k ap pase sou Linux kounye a (Linux nan ka sa a se yon tèm kolektif pou Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu pile).

Rollback sistèm lè l sèvi avèk hpkg

Konbyen fwa sitiyasyon sa a rive: aktyalizasyon a te gen siksè, ak Lè sa a, li vire soti ke yon bagay pa ap travay jan li ta dwe? Si w itilize manadjè pakè konvansyonèl yo, li difisil pou w retounen eta sistèm lan nan yon moman anvan yo te enstale nouvo pakè yo (pa egzanp, si gen yon bagay ki mal pase). Gen kèk sistèm ki ofri solisyon nan fòm snapshots sistèm dosye, men yo byen ankonbran epi yo pa itilize sou tout sistèm yo. Haiku rezoud sa a lè l sèvi avèk pakè .hpkg. Chak fwa pakè yo chanje nan sistèm nan, ansyen pakè yo pa efase, men yo estoke nan sistèm nan nan sous-répertoires tankou /Haiku/system/packages/administrative/state-<...>/ toujou ap. Operasyon ki poko fini yo estoke done yo nan subdirectory /Haiku/system/packages/administrative/transaction-<...>/.

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Kontni /Haiku/system/packages/administrative. Anyè "eta..." yo genyen fichye tèks ak non pakè aktif yo, epi anyè "tranzaksyon..." yo genyen pakè yo tèt yo.

"Ansyen eta aktif", i.e. lis .hpkg pakè aktif anvan chanjman yo anrejistre apre chak operasyon nan manadjè dosye a nan yon dosye tèks /Haiku/system/packages/administrative/state-<...>/activated-packages. Menm jan an tou, yon nouvo "eta aktif" ekri nan yon dosye tèks /Haiku/system/packages/administrative/activated-packages.

Anyè /Haiku/system/packages/administrative/state-<...>/ gen sèlman yon dosye tèks ak yon lis pakè aktif nan eta sa a (nan ka enstalasyon pakè san yo pa retire), epi si pakè yo te retire oswa mete ajou - anyè eta a gen vèsyon ansyen nan pakè.

Lè sistèm nan bòt, ki baze sou lis pakè yo, yo pran yon desizyon pou aktive (monte) pakè yo. Li senp konsa! Si yon bagay ale mal pandan telechajman an, ou ka di manadjè telechajman an pou l sèvi ak yon lòt lis ki pi gran. Pwoblèm rezoud!

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Haiku telechaje. Chak pwen antre montre yon "eta aktif" korespondan

Mwen renmen apwòch pou gen dosye tèks senp kòm lis "eta aktif", ak non ki fasil pou konprann .hpkg. Sa a kanpe nan yon diferans sevè ak ke yo te bati-pou-machin-pa-pou-moun. nan yon pakèt soti nan OSTree oswa Flatpak nan sistèm dosye a (nan menm nivo ak Microsoft GUID).

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Lis pakè aktif pou chak pwen nan tan

Done konfigirasyon

Aparamman, nan katalòg la /Haiku/system/packages/administrative/writable-files gen fichye konfigirasyon pou pakè, men yo ka ekri. Apre yo tout, jan ou sonje, .hpkg monte lekti sèlman. Se konsa, dosye sa yo dwe kopye nan pakè yo anvan yo ekri. Gen siyifikasyon an.

Entegrasyon entèfas pou sistèm .hpkg

Ann wè ki jan pakè klere sa yo .hpkg fè fas ak entegrasyon nan anviwònman travay itilizatè a (UX). Apre yo tout, Haiku gen entansyon pou itilizasyon pèsonèl, apre tout. Pèsonèlman, mwen mete ba a wo lè w ap konpare eksperyans itilizatè a pakè yo .app sou Macintosh ak eksperyans nan menm sou .hpkg. Mwen pa pral menm konpare sitiyasyon an ak anviwònman k ap travay sou Linux, paske li se absoliman terib konpare ak nenpòt lòt.

Senaryo sa yo vin nan tèt ou:

  • Mwen vle wè sa ki nan yon pake .hpkg
  • Mwen vle enstale yon pake
  • Mwen vle retire pake a
  • Mwen vle retire yon bagay ki te antre nan sistèm nan kòm yon pati nan yon pake
  • Mwen vle kopye yon bagay ki te antre nan sistèm nan kòm yon pati nan yon pake
  • Mwen vle telechaje tout depandans yo nan yon pake, ki pa ka fè pati nan chak enstalasyon Haiku (pa egzanp, mwen gen yon machin izole fizikman ki pa gen aksè entènèt.)
  • Mwen vle deplase pakè mwen yo (oswa yon pati nan yo) separeman nan yon lòt kote, separe de volim nan bòt (patisyon rasin) (paske, pou egzanp, mwen pa gen ase espas sou li).

Sa a ta dwe kouvri pi fò nan gwo ka yo nan travay chak jou mwen an. Oke, ann kòmanse.

Tcheke sa ki nan pake a

Sou Mac Mwen tou senpleman klike sou pakè a dwat sou pake a pou ouvri li epi wè sa ki nan Finder. Apre yo tout, an reyalite li se jis yon anyè degize! (Mwen konnen gen pakè .pkg pou yon pati nan sistèm nan ki pa aplikasyon, men itilizatè òdinè pi souvan pa kominike avèk yo).

Sou Haiku Mwen klike sou pakè a dwat la, epi klike sou "Contents" pou wè sa ki anndan an. Men, isit la se jis yon lis dosye san yo pa kapasite yo louvri yo pa doub-klike sou.
Li ta pi bon si te gen yon fason pou (tanporèman) monte pake a .hpkg yo dwe wè nan yon manadjè dosye, epi itilizatè a pa ta gen enkyete sou detay aplikasyon an. (Bon wout la, ou ka louvri .hpkg pake nan Expander, ki ka depake li tankou nenpòt lòt achiv).

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Koòdone HaikuDepot a pèmèt ou wè yon lis fichye pake, men pa gen okenn fason yo wè sa ki nan, pa egzanp, double-klike sou README.md.

Mac a genyen nan kategori sa a, men ajoute fonksyonalite HaikuDepot ou vle a pa ta dwe twò difisil.

Enstale yon pake atravè entèfas

Sou Mac, pifò imaj ki gen kapasite .dmg genyen pakè .app. Double-klike sou imaj la ki gen kapasite ak Lè sa a, kopye pake a, pou egzanp, pa trenen li nan /Applications nan Chèche. Sa ale san di pou mwen, men mwen te tande ke kèk newbies ka pa kapab jere sa. Pa default, Apple "sijere" yon anyè nan tout sistèm nan /Applications (sou NeXT li te rezo kòm byen ke endividyèl), men ou ka fasilman mete aplikasyon ou yo sou yon sèvè dosye oswa nan yon sous-anyè. $HOME/Applications, si ou renmen li konsa.

Sou Haiku, double klike sou pake a, Lè sa a, klike sou "Enstale", li pa ta ka pi fasil. M ap mande sa ki rive si yon pake gen depandans ki disponib nan HaikuPorts men ki poko enstale. Sou Linux yo reyèlman pa konnen ki sa yo dwe fè nan sitiyasyon sa a, men solisyon an se evidan - mande itilizatè a si yo bezwen telechaje ak enstale depandans. Egzakteman sa Haiku fè.

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Mwen telechaje pakè 'sanity' la manyèlman epi klike sou li, manadjè pake a konnen ki kote pou jwenn depandans li yo (si nou sipoze depo yo deja anrejistre sou sistèm nan). Se pa tout distribisyon Linux ki ka fè sa.

Yon lòt fason se sèvi ak yon manadjè dosye, jis trennen ak gout .hpkg pake oswa nan /Haiku/system/packages (pou yon enstalasyon nan tout sistèm, pa default), oswa nan /Haiku/home/config/packages (pou enstalasyon endividyèl; pa disponib lè doub-klike - mwen toujou énervé pa mo "config" nan kote sa a, ki pou mwen nan ka sa a se sinonim ak "anviwònman"). Ak konsèp nan plizyè itilizatè yo pa menm disponib pou Haiku ankò (se pwobableman poukisa li tèlman senp - mwen pa konnen, petèt kapasite milti-itilizatè yo pral san nesesite konplike bagay pou yon anviwònman Desktop Desktop).

Haiku genyen nan kategori sa a paske li ka travay pa sèlman ak aplikasyon, men tou ak pwogram sistèm.

Retire yon pake nan entèfas la

Sou Mac, ou bezwen trennen ikòn aplikasyon an nan fatra a, e sa se tout. Fasil!

Sou Haiku, premyèman, ou bezwen jwenn ki kote pake a sitiye sou sistèm nan, paske ou raman enstale li nan plas la dwat (sistèm nan fè tout bagay). Anjeneral ou bezwen gade nan /Haiku/system/packages (ak yon enstalasyon default nan tout sistèm), oswa nan /Haiku/home/config/packages (Èske mwen te mansyone ke "config" se yon move non?). Lè sa a, aplikasyon an tou senpleman trennen nan fatra a, e se li.
Fasil! Sepandan, mwen pa ta di sa. Men sa k ap pase vrèman:

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Sa a se sa k ap pase si ou trennen yon aplikasyon nan fatra a soti nan /Haiku/system/packages

Jis eseye deplase aplikasyon yè mwen an "Hello World" sou QtQuickApp nan fatra a. Mwen pa t eseye deplase anyè sistèm lan, epi depi tout pakè yo enstale nan anyè sistèm lan, li enposib pou retire pake a .hpkg san chanjman "sa li yo". Yon itilizatè òdinè ta vin pè epi peze bouton an "Anile" asiyen pa default.

Eksplike mesye. waddlesplash:

Pòs sa a gen plis pase 10 zan. Gen plis chans nou bezwen konfigirasyon li pou avètisman an parèt sèlman lè pake a tèt li deplase. Itilizatè regilye yo pa bezwen fè sa de tout fason.

Oke, petèt mwen ta dwe fè sa lè l sèvi avèk HaikuDepot? Mwen double klike sou pake a nan /Haiku/system/packages, ap tann bouton "Désinstaller" la parèt. Non, gen (sèlman) "Enstale". "Dezenstale", kote ou ye?

Jis pou plezi, mwen te eseye wè sa ki ta rive si mwen klike sou "Enstale" sou yon pake ki deja enstale. Li sanble tankou sa a:

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Sa rive si ou eseye enstale yon pake ki deja enstale.

Pwochen parèt:

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Si ou klike sou "Aplike chanjman" nan fenèt anvan an, li pral sanble sa a

Mwen sipoze ke sa a se yon erè lojisyèl; lyen ki mennen nan aplikasyon an deja la. [otè a pa t bay yon lyen - approx. tradiktè]

Solisyon rapid: Ajoute yon bouton "Désinstaller" si pake a deja nan /Haiku/system/packages, oswa nan /Haiku/home/config/packages.

Lè w ap gade lis pakè ki enstale nan HaikuDepot, mwen wè pake mwen an nan lis la epi mwen ka retire li.

Mac a genyen nan kategori sa a. Men, mwen ka imajine ke ak konfigirasyon apwopriye, eksperyans itilizatè a sou Haiku pral pi bon pase sou Mac. (Youn nan devlopè yo te evalye li nan fason sa a: "Mwens pase yon èdtan ajoute fonksyonalite espesifye nan HaikuDepot, si ou konnen yon ti kras C++", nenpòt volontè?)

Retire yon bagay nan yon pake

Ann eseye retire aplikasyon an tèt li, pa pake a .hpkg, ki soti nan ki li soti (mwen gen dout ke pou "mòtèl sèlman" gen nenpòt diferans).

Sou Mac, itilizatè a aktyèlman anjeneral travay ak dosye a .dmgki kote pake aplikasyon an soti .app. Anjeneral imaj .dmg yo akimile nan anyè downloads yo, epi itilizatè a kopye pakè yo /Applications. Yo kwè ke anpil itilizatè tèt yo pa konnen sa yo ap fè, se ipotèz sa a konfime pa yon ansyen anplwaye Apple. (Youn nan bagay mwen pa renmen sou Mac. Epi, pou egzanp, ak AppImage pa gen okenn diferans ant aplikasyon an ak pake a li te nan. Trennen icon nan fatra a = sa a li. Fasil!)

Sou Haiku, gen tou yon divizyon ant apps/ и packages/, Se konsa, mwen doute ke sa a te fè li pi klè pou itilizatè yo. Men, sa k ap pase si ou trennen yon aplikasyon nan apps/ Ajoute nan kabwa:

Sizyèm jou mwen ak Haiku: anba kapo resous, ikon ak pakè
Sa a se sa k ap pase lè ou eseye retire yon aplikasyon yo pran nan yon dosye .hpkg

Teknikman li kòrèk (apre tout, aplikasyon an anime sou yon sistèm fichye sèlman lekti an plas an premye), men li pa itil patikilyèman itilizatè a.

Solisyon rapid: sijere itilize entèfas pou efase olye de sa .hpkg

Jis pou plezi, mwen te eseye kopi aplikasyon an pa peze Alt + D. Mwen te resevwa mesaj la "Pa kapab deplase oswa kopye objè sou yon volim li sèlman." Ak tout paske /system (anplis /system/packages и /system/settings) se pwen mòn packagefs (sonje kijan li parèt nan pwodiksyon an df?). Malerezman, pwodiksyon an nan lòd la mount pa klarifye sitiyasyon an (jan yo te di nan youn nan atik anvan yo), mountvolume pa montre sa w ap chèche (aparamman pakè monte atravè bouk .hpkg yo pa konsidere kòm "komèsan"), epi mwen bliye tou kòmandman altènatif yo.

Pèsonn pa genyen nan kategori sa a eksepte AppImage (men sa a, yo dwe konplètman onèt, se yon opinyon partial). Sepandan, yon moun ka imajine ke apre tweaking, eksperyans itilizatè a sou Haiku pral pi bon pase sou Mac.

Remak: ou bezwen chèche konnen ki sa yon "volim" se an relasyon ak yon "seksyon". Sa a se pwobableman menm jan ak relasyon "dosye" ak "anyè": pifò repèrtwar parèt kòm dosye nan manadjè dosye a, men se pa tout nan yo (pake trete kòm dosye, pou egzanp). Èske kalite ekspozisyon sa a fè m 'yon nèrd ofisyèl?

Kopye sa ki nan yon pake nan yon lòt sistèm

Sou Mac, Mwen estipid trennen pake a .app, epi depi depandans yo andedan pake a, yo deplase ansanm.

Sou Haiku, Mwen trennen aplikasyon an, men depandans yo pa trete ditou.

Solisyon rapid: An nou pito sijere trennen tout pake `.hpkg, ansanm ak nenpòt depandans, si genyen.

Mac a klèman genyen nan kategori sa a. Omwen pou mwen, yon moun ki renmen paradigm yo. Mwen ta dwe kopye li sou Haiku .hpkg olye de yon aplikasyon, men sistèm lan pa ofri m sa a...

Telechaje yon pake ak tout depandans li yo

Se pa tout machin ki konekte ak rezo a tout tan. Okontrè, kèk machin (wi, m ap gade ou, modèn Windows, Mac ak Linux) bliye sou sa. Li enpòtan pou mwen ke mwen ka ale, pou egzanp, nan yon Kafe Entènèt, telechaje lojisyèl sou yon kondwi detachable, mete kondwi sa a nan òdinatè lakay mwen epi asire w ke tout bagay pral travay [nèg ki riske, fè sa sou Windows ... - approx. tradiktè].

Kòm yon rezilta, mwen gen tandans fini ak depandans ki pa satisfè sou Windows ak Linux yon ti kras pi souvan pase nòmal.

Sou Mac sa a se nòmalman yon sèl dosye, tout sa ou bezwen fè se telechaje .dmg. Pi souvan, li pa gen okenn depandans lòt pase sa yo bay pa MacOS tèt li pa default. Yon eksepsyon se aplikasyon konplèks ki mande pou yon anviwònman egzekisyon apwopriye, pou egzanp java.

Sou Haiku telechaje pake .hpkg pou, di, menm aplikasyon an nan java, ka pa ase, depi java ka oswa pa ka prezan sou machin nan sib. Èske gen yon fason pou telechaje tout depandans pou yon pake bay yo .hpkg, lòt pase sa yo ki enstale pa default nan Haiku ak Se poutèt sa yo ta dwe sou chak sistèm Haiku?

Mac a genyen kategori sa a pa yon ti maj.

Kòmantè Mr. waddlesplash:

Pou ekri yon pwogram pou kolekte tout depandans yon aplikasyon kòm yon seri pakè .hpkg pou yon moun ki abitye ak fonksyonman enteryè Haiku, apeprè 15 minit se ase. Ajoute sipò pou sa a se pa sa difisil si gen yon bezwen reyèl pou li. Men, pou mwen sa a se yon sitiyasyon ki ra.

Ann kenbe souf nou jiskaske pwochen atik nan seri sa a.

Deplase pakè yo nan yon kote separe

Jan mwen te ekri pi bonè, mwen vle mete pakè mwen yo .hpkg (byen, oswa yon pati nan yo) nan yon kote espesyal, separe de plasman abityèl la sou volim nan bòt (patisyon rasin). Nan ka abityèl (pa tèlman teyorik), rezon ki fè sa a se ke mwen toujou ap kouri soti nan espas gratis sou disk mwen (bati-an), kèlkeswa jan yo gwo. Apre sa, mwen anjeneral konekte kondui ekstèn oswa pataje rezo kote aplikasyon mwen yo ye.

Sou Mac Mwen jis deplase pakè .app nan yon kondwi detachable oswa anyè rezo nan Finder, e se li. Mwen ka toujou double-klike sou yo louvri aplikasyon an jan mwen nòmalman ta soti nan volim nan bòt. Jis!

Sou Haiku, jan mwen te di, sa ka reyalize lè w deplase mwen .hpkg pakè yo nan yon kondwi detachable oswa anyè rezo, men Lè sa a, ou bezwen sèvi ak kèk kòmandman san papye nan konsole a yo nan lòd yo monte yo sou sistèm nan. Mwen pa konnen ki jan fè sa lè l sèvi avèk sèlman entèfas la.

Mac a genyen nan kategori sa a.

Dapre Mr. waddlesplash:

Sa a se yon optimize ki baze sou itilizasyon nòmal. Si gen demann nan men plis pase yon itilizatè, nou pral aplike li. Nan nenpòt ka, gen posiblite pou aplikasyon twazyèm pati.

Nou pral pale sou sa a nan pwochen atik la.

Pale de anyè rezo a, li ta bon (mwen devine pati LAN yo) pou gen aplikasyon ki senp, dekouvwi, nan tout rezo a (tankou Zeroconf) ki ka kopye sou òdinatè lokal la oswa kouri dirèkteman nan rezo lokal la. Natirèlman, devlopè yo gen opsyon pou yo chwazi soti atravè app_flags.

Rapò final sou entegrasyon sistèm hpkg ak entèfas

Mwen panse ke premyèman akòz relative nouveauté entegrasyon an .hpkg GUI a toujou kite anpil yo dwe vle. De tout fason, gen kèk bagay ki ta ka amelyore an tèm de UX...

Yon lòt bagay: Kernel Debug Tè

Li ta bon pou kapab antre kòmandman pandan panik nwayo, pou egzanp syslog | grep usb. Oke, sou Haiku li posib gras a Kernel Debug Land. Ki jan ou ka wè maji sa a an aksyon si tout bagay ap travay jan li ta dwe san yo pa antre nan yon panik nwayo? Fasil lè w peze Alt + PrintScn + D (Debug mnemonik). Mwen sonje imedyatman Kle pwogramè a, ki te pèmèt devlopè Macintosh orijinal yo antre nan debogaj la (si youn te enstale, nan kou).

Konklizyon

Mwen kòmanse konprann ke bagay konplike sistèm Haiku a soti nan lefèt ke travay la fèt pa yon sèl ti ekip ak yon konsantre klè sou anviwònman travay la, ak tout kouch nan sistèm nan aksesib.
Yon kontras byen file ak mond lan nan Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, kote tout bagay yo kase an ti moso nan yon nivo konsa ke abstraksyon chita sou abstraksyon ak kondui ak beki.
Te gen tou yon konpreyansyon sou ki jan sistèm nan .hpkg konbine meyè pratik manadjè pakè tradisyonèl yo, Snappy, Flatpak, AppImage, menm btrfs, epi melanje yo ak apwòch Mac a "jis travay".

Se te tankou si yon bagay "chanje" nan tèt mwen, epi mwen konprann ki jan sistèm nan .hpkg konnen ki jan yo woule ale, jis nan gade nan li. Men, se pa mwen, men bote ak senplisite sistèm lan. Anpil nan sa a se enspire pa lespri a nan Mac orijinal la.

Wi, navige nan navigatè a ka saccadé epi kouri tankou yon kalmason, aplikasyon yo ka manke (pa gen Gtk, Electron - devlopè yo konkli ke yo pa ale byen ak bagay konplike), videyo ak akselerasyon 3d ka konplètman absan, men mwen toujou. tankou li sistèm sa a. Apre yo tout, bagay sa yo ka korije epi yo pral parèt pi bonè oswa pita. Se sèlman yon kesyon de tan e petèt yon ti je wouj.

Mwen pa ka ofri èd, men mwen panse ke li pral kòmanse depi kounye a ane nan Haiku sou Desktop.

Pwoblèm o aza

Petèt gen deja demann, oswa mwen ta dwe louvri yo?

  • BeScreenCapture ta dwe kapab ekspòte nan GIF tankou Peek. Sa a ka fè lè l sèvi avèk ffmpeg, ki deja disponib pou Haiku. Aplikasyon.
  • Lojisyèl Ekran echwe pou pran yon fenèt modal, olye de kaptire ekran an antye
  • Ou pa ka koupe Ekran lè l sèvi avèk zouti WonderBrush koupe epi sove rezilta a nan yon dosye
  • Mwen pa renmen patikilyèman men kisè nan Haiku, men mwen panse ke li gen fè ak santiman an cho nostaljik. Sa a se espesyalman anmèdan lè w ap itilize zouti nan rekòt nan Krita, paske li rezilta nan koupe kòrèk (gade Ekran nan dyalòg modal nan atik sa a). Yon kurseur crosshair ta bèl bagay. Aplikasyon.

Eseye li tèt ou! Apre yo tout, pwojè a Haiku bay imaj pou demaraj soti nan DVD oswa USB, pwodwi chak jou. Pou enstale, jis telechaje imaj la epi ekri li nan yon kondwi flash lè l sèvi avèk Etcher

W gen nenpòt kesyon? Nou envite ou nan ki pale Ris la chanèl telegram.

Apèsi sou erè: Ki jan yo tire tèt ou nan pye a nan C ak C++. Haiku OS koleksyon resèt

Soti nan otè a tradiksyon: sa a se sizyèm atik nan seri a sou Haiku.

Lis atik: Premye a Dezyèm lan Twazyèm lan Katriyèm Senkyèm

Sous: www.habr.com

Add nouvo kòmantè