يومي السادس مع هايكو: تحت غطاء الموارد والأيقونات والحزم


TL ؛ DR : Haiku هو نظام تشغيل مصمم خصيصًا لأجهزة الكمبيوتر ، لذلك يحتوي على بعض الحيل لجعل بيئة العمل أفضل بكثير من غيرها. ولكن كيف يعمل؟


لقد اكتشفت مؤخرا هايكو ، وهو نظام جيد بشكل غير متوقع. لا يزال مندهشًا كيف يعمل بسلاسة ، خاصةً مقارنة ببيئات سطح مكتب Linux. اليوم أنا أنظر تحت الغطاء. عندما يكون ذلك ضروريًا لفهم متعمق ، سأجري مقارنة مع بيئات عمل Macintosh و Mac OS X و Linux الأصلية (معيار XDG من freedesktop.org).


الموارد في ملفات ELF


بالأمس ، علمت أن IconOMatic يمكنه حفظ الرموز في موارد rdef في الملفات التنفيذية لـ ELF. اليوم أريد أن أرى كيف يعمل في الواقع.


الموارد؟ اقتباس من Bruce Horne ، المؤلف الأصلي لبرنامج Macintosh Finder و "الأب" لإدارة موارد Macintosh:


أنا قلق بشأن الطبيعة الصعبة لكتابة الشفرة التقليدية. بالنسبة لي ، فإن فكرة تطبيق مجمدة في الكود ، دون القدرة على تغيير أي شيء بشكل حيوي هي أعنف وحشية. يجب أن يكون من الممكن تغيير أكبر قدر ممكن في مرحلة التشغيل. بالطبع ، لا يمكن تغيير رمز التطبيق نفسه ، ولكن يمكن تغيير شيء ما دون إعادة ترجمة الشفرة؟

على نظام Macintosh الأصلي ، جعلوا هذه الملفات تحتوي على "قسم بيانات" و "قسم موارد" ، مما جعل من السهل للغاية حفظ أشياء مختلفة ، مثل الرموز والترجمات وغيرها. في الملفات القابلة للتنفيذ.


على نظام Mac ، يتم استخدام ResEdit لهذا ، وهو برنامج رسومي لتحرير الموارد - فجأة.



ResEdit على ماكنتوش الأصلي


ونتيجة لذلك ، أصبح من الممكن تحرير الرموز وعناصر القائمة والترجمات وما إلى ذلك. سهل بما فيه الكفاية ، لكنها لا تزال "السفر" مع التطبيقات.
على أي حال ، كان لهذا النهج عيب كبير: إنه يعمل فقط على أنظمة ملفات Apple ، والذي كان أحد الأسباب وراء تخلي Apple عن "قسم الموارد" عند التبديل إلى Mac OS X.
في نظام Mac OS X ، أرادت Apple حلاً مستقلاً لنظام الملفات ، لذا طبقت مفهوم الحزم (من NeXT) ، الدلائل التي يعاملها مدير الملفات على أنها "كائنات غير شفافة" ، مثل الملفات ، وليس الدلائل. تحتوي أي حزمة مع تطبيق بتنسيق .app ، من بين أشياء أخرى ، على ملف Info.plist (في بعض التماثلية لـ JSON أو YAML من Apple) يحتوي على بيانات تعريف التطبيق.



مفاتيح لملف Info.plist من حزمة تطبيق Mac OS X.


يتم تخزين الموارد ، مثل الرموز وملفات واجهة المستخدم وغيرها ، في الحزمة كملفات. لقد عاد المفهوم بالفعل إلى الأساسيات في NeXT.



Mathematica.app على NeXTSTEP 1.0 في عام 1989: يتم عرضه كدليل يحتوي على ملفات في الجهاز الطرفي ، ولكن ككائن واحد في مدير الملفات الرسومية.


