أنظمة التشغيل (OS) هي موضوع واسع. لعقود من الزمان ، سيطر نهج واحد هنا: يونكس. في الواقع ، فإن معظم الأنظمة الحديثة ، بما في ذلك معظم توزيعات GNU / Linux ، * BSD و macOS ، تلتزم ببنية Unix. (لا يوجد Windows ، ولكن لا يوجد شيء مثير للاهتمام في هذا الموضوع).
في عام 2000 ، قدم Rob Pike عرضًا تقديميًا عن سبب
عدم أهمية أبحاث برامج النظام . نظرًا للتشاؤم أو التجاهل تجاه المجتمع ، يبدو أنه تجاهل تمامًا الشكاوى التي جمعها العديد من مستخدمي
يونكس في كتيب يونكس هاتيرز (1994). يعد هذا الكتاب تهكمًا متعمدًا ، ولكنه يشير إلى بعض المشكلات الحرجة التي تواجه أنظمة Unix - ولم يتم حلها بعد.
في عام 2006 ، نشر Elko Dositra أطروحته ،
"نموذج نشر البرامج الوظيفية بالكامل" ، الذي يصف مدير حزم Nix الوظيفي. في عام 2008 ، نشر المؤلف
NixOS: توزيعة Linux كاملة الوظائف . على الرغم من إعادة استخدام NixOS للعديد من البرامج المجانية لأنظمة Unix ، إلا أنها بعيدة كل البعد عن تصميم وفلسفة Unix بحيث يصعب وصفها بـ "نظام Unix".
Nix هي قفزة هائلة للأمام في هندسة النظم. لم يحل نظام التشغيل هذا العديد من مشاكل يونكس (بما في ذلك النقد من المجموعة المذكورة أعلاه) ، ولكن أيضًا فتح الطريق أمام العديد من الوظائف والدراسات الأخرى التي يمكن أن تلعب دورًا مهمًا للغاية في عصرنا ، عندما أصبحت الموثوقية والأمن الموضوع الرئيسي للعديد من المجالات العلمية والعامة والسياسية النقاش.
كان بايك خطأ. وهذا يثبت نقطة أخرى أكثر عمومية: ربما يكون من الحكمة الامتناع عن إعلان أي بحث غير ذي صلة إذا لم تتمكن من إثبات استحالة مزيد من التطوير. ولا يمكن اعتبار التقرير المذكور دليلًا رياضيًا. لقد عزز فقط فكرة أن يونكس "جيدة بما يكفي" وأنه يجب عليك أن تتصالح مع ميزاتها ومشاكلها.
لحسن الحظ ، تبين أن هذا التشاؤم غير الضروري قصير النظر ولم يدم طويلاً: بعد بضع سنوات فقط ، أثبت نظام Nix أنه خاطئ.
Guix المظهر
Guix هو مدير الحزم في Nix ، و GuixSD هو نظام التشغيل ، أي ما يعادل NixOS ، والذي يهدف إلى أن يكون "نظام تشغيل قابل للبرمجة بالكامل". في الواقع ، يتم كتابة كل شيء تقريبًا وتهيئته في
مخطط Guile : من إدارة حزم Guix إلى نظام تهيئة
GNU shepherd .
يختلف نظام Guix بشكل كبير عن أنظمة تشغيل Unix. يمكنك عرض الوثائق وتقييم درجة التغيير:
فوائد Guix
تعتبر فوائد Guix ثورية إلى الحد الذي يبدو فيه بقية نظام التشغيل وكأنه أنظمة قديمة مقارنةً به.
ميزاتي الشخصية المفضلة:
- عدم حصانة النظام: يحتفظ Guix بسجل لجميع التغييرات على مستوى النظام والمستعمل. إذا كسر التحديث شيئًا ما ، فيمكنك دائمًا التراجع. هذا يجعل النظام غير محصّن تقريبًا.
- النزاهة: نظرًا لأن التكوين هو تعريف ، فإنه يمنح المستخدم أو مسؤول النظام التحكم الكامل. في متغيرات Unix الأخرى ، يصعب تحديد متى يتغير ملف التكوين العشوائي.
- نظام تشغيل قابل للبرمجة بالكامل: تكوينات نظام البرنامج واستخدام نظام التحكم في الإصدار. يمكن تكوين العديد من خدمات النظام في نظام Guile: من قواعد udev إلى Xorg ، PAM ، إلخ. بفضل Guile ، يمكن أن يكون التكوين مشروطًا على الجهاز أو حتى باسم المضيف!
- بديل مباشر لمديري الحزم الآخرين (ليس جيدًا): لماذا تدير بشكل منفصل حزم Emacs أو Python أو TeXlive إذا كان هناك واجهة واحدة للجميع (انظر أدناه )! من الأسهل كتابة الإعلانات والحفاظ عليها لملفات تعريف المستخدمين.
- تعريفات حزمة Guile: إنها أكثر فاعلية في تطوير تعريفات الحزمة بكميات كبيرة . يستبدل بشكل إيجابي مفاهيم مثل أعلام Portage USE (انظر أدناه ).
- عدة طرق لإصدار الحزم: قد يكون لحزمة Guix عدة "طرق لإصدارها" ، والتي تستخدم لفصل المكونات المختلفة (المكتبات ، الأدوات الإضافية ، الوثائق ، إلخ). على أنظمة التشغيل الأخرى (عادة دبيان) ، من الصعب تخمين أي الحزم تتناسب مع بعضها البعض.
- المدخلات غير المضاعفة: في مصطلحات Guix ، فإن "المدخلات" هي تبعية للحزم. يحتوي ملف تعريف المستخدم والبيئة على حزم فقط تم تثبيتها بشكل صريح من قبل المستخدم وليس بالضرورة تبعياتها. على سبيل المثال ، راجع inxi ، وهي أداة للإبلاغ عن معلومات نظام: إذا كنت مهتمًا فقط بتقارير حول نظام / جهاز inxi ، فليس من الضروري إضافة أدوات إضافية لسطر الأوامر إلى اثنين أو ثلاثة إلى
PATH
. يسمح لك Guix بعرض ما يحتاجه بالفعل في ملف تعريف المستخدم.
- بيئات Guix: عندما تقوم بتشغيل
guix environment SOME-PACKAGES
Guix بإعداد بيئة مؤقتة حيث يتم تقديم جميع متطلبات SOME-PACKAGES
. يمكن استخدام هذا لتكوين بيئة البناء للمشروع بسهولة ، وكذلك لأغراض أخرى (انظر أدناه). جودة واحدة رائعة - تسمح لك بتشغيل البرامج دون تثبيتها في ملف تعريف المستخدم.
- تحديثات جزئية: 100 ٪ معتمدة. ربما يكون هذا هو السبب الرئيسي للانهيارات في الإصدارات العائمة مثل Arch Linux و Gentoo: نظرًا لأن هناك عدة إصدارات فقط مدعومة هناك في نفس الوقت (عادةً واحدة فقط) ، يجب تحديث النظام بالكامل ككل. هذا يعني المزيد من الحركة مع كل تحديث. مع Guix ، يتم تحديث أي حزمة على حدة.
- تكامل مستمر أو لماذا تعمل Guix بدون أدوات صيانة للحزم: بفضل الإنشاءات القابلة للتكرار ودعم التحديثات الجزئية ، إذا كانت الحزمة تعمل على Guix ، فستعمل "دائمًا" ولن تنقطع بعض التبعيات أثناء التحديث التالي (بشكل أكثر دقة ، إذا انقطعت التبعية الحزمة ، ثم تم إصلاح هذا بشكل تافه لاستخدام الإصدار الصحيح من المكتبة). وبالتالي ، يمكن نقل العمل مع الطرود إلى "مزارع التجميع" (واحدة على Hydra من مشروع Nix ، والآخر في Cuirass ). قارن هذا بمعظم مجتمعات GNU / Linux الأخرى ، والتي تتطلب العشرات من المشرفين لترقية الآلاف من الحزم. هذا النهج لا يتوسع: في النهاية ، ركود هذه التوزيعات على عدة آلاف من الحزم. في Guix ، يمكن أن ينمو عدد الحزم بهدوء دون خوف من الانهيار. في الوقت نفسه ، يمكن استخدام المساهمين بشكل أكثر كفاءة.
في Guix ، يكون البناء من المصدر بنفس السهولة. في الواقع ، هذا ليس مهمًا بالنسبة للمستخدم النهائي: يمكن لـ Guix العودة بسهولة إلى التجميع من المصادر إذا كانت الحزمة النهائية غير متوفرة.
guix import
guix refresh
: قم بإنشاء أو تحديث تعريفات الحزمة تلقائيًا وبشكل متكرر. تتم معالجة مئات التعريفات في وقت واحد. تؤكد هذه الميزات على فوائد لغة البرمجة الحقيقية في نظام التشغيل. وهي مهمة صعبة على معظم أنظمة التشغيل ، فمن السهل نسبياً تنفيذها في Guix.
- قنوات Guix: واحدة من الميزات المفضلة لدي! يتطلب Arch Linux أو Gentoo إنشاء مستودع محلي. نظرًا لأنها لا تدعم التحديثات الجزئية ، يحتاج المستخدم إلى إجراء بعض الصيانة من وقت لآخر (أي ، تأكد من أن تحديثات التبعية لا تؤدي إلى كسر الحزم). تحل قنوات Guix محل تراكمات AUR من Arch Linux و Gentoo ، مما يسمح لأي شخص بتوزيع تعريفات الحزمة الخاصة بهم ، على سبيل المثال ، من مستودعات Git. مرة أخرى ، هذا يضمن الشفافية الكاملة (العمولات ، التاريخ ، إلخ).
- Emacs-Guix : على حد علمي ، فإن Guix هو التوزيع الوحيد الذي يأتي مع واجهة مستخدم Emacs الأقوى!
- حزم Guix : بديل حقيقي للحاويات مثل Docker. تعاني معظم أنظمة الحاويات من مشاكل حرجة: لا يمكن تشغيلها بل إنها في الواقع ثنائيات غير شفافة ، وهو أمر غير مقبول بشكل قاطع للمستخدمين الذين يهتمون بالثقة والأمن والخصوصية. على العكس من ذلك ، فإن حزم Guix واضحة تمامًا وقابلة للتكرار وشفافة.
guix system vm
و guix system disk-image
: guix system disk-image
Guix تجعل تشغيل النظام الحالي بأكمله بمثابة USB مباشر ، داخل VM أو على جهاز بعيد.
Guix بالمقارنة مع المنافسين
دبيان و Arch Linux ومعظم توزيعات GNU / Linux الأخرى
لا تتمتع توزيعات جنو / لينكس عادةً بالفوائد المذكورة أعلاه من Guix. أوجه القصور الأكثر أهمية:
- عدم وجود دعم لإصدارات متعددة من الحزم أو "جحيم التبعية". قل أن أحدث ملف mpv يتطلب ffmpeg جديدًا ، ولكن تحديث ffmpeg يكسر معظم البرامج الأخرى. نحن عالقون في معضلة: إما كسر بعض الحزم أو حفظ الإصدارات القديمة. والأسوأ من ذلك ، قد لا يكون هناك حزمة مناسبة على الإطلاق ، أو لا يوجد دعم لنظام التشغيل. هذه المشكلة متأصلة في معظم التوزيعات التي لا يمكن ضمان الوفاء بمهمتها الرئيسية: حزمة لأي برنامج.
- الاعتماد الحاسم على المشرفين. إدارة الحزم غير الوظيفية تعني أنه يجب اختبار جميع الحزم باستمرار من أجل التوافق. هذا كثير من العمل الشاق لأولئك الذين كلفوا بهذه المهمة على أكتافهم. في الممارسة العملية ، هذا يعني أن جودة إدارة الحزم تعتمد بدرجة كبيرة على الأفراد. إن التوزيع بدون عدد كاف من المشرفين سيعاني حتما وربما يموت. لا يتم قياس هذا الشرط الخاص بالعمل عادة ، وكلما زاد عدد الحزم ، يؤدي ذلك إلى زيادة التعقيد (في قاعدة الشفرة وفي الإدارة).
جينتو ، * بي إس دي
تتمتع Gentoo وغيرها من التوزيعات مع مدير حزم
Portage بميزة شهيرة:
إشارات الاستخدام لتنشيط الوظائف عبر النظام (على سبيل المثال ، كتم الصوت ، وتمكين دعم واجهة المستخدم الرسومية ، وما إلى ذلك).
تجعل علامات الاستخدام ميزة تافهة لتمكين أو تعطيل الوظائف من مؤلف الحزمة (والميزة هي أن يتم اختبارها). من ناحية أخرى ، لا يسمح لك Portage بتكوين الميزات التي لم يتم التفكير بها مقدمًا. على سبيل المثال ، إذا كانت الحزمة تحتوي على صوت إضافي ، لكن المؤلف لم يحدد العلامة المقابلة ، فلن يتمكن المستخدم من فعل أي شيء حيال ذلك (باستثناء إنشاء تعريف حزمة جديد).
بالمقارنة ، يتيح لك نظام Guix تخصيص كل شيء بشكل كامل ، وإن كان ذلك باستخدام رمز مخطط أكثر قليلاً. في الكود الزائف ، يبدو مثل هذا:
(loop-over (TARGET-PACKAGES) (package (inherit TARGET) (changes-here... including patches, build options, etc.))
تقوم مجموعة التعليمات البرمجية هذه بتعيين التعاريف الخاصة بـ
TARGET-PACKAGES
مع تغييراتك. لا يلزم إجراء أي من التغييرات على تعريف الحزمة. في أي وقت ، يحتفظ المستخدم بالتحكم الكامل في التغييرات التي يمكن إجراؤها على الحزم.
أحببت Gentoo ، لكن بعد الانتقال إلى Guix ، أصبحت قيود Portage واضحة.
- لا يسمح نظام إشارة الاستخدام بتخصيص وظائف تعسفية غير مخطط لها.
- يضيف استخدام العلامات فئة كاملة من التعقيد (انظر دلالات الذرة المعقدة إلى حد ما) لوصف وإدارة علاقة الدوال بين الحزم. Guix يزيل تماما هذا المستوى من التعقيد باستخدام Guile Scheme لعلاقات البرنامج.
بالإضافة إلى ذلك ، يعاني Portage من نفس المشكلة مع عدم وجود دعم مناسب لإصدارات متعددة ، وتزيد العلامات بشكل كبير من حجم المشكلة (شكوى متكررة حول Portage): عندما تخضع بعض التبعيات لعلامات USE غير متوافقة ، يجب على المستخدم البحث يدويًا عن حل. يعني هذا في بعض الأحيان أن الوظيفة المطلوبة غير قابلة للتطبيق (على الأقل بدون عمل كبير في تعريفات الحزمة).
في الممارسة العملية ، توفر Guix حزمًا تم تجميعها مسبقًا - توفير وقت كبير مقارنة بـ Gentoo (على الرغم من أن Portage يدعم توزيع الحزمة الثنائية).
تعاني أنظمة BSD (مثل FreeBSD) من مشكلات مشابهة في
make config
.
لا شىء
لقد كان Nix بمثابة إنجاز تاريخي في أبحاث نظام التشغيل ، واستعار Guix جميع أفكاره تقريبًا من هناك. اليوم ، لا يزال Nix أحد أفضل أنظمة التشغيل النشطة. ربما لم يكن Guix موجودًا لولا عيب واحد.
في رأيي ، تعمل Guix على حل مشكلة Nix الرئيسية: بدلاً من
لغتها الخاصة
بالمجال (DSL) ، يتم استخدام لغة برمجة Guile Scheme القائمة على ليسب كاملة هنا.
"تطبيق لغة البرمجة الخاصة بك" هو مفهوم خاطئ شائع للغاية في تطوير البرمجيات. حقق هذا الكثير من المشاريع حيث عانت لغة التكوين أو البرمجة من العيوب التالية:
- محدودية التعبير والقدرات ؛
- لغة أخرى للتعلم (ولكن ليس شيئًا مفيدًا وعالميًا) ، الأمر الذي يتطلب بعض الجهد من المستخدم ، وبالتالي يخلق حاجز دخول ؛
- كود أقل قابلية للقراءة (على الأقل في البداية) ؛
- أداء ضعيف في كثير من الأحيان.
هناك العديد من المشاريع بلغات محلية أو محدودة للغاية:
- XML ، HTML (أفضل: S-XML )
- Make ، Autoconf ، Automake ، Cmake ، إلخ.
- باش ، زش ، سمك (أفضل: إشيل أو سكش )
- JSON ، TOML ، YAML
- Portage to Nix Ebuild والعديد من قواعد بناء الجملة الأخرى لتعريفات حزمة نظام التشغيل
- عند استخدام Firefox XUL (تخلت Mozilla عن ذلك منذ ذلك الحين) ومعظم اللغات المحلية الأخرى للإضافات
- SQL
- Octave و R و PARI / GP ، معظم البرامج العلمية (مثل Lisp و Racket وخطط أخرى)
- التعبيرات العادية ( rx في Emacs ، PEG in Racket ، إلخ.)
- sed ، awk ، الخ
- معظم تكوينات init ، بما في ذلك systemd (حتى أفضل: GNU Shepherd )
- cron (حتى أفضل: mcron )
- conky (غير قابل للبرمجة بشكل كامل ، على الرغم من أن هذا يجب أن يكون الميزة المتوقعة لبرنامج مشابه)
- TeX و LaTeX (وجميع المشتقات) ، Asymptote (أفضل من ذلك: خربشة ، skribilo - لا تزال قيد التطوير ؛ اعتبارًا من يناير 2019 ، لا يزال TeX / LaTeX يستخدم كخطوة وسيطة في إعداد PDF)
- معظم البرامج ذات التكوينات التي لا تستخدم لغة برمجة للأغراض العامة.
إعادة اختراع العجلة ليست عادة فكرة جيدة. عندما يتعلق الأمر بأدوات مهمة مثل لغات البرمجة ، فإن لذلك عواقب وخيمة للغاية. جهود إضافية غير ضرورية مطلوبة ، تحدث أخطاء. المجتمع مبعثر. تعد المجتمعات المدمجة أكثر كفاءة وتستفيد بشكل أفضل من وقتهم إذا قاموا بتحسين لغات البرمجة الحالية المطورة جيدًا.
ليس فقط لسطح المكتب
يدعم Guix العديد من البنيات (i686 و x86_64 و ARMv7 و AArch64 اعتبارًا من يناير 2019) ، ويعتزم دعم المزيد من النوى خارج نظام Linux البيئي (دعنا نقول * BSD أو
GNU Hurd أو ربما النظام الخاص بك!).
هذا يجعل Guix أداة رائعة لنشر الخوادم (القابلة للتكرار) والأنظمة المتخصصة الأخرى. أعتقد أنه في الأنظمة المضمّنة ، يمكن أن يتنافس Guix جيدًا مع
OpenWRT (على الرغم من أن الأمر سيستغرق بعض العمل من منفذ إلى الأنظمة المدمجة).
الاستنساخ الذاتي USB الحية
أعلاه ، ذكرت
guix system disk-image
: على سبيل المثال ، تسمح لك بإعادة إنشاء النظام الحالي على محرك أقراص فلاش USB.
وبالتالي ، من السهل استنساخ النظام الحالي في أي مكان وتكرار البيئة الحالية الدقيقة (مطروحًا منها الجهاز). يمكنك تضمين بيانات المستخدم هناك: مفاتيح PGP ، البريد الإلكتروني. كل شيء متاح مباشرة بعد التحميل.
من الواضح أن الاستنساخ يعمل بشكل أكبر من الجهاز الذي تم تثبيت النسخ عليه: بدلاً من نظام التشغيل "عارية" ، يتم نشر نظام تشغيل كامل ، جاهز للعمل.
استبدال مديري الحزم الآخرين
Emacs ، بيثون ، روبي ... وقوة guix environment
يمكن أن يحل Guix محل أي مدير حزمة ، بما في ذلك مديرو حزم لغات البرمجة. لديها العديد من المزايا:
- استنساخ في كل مكان.
- التراجع في كل مكان.
- لا حاجة لمعرفة مدير حزمة آخر.
في هذه المرحلة ، يجب أن تذكر
guix environment
. يقوم هذا الأمر بإعداد بيئة مؤقتة مع مجموعة محددة فقط من الحزم ، مثل
virtualenv
. ميزة القاتل هو أنه عالمي لجميع اللغات ومجموعاتها.
Texlive
(إخلاء المسئولية: اعتبارًا من يناير 2019 ، يتم إعادة تصميم نظام بناء TeXlive لـ Guix).
تلقى TeXlive إشارة خاصة لأنه أمر فظيع للغاية :) ، والذي يؤكد مرة أخرى على دور إنقاذ Guix!
توزع معظم أنظمة التشغيل المستندة إلى Unix عادةً TeXlive كجزء من مجموعة من الحزم. على سبيل المثال ، يحتوي Arch Linux على عشرة من هذه. إذا كنت بحاجة إلى بعض حزم TeX من مجموعات مختلفة ، فلا يترك Arch Linux أي خيار سوى تثبيت الآلاف من الحزم (وربما لا لزوم لها) ، ويشغل TeXlive مساحة كبيرة: مئات الميجابايت.
بدلاً من ذلك ، يمكنك تثبيت TeXlive يدويًا ، ولكن دعنا نواجه الأمر:
tlmgr
هو مجرد مدير حزمة سيئ ، ويتطلب عملًا إضافيًا شاقًا.
باستخدام Guix ، يتم تثبيت حزم TeXlive بشكل منفصل ، مثل أي شيء آخر ، مما يساعدك في الحفاظ على مجموعة حزم TeXlive الخاصة بك أو حتى إنشاء مواصفات بيئة افتراضية لتجميع مستندات محددة.
جوهر
تقدم العديد من أنظمة التشغيل دعمًا محدودًا فقط للنواة المخصصة. إذا أراد المستخدمون الابتعاد عن النواة الافتراضية ، فيجب الحفاظ على النواة غير القياسية يدويًا.
من المعروف أن Gentoo "تطلب" نواة المستخدم كخطوة التثبيت الموصى بها (الإلزامية؟). ومع ذلك ، لا يعد هذا شرطًا أساسيًا ، ويجب أن يدعم المستخدمون أنفسهم تكوين kernel.
في Guix ، النواة عبارة عن حزمة عادية قابلة للتخصيص بالكامل ، مثل أي حزمة أخرى. يمكنك تكوين كل شيء وتمرير ملف تكوين kernel إلى تعريف الحزمة.
على سبيل المثال ، فيما يلي تعريفات لنواة Linux غير المجانية باستخدام برنامج تشغيل
iwlwifi
(تحذير: لا أوصي بشدة باستخدام برامج تشغيل خاصة ، لأنها تشكل تهديدًا خطيرًا على خصوصيتك
iwlwifi
):
(define-module (ambrevar linux-custom) #:use-module (guix gexp) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system trivial) #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages linux) #:use-module (srfi srfi-1)) (define-public linux-nonfree (package (inherit linux-libre) (name "linux-nonfree") (version (package-version linux-libre)) (source (origin (method url-fetch) (uri (string-append "https://www.kernel.org/pub/linux/kernel/v4.x/" "linux-" version ".tar.xz")) (sha256 (base32 "1lm2s9yhzyqra1f16jrjwd66m3jl43n5k7av2r9hns8hdr1smmw4")))) (native-inputs `(("kconfig" ,(local-file "./linux-custom.conf")) ,@(alist-delete "kconfig" (package-native-inputs linux-libre)))))) (define (linux-firmware-version) "9d40a17beaf271e6ad47a5e714a296100eef4692") (define (linux-firmware-source version) (origin (method git-fetch) (uri (git-reference (url (string-append "https://git.kernel.org/pub/scm/linux/kernel" "/git/firmware/linux-firmware.git")) (commit version))) (file-name (string-append "linux-firmware-" version "-checkout")) (sha256 (base32 "099kll2n1zvps5qawnbm6c75khgn81j8ns0widiw0lnwm8s9q6ch")))) (define-public linux-firmware-iwlwifi (package (name "linux-firmware-iwlwifi") (version (linux-firmware-version)) (source (linux-firmware-source version)) (build-system trivial-build-system) (arguments `(#:modules ((guix build utils)) #:builder (begin (use-modules (guix build utils)) (let ((source (assoc-ref %build-inputs "source")) (fw-dir (string-append %output "/lib/firmware/"))) (mkdir-p fw-dir) (for-each (lambda (file) (copy-file file (string-append fw-dir (basename file)))) (find-files source "iwlwifi-.*\\.ucode$|LICENSE\\.iwlwifi_firmware$")) #t)))) (home-page "https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi") (synopsis "Non-free firmware for Intel wifi chips") (description "Non-free iwlwifi firmware") (license (license:non-copyleft "https://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/LICENCE.iwlwifi_firmware?id=HEAD"))))
يمكن تضمين kernel المخصص والبرامج الثابتة بشكل مشروط في تكوين النظام الحالي (بعض ملفات
config.scm
):
(define *lspci* (let* ((port (open-pipe* OPEN_READ "lspci")) (str (get-string-all port))) (close-pipe port) str)) (operating-system (host-name "...")
ثم اتبع هذه الخطوات لتثبيت تكوين نظام جديد:
sudo -E guix system reconfigure config.scm
بدون تثبيت نواة جديدة ، يمكنك إنشاء صورة جاهزة للإقلاع مباشرةً من محرك أقراص USB.
الألعاب
نظرًا لأن حزم Guix تستخدم التقنيات المتقدمة (على سبيل المثال ، أحدث إصدارات Mesa) وتسمح بضبط النواة بالكامل ، فهي منصة مثالية للألعاب ، وعلى وجه الخصوص ، لألعاب
التغليف !
لسوء الحظ ، فإن صناعة الألعاب بعيدة كل البعد عن فلسفة البرمجيات المجانية ، ويتم حزم عدد قليل جدًا من الألعاب كجزء من مشروع Guix الرسمي.
على الرغم من أن Guix تفضل البرمجيات المجانية ولا تقبل أي ملكية في مستودعها ، فمن المفارقات أن العديد من الميزات المتقدمة تجعل Guix مدير الحزمة المثالي لبرامج الملكية.
بعض الفوائد:
- تسمح لك
guix environment
بتشغيل أي تطبيق في حاوية معزولة تقيد الوصول إلى الشبكة ، وتخفي نظام الملفات (لا يوجد خطر من أن يسرق برنامج الملكية بعض ملفاتك ، على سبيل المثال ، محفظة bitcoin أو مفاتيح PGP) وحتى المعلومات على مستوى النظام مثل كاسم مستخدم. يعد ذلك ضروريًا لتشغيل أي برنامج مصدر مغلق غير موثوق.
- إدارة الحزم الوظيفية: عادةً لا تصمد برامج المصادر المغلقة في اختبار الوقت وتوقف عندما تغير تبعية المكتبة واجهة برمجة التطبيقات. نظرًا لأن Guix يحدد الحزم الموجودة على أعلى أي إصدار من أي تبعية (بدون تعارض مع النظام الحالي) ، فإن Guix يتيح لك إنشاء حزم للألعاب مع شفرة المصدر مغلقة والتي ستعمل إلى الأبد.
- بيئة قابلة للإنتاج: عادةً ما يتم نقل البرامج ذات المصدر المفتوح بشكل سيئ وقد تتصرف بشكل مختلف على الأنظمة ذات التبعيات المختلفة قليلاً. تشير خاصية استنساخ Guix إلى أنه إذا نجحنا في عمل حزمة Guix مرة واحدة ، فستعمل دائمًا (باستثناء انهيار الأجهزة أو تغيير تكوين الأجهزة).
لهذه الأسباب ، تعتبر Guix أداة مثالية لتعبئة وتوزيع الألعاب المغلقة المصدر.
ومع ذلك ، هذا موضوع كبير منفصل ، من الأفضل تركه لمقال آخر.
نصائح والخدع
Emacs-guix
تتمثل إحدى ميزات Guix المذهلة في
واجهة Emacs-Guix ، التي تتيح لك تثبيت الحزم وإزالتها ، والتحديث بشكل انتقائي ، والبحث ، والانتقال إلى تعريف الحزمة ، وإدارة الأجيال ، وطباعة "الاختلافات" بينها ، وغير ذلك الكثير.
لديها وسائط تطوير للتجميع والبرمجة ، وكذلك بيئة تفاعلية خاصة تسمى Scheme
REPL . هذه واجهة مستخدم فريدة لنظام التشغيل.
هناك أيضًا واجهة
Helm System Packages ، والتي تتداخل جزئيًا مع Emacs-Guix ، لكن يبدو لي أكثر متعة لعمليات البحث السريعة عن الحزمة والعمليات السريعة.
تخزين البيانات
نظرًا لأن Guix يخزن عدة أجيال من تكوينات النظام (بما في ذلك تاريخ الحزم بالكامل) ، فإنه يتطلب مساحة قرص أكبر من أنظمة التشغيل الأخرى.
في تجربتي ، في عام 2018 ، كان يجب تنظيف قسم 25 غيغابايت تقريبًا مرة واحدة في الشهر (مع الأخذ في الاعتبار أن لدي طلبات كبيرة حول عدد الحزم) ، ويمكن ترك قسم 50 غيغابايت دون مراقبة لمدة عام كامل.من الملائم استخدام الأمر لتنظيف وحدة التخزين guix gc
، ولكنه يمكن أن يزيل "الكثير من الحزم" ، أي الحزم التي ستكون مطلوبة على الفور أثناء التحديث التالي.يحتوي Emacs-Guix على أمر mx guix-store-dead-item
يفرز الحزم الميتة حسب الحجم ويسمح لك بحذفها بشكل فردي.إذا كنت بحاجة إلى تحليل التبعيات ، انظر إلى guix gc --references
و guix gc --requisites
. يمكن دمج هذا مع الإخراج guix build ...
لرؤية العناصر المختلفة للرسم البياني التبعية.على سبيل المثال ، لعرض رمز أحد البرامج النصية للبناء ، افتح الملف الذي تم إرجاعه بواسطة الأمر التالي: $ guix gc --references $(guix build -d coreutils) | grep builder /gnu/store/v02xky6f5rvjywd7ficzi5pyibbmk6cq-coreutils-8.29-guile-builder
جيل واضح
من المفيد غالبًا إنشاء بيان بكل الحزم المثبتة في ملف تعريف.يمكن القيام بذلك باستخدام البرنامج النصي Guile التالي: (use-modules (guix profiles) (ice-9 match) (ice-9 pretty-print)) (match (command-line) ((_ where) (pretty-print `(specifications->manifest ',(map manifest-entry-name (manifest-entries (profile-manifest where)))))) (_ (error "Please provide the path to a Guix profile.")))
على سبيل المثال ، قم بتشغيله على ملف التعريف الخاص بك ~/.guix-profile
: $ guile -s manifest-to-manifest.scm ~/.guix-profile
تتبع ملفات dotfiles الخاصة بي تاريخ الحزم المثبتة. منذ أن احتفظت أيضًا بإصدار Guix ، يمكنني العودة إلى حالة نظامي بالضبط في أي وقت في الماضي.المراجع
بعض واجهات الويب:المستندات:حزم غير رسمية: