گزارش توسعه FreeBSD برای سه ماهه اول سال 2020

منتشر شده گزارش توسعه پروژه FreeBSD از ژانویه تا مارس 2020. از جمله تغییرات می توان به موارد زیر اشاره کرد:

  • مسائل کلی و سیستمی
    • مجموعه کامپایلر GCC را از درخت منبع FreeBSD-CURRENT، و همچنین ابزارهای استفاده نشده gperf، gcov و gtc (کامپایلر درخت دستگاه) حذف کرد. تمام پلتفرم هایی که از Clang پشتیبانی نمی کنند به استفاده از ابزارهای ساخت خارجی نصب شده از پورت ها تغییر داده شده اند. سیستم پایه نسخه قدیمی GCC 4.2.1 را ارسال کرد و ادغام نسخه های جدیدتر به دلیل انتقال 4.2.2 به مجوز GPLv3 که برای مؤلفه های پایه FreeBSD نامناسب در نظر گرفته شد امکان پذیر نبود. نسخه‌های فعلی GCC، از جمله GCC 9، همچنان می‌توانند از بسته‌ها و پورت‌ها نصب شوند.
    • زیرساخت شبیه‌سازی محیط لینوکس (Linuxulator) پشتیبانی از تماس سیستم sendfile، حالت TCP_CORK (الزامی برای nginx) و پرچم MAP_32BIT (مشکل راه‌اندازی بسته‌ها با Mono از اوبونتو بایونیک را حل می‌کند) اضافه کرده است. مشکلات رزولوشن DNS هنگام استفاده از glibc جدیدتر از 2.30 (به عنوان مثال از CentOS 8) حل شده است.
      زیرساخت ادغام پیوسته امکان اجرای کارهای LTP (پروژه تست لینوکس) را در حال اجرا Linuxulator برای آزمایش بهبودهای ایجاد شده در کد برای پشتیبانی از لینوکس فراهم می کند. حدود 400 تست با شکست مواجه می شوند و نیاز به تعمیر دارند (برخی از خطاها به دلیل مثبت کاذب ایجاد می شوند، برخی نیاز به اصلاحات بی اهمیت دارند، اما برخی دیگر وجود دارند که برای رفع آنها نیاز به اضافه کردن پشتیبانی برای تماس های سیستمی جدید دارند). کار برای پاکسازی کد Linuxulator و ساده‌سازی اشکال‌زدایی انجام شده است. پچ هایی با پشتیبانی از ویژگی های توسعه یافته و فراخوانی سیستم fexecve آماده شده اند، اما هنوز بررسی نشده اند.

    • جلسات کارگروه ایجاد شده برای انجام انتقال کدهای منبع از سیستم کنترل منبع متمرکز Subversion به سیستم غیرمتمرکز Git ادامه دارد. گزارشی با پیشنهادات مهاجرت در حال آماده سازی است.
    • В rtld (پیوند زمان اجرا) حالت اجرای مستقیم را بهبود بخشید ("/libexec/ld-elf.so.1 {path} {arguments}").
    • پروژه آزمایش فازی هسته FreeBSD با استفاده از سیستم syzkaller همچنان در حال توسعه است. در طول دوره گزارش، مشکلات موجود در پشته شبکه و کد کار با جداول توصیفگر فایل شناسایی شده با استفاده از syzkaller حذف شد. پس از تشخیص خطا، تغییراتی به پشته SCTP اضافه شده است تا اشکال زدایی آسانتر شود. برای شناسایی رگرسیون های احتمالی، قوانینی به مجموعه استرس 2 اضافه شده است. پشتیبانی برای تست فازی فراخوانی های سیستمی جدید، از جمله copy_file_range()، __realpathat() و فراخوانی های زیرسیستم Capsicum اضافه شده است. کار برای پوشش دادن لایه شبیه سازی لینوکس با تست فاز ادامه دارد. ما خطاهای ذکر شده در آخرین گزارش‌های Coverity Scan را تجزیه و تحلیل و حذف کردیم.
    • سیستم یکپارچه سازی پیوسته به اجرای تمام آزمایشات شاخه سر تنها با استفاده از clang/lld تغییر وضعیت داده است. هنگام آزمایش برای RISC-V، تشکیل یک تصویر دیسک کامل برای اجرای آزمایش‌ها در QEMU با استفاده از OpenSBI تضمین می‌شود. وظایف جدید برای آزمایش تصاویر و ماشین های مجازی powerpc64 اضافه شده است (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • کار برای انتقال مجموعه آزمایشی Kyua از پورت‌ها (devel/kyua) به سیستم پایه برای حل مشکلات (بسته‌ها بسیار آهسته نصب می‌شوند) در حال انجام است که هنگام استفاده از Kyua در معماری‌های جدید که توسعه آن با استفاده از یک شبیه‌ساز یا انجام می‌شود. FPGA. ادغام در سیستم پایه به طور قابل توجهی آزمایش پلت فرم های تعبیه شده و رابط با سیستم های یکپارچه سازی مداوم را ساده می کند.
    • پروژه ای برای بهینه سازی عملکرد درایور پل شبکه راه اندازی شده است if_bridge، که از یک mutex منفرد برای قفل کردن داده های داخلی استفاده می کند که امکان دستیابی به عملکرد مطلوب را در سیستم هایی با تعداد زیادی محیط زندان یا ماشین های مجازی متحد در یک شبکه نمی دهد. در این مرحله تست هایی به کد اضافه شده است تا از بروز رگرسیون در حین نوسازی کار با قفل جلوگیری شود. امکان استفاده از ConcurrencyKit برای موازی سازی کنترل کننده های انتقال داده (bridge_input()، bridge_output()، bridge_forward()، ...) در حال بررسی است.
    • یک فراخوانی جدید سیستم sigfastblock اضافه کرد تا به یک رشته اجازه دهد تا بلوکی از حافظه را برای کنترل کننده سیگنال سریع مشخص کند تا عملکرد کنترل کننده های استثنا را بهبود بخشد.
    • هسته پشتیبانی از دستورالعمل های اتمی LSE (Large System Extension) را که توسط سیستم های ARMv8.1 پشتیبانی می شود اضافه می کند. این دستورالعمل ها برای بهبود عملکرد هنگام اجرا بر روی بردهای Cavium ThunderX2 و AWS Graviton 2 مورد نیاز هستند. تغییرات اضافه شده پشتیبانی LSE را شناسایی کرده و به صورت پویا پیاده سازی اتمی را بر اساس آنها فعال می کند. در طول آزمایش، استفاده از LSE این امکان را فراهم کرد که زمان صرف شده پردازنده هنگام مونتاژ هسته را تا 15٪ کاهش دهد.
    • بهینه سازی عملکرد انجام شده است و عملکرد جعبه ابزار برای فایل های اجرایی در قالب ELF گسترش یافته است.
      پشتیبانی اضافه شده برای ذخیره اطلاعات اشکال زدایی DWARF، حل مشکلات در ابزارهای elfcopy/objcopy، اضافه شدن پردازش DW_AT_ranges،
      readelf توانایی رمزگشایی پرچم‌های PROTMAX_DISABLE، STKGAP_DISABLE و WXNEEDED و همچنین Xen و GNU Build-ID را پیاده‌سازی می‌کند.

  • امنیت
    • برای بهبود عملکرد FreeBSD در محیط های ابری Azure، کار برای ارائه پشتیبانی از مکانیزم سوکت HyperV در حال انجام است که امکان استفاده از یک رابط سوکت برای تعامل بین سیستم مهمان و محیط میزبان را بدون راه اندازی شبکه فراهم می کند.
    • کار برای ارائه ساخت‌های قابل تکرار FreeBSD در حال انجام است، که این امکان را فراهم می‌کند تا اطمینان حاصل شود که فایل‌های اجرایی اجزای سیستم دقیقاً از کدهای منبع اعلام شده کامپایل شده‌اند و حاوی تغییرات اضافی نیستند.
    • قابلیت کنترل گنجاندن مکانیسم‌های حفاظتی اضافی (ASLR، PROT_MAX، stack gap، W+X mapping) در سطح فرآیندهای فردی به ابزار elfctl اضافه شده است.
  • سیستم های ذخیره سازی و فایل
    • کار برای پیاده‌سازی توانایی NFS برای عملکرد روی یک کانال ارتباطی رمزگذاری‌شده مبتنی بر TLS 1.3، به جای استفاده از Kerberos (حالت sec=krb5p) در حال انجام است که فقط به رمزگذاری پیام‌های RPC محدود می‌شود و فقط در نرم‌افزار پیاده‌سازی می‌شود. پیاده سازی جدید از پشته TLS ارائه شده توسط هسته برای فعال کردن شتاب سخت افزاری استفاده می کند. کد NFS روی TLS تقریباً برای آزمایش آماده است، اما همچنان برای پشتیبانی از گواهی های مشتری امضا شده و تطبیق پشته TLS هسته برای ارسال داده های NFS (وصله های دریافت از قبل آماده هستند) به کار نیاز دارد.
  • پشتیبانی سخت افزاری
    • کار برای افزودن پشتیبانی از سی پی یو x86 چینی Hygon بر اساس فناوری های AMD در حال انجام است.
    • به عنوان بخشی از CheriBSD، یک شاخه FreeBSD برای معماری پردازنده های تحقیقاتی چری (Capability Hardware Enhanced RISC Instructions)، پشتیبانی از پردازنده ARM Morello همچنان اجرا می شود که از سیستم کنترل دسترسی حافظه CHERI بر اساس مدل امنیتی پروژه Capsicum پشتیبانی می کند. تراشه مورلو در حال برنامه ریزی هستند عرضه در سال 2021. در حال حاضر کار بر روی افزودن پشتیبانی برای پلتفرم Arm Neoverse N1 متمرکز شده است که به Morello قدرت می‌دهد. یک پورت اولیه CheriBSD برای معماری RISC-V ارائه شده است. توسعه CheriBSD برای نمونه اولیه مرجع CHERI بر اساس معماری MIPS64 ادامه دارد.
    • انتقال FreeBSD برای SoC 64 بیتی NXP LS1046A مبتنی بر پردازنده ARMv8 Cortex-A72 با موتور یکپارچه پردازش بسته شبکه، اترنت 10 گیگابایتی، PCIe 3.0، SATA 3.0 و USB 3.0 ادامه دارد. در حال حاضر، درایورهای QorIQ و LS1046A، GPIO، QorIQ LS10xx AHCI، VF610 I2C، Epson RX-8803 RTC، QorIQ LS10xx SDHCI برای انتقال به ترکیب اصلی FreeBSD آماده می شوند.
    • درایور ena با پشتیبانی از نسل دوم آداپتورهای شبکه ENAv2.1.1 (آداپتور شبکه الاستیک) که در زیرساخت Elastic Compute Cloud (EC2) برای سازماندهی ارتباط بین گره‌های EC2 با سرعت حداکثر 2 گیگابیت استفاده می‌شود، به نسخه 25 به‌روزرسانی شده است. س به روز رسانی ENA 2.2.0 در حال آماده سازی است.
    • بهبود درگاه FreeBSD برای پلتفرم powerpc64 ادامه دارد. تمرکز بر ارائه عملکرد با کیفیت در سیستم هایی با پردازنده های IBM POWER8 و POWER9 است. در طول دوره گزارش، FreeBSD-CURRENT برای استفاده از کامپایلر LLVM/Clang 10.0 و پیوند دهنده lld به جای GCC منتقل شد. به طور پیش فرض، سیستم های powerpc64 از ELFv2 ABI استفاده می کنند و پشتیبانی از ELFv1 ABI متوقف شده است. FreeBSD-STABLE هنوز gcc 4.2.1 دارد. مشکلات درایورهای virtio، aacraid و ixl حل شده است. در سیستم های powerpc64 می توان QEMU را بدون پشتیبانی Huge Pages اجرا کرد.
    • کار برای اجرای پشتیبانی از معماری RISC-V ادامه دارد. در شکل فعلی، FreeBSD در حال حاضر با موفقیت در برد SiFive Hifive Unleashed بوت می شود، که درایورهایی برای آن آماده شده است.
      UART، SPI و PRCI، از سیستم عامل OpenSBI و SBI 0.2 پشتیبانی می کند. در طول دوره گزارش، کار بر روی مهاجرت از GCC به clang و lld متمرکز بود.

  • برنامه ها و سیستم پورت
    • مجموعه پورت های FreeBSD از آستانه 39 هزار پورت عبور کرده است، تعداد PR های بسته نشده اندکی از 2400 فراتر می رود، که 640 PR هنوز مرتب نشده است. در طول دوره گزارش، 8146 تغییر از 173 توسعه دهنده انجام شد. چهار شرکت‌کننده جدید حقوق متعهد دریافت کردند (لوئیک بارتولتی، میکائیل اورانکار، کایل ایوانز، لورنزو سالوادور). پرچم USES=qca اضافه شد و پرچم USES=zope حذف شد (به دلیل ناسازگاری با پایتون 3). کار برای حذف Python 2.7 از درخت پورت ها در حال انجام است - همه پورت های مبتنی بر Python 2 باید به Python 3 پورت شوند یا حذف خواهند شد. مدیر بسته pkg به نسخه 1.13.2 به روز شده است.
    • اجزای پشته گرافیکی و پورت های مربوط به xorg به روز شده است.
      سرور X.org به نسخه 1.20.8 به روز شده است (قبلاً در شعبه 1.18 ارسال می شد) که به FreeBSD اجازه می داد به طور پیش فرض از backend udev/evdev برای مدیریت دستگاه های ورودی استفاده کند. بسته Mesa به طور پیش فرض برای استفاده از پسوند DRI3 به جای DRI2 تغییر یافته است. کار برای حفظ درایورهای گرافیک، پشته دستگاه ورودی و اجزای drm-kmod در حال انجام است (پورتی که عملکرد ماژول‌های amdgpu، i915 و radeon DRM را با استفاده از چارچوب linuxkpi برای سازگاری با مدیر رندر مستقیم هسته لینوکس امکان‌پذیر می‌سازد) به روز.

    • دسکتاپ KDE Plasma، KDE Frameworks، KDE Applications و Qt به روز نگه داشته می شوند و به آخرین نسخه ها به روز می شوند. اپلیکیشن جدید kstars (اطلس ستاره ای) به پورت ها اضافه شده است.
    • کارهایی برای حذف تغییرات قهقرایی در مدیر پنجره xfwm4 که پس از به‌روزرسانی Xfce به نسخه 4.14 ظاهر شد، انجام شده است (به عنوان مثال، مصنوعات هنگام تزئین پنجره ظاهر می‌شوند).
    • پورت Wine برای انتشار Wine 5.0 به روز شده است (قبلاً نسخه 4.0.3 ارائه شده بود).
    • با شروع نسخه 1.14، کامپایلر زبان Go پشتیبانی رسمی از معماری ARM64 را برای FreeBSD 12.0 اضافه کرد.
    • OpenSSH در سیستم پایه برای انتشار 7.9p1 به روز شده است.
    • کتابخانه sysctlmibinfo2 پیاده‌سازی شده و در پورت‌ها (devel/libsysctlmibinfo2) قرار داده شده است و یک API برای دسترسی به sysctl MIB و ترجمه نام‌های sysctl به شناسه‌های شی (OID) ارائه می‌کند.
    • یک به روز رسانی توزیع ایجاد شده است NomadBSD 1.3.1، که نسخه ای از FreeBSD است که برای استفاده به عنوان دسکتاپ قابل حمل قابل بوت شدن از درایو USB سازگار شده است. محیط گرافیکی مبتنی بر مدیر پنجره است Openbox. برای نصب درایوها استفاده می شود DSBMD (نصب CD9660، FAT، HFS+، NTFS، Ext2/3/4 پشتیبانی می شود)، برای پیکربندی یک شبکه بی سیم - wifimgrو برای کنترل صدا - DSBMixer.
    • آغاز شده کار در مورد نوشتن مستندات کامل برای مدیر محیط زندان گلدان. Pot 0.11.0 برای انتشار آماده می شود که شامل ابزارهایی برای مدیریت پشته شبکه می شود.

منبع: opennet.ru

اضافه کردن نظر