العودة إلى BeOS ، والتي تستند Haiku. عند الانتقال من PEF (PowerPC) إلى ELF (x86) (نفس المستخدم في Linux) ، قرر مطوروها إضافة قسم موارد إلى نهاية ملفات ELF. لهذا ، لم يتم استخدام قسم ELF الخاص بنا ، لقد تم إلحاقه ببساطة بنهاية ملف ELF. نتيجة لذلك ، قام برنامج strip وبقية التوابع ، الذين لم يكونوا على دراية بذلك ، بقطعها. لذلك ، بإضافة موارد إلى ملف ELF على BeOS ، من الأفضل عدم العمل مع أدوات Linux.


ما يحدث مع هايكو الآن؟ من حيث المبدأ ، أكثر أو أقل نفسه.


من الناحية النظرية ، يمكنك وضع الموارد في القسم الأيمن من ELF. وفقًا للمطورين على قناة #haiku على شبكة irc.freenode.net:


مع ELF ، سيكون القسم أكثر منطقية ... والسبب الوحيد لعدم قيامنا بذلك هو أنهم قاموا بذلك على BeOS "
ولا يستحق التغيير الآن.

إدارة الموارد


تتم كتابة الموارد بتنسيق "مورد" منظم: في الواقع ، هذه قائمة بالموارد ذات الأحجام ثم محتوياتها. ذكرت الشكل ع .
كيفية التحقق من الموارد في هايكو؟ هل هناك شيء مثل ResEdit؟
حسب الوثائق :


لعرض الموارد المتوفرة في حزمة التطبيق ، يمكنك سحب الملف القابل للتنفيذ على برنامج مثل Resourcer . يمكنك أيضًا الانتقال إلى المحطة الطرفية وتشغيل الأمر listres _ .

هناك مورد في HaikuDepot ، ولكن بالنسبة لي هو مجرد تعطل.


كيفية إدارة الموارد في ملفات ELF؟ باستخدام rsrc و rdef . يتم جمع ملفات rsrc في rsrc . يتم تخزين ملف rdef بتنسيق نص عادي ، لذا فإن العمل معه أسهل بكثير. rsrc إلحاق ملف rsrc بنهاية ملف ELF. دعنا نحاول اللعب:


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

يمكنك استخدام برنامج xres للتحقق وإدارة:


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

حسنا ، دعونا نحاول؟


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

يمكنك قراءة المزيد حول الموارد وتنسيق rdef هنا .


أنواع الموارد القياسية


على الرغم من أنه يمكنك وضع أي شيء في الموارد ، إلا أن هناك بعض الأنواع القياسية المحددة:


  • app_signature : نوع التطبيق MIME ، لمطابقة الملفات المفتوحة ، التشغيل ، IPC ، إلخ.
  • app_name_catalog_entry : نظرًا لأن اسم التطبيق عادةً ما يكون باللغة الإنجليزية ، فيمكنك هنا تحديد مكان تواجد الأسماء المترجمة ، لذلك سيرى مستخدمو اللغات المختلفة اسم التطبيق المترجم إذا رغبت في ذلك.
  • app_version : بالضبط ما فكرت به
  • app_flags : يخبر registrar كيفية التعامل مع التطبيق. أعتقد أن هناك شيء أكثر مما يبدو للوهلة الأولى. على سبيل المثال ، هناك B_SINGLE_LAUNCH ، والذي يفرض على النظام بدء عملية تطبيق جديدة في كل مرة ، بناءً على طلب المستخدم (يتم استخدام نفس المبدأ لمعظم تطبيقات Linux). يوجد B_MULTIPLE_LAUNCH يفرض بدء عملية لكل ملف . أخيرًا ، هناك B_EXCLUSIVE_LAUNCH ، والذي يفرض على النظام بدء عملية واحدة فقط في كل مرة ، بغض النظر عن عدد مرات تشغيل المستخدمين (على سبيل المثال ، يبدأ Firefox أيضًا على نظام Linux ؛ يمكن تحقيق نفس النتيجة في تطبيقات Qt باستخدام وظيفة QtSingleApplication ). B_EXCLUSIVE_LAUNCH إخطار التطبيقات ذات B_EXCLUSIVE_LAUNCH عندما يحاول المستخدم تشغيلها مرة أخرى: على سبيل المثال ، يحصلون على مسار الملف الذي يريد المستخدم فتحه بمساعدتهم.
  • vector_icon : أيقونة تطبيق Vector (لا توجد أيقونات متجهة في BeOS ، فقد كان لمعظم التطبيقات أيقونات نقطية في الملفات القابلة للتنفيذ).

بالطبع ، يمكنك إضافة موارد مع أي معرفات وأنواع مرغوبة ، ثم قراءتها في التطبيق نفسه أو في تطبيقات أخرى باستخدام فئة BResources . ولكن أولاً ، دعنا نتحدث عن موضوع الرموز الرائع.


الرموز المتجهات في أسلوب هايكو.


بالطبع ، لم يقتصر اختيار Haiku على أفضل تنسيق للأيقونة ، في هذا الجزء ، فإن الوضع في بيئات عمل Linux بعيد عن المثالية:


 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 

بالنظر إلى هذا ، يمكنك أن تشعر بالفعل ما هو عليه.


بالطبع ، هناك أيقونات متدرجة ، كما يمكنك أن تفهمها. لماذا إذن هناك أي شيء آخر؟ لأن نتيجة عرض الرسومات المتجهة بأحجام صغيرة يمكن أن تكون أسوأ من المثالية. أرغب في الحصول على خيارات مختلفة محسنة للأحجام المختلفة. يتم تحقيق ذلك في بيئات عمل Linux من خلال تشتيت الرموز بأحجام مختلفة على نظام الملفات.


 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 

يرجى ملاحظة: لا يوجد مفهوم للإصدارات المختلفة من Firefox. وبالتالي ، لا يمكنك معالجة الموقف بمهارة مع وجود العديد من إصدارات التطبيق في النظام.



أيقونات Firefox مختلفة في إصدارات مختلفة. ليس من الممكن حتى الآن التعامل مع هذا على Linux دون عكازات مختلفة.


يتعامل نظام Mac OS X بشكل أكثر تطوراً:


 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 

يمكن ملاحظة أن هناك ملف firefox.icns واحد في حزمة Firefox.app يحتوي على جميع الأحجام ، لذلك فإن الإصدارات المختلفة من نفس التطبيق لها أيقونات مختلفة.
أفضل بكثير! الرموز السفر مع التطبيق ، وجميع الموارد في ملف واحد.


العودة إلى هايكو. قرار يبعث على العقل ، مع عدم وجود استثناءات. حسب الوثائق :


تم تطوير أداة خاصة ومُحسّنة للغاية لتنسيق HVIF للأحجام الصغيرة وتقديم سريع. لذلك ، فإن أيقوناتنا هي في معظمها أصغر بكثير من في خطوط المسح أو بتنسيق SVG المستخدم على نطاق واسع.

وهم الأمثلون:



أحجام الرموز في HVIF مقارنة بالتنسيقات الأخرى.


الفرق هو ترتيب الحجم!


لكن السحر لا ينتهي هنا. يمكن لنفس HVIF إظهار مستويات مختلفة من التفاصيل اعتمادًا على الحجم المعروض ، على الرغم من أنه تنسيق متجه.



مستويات مختلفة من التفاصيل (LOD) حسب حجم التجسيد


الآن عن أوجه القصور: لا يمكنك اتخاذ SVG ، وإفلاته في ImageMagick وتنتهي هناك ، تحتاج إلى الذهاب من خلال عدة دورات لإنشاء رمز بتنسيق HVIF. وهنا تفسيرات. ومع ذلك ، يمكن IconOMatic استيراد SVG بشكل غير صحيح؛ يتم استيراد حوالي 90 ٪ من أجزاء SVG مع بعض الاحتمالات ، وسوف تحتاج إلى تعديل 10 ٪ المتبقية وتغييرها يدويا. يمكنك قراءة المزيد حول كيفية قيام HVIF بسحره على مدونة Lea Ganson.


إضافة أيقونة للتطبيق


