هسته لینوکس

**هسته لینوکس** (به انگلیسی: Linux kernel) یک هسته سیستم‌عامل است که با کمک توسعه‌دهندگان در سراسر جهان توسعه یافته است. هسته لینوکس، آزاد و متن باز، یکپارچه، ماژولار (modular) و شبه یونیکس و بسیار قابل تنظیم است. هسته لینوکس بر روی طیف گسترده‌ای از سیستم‌های محاسباتی، مانند سیستم‌های توکار، دستگاه‌های تلفن همراه (از جمله استفاده از آن در سیستم عامل اندروید)، رایانه‌های شخصی، سرورها، حافظه‌های اصلی و ابر رایانه‌ها مستقر شده‌است. هسته لینوکس در سال ۱۹۹۱ توسط لینوس توروالدز برای رایانه شخصی خود طراحی و ساخته شد، اما از آن زمان به طیف گسترده‌ای از معماری‌های رایانه منتقل شده‌است. با وجود این، هسته لینوکس با استفاده از دستورالعمل‌های خاص معماری (ISA) بسیار بهینه شده‌است، بنابراین قابلیت حمل آن به آسانی مانند سایر هسته‌ها آسان نیست (به عنوان مثال، با NetBSD، که از سال ۲۰۱۹ از ۵۹ پلتفرم سخت‌افزاری پشتیبانی می‌کند).

لینوکس به سرعت به‌عنوان هسته سیستم عامل GNU پذیرفته شد، که به عنوان یک نرم‌افزار متن باز و نرم‌افزار آزاد ایجاد شده بود، و براساس UNIX به‌عنوان محصول فرعی از جنگ یونیکس‌ها استفاده شد. از آن زمان، تعداد گسترده‌ای از توزیع سیستم عامل، که معمولاً به آن لینوکس نیز گفته می‌شود، ایجاد شده‌است، اگرچه، به‌طور رسمی، اصطلاح «لینوکس» فقط به هسته اشاره دارد.

بحث و گفتگوی توسعه روزانه در لیست پستی هسته لینوکس (LKML) انجام می‌شود. تغییرات با استفاده از سیستم کنترل نسخه git، که توسط توروالدز به عنوان جایگزینی سفارشی برای BitKeeper ایجاد شده، ردیابی می‌شود. به‌طور کلی لینوکس تحت مجوز عمومی همگانی گنو نسخه 2 (GPLv2) منتشر می‌شود، اما همچنین شامل چندین پرونده تحت مجوزهای سازگار دیگر و یک معافیت موقت برای پرونده‌های سربرگ API فضای کاربر (UAPI) است.

لینوکس یکی از پراستفاده‌ترین کرنل‌های سیستم‌عامل در جهان است، که سیستم عامل گنو/لینوکس مبتنی بر آن بوده و با تعدادی میان افزار (Firmware) تحت پروانه‌های غیر آزاد گوناگون منتشر می‌شود.

لینوکس، توسط شرکت‌کنندگان جهانی توسعه یافته‌است، که یک مثال برجسته از نرم‌افزارهای آزاد و متن باز است.

## پیشینه
[بندانگشتی|[لینوس توروالدز]]

