چگونه هسته لینوکس بررسی کدها را فراتر از یک مرجع واحد گسترش میدهد
هسته لینوکس برای پردازش هزاران تغییر کد در هر نسخه، به یک سلسلهمراتب دقیق و عمیقاً لایهبندیشده از نگهدارندههای زیرسیستمها متکی است. این مدل اعتماد توزیعشده، از ایجاد گلوگاه در بررسی کدها جلوگیری میکند و به بزرگترین پروژه متنباز جهان اجازه میدهد تا بدون نیاز به نظارت متمرکز، مقیاسپذیر باشد.
به قلم نیما موسوی
این خبر را به اشتراک بگذارید
- نگهدارندههای زیرسیستمها
- مهندسانی که بر کیفیت کد، ظرفیت بررسی و جلوگیری از بدهی فنی تمرکز دارند.
- مشارکتکنندگان شرکتی
- سازمانهایی که بر انتقال ویژگیها به بالادست، پشتیبانی سختافزاری و کاهش هزینههای نگهداری داخلی تمرکز دارند.
- ناظران دانشگاهی
- پژوهشگرانی که مقیاسپذیری ساختاری، پویایی گروهی و خطرات جانشینی پروژه را تحلیل میکنند.
دیدگاههایی که این گزارش پوشش نداده
- مشارکتکنندگان مستقل و علاقهمندی که برای زمان بررسی خود از حمایت شرکتی برخوردار نیستند.
- نگهدارندههای توزیعهای پاییندستی لینوکس که باید نسخههای نهایی را بستهبندی کنند.
نکات کلیدی
- هسته لینوکس در هر چرخه انتشار حدود ۱۵٬۰۰۰ کامیت را ادغام میکند و به جای یک بررسیکننده واحد، به شبکهای توزیعشده از نگهدارندهها متکی است.
- نگهدارندههای زیرسیستمها بهعنوان دروازهبانانی مستقل عمل کرده و کدها را برای درایورها و معماریهای خاص بررسی و فیلتر میکنند.
- بیش از ۸۰ درصد از کدهای هسته در درایورهای جانبی قرار دارد که معماری اصلی را از بالاترین حجم بهروزرسانیها ایزوله میکند.
- این پروژه بهطور فزایندهای به سمت نگهداری گروهی در حال حرکت است تا از فرسودگی شغلی جلوگیری کرده و نقاط شکست واحد را از بین ببرد.
- بیشتر نگهدارندهها مهندسان حقوقبگیری هستند که توسط شرکتهای بزرگ فناوری استخدام شدهاند تا از پشتیبانی بالادستی برای سختافزارهایشان اطمینان حاصل کنند.
توسعهدهندهای که امروز وصلهای (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]تیم سردبیری کوهستانتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
نظرات
بیشتر در فناوری
مشاهده همه →مدیریت حافظه
راهنمای جامع افزایش سرعت گوشیهای هوشمند: عبور از تبلیغات تا راهکارهای واقعی
6 منبع
VPN Tech
کالبدشکافی VPN: تونلهای رمزنگاریشده واقعاً چگونه کار میکنند و چرا شما را نامرئی نمیکنند؟
3 منبع
فناوری مخابرات
کالبدشکافی eSIM: سیمکارتهای الکترونیکی واقعاً چگونه کار میکنند؟
5 منبع
پروتکل متر
محققان نقصهای امنیتی حیاتی در پروتکل «متر» را کشف کردند؛ اعتماد به خانههای هوشمند زیر سوال رفت.
7 منبع
هر زاویه. هر روز.
دریافت فناوری اخبار همراه با پوشش کامل منابع و تحلیل دیدگاهها، مستقیم در صندوق ورودی شما.