الآن يمكنني إضافة رمز إلى الحزمة التي تم إنشاؤها في المرة الأخيرة ، مع مراعاة جميع المعلومات التي تم تلقيها.
حسنًا ، بما أنني لست مهتمًا حقًا برسم أيقوني الخاصة بـ "Hello World" QtQuickApp الخاص بي - أخرجها من 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 

دعونا نتحقق من نسخ الأيقونة:


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

يبدو جيدًا ، ولكن لماذا ، عند نسخ الرمز الجديد ، لا يظهر؟



تم نسخ VICN: 101: BEOS: لم يتم استخدام الرموز بعد كأيقونة للتطبيق في مدير الملفات


ما الذي أفتقده؟


تعليق المطور:


من الضروري إنشاء ملف rdef بكافة الموارد ، ثم تشغيل rc .rdef ، سيؤدي ذلك إلى إنشاء ملف .rsrc . ثم تحتاج إلى تشغيل الأمر resattr -o _ .rsrc . على الأقل ، استخدم أوامر مماثلة لإضافة رموز إلى البرامج النصية الخاصة بي.

حسنًا ، كنت أرغب في إنشاء مورد ، وليس سمة. أنا مرتبك مباشرة.


نظام الملفات الذكية التخزين المؤقت


فتح وقراءة سمات ELF بطيئة. كما كتبت أعلاه ، تتم كتابة الرمز كمورد في الملف نفسه. هذه الطريقة أكثر موثوقية ، تسمح لك بالبقاء على قيد الحياة أثناء النسخ إلى نظام ملفات آخر. ومع ذلك ، فإنه يتم نسخها أيضًا إلى سمة نظام الملفات ، على سبيل المثال BEOS:ICON . هذا يعمل فقط على أنظمة ملفات معينة ، مثل BFS. تتم قراءة الرموز التي يعرضها النظام (في Tracker و Deskbar) من هذه السمة الموسعة ، لأن هذا الحل يعمل بسرعة. في بعض الأماكن (حيث السرعة ليست مهمة ، على سبيل المثال ، نافذة "About" نموذجية) ، يتلقى النظام الرمز مباشرة من المورد في الملف. لكن هذه ليست النهاية. تذكر أنه على نظام Mac ، يمكن للمستخدمين استبدال أيقونات التطبيق والدلائل والمستندات بأدوات خاصة بهم ، لأنه من الممكن على Mac القيام بهذه الأشياء "المهمة" ، على سبيل المثال ، استبدال أيقونة Slack جديدة بأخرى سابقة . في Haiku ، يجب أن تأخذ المورد (في الملف) كرمز المصدر الذي يأتي مع التطبيق ، والسمة (في نظام الملفات BFS) كشيء يتيح للمستخدم إجراء التغييرات حسب الرغبة (على الرغم من وجود تلميح ، فإن الواجهة الرسومية لإدراج رمز المستخدم في أعلى الرمز هي الافتراضي لم تنفذ بعد).


التحقق من سمات نظام الملفات


مع resaddr هناك القدرة على التحقق من وضبط سمات نظام الملفات.


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

في جوهرها ، هذا "غراء" يقوم بإجراء تحويل ذهابًا وإيابًا بين الموارد (الموثوقة) وسمات نظام الملفات (السريع). ونظرًا لأن النظام يفترض استلام الموارد ويقوم بالنسخة تلقائيًا ، فلن أشعر بالقلق أكثر من ذلك.


حزم hpkg السحر


حاليا (في معظم الأحيان) .hpkg حزم .hpkg للحصول على .hpkg هايكو. لا تنخدع باسم بسيط: يعمل تنسيق .hpkg بطريقة مختلفة تمامًا عن التنسيقات الأخرى ذات الأسماء المشابهة التي صادفتك ، وله قوى عظمى حقيقية.


