تقرير تطوير FreeBSD - الربع الثالث 2019

نشرت تقرير عن تطور مشروع FreeBSD من يوليو إلى سبتمبر 2019. ومن بين التغييرات يمكننا أن نلاحظ:

  • القضايا العامة والنظامية
    • وافق الفريق الأساسي بشكل عام على إمكانية تضمين التعليمات البرمجية في النظام التي يتم توزيعها بموجب ترخيص BSD مع اتفاقية براءة اختراع إضافية (بي إس دي + براءة اختراع)، ولكن يجب الموافقة على قرار تضمين كل مكون في النظام بموجب هذا الترخيص بشكل منفصل؛
    • تم عقد الاجتماع الأول لمجموعة العمل التي تم إنشاؤها لتنفيذ ترحيل أكواد المصدر من نظام التحكم المركزي في المصدر Subversion إلى النظام اللامركزي Git. لا تزال المناقشة حول جدوى الترحيل مستمرة ولم يتم بعد اتخاذ القرارات بشأن العديد من القضايا (على سبيل المثال، ما يجب فعله مع contrib/، وما إذا كان من الضروري إعادة إنشاء التجزئة في مستودع git الحالي وأفضل السبل لتنفيذ اختبار يرتكب)؛
    • من نت بي إس دي استدار مجموعة أدوات KCSAN (Kernel Concurrency Sanitizer)، والتي تسمح لك باكتشاف حالات السباق بين سلاسل عمليات kernel التي تعمل على وحدات معالجة مركزية مختلفة؛
    • يجري العمل حاليًا لاستخدام مجمع Clang المدمج (IAS) بدلاً من مجمع GNU binutils؛
    • تم تكييف البنية التحتية لمحاكاة بيئة Linux (Linuxulator) للعمل على بنية ARM64. تم تنفيذ استدعاء النظام "renameat2". تم تحسين الأداة المساعدة strace لتشخيص المشكلات في ملفات Linux التنفيذية التي تعمل في Linuxulator. تم حل مشكلة الأعطال عند ربط الملفات القابلة للتنفيذ بـ glibc الجديد. تم تحديث المنافذ التي تحتوي على مكونات Linux الخاصة بـ Linuxulator إلى CentOS 7.7؛
    • كجزء من برنامج Google Summer of Code، أكمل الطلاب بنجاح ستة مشاريع: تم إعداد تطبيق أداة ping موحدة (IPv4/IPv6)، وتم تطوير أدوات لاختبار جدران الحماية وتحديد الأخطاء في kernel (Kernel sanitizer)، وmac_ipacl تم اقتراح الوحدة النمطية، وتمت كتابة التعليمات البرمجية لضغط الذاكرة الظاهرية وتم إنجاز العمل لفصل عملية بناء المنفذ عن التثبيت المحلي؛
    • يستمر تطوير مشروع اختبار التشويش لنواة FreeBSD باستخدام النظام syzkaler. خلال الفترة المشمولة بالتقرير، تم تحديد أكثر من عشرة أخطاء وإزالتها باستخدام syzkaller. لتشغيل syzkaller في الأجهزة الافتراضية المستندة إلى bhyve، يتم تخصيص خادم منفصل واستخدامه
      أنشأ syzbot اختبارًا لمختلف أنظمة FreeBSD الفرعية في البنية التحتية لـ Google. تنظيم نقل المعلومات حول جميع الأعطال إلى خدمة backtrace.io لتبسيط تجميعها وتحليلها؛

    • يجري العمل حاليًا على تحديث تطبيق zlib على مستوى النواة.
      تم ترحيل التعليمات البرمجية المتعلقة بالضغط من zlib 1.0.4، الذي تم إصداره منذ أكثر من 20 عامًا، إلى قاعدة تعليمات zlib 1.2.11 الحالية. لتوحيد الوصول إلى zlib، تمت إضافة وظائف الضغط والضغط 2 وإلغاء الضغط إلى النواة. تم نقل الكود الذي يضمن تشغيل بروتوكول PPP من نظام netgraph الفرعي لاستخدام تطبيق نظام zlib، بدلاً من نسخته الخاصة من هذه المكتبة. تم أيضًا نقل الأنظمة الفرعية kern_ctf.c وopencryptodeflate وgeom_uzip وsubr_compressor إلى zlib الجديد.
      if_mxge، تم تحديث bxe و ng_deflate؛

    • يجري تطوير واجهة kernel جديدة com.sysctlinfo، والذي يسمح لك بالعثور على العناصر في قاعدة بيانات معلمات sysctl، ومعالجتها في شكل MIB (قاعدة معلومات الإدارة)، ونقل المعلومات حول الكائنات إلى مساحة المستخدم.
  • أمن
    • تم تطوير وحدة النواة mac_ipacl، استنادًا إلى TrustedBSD MAC Framework وتنفيذ نظام التحكم في الوصول لإعدادات مكدس الشبكة لبيئات السجن. على سبيل المثال، باستخدام mac_ipacl، يمكن لمسؤول النظام المضيف منع المستخدم الجذر في بيئة السجن من تغيير أو تعيين عناوين IP أو إعدادات الشبكة الفرعية لواجهات شبكة معينة. نظام التحكم في الوصول الإلزامي المقترح يسمح تعيين قوائم عناوين IP والشبكات الفرعية المسموح بها لـ Jail، أو حظر تثبيت عناوين IP وشبكات فرعية معينة في Jail، أو تقييد تغيير المعلمات فقط لواجهات شبكة معينة؛
    • تبرعت Intel بمنفذ مكدس البرامج للمشروع TPM 2.0 (وحدة النظام الأساسي الموثوق به) للتفاعل مع شريحة الحوسبة الآمنة، والتي تُستخدم عادةً للتحميل المؤكد للبرامج الثابتة ومحمل نظام التشغيل. يتم تقديم مكونات المكدس في شكل Ports Security/tpm2-tss، وsecurity/tpm2-tools، وsecurity/tpm2-abrmd. يتضمن منفذ tpm2-tss مكتبات لاستخدام واجهة برمجة التطبيقات TPM2، ويوفر tpm2-tools أدوات مساعدة لسطر الأوامر لتنفيذ عمليات TPM، ويحتوي tpm2-abrmd على تنفيذ عملية في الخلفية لمكونات TPM Access Broker وResource Manager التي تقوم بتعدد الطلبات من مستخدمي TPM المختلفين. لجهاز واحد . بالإضافة إلى التحقق من التشغيل على FreeBSD، يمكن استخدام TPM لتعزيز أمان Strongswan IPsec وSSH وTLS من خلال إجراء عمليات التشفير على شريحة منفصلة؛
    • تم تكييف نواة معمارية amd64 للتمهيد باستخدام تقنية الحماية W^X (تنفيذ XOR)، مما يعني أنه لا يمكن الوصول إلى صفحات الذاكرة في وقت واحد للكتابة والتنفيذ (يمكن الآن تحميل النواة باستخدام صفحات الذاكرة القابلة للتنفيذ التي يتم الكتابة لها يحظر). تم تضمين طريقة حماية النواة الجديدة في فرع HEAD وسيتم تضمينها في إصدارات FreeBSD 13.0 و12.2؛
    • بالنسبة لمكالمات نظام mmap وmprotect مُنفّذ الماكرو PROT_MAX()، والذي يسمح لك بتحديد مجموعة علامات تقييد الوصول المسموح بها لمزيد من التغييرات (PROT_READ، PROT_WRITE، PROT_EXEC). باستخدام PROT_MAX()، يمكن للمطور حظر نقل منطقة الذاكرة إلى الفئة القابلة للتنفيذ أو طلب ذاكرة لا تسمح بالتنفيذ، ولكن يمكن تحويلها لاحقًا إلى فئة قابلة للتنفيذ. على سبيل المثال، قد تكون منطقة من الذاكرة مفتوحة للكتابة فقط طوال مدة الارتباط الديناميكي أو إنشاء كود JIT، ولكن بمجرد اكتمال الكتابة، يتم تقييدها للقراءة والتنفيذ فقط، وفي المستقبل، إذا تم اختراقها، فإن المهاجم لن يكون قادرًا على تمكين الكتابة لكتلة الذاكرة هذه. بالإضافة إلى PROT_MAX()، يتم أيضًا تنفيذ sysctl vm.imply_prot_max، والذي عند تنشيطه، يحدد مجموعة العلامات الصالحة بناءً على المعلمات الأولية للاستدعاء الأول لـ mmap؛
    • لتعزيز الحماية من استغلال الثغرات الأمنية، بالإضافة إلى تقنية التوزيع العشوائي لمساحة العنوان (ASLR)، وهي آلية عشوائية لإزاحات المؤشرات التي تتناول إطار المكدس الأولي والهياكل الموضوعة على المكدس مع معلومات حول البيئة ومعلمات تشغيل البرنامج والبيانات بالنسبة للصور القابلة للتنفيذ بتنسيق ELF يقترح؛
    • لقد تم العمل على إزالة وظيفة غير آمنة من libc (بدءًا من معيار C11، تم استبعاد هذه الوظيفة من المواصفات) ولتصحيح المنافذ التي لا تزال تستخدم هذه الوظيفة. ومن المقرر أن يتم تقديم التغيير في FreeBSD 13.0؛
    • تم إطلاق مشروع تجريبي لإنشاء أدوات لتنسيق بيئات السجون بناءً على الإطار وعاء لإنشاء وتصدير الصور، يتم تنفيذه بشكل مشابه لـ Docker وبرنامج التشغيل بدوي، والذي يوفر واجهة لتشغيل التطبيقات ديناميكيًا في بيئة السجن. يسمح لنا النموذج المقترح بفصل عمليات إنشاء بيئات السجن ونشر التطبيقات فيها. أحد أهداف المشروع هو توفير وسيلة للتعامل مع السجون كحاويات على طراز Docker؛
  • أنظمة التخزين والملفات
    • من NetBSD إلى الأداة المساعدة "makefs". انتقل دعم نظام الملفات FAT (msdosfs). تتيح لك التغييرات المعدة إنشاء صور FS باستخدام FAT دون استخدام برنامج التشغيل md وبدون سلطة الجذر؛
    • تم الانتهاء من إعادة صياغة برنامج تشغيل النظام الفرعي FUSE (نظام الملفات في مساحة المستخدم)، مما يسمح بإنشاء تطبيقات نظام الملفات في مساحة المستخدم. يحتوي برنامج التشغيل الذي تم شحنه في الأصل على العديد من الأخطاء وكان يعتمد على FUSE 7.8، الذي تم إصداره منذ 11 عامًا. كجزء من مشروع تحديث برنامج التشغيل، تم تنفيذ دعم بروتوكول FUSE 7.23، وتمت إضافة رمز للتحقق من حقوق الوصول على جانب kernel ("-o default_permissions")، وتمت إضافة الاستدعاءات إلى VOP_MKNOD، وVOP_BMAP، وVOP_ADVLOCK، تم توفير القدرة على مقاطعة عمليات FUSE، وتمت إضافة دعم للأنابيب غير المسماة ومآخذ Unix في fusefs، وأصبح من الممكن استخدام kqueue لـ /dev/fuse، وكان من الممكن تحديث معلمات التحميل عبر "mount -u"، تمت إضافة الدعم لتصدير الصمامات عبر NFS، تم تطبيق محاسبة RLIMIT_FSIZE، وإضافة علامتي FOPEN_KEEP_CACHE وFUSE_ASYNC_READ، وإجراء تحسينات كبيرة في الأداء وتحسين تنظيم التخزين المؤقت. تم تضمين برنامج التشغيل الجديد في الرأس والمستقر/12 فرعًا (مضمن في FreeBSD 12.1)؛
    • تم الانتهاء تقريبًا من تنفيذ NFSv4.2 (RFC-7862) لـ FreeBSD. كان التركيز الرئيسي خلال الفترة المشمولة بالتقرير على الاختبار. تم الانتهاء من الاختبارات للتحقق من التوافق مع تطبيق Linux، ولكن اختبار خادم pNFS مع NFSv4.2 لا يزال مستمرًا. بشكل عام، يعتبر الكود جاهزًا للتكامل مع فروع FreeBSD الرئيسية/الحالية. يضيف الإصدار الجديد من NFS دعمًا لوظائف posix_fadvise، وposix_fallocate، وأوضاع SEEKHOLE/SEEKDATA في lseek، وتشغيل النسخ المحلي لأجزاء من الملف على الخادم (دون النقل إلى العميل)؛
  • دعم الأجهزة
    • تم إطلاق مشروع لتحسين أداء FreeBSD على أجهزة الكمبيوتر المحمولة. كان أول جهاز تم تدقيقه لدعم الأجهزة في FreeBSD هو الجيل السابع من الكمبيوتر المحمول Lenovo X1 Carbon؛
    • CheriBSD، وهو شوكة من FreeBSD لهندسة معالجات البحث شيري (تعليمات RISC المحسنة لأجهزة القدرة)، تم تحديثها لدعم معالج ARM Morello القادم، والذي سيدعم نظام التحكم في الوصول إلى الذاكرة CHERI استنادًا إلى نموذج أمان تصميم Capsicum. شريحة موريلو يخططون الافراج في عام 2021. يواصل مطورو CheriBSD أيضًا مراقبة تطوير النموذج الأولي المرجعي لـ CHERI استنادًا إلى بنية MIPS؛
    • دعم موسع لشرائح RockChip RK3399 المستخدمة في لوحات RockPro64 وNanoPC-T4. وكان التحسن الأكثر أهمية هو دعم eMMC وتطوير برنامج تشغيل جديد لوحدة تحكم eMMC المستخدمة على اللوحة؛
    • يستمر العمل في تنفيذ دعم ARM64 SoC Broadcom BCM5871X مع معالجات ARMv8 Cortex-A57، والتي تهدف إلى الاستخدام في أجهزة التوجيه والبوابات وتخزين الشبكة. خلال الفترة المشمولة بالتقرير
      تم توسيع دعم iProc PCIe وتمت إضافة القدرة على استخدام عمليات تشفير الأجهزة لتسريع IPsec.
      من المتوقع دمج الكود في فرع HEAD في الربع الرابع؛

    • لقد تم إحراز تقدم كبير في تطوير منفذ FreeBSD لمنصة powerpc64. ينصب التركيز على توفير أداء عالي الجودة على الأنظمة التي تحتوي على معالجات IBM POWER8 وPOWER9، ولكنه يدعم بشكل اختياري التشغيل على أجهزة Apple Power Mac القديمة وx500 وAmiga A1222. يستمر فرع powerpc*/12 في الشحن مع gcc 4.2.1، وسيتم ترحيل فرع powerpc*/13 إلى llvm90 قريبًا. من أصل 33306 منفذًا، تم تجميع 30514 منفذًا بنجاح؛
    • يستمر نقل FreeBSD لـ SoC NXP LS64A 1046 بت استنادًا إلى معالج ARMv8 Cortex-A72 مع محرك تسريع معالجة حزم الشبكة المتكامل و10 جيجابت إيثرنت وPCIe 3.0 وSATA 3.0 وUSB 3.0. خلال الفترة المشمولة بالتقرير، تم تقديم الدعم لواجهة الشبكة USB 3.0 وSD/MMC وI2C وDPAA وGPIO. هناك خطط لدعم QSPI وتحسين أداء واجهة الشبكة. ومن المتوقع الانتهاء من العمل والإدراج في فرع HEAD في الربع الرابع من عام 4؛
    • تم تحديث برنامج تشغيل ena لدعم الجيل الثاني من محولات شبكة ENAv2 (محول الشبكة المرنة) المستخدمة في البنية التحتية لـ Elastic Compute Cloud (EC2) لتنظيم الاتصال بين عقد EC2 بسرعات تصل إلى 25 جيجابت/ثانية. تمت إضافة دعم NETMAP واختباره إلى برنامج تشغيل ena، وتم تكييف تخطيط الذاكرة لتمكين وضع LLQ في بيئات Amazon EC2 A1؛
  • التطبيقات ونظام المنافذ
    • تحديث مكونات مكدس الرسومات والمنافذ ذات الصلة بـ xorg. تم نقل المنافذ التي تستخدم USE_XORG وXORG_CAT إلى إطار عمل USES بدلاً من استدعاء bsd.xorg.mk عبر bsd.port.mk. تتضمن هذه المنافذ الآن علامة "USES=xorg" في ملفات تعريفها. تم فصل وظيفة XORG_CAT عن bsd.xorg.mk وتم تمكينها الآن بواسطة العلامة "USES=xorg-cat". تمت إضافة أدوات لإنشاء منافذ xorg مباشرة من مستودع git
      freedesktop.org، والذي، على سبيل المثال، يسمح لك بإنشاء منافذ للإصدارات التي لم يتم إصدارها بعد. في المستقبل، نخطط لإعداد أدوات لاستخدام نظام تجميع الميزون بدلاً من الأدوات التلقائية لبناء منافذ xorg.

      تم العمل على تنظيف منافذ xorg القديمة المرتبطة بالمكونات التي لم تعد مدعومة، على سبيل المثال، تمت إزالة منفذ x11/libXp، وتم إهمال منافذ x11/Xxf86misc وx11-fonts/libXfontcache وgraphics/libGLw ;

    • تم العمل على تحسين دعم Java 11 والإصدارات الأحدث في FreeBSD، بالإضافة إلى نقل بعض التغييرات إلى فرع Java 8. بعد دعم ميزات Java 11 الجديدة مثل Java Flight Recorder، وHotSpot Serviceability Agent، تم تنفيذ HotSpot Debugger بالنسبة لـ FreeBSD وDTrace وJavac Server وJava Sound وSCTP، تحول العمل إلى ضمان اجتياز جميع اختبارات التوافق. تم تقليل عدد حالات الفشل عند اجتياز الاختبارات من 50 إلى 2؛
    • يتم تحديث سطح مكتب KDE Plasma وإطارات عمل KDE وتطبيقات KDE وQt وتحديثها إلى أحدث الإصدارات؛
    • تم تحديث المنافذ المزودة بسطح مكتب Xfce للإصدار 4.14;
    • لقد تجاوزت شجرة منافذ FreeBSD 38000 منفذ، وعدد المنافذ غير المغلقة يزيد قليلاً عن 2000، منها 400 منفذ لم يتم حلها بعد. خلال الفترة المشمولة بالتقرير، تم إجراء 7340 تغييرًا من 169 مطورًا. حصل اثنان من المشاركين الجدد (سانثوش راجو وديمتري جوتنيك) على حقوق الالتزام. تم نشر إصدار جديد من مدير الحزم pkg 1.12، مع دعم التراكبات في شجرة المنافذ وتنظيف bsd.sites.mk. من بين تحديثات الإصدارات الهامة في المنافذ: Lazarus 2.0.4، LLVM 9.0، Perl5.30، PostgreSQL 11، Ruby 2.6، Firefox 69.0.1، Firefox-esr 68.1.0، Chromium 76.0؛
    • يستمر تطوير المشروع كلون أو إس, النامية توزيعة متخصصة لنشر البنية التحتية للخادم الظاهري. من حيث المهام التي يحلها، يشبه ClonOS أنظمة مثل Proxmox وTriton (Joyent) وOpenStack وOpenNebula وAmazon AWS، والفرق الرئيسي بينها هو استخدام FreeBSD والقدرة على إدارة ونشر وإدارة حاويات FreeBSD Jail و البيئات الافتراضية المبنية على برامج Hypervisor من Bhyve وXen. التغييرات الأخيرة تشمل الدعم
      cloud-init لـ Linux/BSD VM وcloudbase-init لـ Windows VM، بدء الانتقال إلى استخدام الصور الأصلية، باستخدام Jenkins CI للاختبارات ومستودع pkg الجديد للتثبيت
      ClonOS من الحزم.

المصدر: opennet.ru

إضافة تعليق