منتشر شده گزارش توسعه پروژه FreeBSD از جولای تا سپتامبر 2019. از جمله تغییرات می توان به موارد زیر اشاره کرد:
مسائل کلی و سیستمی
تیم Core به طور کلی امکان گنجاندن کد در سیستمی را که تحت مجوز BSD با یک توافق نامه ثبت اختراع اضافی توزیع می شود تأیید کرده است.BSD + پتنت) ، اما تصمیم برای گنجاندن هر جزء در سیستم تحت این مجوز باید به طور جداگانه تصویب شود.
اولین جلسه کارگروه ایجاد شده برای انتقال کدهای منبع از سیستم کنترل منبع متمرکز Subversion به سیستم غیرمتمرکز Git برگزار شد. بحث در مورد امکانسنجی مهاجرت هنوز ادامه دارد و تصمیمگیری در مورد بسیاری از مسائل هنوز اتخاذ نشده است (به عنوان مثال، چه باید کرد با مشارکت متعهد می شود)؛
از NetBSD منتقل شده است کیت ابزار KCSAN (Kernel Concurrency Sanitizer) که به شما امکان می دهد شرایط مسابقه بین رشته های هسته در حال اجرا بر روی CPU های مختلف را شناسایی کنید.
کار برای استفاده از اسمبلر داخلی Clang (IAS) به جای اسمبلر GNU binutils در حال انجام است.
زیرساخت شبیه سازی محیط لینوکس (Linuxulator) برای کار بر روی معماری ARM64 سازگار شده است. فراخوانی سیستم "renameat2" را اجرا کرد. ابزار strace برای تشخیص مشکلات موجود در فایل های اجرایی لینوکس که در Linuxulator اجرا می شوند، بهبود یافته است. مشکل خرابی هنگام پیوند فایل های اجرایی با glibc تازه حل شده است. پورتهای دارای اجزای لینوکس برای Linuxulator به CentOS 7.7 بهروزرسانی شدهاند.
به عنوان بخشی از برنامه Google Summer of Code، دانشآموزان شش پروژه را با موفقیت به پایان رساندند: اجرای یک ابزار پینگ یکپارچه (IPv4/IPv6) آماده شد، ابزارهایی برای آزمایش فایروالها و شناسایی خطاها در هسته (عفونیکننده هسته) توسعه یافتند، mac_ipacl ماژول پیشنهاد شد، کد برای فشرده سازی حافظه مجازی نوشته شد و کار برای جدا کردن فرآیند ساخت پورت از نصب محلی انجام شد.
پروژه آزمایش فازی هسته FreeBSD با استفاده از سیستم همچنان در حال توسعه است syzkaller. در طول دوره گزارش، بیش از ده خطا با استفاده از syzkaller شناسایی و حذف شد. برای اجرای syzkaller در ماشین های مجازی مبتنی بر bhyve، سرور جداگانه ای اختصاص داده شده است و از آن استفاده می شود
syzbot تست زیرسیستم های فری بی اس دی مختلف را در زیرساخت گوگل ایجاد کرده است. سازماندهی انتقال اطلاعات مربوط به تمام خرابی ها به سرویس backtrace.io برای ساده سازی گروه بندی و تجزیه و تحلیل آنها.
کار برای به روز رسانی اجرای zlib در سطح هسته در حال انجام است.
کدهای مرتبط با فشرده سازی از zlib 1.0.4 که بیش از 20 سال پیش منتشر شد، به پایگاه کد zlib 1.2.11 فعلی منتقل شده است. برای یکسان سازی دسترسی به zlib، توابع فشرده سازی، compress2 و uncompress به هسته اضافه شده است. کدی که عملکرد پروتکل PPP را از زیرسیستم نتگراف تضمین میکند، به جای نسخه خود این کتابخانه، برای استفاده از پیادهسازی سیستم zlib منتقل شده است. زیرسیستم های kern_ctf.c، opencryptodeflate، geom_uzip، subr_compressor، نیز به zlib جدید منتقل شده اند.
if_mxge، bxe به روز شد و ng_deflate.
یک رابط هسته جدید در حال توسعه است sysctlinfo، که به شما امکان می دهد عناصری را در پایگاه داده پارامتر sysctl، پردازش شده در قالب MIB (Management Information Base) پیدا کنید و اطلاعات مربوط به اشیاء را به فضای کاربر منتقل کنید.
امنیت
ماژول هسته توسعه یافته است mac_ipacl، بر اساس TrustedBSD MAC Framework و پیاده سازی یک سیستم کنترل دسترسی برای تنظیمات پشته شبکه برای محیط های زندان. به عنوان مثال، با استفاده از mac_ipacl، یک مدیر سیستم میزبان می تواند از تغییر یا تنظیم آدرس های IP یا تنظیمات زیرشبکه برای واسط های شبکه خاص توسط کاربر ریشه در یک محیط زندان جلوگیری کند. سیستم کنترل دسترسی اجباری پیشنهادی اجازه می دهد تا فهرستی از آدرسهای IP و زیرشبکههای مجاز برای Jail را تنظیم کنید، نصب IP و زیرشبکههای خاص را در Jail ممنوع کنید، یا تغییر پارامترها را فقط برای واسطهای شبکه خاص محدود کنید.
اینتل یک پورت پشته نرم افزاری را به پروژه اهدا کرد TPM 2.0 (Trusted Platform Module) برای رابط با تراشه محاسباتی امن، که معمولاً برای بارگذاری تأیید شده سیستم عامل و بوت لودر سیستم عامل استفاده می شود. اجزای پشته در قالب ports security/tpm2-tss، security/tpm2-tools و security/tpm2-abrmd ارائه شده اند. پورت tpm2-tss شامل کتابخانههایی برای استفاده از TPM2 API است، tpm2-tools ابزارهای خط فرمان را برای انجام عملیات TPM ارائه میکند و tpm2-abrmd شامل اجرای فرآیند پسزمینه مولفههای TPM Access Broker و Resource Manager است که درخواستهای کاربران مختلف TPM را چندگانه میکند. به یک دستگاه . علاوه بر بوت تایید شده در FreeBSD، TPM می تواند برای افزایش امنیت IPsec، SSH و TLS Strongswan با انجام عملیات رمزنگاری بر روی یک تراشه جداگانه استفاده شود.
هسته معماری amd64 برای بوت شدن با استفاده از تکنیک حفاظتی W^X (نوشتن XOR execute) تطبیق داده شده است، به این معنی که صفحات حافظه نمی توانند به طور همزمان برای نوشتن و اجرا دسترسی داشته باشند (اکنون هسته را می توان با استفاده از صفحات حافظه اجرایی که برای نوشتن آنها بارگذاری کرد. ممنوع است). روش جدید حفاظت از هسته در شاخه HEAD گنجانده شده است و در نسخه های 13.0 و 12.2 FreeBSD گنجانده شده است.
برای تماس های سیستم mmap و mprotect اجرا شد ماکرو PROT_MAX()، که به شما امکان می دهد مجموعه ای از پرچم های محدودیت دسترسی مجاز برای تغییرات بیشتر را تعیین کنید (PROT_READ، PROT_WRITE، PROT_EXEC). با استفاده از PROT_MAX()، یک توسعهدهنده میتواند انتقال یک منطقه حافظه را به دسته اجرایی ممنوع کند یا از حافظهای درخواست کند که اجازه اجرا را نمیدهد، اما بعداً میتواند به اجرایی تبدیل شود. به عنوان مثال، یک ناحیه از حافظه ممکن است فقط برای مدت زمان پیوند پویا یا تولید کد JIT برای نوشتن باز باشد، اما پس از تکمیل نوشتن، فقط به خواندن و اجرا محدود می شود و در آینده، در صورت به خطر افتادن، مهاجم محدود می شود. قادر به فعال کردن نوشتن برای آن بلوک حافظه نخواهد بود. علاوه بر PROT_MAX()، sysctl vm.imply_prot_max نیز پیاده سازی شده است که با فعال شدن، مجموعه ای از پرچم های معتبر را بر اساس پارامترهای اولیه اولین فراخوانی به mmap تعیین می کند.
برای افزایش حفاظت در برابر سوء استفاده از آسیبپذیریها، علاوه بر تکنیک تصادفیسازی فضای آدرس (ASLR)، مکانیزمی برای تصادفیسازی جابهجاییهای نشانگرهایی که قاب پشته اولیه و ساختارهای قرار داده شده روی پشته را با اطلاعاتی در مورد محیط، پارامترهای راهاندازی برنامه و دادهها نشان میدهند. برای تصاویر اجرایی با فرمت ELF پیشنهاد شده است.
کار برای حذف عملکرد gets ناامن از libc (با شروع از استاندارد C11، این تابع از مشخصات حذف شده است) و اصلاح پورت هایی که هنوز از این عملکرد استفاده می کنند، انجام شده است. این تغییر قرار است در FreeBSD 13.0 ارائه شود.
یک پروژه آزمایشی برای ایجاد ابزارهایی برای سازماندهی محیط های زندان بر اساس چارچوب راه اندازی شده است گلدان برای ایجاد و صادرات تصاویر، پیاده سازی شده مشابه Docker، و یک درایور عروسک، که یک رابط برای راه اندازی پویا برنامه ها در یک محیط زندان فراهم می کند. مدل پیشنهادی به ما اجازه میدهد تا فرآیندهای ایجاد محیطهای زندان و استقرار برنامههای کاربردی را در آنها جدا کنیم. یکی از اهداف این پروژه ارائه ابزاری برای دستکاری زندان ها به عنوان کانتینرهای سبک Docker است.
سیستم های ذخیره سازی و فایل
از NetBSD تا ابزار "makefs". نقل مکان کرد پشتیبانی از سیستم فایل FAT (msdosfs). تغییرات آماده شده به شما امکان می دهد تصاویر FS را با FAT بدون استفاده از درایور md و بدون مجوز ریشه ایجاد کنید.
کار مجدد درایور زیرسیستم FUSE (سیستم فایل در USERspace) کامل شده است و امکان ایجاد پیاده سازی سیستم فایل در فضای کاربر را فراهم می کند. درایوری که در ابتدا ارسال شد حاوی اشکالات زیادی بود و بر اساس FUSE 7.8 بود که 11 سال پیش منتشر شد. به عنوان بخشی از پروژه نوسازی درایور، پشتیبانی از پروتکل FUSE 7.23 پیاده سازی شده است، کد بررسی حقوق دسترسی در سمت هسته ("-o default_permissions") اضافه شده است، تماس ها به VOP_MKNOD، VOP_BMAP و VOP_ADVLOCK اضافه شده است، امکان قطع کردن عملیات FUSE فراهم شده است، پشتیبانی از لوله های بدون نام و سوکت های یونیکس در فیوزها اضافه شده است، امکان استفاده از kqueue برای /dev/fuse فراهم شده است، امکان به روز رسانی پارامترهای mount از طریق "mount -u" وجود دارد، پشتیبانی اضافه شده است. برای صادرات فیوز از طریق NFS، حسابداری RLIMIT_FSIZE را پیاده سازی کرد، پرچم های FOPEN_KEEP_CACHE و FUSE_ASYNC_READ را اضافه کرد، بهینه سازی عملکرد قابل توجهی انجام داد و سازماندهی کش را بهبود بخشید. درایور جدید در شاخه های head و stable/12 (شامل در FreeBSD 12.1) گنجانده شده است.
پیاده سازی NFSv4.2 (RFC-7862) برای FreeBSD تقریباً تکمیل شده است. تمرکز اصلی در طول دوره گزارش بر روی آزمایش بود. تستها برای بررسی سازگاری با پیادهسازی لینوکس تکمیل شدهاند، اما آزمایش سرور pNFS با NFSv4.2 همچنان ادامه دارد. به طور کلی، کد از قبل آماده برای ادغام در شاخه های اصلی/جاری FreeBSD در نظر گرفته می شود. نسخه جدید NFS پشتیبانی از توابع posix_fadvise، posix_fallocate، حالتهای SEEKHOLE/SEEKDATA در lseek، عملیات کپی محلی بخشهایی از یک فایل در سرور (بدون انتقال به مشتری) را اضافه میکند.
پشتیبانی سخت افزاری
پروژه ای برای بهبود عملکرد FreeBSD در لپ تاپ ها راه اندازی شده است. اولین دستگاهی که برای پشتیبانی سخت افزاری در FreeBSD ممیزی شد، لپ تاپ لنوو X1 Carbon نسل هفتم بود.
CheriBSD، فورک FreeBSD برای معماری پردازنده های تحقیقاتی چری (Capability Hardware Enhanced RISC Instructions)، برای پشتیبانی از پردازنده آینده 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، x500 و Amiga A1222 پشتیبانی میکند. شاخه powerpc*/12 همچنان با gcc 4.2.1 عرضه می شود و شاخه powerpc*/13 به زودی به llvm90 منتقل می شود. از 33306 پورت، 30514 پورت با موفقیت مونتاژ شدند.
انتقال FreeBSD برای SoC 64 بیتی NXP LS1046A مبتنی بر پردازنده 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 استفاده می کنند به جای فراخوانی bsd.xorg.mk از طریق bsd.port.mk به چارچوب USES منتقل شده اند. چنین پورتهایی اکنون پرچم "USES=xorg" را در فایلهای ساخت خود دارند. عملکرد XORG_CAT از bsd.xorg.mk جدا شده است و اکنون با پرچم "USES=xorg-cat" فعال می شود. ابزارهایی برای تولید مستقیم پورت های xorg از یک مخزن git اضافه شده است
freedesktop.org که به عنوان مثال به شما امکان می دهد برای نسخه هایی که هنوز منتشر نشده اند پورت ایجاد کنید. در آینده قصد داریم ابزارهایی را برای استفاده از سیستم مونتاژ مزون به جای ابزارهای خودکار برای ساخت پورت های xorg آماده کنیم.
کار برای تمیز کردن پورتهای قدیمی xorg که به اجزایی که دیگر پشتیبانی نمیشوند، انجام شده است، به عنوان مثال، پورت x11/libXp حذف شده است و پورتهای x11/Xxf86misc، x11-fonts/libXfontcache و گرافیک/libGLw منسوخ شدهاند. ;
کار برای بهبود پشتیبانی از جاوا 11 و نسخه های جدیدتر در FreeBSD و همچنین انتقال برخی تغییرات به شعبه جاوا 8 انجام شده است. پس از پشتیبانی از ویژگی های جدید جاوا 11 مانند Java Flight Recorder، HotSpot Serviceability Agent، HotSpot Debugger پیاده سازی شد. برای FreeBSD، DTrace، Javac Server، Java Sound و SCTP، کار به سمت اطمینان از گذراندن تمام تستهای سازگاری تغییر کرد. تعداد شکست در هنگام قبولی در آزمون ها از 50 به 2 کاهش یافته است.
دسکتاپ KDE Plasma، KDE Frameworks، KDE Applications و Qt به روز نگه داشته می شوند و به آخرین نسخه ها به روز می شوند.
پورتهای دارای دسکتاپ Xfce برای انتشار بهروزرسانی شدند 4.14;
درخت پورت های FreeBSD از 38000 پورت فراتر رفته است، تعداد PR های بسته نشده اندکی بیشتر از 2000 است که 400 PR هنوز حل نشده است. در طول دوره گزارش، 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, در حال توسعه یک توزیع تخصصی برای استقرار زیرساخت سرور مجازی. از نظر وظایفی که حل می کند، ClonOS شبیه سیستم هایی مانند Proxmox، Triton (Joyent)، OpenStack، OpenNebula و Amazon AWS است که تفاوت اصلی آن ها استفاده از FreeBSD و توانایی مدیریت، استقرار و مدیریت کانتینرهای FreeBSD Jail و محیط های مجازی مبتنی بر هایپروایزر Bhyve و Xen. تغییرات اخیر شامل پشتیبانی است
cloud-init برای Linux/BSD VM و cloudbase-init برای Windows VM، شروع انتقال به استفاده از تصاویر بومی، استفاده از Jenkins CI برای آزمایش ساختها و یک مخزن جدید pkg برای نصب
ClonOS از بسته ها.