مع تنسيقات الحزم التقليدية ، كنت منزعجًا لفترة طويلة بسبب هذه الحقيقة: يمكنك تنزيل حزمة (حزمة) ، ويتم تثبيت حزمة أخرى على النظام (ملفات داخل الحزمة). من الصعب إدارة الملفات (على سبيل المثال ، حذفها) عند تثبيت الحزمة بالطريقة التقليدية. وكل ذلك بسبب انتشار محتويات الحزمة عبر نظام الملفات ، بما في ذلك الأماكن التي قد لا يكون لدى المستخدم العادي فيها حق الوصول للكتابة. الشيء نفسه يولد فئة كاملة من البرامج - مديري الحزم . لكن نقل البرامج المثبتة بالفعل ، على سبيل المثال ، إلى جهاز آخر ، يصبح القرص القابل للإزالة أو خادم الملفات أكثر صعوبة ، إن لم يكن مستحيلاً. في نظام يستند إلى نظام Linux ، يمكن أن يوجد مئات الآلاف إلى ملايين من الملفات المنفصلة بسهولة. غني عن القول إنه هش وبطيء ، على سبيل المثال ، أثناء التثبيت الأولي للنظام ، وأثناء التثبيت ، وتحديث وإزالة الحزم العادية ، وكذلك عند نسخ وحدة تخزين التمهيد (قسم الجذر) إلى وسيط آخر.


أنا أعمل على مشروع AppImage ، وهو عكاز جزئي لتطبيقات المستخدم النهائي. هذا هو تنسيق توزيع البرامج الذي يجمع تطبيق وكل التبعيات الخاصة به في صورة واحدة لنظام الملفات ، يتم تثبيتها عند بدء تشغيل التطبيق. إنه يبسط الأشياء إلى حد كبير ، لأن نفس ImageMagick يتحول فجأة إلى ملف واحد ، تتم إدارته في مدير الملفات عن طريق مجرد بشر. الطريقة المقترحة تعمل فقط للبرامج ، كما هو موضح في اسم المشروع ، ولديها أيضًا مجموعة من القروح الخاصة بها ، لأن الأشخاص الذين يزودون برامج Linux يديرون أسهمهم دائمًا لي.


العودة إلى هايكو. هل تمكنت من العثور على التوازن الأمثل بين أنظمة الحزم التقليدية وتقديم البرامج القائمة على الصور؟ الحزم .hpkg الواقع صور نظام ملفات مضغوطة. عندما يقوم النظام بالتمهيد ، يقوم kernel بتثبيت جميع الحزم المثبتة والنشطة مع رسائل kernel التالية تقريبًا:


 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" 

بارد ، هاه؟ انتظر ، سيكون أكثر برودة!


هناك حزمة خاصة جدا:


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

يحتوي على نظام تشغيل بسيط للغاية ، بما في ذلك النواة. صدق أو لا تصدق ، حتى النواة نفسها لا يتم استخراجها من وحدة تخزين التمهيد (قسم الجذر) ، ولكن يتم تحميلها بعناية في مكانها من حزمة .hpkg . نجاح باهر! لقد ذكرت بالفعل ، بالنسبة لي ، أن جزءًا من التطور والتناسق الشاملين لـ Haiku يرجع إلى حقيقة أن النظام بأكمله من النواة ومساحة المستخدم الأساسية ، بالإضافة إلى إدارة الحزم والبنية التحتية لبيئة العمل ، تم تطويره بشكل مشترك من قبل فريق واحد. تخيل عدد المجموعات والأوامر المختلفة التي تحتاجها لتشغيل مجموعة قائمة على Linux مثل هذا [أتصور مشروع PuppyLinux - تقريبًا. مترجم] . ثم تخيل كم من الوقت يستغرق هذا النهج ليتم تنفيذه في توزيعات. يقولون: خذ مهمة بسيطة ، مقسمة بين فناني الأداء المختلفين ، وستصبح معقدة للغاية بحيث لن يتم حلها. هايكو في هذه الحالة فتحت عيني. أعتقد أن هذا هو بالضبط ما يحدث على Linux الآن (Linux في هذه الحالة هو مصطلح جماعي لنظام Linux / GNU / dpkg / apt / systemd / Xorg / dbus / Gtk / GNOME / XDG / Ubuntu).


التراجع عن النظام باستخدام hpkg