در آوریل ۱۹۹۱، لینوس توروالدز، در آن زمان دانشجوی ۲۱ ساله علوم کامپیوتر در دانشگاه هلسینکی فنلاند، شروع به کار بر روی برخی از ایده‌های ساده برای یک سیستم عامل کرد. وی با ساخت یک task switcher (رفتن از یک برنامه به برنامه دیگر بدون خروج از برنامهٔ نخست) در زبان اسمبلی اینتل ۸۰۳۸۶ و یک راه انداز ترمینال شروع کرد. در ۲۵ اوت ۱۹۹۱، توروالدز موارد زیر را به یک گروه خبری در Usenet با نام “comp.os.minix”،   ارسال کرد:من در حال انجام ساخت یک سیستم عامل رایگان (فقط برای سرگرمی و از روی علاقه، و بزرگ و حرفه‌ای مانند گنو نخواهد شد) برای هم نوع‌های 386(486)AT هستم. این از آوریل در حال ساخته شدن هست، و در حال آماده شدن می‌باشد. من هر بازخوردی در Minix بر روی چیزهایی که مردم می‌پسندند یا نمی‌پسندند را می‌خواهم، با این وجود سیستم عامل من هم تا حدی به این شباهت دارد (بعضی از آرایش‌های فیزیکی فایل‌های سیستم در میان اشیا دیگر) من در حال حاضر (bash (1.08 و (۱٫۴۰) gcc را انتقال داده‌ام، و هم‌چنین بخش‌هایی که بنظر می‌رسند که کار کنند. این نشان می‌دهد که در این چندین ماه، به کجا رسیده‌ام. بله، هیچ کد مینیکسی در آن نیست و یک سامانه پروندهٔ چند رشته‌ای دارد. قابل انتقال نیست (از task switching 386 استفاده می‌کند)، و به درستی از سوی دیسک‌های سخت AT پشتیبانی می‌شود، این تمام چیزیست که من دارم.در ۱۷ سپتامبر ۱۹۹۱ لینوس توروالدز نسخه ۰٫۰۱ هسته لینوکس را آماده کرد و "ftp.funet.fi" - سرور FTP دانشگاه و شبکه تحقیقاتی فنلاند (FUNET) قرار داد. حتی از آنجایی که کد آن هنوز به Minix برای تدوین و بازی نیاز داشت حتی قابل اجرا نبود.

در ۵ اکتبر ۱۹۹۱، لینوس اولین نسخه «رسمی» لینوکس را منتشر کرد، نسخه ۰٫۰۲. در این مرحله، لینوکس توانست Bash , GCC و برخی دیگر از ابزارهای GNU را اجرا کند:[همان‌طور که] یک ماه پیش اشاره کردم، من در حال کار روی نسخه رایگان Minix-lookalike برای رایانه‌های AT-386 هستیم. سرانجام به مرحله ای رسیده‌است که حتی قابل استفاده است (هرچند ممکن است به آنچه می‌خواهید بستگی نداشته باشد) باشد، و من مایلم این منابع را برای توزیع گسترده‌تر ارائه دهم. این فقط نسخه ۰٫۰۲ است … اما من با موفقیت bash, gcc, gnu make, gnu-sed، فشرده سازی و غیره را در زیر آن اجرا کردم.
پس از آن، بسیاری از مردم کد را به این پروژه کمک کردند. در اوایل، جامعه MINIX کد و ایده‌های خود را به هسته لینوکس کمک کرد. در آن زمان، پروژه گنو بسیاری از مؤلفه‌های مورد نیاز برای یک سیستم عامل رایگان را ایجاد کرده بود، اما هسته آن، GNU Hurd، ناقص و در دسترس نبود. توزیع نرم‌افزار برکلی هنوز خودش را از شر قانونی رهایی نداده‌است. با وجود عملکرد محدود نسخه‌های اولیه، لینوکس به سرعت توسعه دهندگان و کاربران را به دست آورد.

توروالدز نسخه ۰ را به هسته اختصاص داد تا نشان دهد که این عمدتاً برای آزمایش بوده و برای کاربردی در نظر گرفته نشده‌است. در دسامبر ۱۹۹۱، هسته هسته لینوکس ۰٫۱۱ منتشر شد. این نسخه اولین نسخهٔ خود میزبان (self-hosted) لینوکس ۰٫۱۱ می‌توانست توسط یک کامپیوتر در حال اجرای لینوکس ۰٫۱۱ کامپایل شود.

هنگامی که توروالدز در فوریه ۱۹۹۲ نسخه ۰٫۱۲ را منتشر کرد، وی مجوز عمومی GNU نسخه 2 (GPLv2) را نسبت به پروانه ساخت قبلی خود که مجوز مجدد توزیع تجاری را نداد، پذیرفت. برخلاف یونیکس، تمام فایلهای منبع هسته لینوکس به‌طور رایگان در دسترس هستند از جمله درایور دستگاه. موفقیت اولیه هسته لینوکس با حمایت برنامه نویسان و آزمایش کنندگان در سراسر جهان انجام شد. با ساختن هسته هسته لینوکس مطابق با استانداردهای POSIX، با طیف وسیعی از نرم‌افزارها و برنامه‌های رایگان که برای دانشگاه‌ها تهیه شده بود سازگار بود.

بندانگشتی|300px|هسته Linux اکنون از معماری سخت‌افزاری متنوعی پشتیبانی می‌کند و بستر مشترکی را برای نرم‌افزار از جمله نرم‌افزار اختصاصی فراهم می‌کند.|جایگزین=

در ۱۹ ژانویه ۱۹۹۲، اولین پست به گروه جدید اخبار alt.os.linux ارسال شد. در تاریخ ۳۱ مارس ۱۹۹۲، گروه خبری به comp.os.linux تغییر نام داد. این واقعیت که لینوکس یک هسته یکپارچه است و نه یک ریزگرد، موضوع بحث و گفتگو بین اندرو S. Tanenbaum، خالق MINIX و توروالدز بود. این بحث به عنوان بحث Tanenbaum-Torvalds شناخته می‌شود و در سال ۱۹۹۲ در گروه بحث Usenet comp.os.minix به عنوان یک بحث کلی در مورد لینوکس و معماری هسته آغاز شد.

نسخه لینوکس ۰٫۹۵ اولین نسخه ای بود که توانست سیستم X Window را اجرا کند. در مارس ۱۹۹۴، لینوکس ۱٫۰٫۰ با ۱۷۶٬۲۵۰ خط کد منتشر شد. این اولین نسخه مناسب برای استفاده در محیط‌های تولید بود.

این یک سیستم نسخه سازی برای هسته را با سه یا چهار عدد از هم جدا با نقاط شروع کرد که در آن اولین نسخه اصلی انتشار، دومین نسخه جزئی و سوم نسخه تجدید نظر بود. در آن زمان نسخه‌های عجیب و غریب با شماره‌های عجیب و غریب برای توسعه نرم‌افزار و آزمایش‌ها بودند، در حالی که حتی نسخه‌های جزئی حتی برای تولید نیز وجود داشت. رقم چهارم اختیاری مجموعه ای از تکه‌های اصلاح را نشان می‌داد.

شماره گذاری نسخه فعلی کمی متفاوت از موارد فوق است. اول از همه، حتی در مقابل شماره گذاری عجیب و غریب کاهش یافته‌است. دوم، دو شماره اول، به عنوان یک کل، یک نسخه اصلی خاص را نشان می‌دهد. در حالی که بازه زمانی برای توسعه اصلی بعدی باز است، از پسوند -rcN برای شناسایی نامزد انتشار نسخه n برای نسخه بعدی استفاده می‌شود. به عنوان مثال، نسخه نسخه ۴٫۱۶ قبل از هفت 4.16-rcN (از -rc1 تا -rc7) بود. پس از انتشار نسخه پایدار، نگهداری آن به «تیم پایدار» منتقل می‌شود. .

پس از نسخه ۱٫۳ هسته، توروالدز تصمیم گرفت که لینوکس به اندازه کافی تکامل یافته‌است تا تعداد اصلی جدید را تضمین کند، بنابراین نسخه ۲٫۰٫۰ را در ژوئن ۱۹۹۶ منتشر کرد.

جامعه توسعه دهندگان مشارکت کننده در لینوکس این مهم را تصور کرده‌اند که هسته ای که توروالدز برای رایانه‌های شخصی Intel نوشته بود از معماری مجموعه‌های مختلف دستورالعمل (ISA) پشتیبانی می‌کند. با شروع نسخه ۲٫۰، لینوکس شامل کلیه مؤلفه‌ها برای پیکربندی هسته قبل از تهیه آن برای اهداف سخت‌افزاری خاص است.

پشتیبانی از سیستم‌های مختلف پرونده نیز در اولویت قرار داشته‌است. هسته می‌تواند چندین سیستم پرونده ای را کار کند، برخی از آنها برای لینوکس و برخی دیگر بومی سایر سیستم عامل‌ها مانند Minix , Xenix , Irix , Solaris , System V، Windows و MS-DOS طراحی شده‌اند.

در دسامبر ۲۰۰۳، با انتشار هسته نسخه ۲٫۶٫۰، توروالدز هسته‌های لینوکس را چنان پایدار دانست که او چرخه انتشار 2.6.x.y را آغاز کرد. هر نسخه ۲٫۶ هسته ای برای تولید بود، نسخه‌های توسعه با -rc ("نامزد انتشار") به شماره نسخه پیوست شده‌اند. نسخه‌های هسته ای ۲٫۶ پایدار شروع به نمایش در برنامه منظم هر ۲–۳ ماه، از طریق ۲٫۶٫۳۹ در ماه مه ۲۰۱۱. چرخه انتشار کوتاه‌تر نتیجه بحث در بین توسعه دهندگان هسته در مورد انتشار و نسخه طرح در سال ۲۰۰۴ بود.

در ماه دسامبر ۲۰۰۵، آدریان بانک در پاسخ به عدم وجود درخت هسته پایدار که در آن مردم می‌توانند مجموعه‌های رفع اشکال را هماهنگ کنند، اعلام کرد که وقتی تیم پایدار به ۲٫۶٫۱۷ حرکت می‌کند، هسته‌های 2.6.16.y خود را آزاد می‌کند. . از آن زمان، «تیم پایدار» تشکیل شده بود و نسخه‌های هسته پایدار را با رفع اشکال به روز می‌کند. در فوریه سال ۲۰۰۸ استفان روتول درخت زیر بنایی را ایجاد کرد تا مکانی باشد که تکه‌هایی با هدف ادغام در چرخه توسعه بعدی جمع شوند. چندین نگهدارنده زیر سیستم همچنین پسوند *-next برای* درختانی را که حاوی کد هستند تصویب کردند که قرار است برای ورود به چرخه انتشار بعدی ارسال شود. از ژانویه ۲۰۱۴، نسخه در حال توسعه هسته لینوکس در شعبه ناپایدار به نام linux-next برگزار می‌شود.

کد منبع هسته لینوکس قبلاً بدون کمک سیستم مدیریت کد منبع خودکار نگهداری می‌شد. در سال ۲۰۰۲، توسعه هسته لینوکس به BitKeeper تغییر یافت. این نرم‌افزار به صورت رایگان در دسترس توروالدز و چند نفر دیگر قرار گرفت اما نرم‌افزار رایگان نبود. در آوریل ۲۰۰۵، تلاش برای مهندسی معکوس سیستم BitKeeper توسط اندرو Tridgell باعث شد BitMover، شرکتی که BitKeeper را حفظ کرده‌است، متوقف کند تا حمایت از جامعه توسعه لینوکس را متوقف کند. در پاسخ، Torvalds و دیگران یک سیستم کنترل کد منبع جدید را برای این هدف نوشتند، به نام Git. سیستم جدید طی چند هفته نوشته شد و طی دو ماه اولین نسخه رسمی هسته با استفاده از Git ساخته شد.

بیستمین سالگرد هسته لینوکس در ژوئیه ۲۰۱۱ با انتشار نسخه هسته ۳٫۰٫۰ توسط توروالدز برگزار شد. بنیاد لینوکس در نسخه ۲۰۱۱ مطالعه توسعه هسته خود، بیستمین سالگرد هسته را جشن گرفت. کرنل ۳٫۰ دارای ۱۵ میلیون خط کد بود و بیش از ۱۳۰۰ توسعه دهنده مجزا در این نسخه از هسته لینوکس مشارکت داشتند. توسعه دهندگان داوطلب در سال ۲۰۱۱ ۱۶ درصد از کل تغییرات هسته را به خود اختصاص داده‌اند. سایر تغییرات مربوط به توسعه دهندگان نرم‌افزار حرفه ای بود که توسط یک شرکت برای ارسال کد به هسته پرداخت می‌شدند. در سال ۲۰۱۱، توسعه دهندگان رد هت ۱۰ درصد از تغییرات ایجاد شده در هسته را کمک کردند، دومین شرکت بزرگ اینتل Intel و پس از IBM و Novell. در حالی که نوکیا تا آن زمان سیستم عامل هوشمند MeeGo مبتنی بر هسته لینوکس خود را رها کرده بود، در سال ۲۰۱۱ توسعه دهندگان نوکیا هنوز کدهای بیشتری را در مقایسه با توسعه دهندگان شاغل در گوگل، که اندروید در سال ۲۰۰۷ و سیستم عامل Chrome در سال ۲۰۰۹ منتشر کرده بودند، به کد بیشتر کمک می‌کردند. به عنوان هفدهمین شرکت کننده پرکارترین شرکت در هسته رتبه‌بندی شد. توسعه دهندگان آن برای اولین بار در سال ۲۰۰۹ برای بهبود عملکرد دستگاه‌های مجازی لینوکس که در راس Hyper-V ویندوز Hyper-V قرار داشتند، به همکاری با هسته پرداختند.

هسته‌های پایدار 3.x.y تا فوریه ۲۰۱۵ با انتشار نسخه‌های توسعه از مارس 3.r.y تا ۳٫۱۹ در بازار آزاد شدند. برای حساب کردن نسخه ویژه وصله گاه به گاه، سری نسخه ۳ هسته یک رقم چهارم را به شماره گذاری نسخه اضافه می‌کند. در آوریل ۲۰۱۵، توروالدز نسخه هسته ۴٫۰ را منتشر کرد. تا فوریه ۲۰۱۵، هسته لینوکس از نزدیک به ۱۲۰۰۰ برنامه‌نویس از بیش از ۱۲۰۰ شرکت، از جمله برخی از بزرگترین فروشندگان نرم‌افزار و سخت‌افزار در جهان، کمک دریافت کرده بود. نسخه ۴٫۱ هسته لینوکس، که در ژوئن سال ۲۰۱۵ منتشر شد، حاوی بیش از ۱۹٫۵ میلیون خط کد است که تقریباً ۱۴٬۰۰۰ برنامه نویسان در آن مشارکت دارند.

## معماری
بندانگشتی|300px|نقشه هسته لینوکس|جایگزین=

لینوکس یک هسته یکپارچه است و از اکثر ویژگیهایی پشتیبانی می‌کند که فقط در هسته‌های منبع بسته از سیستم عامل‌های غیر رایگان موجود باشد:
* محاسبات همزمان و (با در اختیار داشتن هسته کافی CPU برای کارهایی که آماده اجرا هستند) حتی اجرای موازی واقعی بسیاری از فرایندها به یکباره (هر یک از آنها دارای یک یا چند موضوع اجرا).
* برنامه‌ریزی (در زمان کامپایل) و تنظیم (تنظیم زمان کار) تنظیم کننده اجازه می‌دهد تا وظیفه‌های مقدماتی را انجام دهید (هر دو در حالت کاربر و از سری ۲٫۶، در حالت هسته). برنامه زمانبندی کاملاً عادلانه (CFS) برنامه زمانبندی پیش فرض لینوکس از سال ۲۰۰۷ است و از یک درخت قرمز-سیاه استفاده می‌کند که می‌تواند داده‌های مربوط به فرایندهای (ساختار وظیفه) درون O را در مدت زمان (log n) جستجو، درج و حذف کند، جایی که n تعداد وظایف موجود در درخت را نشان می‌دهد.
* مدیریت پیشرفته حافظه با حافظه مجازی.
* مکانیسم ارتباطات و هماهنگی بین فرایندی.
* یک سیستم پرونده مجازی در بالای چندین سیستم پرونده اصلی (ext4، Btrfs , XFS , JFS , FAT32 و موارد دیگر).
* برنامه‌ریز I / O قابل تنظیم.
* مجازی سازی سطح سیستم عامل (با Linux-VServer) , paravirtualization و مجازی سازی با کمک سخت‌افزار (با KVM یا Xen).
* مکانیسم‌های امنیتی برای کنترل دسترسی اختیاری و اجباری (SELinux , AppArmor , POSIX ACL و دیگران).
* چندین نوع پروتکل ارتباطی لایه ای (از جمله مجموعه پروتکل اینترنت).

درایورهای دستگاه و پسوندهای هسته در فضای هسته (حلقه ۰ در بسیاری از معماری‌های CPU) اجرا می‌شوند، با دسترسی کامل به سخت‌افزار، اگرچه برخی از استثنائات در فضای کاربر وجود دارد، به عنوان مثال، سیستم‌های پرونده ای مبتنی بر FUSE / CUSE و بخش‌هایی از UIO. سیستم گرافیکی که اکثر افراد از لینوکس استفاده می‌کنند در هسته کار نمی‌کند. برخلاف هسته‌های یکپارچه استاندارد، درایورهای دستگاه به راحتی به عنوان ماژول پیکربندی می‌شوند و در حین کار سیستم بارگیری یا تخلیه می‌شود. همچنین، برخلاف هسته‌های یکپارچه استاندارد، درایورهای دستگاه تحت شرایط خاص می‌توانند از پیش ساخته شوند. این ویژگی برای کنترل صحیح وقفه‌های سخت‌افزاری و پشتیبانی بهتر از پردازش متقارن اضافه شده‌است. به دلخواه، هسته لینوکس هیچ رابط کاربری باینری برنامه پایدار درایور دستگاه ندارد.

لینوکس به‌طور معمول از حافظه و حافظه مجازی استفاده می‌کند و همچنین می‌تواند به حافظه غیر یکنواخت دسترسی داشته باشد، با این حال این پروژه μClinux را جذب کرده‌است که باعث می‌شود لینوکس را بر روی میکروکنترلرها بدون حافظه مجازی نیز اجرا کنید.

این سخت‌افزار همچنین در سلسله مراتب پرونده گنجانیده شده‌است. درایورهای دستگاه از طریق ورودی در فهرستهای sys/ یا dev/ یا برنامه‌های کاربردی کاربر رابط می‌کند. اطلاعات فرایند نیز از طریق فهرست / proc به سیستم فایل نقشه‌برداری می‌شود.

### رابط‌ها
بندانگشتی|300px|چهار رابط متمایز است: دو داخلی به هسته، و دو بین هسته و فضای کاربر.|جایگزین=

لینوکس یک کلون از UNIX است، بنابراین به دنبال انطباق POSIX و Single UNIX (SUSv3) است. به‌علاوه، از آنجا که لینوکس یونیکس نیست، هسته مکالمه‌های اضافی سیستم و رابط‌های دیگر که مخصوص لینوکس هستند فراهم می‌کند. برای درج در هسته رسمی، کد باید با مجموعه ای از قوانین صدور مجوز تعریف شده کاملاً مطابقت داشته باشد.

#### API فضای هسته به کاربر
استانداردهای مربوط با هدف دستیابی به قابلیت تغییر کد منبع برنامه‌های کاربر، که توسعه هسته لینوکس، کتابخانه GNU C و برنامه‌های مرتبط با آن سعی در رعایت آن دارند، مشخصات POSIX و Single UNIX هستند.

زیر مجموعه API هسته لینوکس که واسطهای در معرض برنامه‌های کاربر را در نظر می‌گیرد، اساساً توسط مکالمات سیستمی مخصوص UNIX و لینوکس تشکیل شده‌است. به عنوان مثال، در بین لینوکس خاص خانواده تماس با سیستم کلون وجود دارد. اکثر برنامه‌های افزودنی باید با تعریف ماکرو _GNU_SOURCE در یک پرونده سرصفحه یا هنگام تهیه کد کاربر کاربر فعال شوند.

تماس‌های سیستم فقط با استفاده از دستورالعمل‌های مونتاژ امکان‌پذیر است که امکان انتقال از فضای کاربر غیر شخصی به فضای هسته ممتاز در حلقه ۰ را فراهم می‌کند، برای مثال با استفاده از دستورالعمل "int 0x80" بعد از کپی کردن شناسه تماس سیستم و پارامترهای آن به برخی از ثبات‌های CPU. به همین دلیل، کتابخانه استاندارد C (libC) با در معرض توابع C که تنها در صورت نیاز، می‌تواند به صورت شفاف وارد هسته شود که به نمایندگی از فرایند فراخوانی، به صورت شفاف در بسیاری از تماسهای سیستم لینوکسی عمل می‌کند. برای آن دسته از تماسهای سیستمی که تحت تأثیر libC قرار ندارند، به عنوان مثال mutex به سرعت فضای کاربر (futex)، کتابخانه تابعی به نام syscall ارائه می‌دهد که می‌توان برای استناد به صراحت از آنها استفاده کرد.

سیستمهای فایلهای شبه (مانند سیستمهای فایلهای sysfs و procfs) و پرونده‌های ویژه (به عنوان مثال، / dev / تصادفی، / dev / sda , / dev / tty و بسیاری دیگر) لایه دیگری از رابط کاربری ساختارهای داده هسته را تشکیل می‌دهند که سخت‌افزار یا منطقی هستند (نرم‌افزار) دستگاه‌ها.

#### فضای هسته به کاربر ABI
به دلیل اختلافات موجود بین صدها پیاده‌سازی مختلف سیستم عامل لینوکس، اشیاء اجرایی، حتی اگر آنها برای اجرا در یک معماری سخت‌افزاری خاص کامپایل، مونتاژ و پیوند شده باشند (یعنی آنها از ISA سخت‌افزار هدف استفاده می‌کنند)، اغلب نمی‌توانند در توزیع‌های مختلف لینوکس اجرا شوند. این مسئله عمدتاً به دلیل تنظیمات خاص توزیع و مجموعه ای از تکه‌های اعمال شده بر روی کد هسته لینوکس، تفاوت در کتابخانه‌های سیستم، خدمات (Daemons)، سلسله مراتب سیستم فایلها و متغیرهای محیطی است.

استاندارد اصلی در مورد کاربرد و سازگاری باینری توزیع‌های لینوکس، پایگاه استاندارد لینوکس (LSB) است. با این حال، LSB فراتر از آنچه مربوط به هسته لینوکس است، می‌باشد زیرا همچنین مشخصات دسک تاپ، کتابخانه‌های X و Qt را که ارتباط چندانی با آن ندارند، تعریف می‌کند. نسخه 5 LSB بر اساس چندین استاندارد و پیش نویس ساخته شده‌است (POSIX , SUS , X / Open , File System Hierarchy (FHS) و سایر موارد).

قسمت‌های LSB که تا حد زیادی مربوط به هسته لینوکس است عبارتند از General ABI (gABI)، به خصوص System V ABI و فرمت اجرایی و قابل پیوند (ELF)، و پردازنده خاص ABI (psABI)، به عنوان مثال مشخصات اصلی برای X86 -64

#### درون هسته API
بندانگشتی|300px|در XDC2014، الکس دوچر از AMD اعلام کرد که راننده هسته هسته واحد را اعلام کرد. درایور گرافیکی اختصاصی لینوکس، libGL-fglrx-glx، همان زیر ساخت DRM را با Mesa 3D به اشتراک می‌گذارد. از آنجا که هیچ ABI در هسته پایدار وجود ندارد، AMD مجبور بود دائم دودویی قبلی را که توسط کاتالیزور استفاده می‌شد، سازگار کند.|جایگزین=

چندین API داخلی هسته وجود دارد که بین زیر سیستم‌های مختلف مورد استفاده قرار می‌گیرد. برخی از آنها فقط در زیر سیستم‌های هسته موجود است، در حالی که مجموعه ای محدود از نمادهای درون هسته (به عنوان مثال متغیرها، ساختار داده‌ها و عملکردها) در معرض ماژول‌های بارگذاری پویا نیز قرار می‌گیرند. با ماکروهای ()EXPORT_SYMBOL و ()EXPORT_SYMBOL_GPL (آخرین مورد مربوط به ماژول‌های منتشر شده تحت مجوز سازگار با GPL است).

برخی از APIهای هسته لینوکس در چندین نسخه ثابت نگه داشته شده‌اند، برخی دیگر اینگونه نیستند. هیچ تضمینی در مورد APIهای هسته وجود ندارد. نگهبانان و مشارکت کنندگان می‌توانند هر زمان که بخواهند تقویت کنند یا آنها را تغییر دهند. با این وجود، APIهای درون هسته وجود دارند که ساختار داده‌ها را دستکاری می‌کنند (به عنوان مثال، لیست‌ها، درختان، صف‌ها) یا کارهای روزمره را انجام می‌دهند (به عنوان مثال کپی کردن داده‌ها از و به فضای کاربر، اختصاص حافظه، خطوط چاپی به سیستم سیستم و غیره) که حداقل از نسخه ۲٫۶ لینوکس پایدار مانده‌اند. نمونه‌هایی از APIهای درون هسته شامل کتابخانه‌های خدمات مشترک سطح پایین است که توسط درایور دستگاه‌ها استفاده می‌شود:
* رابطهای SCSI و libATA - به ترتیب، یک پروتکل ارتباطی مبتنی بر همتا برای دستگاه‌های ذخیره‌سازی متصل به USB , SATA , SAS، فیبر کانال، FireWire، دستگاه ATAPI، و یک کتابخانه درون هسته برای پشتیبانی از کنترلرها و دستگاه‌های میزبان ATA.
* مدیر مستقیم ارائه دهنده (DRM) و تنظیم حالت کرنل (KMS) - برای ارتباط با GPUها و پشتیبانی از نیازهای سخت‌افزاری ویدیویی مدرن با سرعت سه بعدی، و برای تنظیم وضوح صفحه، عمق رنگ و سرعت تازه سازی
* بافرهای DMA (dma_buf) - برای به اشتراک گذاری بافرها برای دسترسی مستقیم به حافظه سخت‌افزاری در درایورها و زیر سیستمهای مختلف دستگاه
* Video4Linux - برای سخت‌افزار ضبط ویدیو
* معماری پیشرفته صدا لینوکس (ALSA) - برای کارت‌های صدا
* API جدید - برای کنترل‌کننده‌های رابط شبکه
* mac80211 - برای کنترل‌کننده‌های رابط شبکه بی‌سیم

#### درون هسته ای ABI
توسعه دهندگان لینوکس تصمیم می‌گیرند که یک ABI در هسته پایدار را حفظ نکنند.

### مشخصات فنی
#### برنامه‌ریزی و Preemption
برنامه‌ریز لینوکس کلاس‌ها و خط مشی‌های مختلف را قادر می‌سازد. به‌طور پیش فرض هسته از یک مکانیزم زمانبندی به نام برنامه زمانبندی کاملاً عادلانه استفاده می‌کند که در نسخه ۲٫۶٫۲۳ از هسته معرفی شده‌است. در داخل این کلاس زمانبندی پیش فرض همچنین به عنوان SCHED_OTHER شناخته می‌شود، اما هسته نیز شامل دو کلاس زمانبندی سازگار با POSIX با نام برنامه زمان واقعی به نام‌های SCHED_FIFO (در زمان واقعی اول-اول-اول) و SCHED_RR (بیدرنگ رابین) است، هر دو مورد نسبت به کلاس پیش فرض اولویت دارند. یک برنامه زمان‌بندی اضافی معروف به SCHED_DEADLINE، اجرای اولین الگوریتم مهلت اول (EDF)، در هسته نسخه ۳٫۱۴ اضافه شده‌است، که در تاریخ ۳۰ مارس ۲۰۱۴ منتشر شد. SCHED_DEADLINE نسبت به سایر کلاس‌های برنامه‌ریزی دیگر برتری دارد.

لینوکس امکان پیشگیری کاربر و همچنین preemption کامل هسته را فراهم می‌کند. Preemption تأخیر را کاهش می‌دهد، پاسخگویی را افزایش می‌دهد و Linux را برای برنامه‌های رومیزی و در زمان واقعی مناسب تر می‌کند.

با پیش گویی کاربر، برنامه‌ریز هسته می‌تواند فرایند فعلی را با اجرای یک سوئیچ زمینه به جایگزین دیگری تبدیل کند که از این رو منابع محاسباتی را برای اجرا (CPU، حافظه و موارد دیگر) به دست می‌آورد. آن را مطابق الگوریتم CFS (به ویژه آنکه از متغیری به نام vruntime برای مرتب‌سازی فرایندها استفاده می‌کند)، به سیاست برنامه زمانبندی فعال و اولویت‌های نسبی پردازش‌ها تبدیل می‌کند. با پیشگیری هسته، هسته می‌تواند خود را در هنگام بازگشت یک دستگیرنده وقفه، وقتی وظایف هسته بسته می‌شود، مقدم کند، و هر زمان که یک سیستم فرعی صریحاً برنامه () را فراخوانی کند.

با استفاده از پچ کرنل لینوکس در زمان واقعی PREEMPT_RT، می‌توانید پشتیبانی از preemption کامل بخش‌های مهم، دستگیر کننده‌های قطع و دنباله‌های کد «قطع کردن غیرفعال کردن» را پشتیبانی کنید. یکپارچه سازی خط اصلی جزئی از تکه‌های لینوکس در زمان واقعی، برخی عملکردها را به خط اصلی هسته منتقل کرده‌است.

#### قابلیت حمل
اگرچه در اصل برای قابل حمل طراحی نشده بود، اکنون لینوکس یکی از هسته‌های بسیار گسترده سیستم عامل است که در سیستم‌های متنوعی از معماری ARM گرفته تا رایانه‌های اصلی IBM z / Architecture اجرا می‌شود. اولین درگاه فراتر از معماری اصلی ۳۸۶ لینوکس بر روی پلت فرم موتورولا ۶۸۰۰۰ توسط کاربران آمیگا انجام شد که این کار را با جایگزینی بخش‌های اصلی هسته انجام داد. تغییرات در هسته آنقدر اساسی بود که توروالدز نسخه موتورولا را به عنوان یک چنگال و یک سیستم عامل شبیه به لینوکس مشاهده کرد و نه به عنوان یک درگاه واقعی. با این وجود انگیزه ای بود که توروالدز برای بازگرداندن عمده کد هسته به منظور تسهیل در انتقال به معماری‌های محاسباتی رقیب، نیاز به بازسازی عمده ای از هسته داشت. اولین درگاه مورد تأیید لینوکس به پلتفرم ۶۴ بیتی DEC Alpha AXP بود که در ماه مه ۱۹۹۵ در DECUS نشان داده شد، از ۳۸۶ و Alpha در یک درخت منفرد پشتیبانی کرد. DEC مسئول تأمین سخت‌افزار لازم برای توروالدز بود تا در همان سال بتواند درگاه لینوکس را به ۶۴ بیت برساند.

لینوکس به عنوان سیستم عامل اصلی در نشست IBM و همه سریعترین رایانه‌های رایانه ای، از جمله Sunway TaihuLight طراحی شده و ساخت چینی، که قبلاً سریعترین آنهاست، اجرا می‌شود. از اکتبر سال ۲۰۱۹، همه ۵۰۰ سریعترین رایانه در جهان انواع مختلفی از لینوکس را اجرا می‌کنند، یک تغییر بزرگ از سال ۱۹۹۸ که اولین ابر رایانه لینوکس به لیست اضافه شد و سپس به رتبه ۱۱۳ رسید. یونیکس قبلاً در لیست حاکم بود. در حدود ۲۰۰۳ تقریباً بین یونیکس و لینوکس تقسیم شده‌است.

لینوکس همچنین به دستگاه‌های دستی مختلفی مانند iPhone 3G و iPod اپل منتقل شده‌است.

#### انواع هسته
انواع خاصی از هسته لینوکس وجود دارد که قابلیت‌های اضافی را ارائه می‌دهند اما به خط اصلی هسته لینوکس تعلق ندارند. چنین انواع هسته لینوکس شامل Linux-libre , Compute Node Linux , Cooperative Linux , Longene , grsecurance , INK , L4Linux , MkLinux, RTLinux و User-Mode Linux (UML) است. برخی از این انواع تا حدی در خط اصلی ادغام شده‌اند. برخی از سیستم عامل‌های توسعه یافته برای تلفن‌های همراه در ابتدا از نسخه‌های بسیار تغییر یافته هسته لینوکس استفاده می‌کردند، از جمله Google Android , Firefox OS , HP webOS , Nokia Maemo و Jolla Sailfish OS. در سال ۲۰۱۰، جامعه هسته لینوکس از Google به دلیل شروع مؤثر درخت هسته خود انتقاد کرد:این بدان معنی است که هر درایوری که برای سیستم عامل‌های سخت‌افزاری اندرویدی نوشته شده‌است، نمی‌تواند در درخت اصلی هسته ادغام شود، زیرا آنها به کدی وابسته هستند که فقط در درخت هسته گوگل زندگی می‌کند، و باعث عدم موفقیت آن در ساخت درخت kernel.org می‌شود. به همین دلیل، گوگل اکنون مانع از ادغام تعداد زیادی از درایورهای سخت‌افزاری و کد پلتفرم در درخت اصلی هسته شده‌است. به‌طور مؤثر ایجاد یک شاخه هسته که تعدادی از فروشندگان مختلف اکنون به آن اعتماد دارند.

- گرگ کروه-هارتمن، 2010امروزه اندروید از هسته کمی سفارشی لینوکس استفاده می‌کند که تغییراتی در درایورهای دستگاه انجام می‌شود به طوری که کمی یا بدون تغییر در کد هسته اصلی لازم است. توسعه دهندگان اندرویدی همچنین تکه‌هایی را به هسته اصلی لینوکس ارسال می‌کنند و هسته اصلی می‌تواند سیستم عامل اندروید را بوت کند. Nexus 7 می‌تواند هسته اصلی لینوکس را بوت و راه اندازی کند.

#### هسته وحشت و اووپس
در لینوکس، «وحشت» یک خطای غیرقابل بازیابی سیستم است که توسط هسته شناسایی می‌شود، برخلاف خطاهای مشابه کشف شده توسط کد فضای کاربر. این امکان وجود دارد که کد هسته بتواند با تماس با عملکرد هراس واقع در فایل هدر sys / system.h چنین شرایطی را نشان دهد. با این حال، بسیاری از وحشتها نتیجه استثناء پردازنده بدون کنترل در کد هسته مانند ارجاع به آدرس‌های حافظه نامعتبر است. اینها معمولاً نشانگر اشکال در جایی در زنجیره تماس منتهی به وحشت است. آنها همچنین می‌توانند از خرابی سخت‌افزار مانند سلول رم خراب یا خطاهای عملکردهای حسگر در پردازنده ناشی از یک اشکال پردازنده، پردازش گرمای بیش از حد / آسیب دیده یا یک خطای نرم نشان دهند.

گزارش یک اشکال غیر کشنده در هسته «اوه» نامیده می‌شود. چنین انحراف از رفتار صحیح هسته لینوکس ممکن است امکان ادامه کار را با قابلیت اطمینان به خطر بیندازد. این گزارش‌های خرابی به‌طور خودکار جمع‌آوری شده و توسط نرم‌افزارهای مختلفی مانند هسته‌ها، ABRT (Fedora) و apport (اوبونتو) ارسال می‌شود. KernelOops.org این گزارش‌ها را جمع می‌کند و آماری را در وب سایت خود منتشر می‌کند.

پیام وحشت هسته ممکن است در بعضی شرایط، مانند استفاده از یک میز گرافیکی، قابل مشاهده نباشد. برای اشکال زدایی در چنین شرایطی می‌توان از روش‌های دیگری مانند اتصال یک کنسول پورت سریال استفاده کرد.

#### وصله زنده
به روزرسانی‌های Rebootless حتی می‌توانند با استفاده از فناوریهای زنده patch مانند Ksplice , kpatch و kGraft بر روی هسته اعمال شوند. پایه‌های حداقلی برای وصله هسته زنده در هسته هسته لینوکس در نسخه هسته ۴٫۰ که در تاریخ ۱۲ آوریل ۲۰۱۵ منتشر شد ادغام شدند. توسط kGraft و kpatch، با ارائه یک رابط برنامه‌نویسی برنامه (API) برای ماژول‌های هسته که شامل تکه‌های داغ و یک رابط باینری برنامه (ABI) برای برنامه‌های مدیریت فضای کاربر است. با این حال، هسته مشترک موجود در هسته لینوکس ۴٫۰ تنها از معماری x86 پشتیبانی می‌کند و هیچ مکانیزمی را برای اطمینان از سازگاری سطح عملکرد در حین استفاده از تکه‌های گرم فراهم نمی‌کند. از آوریل ۲۰۱۵، کار در مورد انتقال kpatch و kGraft به هسته مشترک پچینگ ارائه شده توسط خط اصلی هسته لینوکس در حال انجام است.

### امنیت
امنیت رایانه موضوعی است که بسیار گسترده در رابطه با هسته لینوکس است زیرا بخش بزرگی از اشکالات هسته دارای نقص امنیتی احتمالی است. به عنوان مثال، آنها ممکن است امکان افزایش امتیاز را داشته باشند یا بردارهای حمله ای برای انکار خدمات ایجاد کنند. با گذشت سالها، بسیاری از این نقص‌ها در هسته لینوکس یافت و حل شد. ویژگی‌های امنیتی جدید اغلب برای بهبود امنیت هسته لینوکس پیاده‌سازی می‌شوند.

لینوکس مکانیسم‌های زیادی را برای کاهش سطح حمله هسته و بهبود امنیت که در مجموع به عنوان ماژول‌های امنیتی لینوکس (LSM) شناخته می‌شوند، ارائه می‌دهد. آنها شامل ماژول Security Enhanced Linux (SELinux) هستند که کد آن ابتدا تهیه شده و توسط NSA، و AppArmor در بین دیگران منتشر شده‌است. اکنون SELinux در GitHub به‌طور فعال توسعه و نگهداری می‌شود. SELinux و AppArmor از سیاستهای امنیتی کنترل دسترسی، از جمله کنترل دسترسی اجباری (MAC)، پشتیبانی می‌کنند، هرچند که از نظر پیچیدگی و دامنه بسیار متفاوت هستند.

یکی دیگر از ویژگی‌های امنیتی، Seccomp BPF (Secure Computing با فیلترهای بسته‌بندی Berkeley) است که با فیلتر کردن پارامترها و کاهش مجموعه تماس‌های سیستم موجود برای برنامه‌های کاربر کاربر انجام می‌شود.

منتقدان توسعه دهندگان هسته را متهم کردند که نقص‌های امنیتی را پوشش می‌دهند یا حداقل آنها را اعلام نمی‌کنند. در سال ۲۰۰۸، لینوس توروالدز به این سؤال پاسخ داد:من شخصاً اشکالات امنیتی را فقط «اشکالات عادی» می‌دانم. من آنها را تحت پوشش قرار نمی‌دهم، اما هیچ دلیلی هم ندارم که تا به حال فکر کنم ایده خوبی برای ردیابی آنها و اعلام آنها به عنوان چیز خاصی است … یک دلیل من حاضر به زحمت کشیدن با تمام امنیت نیستم سیرک این است که من فکر می‌کنم آن را ستایش می‌کند - و به همین ترتیب باعث تشویق رفتار نادرست می‌شود. این باعث می‌شود که «قهرمانان» از افراد امنیتی خارج نشوند، به نظر می‌رسد که افرادی که فقط اشکالات عادی را برطرف نمی‌کنند اهمیتی ندارند. در حقیقت، تمام اشکالات طبیعی خسته کننده از اهمیت بیشتری برخوردار هستند، فقط به این دلیل که تعداد بیشتری از آنها وجود دارد. من فکر نمی‌کنم برخی از سوراخ‌های امنیتی دیدنی و جذاب باید مورد تجلیل و مراقبت قرار بگیرند که از این تصادف‌های تماشایی تصادفی به دلیل قفل بد بودن، «ویژه تر» هستند.توزیع‌های لینوکس به‌طور معمول به روزرسانی‌های امنیتی را برای رفع آسیب‌پذیری‌های موجود در هسته لینوکس منتشر می‌کنند. بسیاری از آنها نسخه‌های پشتیبانی طولانی مدت را ارائه می‌دهند که به روزرسانی‌های امنیتی برای نسخه هسته خاص لینوکس را برای مدت زمان طولانی دریافت می‌کنند.

### تاریخ ویژگی
نسخه ۱٫۰ هسته لینوکس در ۱۴ مارس ۱۹۹۴ منتشر شد. این نسخه از هسته لینوکس تنها از سیستم‌های رایانه ای مبتنی بر تک پردازنده i386 پشتیبانی می‌کند. قابلیت حمل و نقل دغدغه ای شد و به همین ترتیب نسخه ۱٫۲ (منتشر شده در ۷ مارس ۱۹۹۵) پشتیبانی از سیستم‌های رایانه ای با استفاده از پردازنده‌های مبتنی بر معماری Alpha , SPARC و MIPS را به‌دست آورد.

نسخه ۲٫۰ در ۹ ژوئن ۱۹۹۶ منتشر شد. این سریال شامل ۴۱ نسخه بود. ویژگی اصلی ۲٫۰ پشتیبانی از پردازش متقارن متقارن (SMP) و پشتیبانی از انواع بیشتری از پردازنده‌ها است.

نسخه ۲٫۲ که در تاریخ ۲۰ ژانویه ۱۹۹۹ منتشر شد، Spinlock جهانی را حذف کرد و پشتیبانی از SMP را بهبود بخشید، پشتیبانی از معماری m68k و PowerPC را اضافه کرد، و سیستم‌های جدید فایل (از جمله پشتیبانی فقط خواندنی برای NTFS مایکروسافت) اضافه کرد. [۱۵۴] در سال ۱۹۹۹، IBM تکمیل‌های خود را برای پشتیبانی از معماری S / 390 کد لینوکس ۲٫۲٫۱۳ منتشر کرد.

نسخه ۲٫۴٫۰، در ۴ ژانویه ۲۰۰۱ منتشر شد، شامل پشتیبانی از کارت‌های ISA Plug and Play , USB و PC است. این برنامه همچنین شامل پشتیبانی از پردازنده PA-RISC از Hewlett-Packard است. توسعه برای 2.4.x کمی تغییر کرده‌است که ویژگی‌های بیشتری در طول مدت سریال از جمله پشتیبانی از بلوتوث، Logical Volume Manager (LVM) نسخه ۱، پشتیبانی RAID , InterMezzo و سیستم‌های پرونده ext3 در دسترس قرار گرفته‌است.

نسخه ۲٫۶٫۰ در ۱۷ دسامبر ۲۰۰۳ منتشر شد. توسعه 2.6.x بیشتر به سمت ویژگی‌های جدید در طول مدت سریال تغییر یافت. از جمله تغییراتی که در سری ۲٫۶ ایجاد شده‌است عبارتند از: ادغام µClinux در منابع هسته اصلی، پشتیبانی PAE، پشتیبانی از چندین خط جدید پردازنده، ادغام معماری پیشرفته پیشرفته لینوکس (ALSA) در منابع هسته اصلی، پشتیبانی از تا ۲۳۲ کاربر (از ۲۱۶ مورد)، پشتیبانی از ۲۲۹ شناسه پردازش (فقط ۶۴ بیتی، آرکهای ۳۲ بیتی هنوز محدود به ۲۱۵)، به‌طور قابل ملاحظه ای تعداد انواع دستگاه‌ها و تعداد دستگاه‌های هر یک را افزایش داد. نوع، پشتیبانی ۶۴ بیتی بهبود یافته، پشتیبانی از سیستم‌های پرونده ای که اندازه پرونده تا ۱۶ ترابایت را پشتیبانی می‌کنند، پیش پردازش درون هسته، پشتیبانی از کتابخانه موضوع بومی POSIX (NPTL)، ادغام لینوکس در حالت کاربری در منابع هسته اصلی، SELinux ادغام در منابع هسته اصلی، پشتیبانی از InfiniBand و موارد قابل توجهی دیگر. همچنین قابل توجه اضافه شدن چندین سیستم فایل در سراسر نسخه‌های 2.6.x: FUSE , JFS , XFS , ext4 و موارد دیگر. جزئیات مربوط به تاریخچه سری هسته‌های ۲٫۶ را می‌توان در پرونده‌های ChangeLog در منطقه انتشار کد منبع سری ۲٫۶ هسته kernel.org یافت.

نسخه ۳٫۰ در ۲۲ ژوئیه ۲۰۱۱ منتشر شد. در تاریخ ۳۰ مه ۲۰۱۱، توروالدز اعلام کرد که تغییر بزرگ «هیچ چیز نیست. مطلقاً هیچ چیز» نیست؛ و پرسید، «... مطمئن شوید که ما واقعاً نسخه بعدی را نه فقط یک عدد براق جدید، بلکه یک هسته خوب نیز تولید خواهیم کرد.» پس از هفت– ۶–۷ مورد انتظار از روند توسعه، آن منتشر می‌شود. نزدیک به بیستمین سالگرد لینوکس.

در ۱۱ دسامبر ۲۰۱۲، توروالدز تصمیم گرفت با از بین بردن پشتیبانی از پردازنده‌های i386، پیچیدگی هسته را کاهش دهد، و این سری ۳٫۷ هسته را به عنوان آخرین نسخه پردازنده اصلی پشتیبانی کند. همان سری پشتیبانی یکپارچه برای پردازنده ARM.

نسخه ۳٫۱۱ ، منتشر شده در ۲ سپتامبر ۲۰۱۳، بسیاری از ویژگی‌های جدید مانند پرچم جدید O_TMPFILE را برای بازکردن (۲) به منظور کاهش آسیب‌پذیری پرونده‌های موقتی، مدیریت توان پویا AMD Radeon، رای‌گیری در شبکه با تأخیر کم و zswap (مبادله فشرده) اضافه می‌کند. حافظه نهان).

نسخه ۵٫۰ ، منتشر شده در سال ۲۰۱۹، شامل تکه‌هایی برای آسیب‌پذیری‌های امنیتی Spectre و Meltdown و سایر ویژگی‌های دیگر است.

تغییر عددی از ۲٫۶٫۳۹ به ۳٫۰ و از ۳٫۱۹ به ۴٫۰ تغییر فاقد تفاوت فنی معنی دار است. برای جلوگیری از اعداد جزئی جزئی، تعداد نسخه اصلی افزایش یافته‌است.

## توسعه



### جامعه توسعه دهنده
به‌طور کلی فرض بر این است که جامعه توسعه دهندگان هسته لینوکس ۵۰۰۰ یا ۶۰۰۰ عضو دارد. با توجه به "وضعیت توسعه هسته لینوکس ۲۰۱۷"، یک مطالعه صادر شده توسط بنیاد لینوکس، که شامل تعهدات نسخه‌های ۴٫۸ تا ۴٫۱۳ است، حدود ۱۵۰۰ توسعه دهنده به‌طور متوسط از حدود ۲۰۰–۲۵۰ شرکت کمک می‌کنند. ۳۰ توسعه دهنده برتر کمی بیشتر از ۱۶٪ کد را تشکیل می‌دهند. از نظر شرکت‌ها، بیشترین مشارکت کنندگان اینتل (۱۳٫۱٪) و (Red Hat (7.2%، لینارو (۵٫۶٪)، (IBM (4.1% هستند، مکان‌های دوم و پنجم توسط "هیچ کس" (۸٫۲٪) و دسته‌های "ناشناخته" (۴٫۱٪).

به جای نقشه راه، دستورالعمل‌های فنی وجود دارد. به جای تخصیص منابع مرکزی، اشخاص و شرکت‌هایی وجود دارند که همگی به‌طور کاملاً مستقل از یکدیگر در توسعه بیشتر هسته لینوکس سهیم هستند: افرادی مانند لینوس توروالدز و من توسعه هسته را برنامه‌ریزی نمی‌کنیم. ما در آنجا فقط نمی‌نشینیم ما فکر برای دو سال آینده نقشه راه را بررسی می‌کنیم، سپس منابع را به ویژگی‌های مختلف جدید اختصاص می‌دهیم. این به این دلیل است که ما هیچ منبعی نداریم. این منابع متعلق به شرکت‌های مختلفی است که از لینوکس استفاده می‌کنند و به آن کمک می‌کنند و همچنین مشارکت کنندگان مختلف مستقل خارج از آن. این افراد صاحب منابع هستند که تصمیم می‌گیرند … __اندرو مورتون، ۲۰۰۵

### مدیریت کد منبع
انجمن توسعه هسته لینوکس از Git برای مدیریت کد منبع هسته استفاده می‌کند. لینوس توروالدز در ابتدا این سیستم کنترل نسخه را با سرعت در ذهن و به عنوان یک سیستم توزیع شده توسعه داد. کاربران Git می‌توانند آخرین نسخه هل شده درخت توروالدز را به‌دست آورند و با استفاده از کشش git، هسته رسمی هسته را به روز کنید. کد منبع هسته با فرمت GNU (gzip) و قالب bzip2 توزیع می‌شود. کمک‌های کد منبع توسط توسعه دهندگان به صورت تکه‌ها ارائه می‌شوند و تغییرات افزایشی در کد منبع هسته به این معنی است که توسعه دهندگان می‌توانند یکپارچه از یک نسخه هسته لینوکس به نسخه بعدی منتقل شوند.

### ارسال کد به هسته
توسعه دهنده ای که می‌خواهد هسته لینوکس را تغییر دهد، با توسعه و آزمایش آن تغییر شروع می‌کند. بسته به اینکه چقدر تغییر قابل توجه است و چند سیستم فرعی آن را تغییر می‌دهد، این تغییر یا به صورت یک پچ منفرد یا در تکه‌های مختلف کد منبع ارائه می‌شود. در صورت وجود سیستم فرعی منفرد که توسط یک نگهدارنده منفرد نگهداری می‌شود، این لک‌ها به صورت ایمیل به نگهدارنده زیر سیستم با لیست پستی مناسب در سی سی ارسال می‌شوند. نگهدارنده و خوانندگان لیست پستی، تکه‌ها را مرور کرده و بازخورد را ارائه می‌دهند. پس از اتمام روند بررسی، نگهدارنده سیستم فرعی تکه‌های موجود در درخت هسته Git مربوط را می‌پذیرد. اگر تغییرات در هسته لینوکس رفع اشکال باشد که به اندازه کافی مهم تلقی می‌شوند، درخواست برداشت برای وصله‌ها طی چند روز به توروالدز ارسال می‌شود. در غیر اینصورت، یک درخواست کشش در پنجره ادغام بعدی به توروالدز ارسال می‌شود. پنجره ادغام معمولاً دو هفته طول می‌کشد و بلافاصله پس از انتشار نسخه هسته قبلی شروع می‌شود. درخت منبع هسته Git از همه برنامه نویسان که در دایرکتوری Credits به هسته لینوکس کمک کرده‌اند نام می‌برد و تمام نگهدارنده‌های سیستم‌های زیر سیستم در Maintainers ذکر شده‌اند.

### زبان برنامه‌نویسی و سبک برنامه‌نویسی
هسته لینوکس در نسخه زبان برنامه‌نویسی C پشتیبانی شده توسط GCC (که تعدادی پسوند و تغییر در استاندارد C را معرفی کرده‌است)، همراه با تعدادی بخش کوتاه از کد که به زبان اسمبلی نوشته شده‌است (به زبان ATC و GCC) نوشته شده‌است. «نحوی» سبک) از معماری هدف. GCC به دلیل برنامه افزودنی در C که پشتیبانی می‌کند، مدت طولانی بود که تنها کامپایلری بود که قادر به ساخت صحیح هسته لینوکس بود. از سال ۲۰۰۲، کلیه کدها باید به ۲۱ قانونی که شامل سبک کدگذاری هسته Linux است، رعایت کنند.

### ابزار دستی گنو
مجموعه کامپایلر GNU (GCC یا GNU cc) کامپایلر پیش فرض برای منبع اصلی هسته لینوکس است و توسط یک ابزار بنام make ساخته می‌شود. سپس GNU Assembler (که اغلب به آن GAS یا GNU گفته می‌شود) برای تولید پرونده‌های شیء از مونتاژ تولید شده GCC استفاده می‌شود. سپس GNU Linker (GNU ld) برای تولید یک پرونده هسته اجرایی لینوکس قابل اجرا به نام vmlinux استفاده می‌شود. as و ld بخشی از بسته‌ای به نام GNU binutils است. ابزارهای فوق به صورت جمعی به عنوان ابزار GNU شناخته می‌شوند.

### سازگاری کامپایلر
در سال ۲۰۰۴، اینتل ادعا کرد که هسته را تغییر داده‌است به طوری که کامپایلر C آن نیز قادر به تهیه آن است. یک موفقیت گزارش شده دیگر در سال ۲۰۰۹ با نسخه ۲٫۶٫۲۲ اصلاح شده هسته وجود دارد.

از سال ۲۰۱۰، تلاش شده‌است هسته هسته لینوکس با Clang، یک کامپایلر جایگزین برای زبان C ساخته شود. از ۱۲ آوریل ۲۰۱۴، هسته رسمی تقریباً می‌توانست توسط Clang وارد شود. پروژه اختصاص داده شده به این تلاش پس از زیرساخت‌های کامپایلر LLVM که کلنگ در آن ساخته شده‌است، LLVMLinux نامگذاری شده‌است. LLVMLinux هدف این نیست که هسته هسته لینوکس یا LLVM را چنگ بزند، بنابراین این یک متا پروژه است که متشکل از تکه‌هایی است که در نهایت به پروژه‌های بالادست ارسال می‌شوند. با فعال کردن هسته لینوکس توسط Clang که علاوه بر سایر مزایای آن، در مقایسه سریعتر از GCC برای کامپایل سریعتر شناخته شده‌است، توسعه دهندگان هسته ممکن است به دلیل زمان کوتاه‌تر از تدوین از گردش کار سریعتر بهره‌مند شوند.

### اشکال زدایی هسته
اولاً به دلیل تعامل هسته با فضای کاربری و سخت‌افزار و در مرحله دوم کشف و رفع اشکالات لینوکس بسیار دشوار است، و دوم اینکه به دلیل دلایل گسترده‌تری از دلایلی است که می‌تواند بر برنامه‌های کاربر تأثیر بگذارد. چند نمونه از دلایل اساسی عبارتند از: خطاهای معنایی در کد، استفاده نادرست از ابتدای همگام سازی و مدیریت نادرست سخت‌افزار.

گزارش یک اشکال غیر کشنده در هسته «اوه» نامیده می‌شود. چنین انحرافاتی از رفتار صحیح هسته لینوکس ممکن است با قابلیت اطمینان به کار گرفته شده ادامه کار دهد.

یک خطای مهم و کشنده از طریق عملکرد "panic ()" گزارش می‌شود. این یک پیام را چاپ می‌کند و سپس هسته را متوقف می‌کند.

یکی از رایج‌ترین تکنیک‌هایی که برای کشف اشکالات کد استفاده می‌شود، اشکال زدایی با چاپ است. برای این منظور Linux یک API درون هسته ای به نام printk () فراهم می‌کند که پیام‌ها را در یک بافر دایره ای ذخیره می‌کند. فراخوان سیستم syslog (2) برای خواندن و / یا پاکسازی بافر زنگ پیام هسته و تنظیم حداکثر سطح ورود پیام‌های ارسال شده به کنسول (یعنی یکی از هشت پارامتر KERN_ * printk ()، که شدت وضعیت گزارش شده را نشان می‌دهد)؛ معمولاً از طریق پوشه glibC klogctl فراخوانی می‌شود (۳). پیام‌های هسته نیز از طریق رابط / dev / kmsg به سرزمین کاربر صادر می‌شوند (به عنوان مثال systemd-journald آن رابط را می‌خواند و به‌طور پیش فرض پیام‌ها را به / var / log / journal اضافه می‌کند)

یکی دیگر از روشهای اساسی برای اشکال زدایی هسته در حال اجرا، ردیابی است. مکانیسم ftrace یک ردیاب داخلی لینوکس است. این برنامه برای نظارت و اشکال زدایی لینوکس در زمان اجرا استفاده می‌شود و همچنین می‌تواند تأخیر فضای کاربر را به دلیل رفتار نامناسب هسته تجزیه و تحلیل کند. به‌علاوه، ftrace به کاربران امکان می‌دهد تا در زمان راه اندازی لینوکس را ردیابی کنند.

kprobes و kretprobes می‌توانند (مانند اشکال زدایی در فضای کاربر) به لینوکس نفوذ کرده و بدون اخلال اطلاعات را جمع‌آوری کنند. kprobes را می‌توان با تقریباً هر آدرس در کد وارد کرد، در حالی که kretprobes در بازگشت عملکرد کار می‌کند. اهداف هدیه سازی مشابه هستند اما تفاوت‌هایی نیز در کاربرد و اجرا دارند.

### مدل توسعه
پروژه هسته لینوکس کدهای جدید را به صورت غلتان ادغام می‌کند. نرم‌افزار بررسی شده در پروژه باید بدون خطا کار کرده و کامپایل شود. برای هر زیر سیستم هسته نگهدارنده ای وجود دارد که وظیفه بازنگری تکه‌های موجود در برابر استانداردهای کد هسته را بر عهده دارد و صف تکه‌هایی را که می‌تواند در یک پنجره ادغام چند هفته به لینوس توروالدز ارسال شود، نگه می‌دارد. تکه‌ها توسط توروالدز در کد منبع انتشار هسته پایدار لینوکس ادغام می‌شوند، و نامزدی برای انتشار -rc را برای هسته پایدار بعدی ایجاد می‌کنند. پس از بسته شدن پنجره ادغام، فقط رفع کد جدید در نسخه توسعه پذیرفته می‌شود. نسخه هسته توسعه هسته از آزمایش‌ها رگرسیون عبور می‌کند و به محض اینکه ثبات توسط توروالدز قضاوت شود و سیستم‌های نگهباننده زیر سیستم هسته یک هسته جدید لینوکس منتشر می‌شود و روند توسعه دوباره از سر گرفته می‌شود.

توسعه دهندگان که با آنها رفتار ناعادلانه ای دارند می‌توانند این موضوع را به هیئت مشاوره فنی بنیاد لینوکس گزارش دهند. در ژوئیه ۲۰۱۳، نگهدارنده درایور USB 3.0، سارا شارپ از توروالدز خواست تا در مورد تفسیر توهین آمیز در جامعه توسعه هسته صحبت کند. در سال ۲۰۱۴، شارپ از توسعه هسته لینوکس خودداری کرد و گفت: "تمرکز بر تعالی فنی، در کنار نگهدارنده‌های بیش از حد بار، و افرادی که دارای هنجارهای فرهنگی و اجتماعی مختلف هستند، بدان معنی است که نگهدارنده‌های هسته لینوکس غالباً بی پروا، بی ادب یا وحشیانه هستند. کارشان انجام شده‌است " در کنفرانس linux.conf.au (LCA) در سال ۲۰۱۸، توسعه دهندگان معتقد بودند که فرهنگ جامعه در چند سال گذشته بسیار بهتر شده‌است. دانیل وتر، نگهدارنده درایور گرافیکی Intel drm / i915، اظهار داشت که "زبان و بحث نسبتاً خشونت آمیز" در جامعه هسته کاهش یافته یا ناپدید شده‌است.

لوران پینچارت از توسعه دهندگان خواست تا بازخورد خود را در مورد تجربه خود با جامعه هسته در کنفرانس لینوکس اروپا ۲۰۱۷ جاسوسی شده بازخورد کنند. موضوعات مطرح شده چند روز بعد در اجلاس سرآمدان بحث و گفتگو شد. نگرانی از عدم سازگاری در نحوه پاسخ دهی به نگهدارندگان به تکه‌های ارسال شده توسط توسعه دهندگان توسط شواه خان، نگهدار چارچوب خودآزمایی هسته ابراز شد. توروالدز اظهار داشت که هیچگاه سازگاری در اداره پچ‌ها وجود نخواهد داشت زیرا زیر سیستم‌های مختلف هسته به مرور زمان فرایندهای مختلف توسعه را اتخاذ کرده‌اند؛ بنابراین، توافق شد که هر نگهدارنده زیر سیستم هسته ای قوانین مربوط به پذیرش پچ را مستند سازد.

### چنگالهای لینوکس
انجمن‌های خاصی وجود دارند که هسته‌ها را بر اساس لینوکس رسمی توسعه می‌دهند. چند کد جالب از این فورک‌ها (به عنوان مثال، اصطلاح عامیانه به معنی "پروژه‌های مشتق شده") که شامل Linux-libre , Compute Node Linux , INK , L4Linux , RTLinux و User-Mode Linux (UML) در خط اصلی ادغام شده‌اند. برخی از سیستم عامل‌های توسعه یافته برای تلفن‌های همراه در ابتدا از نسخه‌های به شدت اصلاح شده لینوکس استفاده می‌کردند، از جمله Google Android , Firefox OS , HP webOS , Nokia Maemo و Jolla Sailfish OS. در سال ۲۰۱۰، جامعه لینوکس از Google انتقاد کرد که به‌طور مؤثر درخت هسته خود را شروع کرده‌است:این بدان معنی است که هر درایوری که برای سیستم عامل‌های سخت‌افزاری Android نوشته شده باشد، نمی‌تواند در درخت هسته اصلی ادغام شود زیرا وابستگی آنها به کدی است که فقط در درخت هسته Google زندگی می‌کند و باعث می‌شود تا در درخت kernel.org ایجاد نشود. به همین دلیل، گوگل در حال حاضر از ادغام تعداد زیادی از درایورهای سخت‌افزار و کد پلتفرم در درخت هسته اصلی جلوگیری کرده‌است. ایجاد یک شاخه هسته به‌طور مؤثر که تعدادی از فروشندگان مختلف اکنون به آن اعتماد می‌کنند.- Greg Kroah-Hartman، 2010امروز اندروید از لینوکس کمی سفارشی استفاده می‌کند که در آن تغییراتی در درایورهای دستگاه اعمال می‌شود، بنابراین تغییر کمی در کد هسته وجود دارد. توسعه دهندگان اندروید همچنین تکه‌هایی را به لینوکس رسمی ارسال می‌کنند که در نهایت می‌توانند سیستم عامل اندروید را بوت کنند. به عنوان مثال، یک Nexus 7 می‌تواند لینوکس اصلی را راه اندازی و اجرا کند.

### درگیری‌های جامعه توسعه
چندین درگیری برجسته بین توسعه دهندگان هسته لینوکس وجود داشته‌است. نمونه‌هایی از چنین درگیری‌ها عبارتند از:
* در ژوئیه ۲۰۰۷، کن کولیواس اعلام کرد که او تمایل به توقف توسعه هسته لینوکس خواهد داشت. وی در مورد دلایل خود در مصاحبه، ابراز ناامیدی از جنبه‌های روند اصلی توسعه هسته، که احساس می‌کند اولویت کافی به تعامل دسک تاپ نمی‌دهد، علاوه بر هک کردن، بر سلامت، کار و خانواده خود نیز تأثیر گذاشت.
* در ژوئیه ۲۰۰۹، آلن کاکس پس از عدم توافق با لینوس توروالدز در مورد دامنه کار مورد نیاز برای رفع خطا در آن زیر سیستم، از نقش خود به عنوان نگهدارنده لایه TTY کناره‌گیری کرد.
* در دسامبر ۲۰۱۰، بین جیمز بوتوملی، نگهدارنده SCSI و ولادیسلاو بولخوویتین، نگهدارنده SCST، بحثی صورت گرفت که پشته هدف SCSI را باید در هسته لینوکس - SCST یا LIO قرار داد. اگرچه در آن زمان SCST از نظر فنی برتر محسوب می‌شد، LIO در بالادست ادغام می‌شد. این باعث ناراحتی برخی از کاربران لینوکس شد.
* در ژوئن سال ۲۰۱۲، توروالدز با نشان دادن ژست انگشت میانی موافقت نکرد که NVIDIA درایور خود را به عنوان درایور منبع بسته آزاد کند.
* در آوریل ۲۰۱۴، توروالدز کی Sievers را به دلیل عدم برخورد با ایراداتی که باعث تعامل منفی سیستم با هسته می‌شود، از ارسال تکه‌هایی به هسته لینوکس منع کرد.
* در اکتبر سال ۲۰۱۴، لنارت پواترینگ توروالدز را متهم کرد که تحمل شیوه بحث و جدل در لیست‌های پستی مربوط به هسته لینوکس و تحمل الگوی نقش بد را دارد.
* در مارس ۲۰۱۵، کریستوف هلویگ به دلیل نقض کپی رایت در هسته لینوکس شکایتی علیه VMware انجام داد. لینوس توروالدز با فراخواندن وکلا به یک بیماری لکه دار، اظهار داشت که او با این و ابتکارات مشابه موافق نیست.

توسعه دهندگان برجسته هسته لینوکس از اهمیت اجتناب از درگیری بین توسعه دهندگان آگاه بوده‌اند. به دلیل مخالفت لینوس توروالدز مدت طولانی است که هیچ کد رفتاری برای توسعه دهندگان هسته وجود ندارد. با این حال، یک کد تضاد هسته هسته لینوکس در ۸ مارس ۲۰۱۵ معرفی شد. این همزمان با یک عذرخواهی عمومی توسط لینوس و مختصری از توسعه هسته بود. در تاریخ ۳۰ نوامبر ۲۰۱۸، مطابق با آیین‌نامه رفتار، Jarkko Sakkinen از اینتل تکه‌هایی را جایگزین نمونه‌های «فاک» که در کامنت‌های منبع منبع با نسخه‌های مناسب متمرکز بر کلمه 'آغوش' ارسال شده‌است.

### کد پایه
از سال ۲۰۲۱، نسخه ۵٫۱۲ هسته لینوکس حدود ۳۰٫۵۵ میلیون خط کد داشت، تقریباً ۱۴٪ کد بخشی از «هسته» است در حالی که ۶۰٪ درایور هستند.

لینوکس تکامل است، نه طراحی هوشمندانه!
- لینوس توروالدز، ۲۰۰۵

### برآورد هزینه برای توسعه مجدد
هزینه بازسازی هسته هسته لینوکس نسخه ۲٫۶٫۰ در یک برنامه توسعه اختصاصی سنتی ۶۱۲ میلیون دلار (۴۶۷ میلیون یورو، ۳۹۴ میلیون پوند) در سال ۲۰۰۴ با استفاده از مدل تخمین مرد COCOMO محاسبه شده‌است. در سال ۲۰۰۶، مطالعه ای که توسط اتحادیه اروپا تأمین شده بود، هزینه بازسازی هسته نسخه ۲٫۶٫۸ هسته را با ۸۸۲ میلیون یورو بیشتر (۱٫۱۴ میلیارد دلار، ۷۴۴ میلیون پوند) بیشتر کرد.

این موضوع در اکتبر سال ۲۰۰۸ توسط آماندا مک فرسون، برایان Proffitt و ران هیل اوانز بررسی شد. آنها با استفاده از روش دیوید ا. ویلر، تخمین زدند که بازسازی هسته ۲٫۶٫۲۵ هسته در حال حاضر ۱٫۳ میلیارد دلار (بخشی از ۱۰٫۸ میلیارد دلار برای توسعه مجدد فدورا ۹) هزینه دارد. باز هم، گارسیا-گارسیا و آلونسو د مگدالنو از دانشگاه اوویدو (اسپانیا) تخمین می‌زنند که ارزش سالانه به کرنل اضافه می‌شود بین سال‌های ۲۰۰۵ تا ۲۰۰۷ حدود ۱۰۰ میلیون یورو و ۲۲۵ میلیون یورو در سال ۲۰۰۸ بود، این هزینه نیز بیش از ۱ میلیارد یورو (حدود ۱٫۴ میلیارد دلار) از فوریه ۲۰۱۰) برای توسعه در اتحادیه اروپا.

از تاریخ ۷ مارس ۲۰۱۱، با استفاده از LOC فعلی (خطوط کد) هسته 2.6.x لینوکس و شماره‌های دستمزد با محاسبات دیوید ویلر، تقریباً ۳ میلیارد دلار (حدود ۲٫۲ میلیارد یورو) برای بازسازی هسته لینوکس هزینه می‌شود. بزرگتر می‌شود یک محاسبه به روز شده از تاریخ ۲۶ سپتامبر ۲۰۱۸، با استفاده از ۲۰٬۰۸۸،609 LOC فعلی (خط کد) برای هسته هسته 4.14.14 Linux و میانگین برنامه نویسان فعلی ملی ایالات متحده ۷۵۵۰۶ دلار، نشان می‌دهد که این مقدار تقریباً ۱۴٬۷۲۵٬۴۴۹٬۰۰۰ دلار (۱۱٬۱۹۱٬۳۴۱٬۰۰۰ پوند) به کد موجود را بازنویسی کنید.

### تعمیر و نگهداری و پشتیبانی طولانی مدت
آخرین نسخه هسته و نسخه‌های قدیمی تر هسته به‌طور جداگانه نگهداری می‌شوند. جدیدترین نسخه‌های هسته توسط لینوس توروالدز تحت نظارت بود. نسخه‌های فعلی توسط گرگ Kroah-Hartman منتشر می‌شود.

انجمن توسعه دهنده هسته لینوکس با استفاده از اصلاحاتی برای اشکالات نرم‌افزاری که در طی توسعه هسته پایدار بعدی کشف شده‌است هسته پایدار را حفظ می‌کند؛ بنابراین، www.kernel.org همیشه دو هسته پایدار را فهرست می‌کند. هسته پایدار بعدی لینوکس اکنون فقط ۸ تا ۱۲ هفته بعد منتشر شد؛ بنابراین، نگهدارنده‌های هسته لینوکس برخی از نسخه‌های هسته پایدار را به عنوان طولانی مدت تعیین کرده‌اند، این هسته‌های پشتیبانی طولانی مدت لینوکس با دو رفع اشکال به مدت دو یا چند سال به روز می‌شوند. در نوامبر ۲۰۱۹ پنج هسته طولانی مدت لینوکس وجود داشت: ۴٫۱۹٫۸۴، ۴٫۱۴٫۱۵۴، ۴٫۹٫۲۰۱، ۴٫۴٫۲۰۱ و ۳٫۱۶٫۷۶. لیست کامل نسخه‌ها در تاریخ نسخه هسته لینوکس است.

### ارتباط با توزیع‌های لینوکس
اکثر کاربران لینوکس هسته ای را تهیه می‌کنند که توسط توزیع لینوکس آنها تهیه شده‌است. برخی توزیع‌ها هسته‌های «وانیل» یا «پایدار» را ارسال می‌کنند. با این حال، چندین توزیع کننده توزیع لینوکس (مانند رد هت و دبیان) مجموعه دیگری از شاخه‌های هسته لینوکس را که در محصولات آنها ادغام شده‌اند، حفظ می‌کنند. این موارد معمولاً در مقایسه با شاخه «وانیل» با سرعت کمتری به روز می‌شوند و معمولاً کلیه اصلاحات از شاخه «پایدار» مربوط را شامل می‌شوند، اما در همان زمان می‌توانند پشتیبانی از درایورها یا ویژگیهایی را که هنوز منتشر نشده‌اند نیز اضافه کنند. نسخه «وانیل» که فروشنده توزیع آن را شروع کرده‌است.

## جنبه‌های حقوقی
### شرایط صدور مجوز GPLv2
هسته لینوکس تحت مجوز عمومی GNU نسخه 2 (GPLv2) منتشر شده‌است، با برخی از تصاویر سیستم عامل تحت مجوزهای مختلف غیر آزاد منتشر می‌شود. در ابتدا، توروالدز لینوکس را تحت مجوز منتشر کرد که هرگونه استفاده تجاری را ممنوع می‌کرد. این تغییر در نسخه ۰٫۱۲ با سوئیچ به مجوز عمومی GNU نسخه 2 (GPLv2) تغییر یافته‌است. این مجوز امکان توزیع و فروش نسخه‌های احتمالاً تغییر یافته و اصلاح نشده از لینوکس را فراهم می‌کند اما مستلزم آن است که تمام این نسخه‌ها با همان مجوز منتشر شوند و با کد منبع کامل مربوط همراه شوند. توروالدز مجوز لینوکس تحت GPLv2 را «بهترین کاری که من تا به حال انجام داده‌ام» توصیف کرده‌است.

هسته لینوکس صریحاً تحت نسخه 2 GPL مجاز است، بدون ارائه مجوز گزینه برای انتخاب «هر نسخه بعدی»، که یک پسوند رایج GPL است. بحث قابل توجهی در مورد چگونگی تغییر مجوز برای استفاده از نسخه‌های بعدی GPL (از جمله نسخه ۳) وجود دارد، و اینکه آیا این تغییر حتی مطلوب است یا خیر. توروالدز خود به‌طور خاص پس از انتشار نسخه ۲٫۴٫۰ اعلام کرد که کد شخصی وی فقط تحت نسخه ۲ منتشر می‌شود. با این حال، شرایط GPL بیان می‌کند که اگر نسخه ای مشخص نشده باشد، ممکن است از هر نسخه استفاده شود و آلن کاکس خاطرنشان کرد. تعداد معدودی از مشارکت کنندگان دیگر لینوکس نسخه خاصی از GPL را مشخص کرده بودند.

در سپتامبر ۲۰۰۶، بررسی ۲۹ برنامه‌نویس هسته اصلی نشان داد که 28 GPLv2 را به پیش نویس GPLv3 آن زمان ترجیح می‌دهند. توروالدز اظهار داشت: «من فکر می‌کنم تعدادی از افراد خارجی … معتقد بودند که من شخصاً فقط یک فرد عجیب و غریب هستم زیرا من خیلی علناً طرفداران بزرگی از GPLv3 نبودم.» این گروه از توسعه دهندگان هسته با مشخصات بالا، از جمله توروالدز , Greg Kroah-Hartman و Andrew Morton، دربارهٔ رسانه‌های جمعی دربارهٔ اعتراضات خود به GPLv3 اظهار نظر کردند. آنها به بندهای مربوط به DRM / tivoization، اختراعات ثبت شده، «محدودیت‌های اضافی» اشاره کردند و به بالکن سازی «جهان منبع باز» توسط GPLv3 هشدار دادند. لینوس توروالدز، که تصمیم به اتخاذ GPLv3 برای هسته لینوکس را نگرفت، حتی سالها بعد انتقادهای خود را دوباره تکرار کرد.

### ماژول‌های هسته قابل بارگیری
بحث می‌شود که آیا ماژول‌های هسته قابل بارگذاری (LKMs) طبق قانون کپی رایت در نظر گرفته می‌شوند و از این طریق تحت شرایط GPL قرار می‌گیرند.

توروالدز عقیده خود را ابراز کرد که LKMهایی که فقط از زیر مجموعه‌های «عمومی» محدود از رابط‌های هسته استفاده می‌کنند، بعضی اوقات می‌توانند آثار غیر مشتق شده باشند، بنابراین برخی از درایورهای باینری فقط و سایر LKMهایی که تحت GPL مجوز ندارند مجاز می‌شوند. مثال خوبی برای این کار استفاده از dma_buf توسط درایورهای اختصاصی گرافیک انویدیا است. dma_buf یکی از ویژگی‌های هسته اخیر است (مانند بقیه هسته‌ها، تحت مجوز GPL مجوز می‌یابد)، که به چندین GPU اجازه می‌دهد تا به سرعت داده‌ها را در قاب‌های یکدیگر کپی کنند. یک مورد استفاده ممکن Nvidia Optimus است که یک پردازنده گرافیکی سریع را با یک پردازنده گرافیکی داخلی یکپارچه Intel جفت می‌کند، جایی که GPU Nvidia هنگام فعال کردن آن درون قاب فریم Intel می‌نویسد. اما، انویدیا نمی‌تواند از این زیرساخت‌ها استفاده کند زیرا از یک ابزار فنی برای اجرای این قاعده استفاده می‌کند که فقط توسط LKMهایی که GPL نیز هستند قابل استفاده هستند. آلن کاکس در LKML پاسخ داد، درخواست یکی از مهندسان آنها را برای حذف این اجرای فنی از API رد کرد. با این حال، همه همکاران هسته لینوکس با این تفسیر موافق نیستند، و با این وجود حتی توروالدز موافق است که بسیاری از LKMها به‌طور واضح تولید شده‌اند، و در واقع او می‌نویسد که «ماژول‌های هسته به‌طور پیش فرض مشتق شده‌اند».

از طرف دیگر، توروالدز همچنین گفته‌است که: "یک قسمت خاکستری مخصوصاً چیزی شبیه به درایور است که در ابتدا برای سیستم عامل دیگری نوشته شده‌است (یعنی به‌طور واضح یک اثر مشتق از لینوکس نیست). این یک منطقه خاکستری است، و _that_ منطقه ای است که من شخصاً معتقدم ممکن است برخی از ماژول‌ها به دلیل اینکه برای لینوکس طراحی نشده‌اند و به هیچ رفتار ویژه لینوکس وابسته نیستند، به نظر نمی‌رسد که تولید نشوند. به ویژه، درایورهای گرافیکی اختصاصی به شدت مورد بحث قرار می‌گیرند. در نهایت، این احتمال وجود دارد که چنین سؤالاتی فقط توسط یک دادگاه حل شود.

### حباب‌های باینری سیستم عامل
یک نکته بحث‌برانگیز قابلیت هسته لینوکس برای جستجوی، بارگیری و پیوند فریمور «حباب‌های باینری» برای پشتیبانی از چندین دستگاه سخت‌افزاری است. این پرونده‌ها دارای مجوزهای مختلفی هستند که از این تعداد بسیاری محدود کننده هستند و کد منبع اصلی آنها معمولاً ناشناخته است.

هسته رسمی، یعنی شعبه git Linus در مخزن kernel.org، هیچ نوع کد اختصاصی ندارد؛ با این وجود لینوکس می‌تواند سیستم‌های فایل را برای یافتن سیستم عامل اختصاصی، درایورها و سایر ماژول‌های اجرایی جستجو کند، سپس می‌تواند آنها را به فضای هسته بارگذاری و پیوند دهد. هرگاه ماژول‌های اختصاصی به لینوکس بارگذاری می‌شوند، هسته خود را «لکه دار» می‌کند و بنابراین گزارش‌های مربوط به اشکالات هسته‌های رنگی اغلب توسط توسعه دهندگان نادیده گرفته می‌شوند.

این که آیا مورد نیاز است (برای مثال، برای دسترسی به دستگاه‌های بوت یا سرعت) می‌تواند به هسته هسته تبدیل شود، این به معنی ساختن سیستم عامل به vmlinux است. با این حال، این همیشه گزینه ای مناسب برای مسائل فنی یا حقوقی نیست (به عنوان مثال، اجازه نمی‌دهد سیستم عامل‌هایی که غیر GPL سازگار باشند) مجاز باشند.

### علامت تجاری
لینوکس یک علامت تجاری ثبت شده از لینوس توروالدز در ایالات متحده، اتحادیه اروپا و برخی کشورهای دیگر است. این نتیجه حادثه ای است که در آن ویلیام دلا کروسی، جونیور، که درگیر پروژه لینوکس نبود، نام این مارک تجاری را صادر کرد و متعاقباً برای استفاده از آن حق تقاضای حق امتیاز گرفت. چندین پشتیبان لینوکس مشاوره حقوقی خود را حفظ کرده و علیه دلا کروه شکایت کردند. این موضوع در اوت ۱۹۹۷ هنگامی که مارک تجاری به لینوس توروالدز واگذار شد، حل و فصل شد.

## جستارهای وابسته
* هسته رایانش
* هسته یکپارچه (Monolithic kernel)
* ریزهسته (Micro kernel)
* هسته ترکیبی (hybrid kernel)
* برون کرنل (Exo-kernel)
* مایکروسافت ویندوز
* مک او اس

## منابع

* 
* Rusling, David. *The Linux Kernel*
* Bovet, Daniel و Cesati, Macro. *Understanding the Linux Kernel*, 3rd edition November 2005. O'Reilly publications

## پیوند به بیرون
* kernel.org - آرشیو رسمی کرنل‌های لینوکس

رده:اختراع‌های فنلاندی
رده:سیستم‌عامل‌ها
رده:علوم رایانه
رده:گونه‌های یونیکس
رده:لینوس توروالدز
رده:نرم‌افزار آزاد و متن‌باز
رده:نرم‌افزارهای آزاد برنامه‌نویسی‌شده با اسمبلی
رده:نرم‌افزارهای آزاد نوشته‌شده با سی
رده:نرم‌افزارهای ۱۹۹۱ (میلادی)
رده:نرم‌افزارهای سیستمی آزاد
رده:نرم‌افزارهایی که از پروانه جی‌پی‌ال استفاده می‌کنند
هسته لینوکس
رده:هسته‌های یکپارچه