چگونه هسته لینوکس بررسی کدها را فراتر از یک مرجع واحد گسترش میدهد
هسته لینوکس برای پردازش هزاران تغییر کد در هر نسخه، به یک سلسلهمراتب دقیق و عمیقاً لایهبندیشده از نگهدارندههای زیرسیستمها متکی است. این مدل اعتماد توزیعشده، از ایجاد گلوگاه در بررسی کدها جلوگیری میکند و به بزرگترین پروژه متنباز جهان اجازه میدهد تا بدون نیاز به نظارت متمرکز، مقیاسپذیر باشد.
به قلم نیما موسوی
این خبر را به اشتراک بگذارید
بهطور خلاصه
- هسته لینوکس در هر چرخه انتشار حدود ۱۵٬۰۰۰ کامیت را ادغام میکند و به جای یک بررسیکننده واحد، به شبکهای توزیعشده از نگهدارندهها متکی است.
- نگهدارندههای زیرسیستمها بهعنوان دروازهبانانی مستقل عمل کرده و کدها را برای درایورها و معماریهای خاص بررسی و فیلتر میکنند.
- بیش از ۸۰ درصد از کدهای هسته در درایورهای جانبی قرار دارد که معماری اصلی را از بالاترین حجم بهروزرسانیها ایزوله میکند.
توسعهدهندهای که امروز وصلهای (patch) را برای هسته لینوکس ارسال میکند، منتظر نمیماند تا لینوس توروالدز کد او را بخواند. در عوض، کدهای ارسالی او وارد یک سلسلهمراتب بررسی عمیقاً لایهبندیشده میشود؛ جایی که نگهدارندههای متخصص بهعنوان دروازهبانانی مستقل برای درایورها، سیستمهای فایل و معماریهای خاص عمل میکنند. همین مدل توزیعشده از اختیارات است که به این پروژه متنباز اجازه میدهد تا در هر چرخه توسعه، هزاران کامیت (commit) را بدون فروپاشی زیر بار سنگین خودش، هضم کند.[1][7]
مقیاس این عملیات، چنین تفویض اختیاری را ضروری میسازد. در طول یک چرخه انتشار استاندارد نُه تا دههفتهای، هسته لینوکس تقریباً ۱۵٬۰۰۰ کامیت مجزا را ادغام میکند. این رقم معادل ادغام روزانه بین ۳۰۰ تا ۴۰۰ وصله نرمافزاری است. اگر یک مرجع مرکزی واحد بخواهد هر خط از این کدها را بررسی کند، پروژه بلافاصله متوقف خواهد شد.[4]
برای مدیریت این حجم از کار، هسته لینوکس به مدل «نگهدارنده زیرسیستم» متکی است. این معماری به صدها بخش مجزا تقسیم شده است؛ از مدیریت حافظه اصلی گرفته تا درایورهای بسیار تخصصی رابط شبکه. هر یک از این بخشها توسط یک یا چند نگهدارنده که تخصص عمیقی در آن حوزه دارند، نظارت میشود.[7]
وقتی یک مشارکتکننده وصلهای مینویسد، آن را به رأس هرم نمیفرستد. بلکه آن را به لیست پستی مخصوص همان زیرسیستم ارسال میکند. نگهدارنده درایور، کد را بررسی کرده، درخواست اصلاحات میدهد و در نهایت آن را در درخت مخزن شخصی خود میپذیرد.[1][7]
این روند، یک زنجیره اعتماد رمزنگاریشده ایجاد میکند. زمانی که یک نگهدارنده زیرسیستم از یک مجموعه وصله رضایت پیدا کند، یک درخواست واکشی (pull request) برای نگهدارنده سطح بالاتر میفرستد. نگهدارنده سطح بالاتر معمولاً دوباره تکتک خطوط کد را بررسی نمیکند؛ بلکه خلاصه تغییرات را مرور کرده و به اعتماد تثبیتشده خود نسبت به قضاوت فنی نگهدارنده زیرسیستم تکیه میکند.[2]
تحلیلهای دانشگاهی از این جریان کاری نشان میدهد که چگونه معماری اصلی از حجم عظیم بهروزرسانیهای جانبی ایزوله میشود. بیش از ۸۰ درصد از کل کدهای هسته در درایورهای دستگاهها و فایلهای مختص به معماری قرار دارند. با انتقال بار بررسی این فایلها به حاشیههای شبکه نگهدارندهها، نگهدارندههای سطح بالا آزاد میشوند تا روی پایداری هسته اصلی و تضادهای میان زیرسیستمها تمرکز کنند.[2]
با این حال، این مدل در حال تکامل است تا آسیبپذیریهای ذاتی ناشی از اتکا به افراد واحد را برطرف کند. از نظر تاریخی، بسیاری از زیرسیستمها تنها توسط یک توسعهدهنده نگهداری میشدند که در صورت عدم دسترسی یا فرسودگی آن شخص، یک نقطه شکست واحد ایجاد میکرد. روندهای اخیر نشاندهنده یک تغییر مسیر آگاهانه به سمت نگهداری گروهی است.[3]
نگهداری گروهی، بار کاری یک زیرسیستم خاص را میان چند نگهدارنده مشترک که به یک درخت مخزن دسترسی دارند، توزیع میکند. این افزونگی تضمین میکند که حتی اگر یک نگهدارنده کنار برود، روند بررسی وصلهها ادامه یابد و همچنین یک مکانیزم درونی برای بررسی همتایان در میان خود نگهدارندهها فراهم میکند.[3]
گذار از یک مشارکتکننده به یک نگهدارنده، فرآیندی رسمی از اعتبارسازی است. سازمانهایی که در توسعه هسته مشارکت دارند، اغلب از یک مدل بلوغ مشارکت پیروی میکنند. آنها کار را با رفع باگها شروع میکنند، به سمت افزودن ویژگیهای جدید پیش میروند و در نهایت زمان مهندسی خود را به بررسی کدهای دیگران اختصاص میدهند؛ کاری که پیشنیاز حیاتی برای رسیدن به جایگاه نگهدارنده است.[5]
با وجود این ساختارها، هسته لینوکس با یک چالش جمعیتی قریبالوقوع مواجه است. بسیاری از فعالترین نگهدارندههای زیرسیستمها بیش از یک دهه است که در نقشهای خود حضور دارند و برخی از آنها از دهه ۱۹۹۰ درگیر این پروژه بودهاند. روند جانشینپروری برای این موقعیتهای بسیار تخصصی و مبتنی بر اعتماد بالا، همچنان یک بحران خاموش در درون این جامعه است.[6]
جایگزین کردن یک نگهدارنده نیازمند چیزی بیش از یافتن یک برنامهنویس ماهر زبان C است. این کار مستلزم یافتن فردی است که بستر تاریخی تصمیمات طراحی یک زیرسیستم را درک کند، سرمایه اجتماعی لازم برای اعمال استانداردهای کیفی را داشته باشد و از حمایت کارفرمایی برخوردار باشد که حاضر است هزینه زمان صرفشده برای بررسی کدها را بپردازد.[4][6]
مسیریابی این جریان کاری عظیم توسط یک سند متنی واحد و دائماً در حال بهروزرسانی کنترل میشود: فایل MAINTAINERS. این فایل حاوی بیش از ۲۵۰۰ ورودی است که دایرکتوریها، فایلها و لیستهای پستی خاص را به افراد مسئول آنها متصل میکند. وقتی یک توسعهدهنده اسکریپت get_maintainer را روی وصله خود اجرا میکند، سیستم بهطور خودکار این فایل را تجزیهوتحلیل میکند تا دقیقاً مشخص کند کدام دروازهبانان زیرسیستم باید مطلع شوند.[7]
این مسیریابی خودکار، ابهام در مالکیت کد را از بین میبرد. اگر یک وصله همزمان زیرسیستم USB و هسته مدیریت توان را تغییر دهد، اسکریپت نگهدارندههای هر دو بخش را شناسایی میکند و اطمینان حاصل میکند که تغییرات میانسیستمی پیش از صعود در سلسلهمراتب، توسط تمام طرفهای درگیر بهدقت بررسی شوند.[1][7]
پشتوانه مالی این نگهدارندهها، یکی دیگر از اجزای حیاتی در مقیاسپذیری این مدل است. اگرچه هسته لینوکس متنباز است، اما نیروی کار آن تا حد زیادی حرفهای شده است. اکثریت قریببهاتفاق نگهدارندههای زیرسیستمها، مهندسان حقوقبگیری هستند که توسط شرکتهای بزرگ فناوری (از جمله تولیدکنندگان سختافزار، ارائهدهندگان خدمات ابری و توزیعکنندگان لینوکس سازمانی) استخدام شدهاند؛ شرکتهایی که متوجه شدهاند تأمین مالی نگهداری کدهای بالادستی ارزانتر از نگهداری وصلههای خارج از درخت اصلی است.[5]
این یارانه شرکتی، پویایی پیچیدهای ایجاد میکند که در آن شرکتهای رقیب روی یک زیرساخت مشترک با یکدیگر همکاری میکنند. نگهدارندهای که توسط یک فروشنده سختافزار استخدام شده است، بهطور معمول کدهای ارسالشده توسط رقبای مستقیم خود را بررسی و تأیید میکند و به جای وفاداری سازمانی، به استانداردهای فنی زیرسیستم پایبند است.[5]
این یارانه شرکتی، پویایی پیچیدهای ایجاد میکند که در آن شرکتهای رقیب روی یک زیرساخت مشترک با یکدیگر همکاری میکنند.
اثربخشی این مدل در طول عمر آن مشهود است. از زمان پذیرش سیستم کنترل نسخه Git در سال ۲۰۰۵ برای مدیریت این جریان کاری توزیعشده، هسته لینوکس به بیش از ۳۵ میلیون خط کد گسترش یافته است، بدون اینکه به انشعابهای (forks) ناسازگار تجزیه شود. ثابت شده است که این سلسلهمراتب اعتماد، از هر ساختار حاکمیت شرکتی واحدی بادوامتر است.[2][8]
توانایی هسته لینوکس برای عملکرد در مقیاس فعلی خود، گواهی بر اثربخشی تفویض اختیار است. این پروژه با جایگزین کردن یک گلوگاه متمرکز با شبکهای توزیعشده از متخصصان مورد اعتماد، یک ساختار سازمانی منعطف ایجاد کرده است که بازتابی از ماژولار بودن کدهای تولیدی آن است.[8]
دهه آینده توسعه هسته لینوکس، محدودیتهای این مدل را محک خواهد زد، چرا که نسل اولیه نگهدارندهها به سن بازنشستگی نزدیک میشوند. موفقیت مستمر این پروژه به توانایی آن در ارتقای گروه جدیدی از بررسیکنندگان به سطوح بالای سلسلهمراتب بستگی دارد تا اطمینان حاصل شود که زنجیره اعتماد دستنخورده باقی میماند.[6][8]
اصطلاحات کلیدی
- زیرسیستم
- یک جزء مجزا و ماژولار از هسته که مسئول یک عملکرد خاص است، مانند مدیریت حافظه، شبکهسازی یا پشتیبانی از یک معماری سختافزاری خاص.
- کامیت (Commit)
- یک تغییر مشخص و مستند در کد منبع که ذخیره شده و در سیستم کنترل نسخه ادغام شده است.
- انتقال به بالادست (Upstreaming)
- فرآیند ارسال کدهای توسعهیافته محلی به مخزن اصلی و رسمی یک پروژه متنباز، بهطوری که به بخشی از نسخه استاندارد تبدیل شود.
- درخواست واکشی (Pull Request)
- یک درخواست رسمی از یک نگهدارنده سطح بالاتر برای دریافت و ادغام مجموعهای از تغییرات کد بررسیشده از مخزن یک نگهدارنده زیرسیستم.
پرسشهای متداول
نگهدارنده زیرسیستم هسته لینوکس چیست؟
توسعهدهندهای که مسئول بررسی، آزمایش و پذیرش تغییرات کد برای یک بخش خاص از هسته، مانند یک سیستم فایل خاص یا درایور دستگاه است.
هسته لینوکس چه تعداد وصله نرمافزاری دریافت میکند؟
هسته لینوکس معمولاً در طول یک چرخه انتشار استاندارد نُه تا دههفتهای، حدود ۱۵٬۰۰۰ کامیت مجزا را ادغام میکند که میانگین آن ۳۰۰ تا ۴۰۰ وصله در روز است.
اگر یک نگهدارنده بازنشسته شود چه اتفاقی میافتد؟
در حالت ایدهآل، این مسئولیت به یک نگهدارنده مشترک یا یک مشارکتکننده مورد اعتماد که دانش عمیق خود را در آن زیرسیستم خاص ثابت کرده است، منتقل میشود؛ هرچند یافتن جایگزینهای مایل به این کار همچنان یک چالش است.
بررسی عمیق دیدگاهها
نگهدارندههای زیرسیستمها
تمرکز بر بار روزانه بررسی کدها و حفظ استانداردهای فنی.
برای مهندسانی که بهعنوان دروازهبان عمل میکنند، چالش اصلی مدیریت حجم عظیم وصلههای ورودی در عین حفظ کنترل کیفیت دقیق است. آنها تأکید میکنند که نقششان کمتر درباره نوشتن ویژگیهای جدید و بیشتر درباره خواندن، نقد کردن و راهنمایی مشارکتکنندگان است تا اطمینان حاصل کنند که کدهای جانبی، پایداری هسته اصلی را به خطر نمیاندازند.
مشارکتکنندگان شرکتی
تمرکز بر انتقال کارآمد کدها به بالادست و ایجاد اعتبار سازمانی.
شرکتهایی که به هسته لینوکس متکی هستند، سلسلهمراتب نگهدارندهها را بهعنوان فیلتری ضروری (هرچند گاهی کُند) برای بدهی فنی میبینند. هدف آنها انتقال کدهای داخلیشان به «بالادست» در هسته اصلی است تا هزینههای نگهداری خود را کاهش دهند. آنها از مدلهای شفاف بلوغ مشارکت حمایت کرده و در استخدام نگهدارندهها سرمایهگذاری میکنند تا از پشتیبانی سختافزارها و ویژگیهایشان مطمئن شوند.
ناظران دانشگاهی
تمرکز بر مقیاسپذیری ساختاری و پویایی گروهی در مدل متنباز.
پژوهشگرانی که الگوهای توسعه هسته را تحلیل میکنند، بر تغییر مسیر از نقاط شکست واحد به سمت نگهداری گروهی تأکید دارند. آنها این سلسلهمراتب را بهعنوان یک مطالعه موردی جذاب در زمینه اعتماد غیرمتمرکز میبینند و خاطرنشان میکنند که این سیستم نه از طریق مدیریت خشک شرکتی، بلکه از طریق یک شبکه رمزنگاریشده و اجتماعی از اختیارات تفویضشده مقیاس مییابد.
- نگهدارندههای زیرسیستمها
- مهندسانی که بر کیفیت کد، ظرفیت بررسی و جلوگیری از بدهی فنی تمرکز دارند.
- مشارکتکنندگان شرکتی
- سازمانهایی که بر انتقال ویژگیها به بالادست، پشتیبانی سختافزاری و کاهش هزینههای نگهداری داخلی تمرکز دارند.
- ناظران دانشگاهی
- پژوهشگرانی که مقیاسپذیری ساختاری، پویایی گروهی و خطرات جانشینی پروژه را تحلیل میکنند.
دیدگاههایی که این گزارش پوشش نداده
- مشارکتکنندگان مستقل و علاقهمندی که برای زمان بررسی خود از حمایت شرکتی برخوردار نیستند.
- نگهدارندههای توزیعهای پاییندستی لینوکس که باید نسخههای نهایی را بستهبندی کنند.
منابع
[1]The Linux Kernel Archivesنگهدارندههای زیرسیستمهاIntroduction
مطالعه در The Linux Kernel Archives →
[2]ACMناظران دانشگاهیOn the Scalability of Linux Kernel Maintainers' Work
مطالعه در ACM →
[3]SBCناظران دانشگاهیUnderstanding Group Maintainership Model in the Linux Kernel Development
مطالعه در SBC →
[4]ZDNETنگهدارندههای زیرسیستمهاWhat Linux kernel maintainers do and why they need your help
مطالعه در ZDNET →
[5]The New Stackمشارکتکنندگان شرکتیBeyond Upstream First: The Linux Kernel Contribution Maturity Model
مطالعه در The New Stack →
[6]Can Artucناظران دانشگاهیLinux Kernel Maintainer Succession: The Crisis Hiding in Plain Sight
مطالعه در Can Artuc →
[7]The Linux Kernel Archivesنگهدارندههای زیرسیستمهاFeature and driver maintainers
مطالعه در The Linux Kernel Archives →
[8]تیم سردبیری کوهستانتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
بیشتر در فناوری
مشاهده همه →امنیت هسته
وصله امنیتی هسته لینوکس برای آسیبپذیری شبکه Zerocopy که Open vSwitch را تحت تاثیر قرار میدهد
6 منبع
اقتصاد هوش مصنوعی
چرا استقرار هوش مصنوعی متنباز اغلب از اجاره آن گرانتر تمام میشود؟
6 منبع
امنیت سایبری
کالبدشکافی حملات زنجیره تامین در نرمافزارهای متنباز و راهکارهای دفاعی
5 منبع
زیرساخت هوش مصنوعی
دیپسیک و هواوی برای بهچالشکشیدن کوادای انویدیا، بسته نرمافزاری متنباز هوش مصنوعی عرضه کردند
6 منبع
نظرات
هر زاویه. هر روز.
اخبار فناوری با پوشش کامل منابع و تحلیل دیدگاهها، هر روز و رایگان.