كم مرة يحدث الموقف التالي: كان التحديث ناجحًا ، ثم اتضح أن هناك شيئًا لا يعمل كما ينبغي؟ إذا كنت تستخدم مديري الحزم المعتادين ، فمن الصعب إعادة حالة النظام إلى نقطة زمنية قبل تثبيت حزم جديدة (على سبيل المثال ، في حالة حدوث خطأ ما). تقدم بعض الأنظمة حلولاً في شكل لقطات من نظام الملفات ، لكنها مرهقة للغاية ، كما أنها لا تستخدم في جميع الأنظمة. في Haiku ، يتم حل هذا باستخدام حزم .hpkg . عندما تتغير الحزم في النظام ، لا يتم حذف الحزم القديمة ، ولكن يتم تخزينها في النظام في الدلائل الفرعية للنموذج /Haiku/system/packages/administrative/state-<...>/ بشكل دائم. تقوم العمليات غير المكتملة بتخزين بياناتها في /Haiku/system/packages/administrative/transaction-<...>/ الدلائل الفرعية.



المحتوى /Haiku/system/packages/administrative . الدلائل "الحالة ..." تحتوي على ملفات نصية بأسماء الحزم النشطة ، "المعاملة ..." - الحزم نفسها.


"الحالة النشطة القديمة" ، أي يتم تسجيل قائمة .hpkg النشطة قبل التغييرات بعد كل عملية في مدير الملفات في الملف النصي /Haiku/system/packages/administrative/state-<...>/activated-packages . بطريقة مماثلة ، تتم كتابة "الحالة النشطة" الجديدة في الملف النصي /Haiku/system/packages/administrative/activated-packages .


يحتوي دليل /Haiku/system/packages/administrative/state-<...>/ على ملف نصي فقط مع قائمة الحزم النشطة لهذه الحالة (إذا تم تثبيت الحزم دون إزالة) ، وإذا تم حذف الحزم أو تحديثها ، فإن دليل الحالة يحتوي على إصدارات قديمة .


عندما يقوم النظام بالتمهيد ، بناءً على قائمة الحزم ، يتم اتخاذ قرار بتنشيط (تثبيت) الحزم. بسيط جدا! إذا حدث خطأ ما أثناء التنزيل ، فيمكنك إخبار مدير التنزيل باستخدام قائمة أقدم مختلفة. تم حل المشكلة!



هايكو بووتلوأدر. تعرض كل نقطة دخول "حالة نشطة" مقابلة


يعجبني التعامل مع الملفات النصية البسيطة كقائمة بـ "الحالة النشطة" ، حيث تتم .hpkg أسماء .hpkg . يتناقض هذا بشكل حاد مع كومة الذاكرة المؤقتة OSTree أو Flatpak التي تم إنشاؤها للأجهزة ، لكن ليس الأشخاص في نظام الملفات (نفس المستوى مثل Microsoft GUID).



قائمة الحزم النشطة لكل نقطة في الوقت المناسب


بيانات التكوين


على ما يبدو ، يحتوي الدليل /Haiku/system/packages/administrative/writable-files على ملفات تكوين للحزم ، ولكنها قابلة للكتابة. بعد كل شيء ، كما تتذكر ، يتم تثبيت .hpkg فقط للقراءة. لذلك ، يجب نسخ هذه الملفات من الحزم قبل الكتابة. هذا منطقي.


تكامل واجهة المستخدم الرسومية لنظام .hpkg


دعونا الآن نرى كيف .hpkg حزم .hpkg الرائعة هذه مع التكامل في مساحة عمل المستخدم (UX). بعد كل شيء ، ويهدف Haiku للاستخدام الشخصي ، بعد كل شيء. شخصياً ، قمت بتعيين الشريط عالياً من خلال مقارنة تجربة المستخدم مع حزم .app على Macintosh مع نفس التجربة على .hpkg . لن أقارن حتى الوضع مع بيئات العمل على نظام Linux ، لأنه أمر فظيع للغاية مقارنة بأي بيئة أخرى.


السيناريوهات التالية تتبادر إلى الذهن:


  • أريد أن عرض محتويات الحزمة .hpkg
  • -,
  • -,
  • , Haiku ( , .)
  • (, ) , ( ) ( , , ).

. , .



Mac Finder. ! ( , .pkg , , ).


Haiku , "Contents" , . .
, () .hpkg , . ( , .hpkg Expander , ).



HaikuDepot , , , README.md


Mac , HaikuDepot .


GUI


Mac , .dmg .app . , , , /Applications Finder. , , . - Apple "" /Applications ( NeXT , ), $HOME/Applications , .


Haiku , , "Install", . , , , HaikuPorts, . Linux , , — , . , Haiku.



'sanity' , , ( , ). Linux .


— , .hpkg /Haiku/system/packages ( , -), /Haiku/home/config/packages ( ; — "config" , "settings"). Haiku (, — , , ).


Haiku, , .


GUI


Mac , , . !


Haiku , -, , , ( ). /Haiku/system/packages ( -), /Haiku/home/config/packages ( , "config" — ?). , .
! , . :



, /Haiku/system/packages


", " QtQuickApp. ,.hpkg " " . , "", -.


mr. waddlesplash :


10 . , . .

, , , HaikuDepot? /Haiku/system/packages , , "Uninstall". -, () «Install». «Uninstall», ?


, , "Install" . :



, .


:



"Apply changes" —


, , . [ , — . الترجمة]


: "Uninstall", /Haiku/system/packages , /Haiku/home/config/packages .

, HaikuDepot, .


Mac. , Haiku , Mac. ( : " HaikuDepot, ++", ?)


-


, .hpkg , (, " " - ).


Mac , .dmg , .app . .dmg , /Applications . , , , Apple. ( , Mac. , , AppImage , . = . !)


Haiku , apps/ packages/ , , . , apps/ :



, .hpkg


( , ), .


: GUI .hpkg

, Alt+D. " ". , /system ( /system/packages /system/settings ) packagefs (, df ?). , mount ( ), mountvolume ( loop .hpkg ""), .


, AppImage ( , , ). , , Haiku , Mac.


: , "" «». , "" «": , ( , , ). ?



Mac , .app , — .


Haiku , , .


: ```.hpkg , , .

Mac. , . Haiku .hpkg , ...



. , (, , Windows, Mac Linux) . , -, , , [ , Windows… — . ].


, , Windows Linux.


Mac , — .dmg . , , MacOS -. , , java.


Haiku .hpkg , , java, , java , . .hpkg , , Haiku - , , Haiku?


Mac.


mr. waddlesplash:


, .hpkg -, Haiku, 15 . , . .

.



, .hpkg (, ) , ( ). ( ) — , () , . , .


Mac .app Finder, . . !


Haiku , , .hpkg , , . , , GUI.


Mac.


mr. waddlesplash:


. , , . .

.


: ( LAN ) , , (, Zeroconf), . , app_flags .


hpkg c GUI


, - .hpkg GUI . , , UX...


: Kernel Debug Land


kernel panic , syslog | grep usb . , Haiku Kernel Debug Land. , kernel panic? , Alt+PrintScn+D ( Debug). Programmer's Key , Macintosh ( , ).


استنتاج


, Haiku , .
Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, , .
, .hpkg , Snappy, Flatpak, AppImage, btrfs, " " Mac.


- "" , , .hpkg , — . , . Mac.


, , , ( Gtk, Electron — , ), 3d , . . , , .


, Haiku .



, ?


  • BeScreenCapture GIF, Peek. ffmpeg, Haiku. .
  • ,
  • WonderBrush, —
  • Haiku, , . Krita, (. ). . .

جربه بنفسك! بعد كل شيء ، يوفر مشروع Haiku صور التنزيل اليومية من قرص DVD أو USB. للتثبيت ، ما عليك سوى تنزيل الصورة وكتابتها على محرك أقراص فلاش USB باستخدام Etcher


لديك سؤال؟ نحن ندعوك إلى قناة برقية باللغة الروسية.


علة نظرة عامة: كيف تطلق النار على نفسك في القدم في C و C ++. Haiku OS وصفة مجموعة


: Haiku.


:

Source: https://habr.com/ru/post/ar464819/


All Articles