هسته لینوکس

از ویکی‌پدیا، دانشنامهٔ آزاد
لینوکس
Tux
Tux پنگون نماد خوش شانسی هسته لینوکس است[۱]
Linux 3.0.0 boot.png
کرنل لینوکس 3.0.0 در حال بالا آمدن (بوت شدن)
توسعه‌دهنده(ها)لینوس توروالدز و هزاران توسعه‌دهنده دیگر
انتشار ابتدایی1991
انتشار پایدار
5.9.6
۵ نوامبر ۲۰۲۰؛ ۲۹ روز پیش (۲۰۲۰-۱۱-05)
انتشار آزمایشی
5.10 آرسی 2
۱ نوامبر ۲۰۲۰؛ ۳۳ روز پیش (۲۰۲۰-۱۱-01)
مخزن
نوشته‌شده باسی و اسمبلی
سیستم‌عاملشبه-یونیکس
حجم110.15 مگابایت
گونهکرنل - یکپارچه
پروانهپروانه عمومی همگانی گنو نسخه ۲
وبگاه

هسته لینوکس (به انگلیسی: Linux kernel) یک هسته سیستم‌عامل است که با کمک توسعه‌دهندگان در سراسر جهان پیشرفت داده شد است هسته لینوکس، آزاد و متن باز یکپارچه ، ماژولار (modular) و شبه یونیکس و بسیار قابل تنظیم است.

سرپرستان سیستم می توانند لینوکس را برای اهداف خاص خود و سناریوهای استفاده خاص قبل از تدوین تنظیم کنند. کاربرانی که از امتیازات لازم برخوردار شده اند نیز می توانند پارامترهای هسته را در زمان اجرا تنظیم کنند.

هسته لینوکس بر روی طیف گسترده ای از سیستم های محاسباتی ، مانند سیستم های توکار ، دستگاه های تلفن همراه (از جمله استفاده از آن در سیستم عامل اندروید) ، رایانه های شخصی ، سرورها ، حافظه های اصلی و ابر رایانه ها مستقر شده است.[۲]

هسته لینوکس در سال 1991 توسط لینوس توروالدز برای رایانه شخصی خود و بدون هیچ هدف متقابل طراحی و ساخته شد ، اما از آن زمان به طیف گسترده ای از معماری های رایانه منتقل شده است. با وجود این ، هسته لینوکس با استفاده از دستورالعمل های خاص معماری (ISA) بسیار بهینه شده است ، بنابراین قابلیت حمل آن به آسانی مانند سایر هسته ها آسان نیست (به عنوان مثال ، با NetBSD ، که از سال 2019 از 59 پلتفرم سخت افزاری پشتیبانی می کند).

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

بحث و گفتگوی توسعه روزانه در لیست پستی هسته لینوکس (LKML) انجام می شود. به طور کلی لینوکس ، همانطور که در پرونده COPYING کاملاً مشخص است ، تحت مجوز عمومی GNU نسخه 2 (GPLv2) منتشر می شود ، اما همچنین حاوی چندین پرونده تحت مجوزهای سازگار دیگر و یک معافیت برای API فضای کاربری و فایل سرآیند (UAPI) است.

Linux ABI (به عنوان مثال ، رابط باینری برنامه که همچنین شامل Application Program Interface یا API در سطح کد منبع است) بین هسته و فضای کاربر دارای چهار درجه پایداری (پایدار ، آزمایشی ، منسوخ ، حذف شده) است ، با این حال ، انتظار می رود که تماس های سیستم هرگز تغییر نکند تا برنامه های فضای کاربر که به آنها متکی هستند ، از بین نرود.

ماژول های هسته قابل بارگذاری (LKM) ، بر اساس طراحی ، نمی توانند به یک ABI پایدار متکی باشند. بنابراین هر زمان که هسته اجرایی جدید در سیستم نصب شود ، باید همیشه دوباره کامپایل شوند ، در غیر این صورت بارگیری نمی شوند. درایورهای درون درختی که به گونه ای پیکربندی شده اند که به بخشی جدایی ناپذیر از هسته اجرایی (vmlinux) تبدیل می شوند ، از نظر ساختاری به طور ایستایی بهم پیوسته اند.

همچنین هیچ تضمینی برای پایداری سطح منبع API در هسته وجود ندارد و به همین دلیل ، کد درایورهای دستگاه ، و همچنین کد سایر زیر سیستم های هسته ، باید با تکامل هسته به روز شوند. خوشبختانه ، یک قانون ساده مستلزم این است که هر توسعه دهنده ای که تغییر API می کند ، باید کدی را که در نتیجه آن تغییر خراب است ، اصلاح کند.

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

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

پیشینه[ویرایش]

در اوریل ۱۹۹۱، لینوس توروالدز، در آن زمان دانشجوی ۲۱ ساله علوم کامپیوتر در دانشگاه هلسینکی فنلاند ، شروع به کار بر روی برخی از ایده های ساده برای یک سیستم عامل کرد. وی با ساخت یک task switcher (رفتن از یک برنامه به برنامه دیگر بدون خروج از برنامهٔ نخست) در زبان اسمبلی اینتل ۸۰۳۸۶ و یک راه انداز ترمینال شروع کرد. در ۲۵ اوت ۱۹۹۱، توروالدز موارد زیر را به “comp.os.minix”، یک گروه خبری در Usenet ارسال کرد:

من در حال انجام ساخت یک سیستم عامل رایگان (فقط برای سرگرمی و از روی علاقه، و بزرگ و حرفه‌ای مانند گنو نخواهد شد) برای هم نوع‌های 386(486)AT هستم. این از اوریل در حال ساخته شدن هست، و در حال آماده شدن می‌باشد. من هر بازخوردی در Minix بر روی چیزهایی که مردم می‌پسندند یا نمی‌پسندند را می‌خواهم، با این وجود سیستم عامل من هم تا حدی به این شباهت دارد (بعضی از آرایش‌های فیزیکی فایل‌های سیستم در میان اشیا دیگر) من در حال حاضر (bash (1.08 و (1.40) gcc را انتقال داده‌ام، و هم‌چنین بخش‌هایی که بنظر می‌رسند که کار کنند. این نشان می‌دهد که در این چندین ماه، به کجا رسیده‌ام. بله، هیچ کد مینیکسی در آن نیست و یک سامانه پروندهٔ چند رشته‌ای دارد. قابل انتقال نیست (از task switching 386 استفاده می‌کند)، و به درستی از سوی دیسک‌های سخت AT پشتیبانی می‌شود، این تمام چیزیست که من دارم .

در 17 سپتامبر 1991 لینوس توروالدز نسخه 0.01 هسته لینوکس را آماده کرد و "ftp.funet.fi" - سرور FTP دانشگاه و شبکه تحقیقاتی فنلاند (FUNET) قرار داد. حتی از آنجایی که کد آن هنوز به Minix برای تدوین و بازی نیاز داشت حتی قابل اجرا نبود. در 5 اکتبر 1991 ، لینوس اولین نسخه "رسمی" لینوکس را منتشر کرد ، نسخه 0.02. در این مرحله ، لینوکس توانست Bash ، GCC و برخی دیگر از ابزارهای GNU را اجرا کند:

[همانطور که] یک ماه پیش اشاره کردم ، من در حال کار روی نسخه رایگان Minix-lookalike برای رایانه های AT-386 هستیم. سرانجام به مرحله ای رسیده است که حتی قابل استفاده است (هرچند ممکن است به آنچه می خواهید بستگی نداشته باشد) باشد ، و من مایلم این منابع را برای توزیع گسترده تر ارائه دهم. این فقط نسخه 0.02 است ... اما من با موفقیت bash، gcc، gnu make، gnu-sed ، فشرده سازی و غیره را در زیر آن اجرا کردم.

پس از آن ، بسیاری از مردم کد را به این پروژه کمک کردند. در اوایل ، جامعه MINIX کد و ایده های خود را به هسته لینوکس کمک کرد. در آن زمان ، پروژه گنو بسیاری از مؤلفه های مورد نیاز برای یک سیستم عامل رایگان را ایجاد کرده بود ، اما هسته آن ، GNU Hurd ، ناقص و در دسترس نبود. توزیع نرم افزار برکلی هنوز خودش را از شر قانونی رهایی نداده است. با وجود عملکرد محدود نسخه های اولیه ، لینوکس به سرعت توسعه دهندگان و کاربران را به دست آورد.

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

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

هسته Linux اکنون از معماری سخت افزاری متنوعی پشتیبانی می کند و بستر مشترکی را برای نرم افزار از جمله نرم افزار اختصاصی فراهم می کند.

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

نسخه لینوکس 0.95 اولین نسخه ای بود که توانست سیستم X Window را اجرا کند. در مارس 1994 ، لینوکس 1.0.0 با 176،250 خط کد منتشر شد. این اولین نسخه مناسب برای استفاده در محیط های تولید بود.

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

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

پس از نسخه 1.3 هسته ، Torvalds تصمیم گرفت که لینوکس به اندازه کافی تکامل یافته است تا تعداد اصلی جدید را تضمین کند ، بنابراین نسخه 2.0.0 را در ژوئن 1996 منتشر کرد.

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

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

در دسامبر 2003 ، با انتشار هسته نسخه 2.6.0 ، Torvalds هسته های لینوکس را چنان پایدار دانست که او چرخه انتشار 2.6.x.y را آغاز کرد. هر نسخه 2.6 هسته ای برای تولید بود ، نسخه های توسعه با -rc ("نامزد انتشار") به شماره نسخه پیوست شده اند. نسخه های هسته ای 2.6 پایدار شروع به نمایش در برنامه منظم هر 2-3 ماه ، از طریق 2.6.39 در ماه مه 2011. چرخه انتشار کوتاه تر نتیجه بحث در بین توسعه دهندگان هسته در مورد انتشار و نسخه طرح در سال 2004 بود.

در ماه دسامبر 2005 ، آدریان بانك در پاسخ به عدم وجود درخت هسته پایدار كه در آن مردم می توانند مجموعه های رفع اشکال را هماهنگ كنند ، اعلام كرد كه وقتی تیم پایدار به 2.6.17 حرکت می کند ، هسته های 2.6.16.y خود را آزاد می کند. . از آن زمان ، "تیم پایدار" تشکیل شده بود و نسخه های هسته پایدار را با رفع اشکال به روز می کند. در فوریه سال 2008 استفان روتول درخت زیر بنایی را ایجاد کرد تا مکانی باشد که تکه هایی با هدف ادغام در چرخه توسعه بعدی جمع شوند. چندین نگهدارنده زیر سیستم همچنین پسوند -next برای درختانی را که حاوی کد هستند تصویب کردند که قرار است برای ورود به چرخه انتشار بعدی ارسال شود. از ژانویه 2014 ، نسخه در حال توسعه هسته لینوکس در شعبه ناپایدار به نام linux-next برگزار می شود.

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

بیستمین سالگرد هسته لینوکس در ژوئیه 2011 با انتشار نسخه هسته 3.0.0 توسط Torvalds برگزار شد. بنیاد لینوکس در نسخه 2011 مطالعه توسعه هسته خود ، بیستمین سالگرد هسته را جشن گرفت. کرنل 3.0 دارای 15 میلیون خط کد بود و بیش از 1300 توسعه دهنده مجزا در این نسخه از هسته لینوکس مشارکت داشتند. توسعه دهندگان داوطلب در سال 2011 16 درصد از کل تغییرات هسته را به خود اختصاص داده اند. سایر تغییرات مربوط به توسعه دهندگان نرم افزار حرفه ای بود که توسط یک شرکت برای ارسال کد به هسته پرداخت می شدند. در سال 2011 ، توسعه دهندگان رد هت 10 درصد از تغییرات ایجاد شده در هسته را کمک کردند ، دومین شرکت بزرگ اینتل Intel و پس از IBM و Novell. در حالی که نوکیا تا آن زمان سیستم عامل هوشمند MeeGo مبتنی بر هسته لینوکس خود را رها کرده بود ، در سال 2011 توسعه دهندگان نوکیا هنوز کدهای بیشتری را در مقایسه با توسعه دهندگان شاغل در گوگل ، که اندروید در سال 2007 و سیستم عامل Chrome در سال 2009 منتشر کرده بودند ، به کد بیشتر کمک می کردند. به عنوان هفدهمین شرکت کننده پرکارترین شرکت در هسته رتبه بندی شد. توسعه دهندگان آن برای اولین بار در سال 2009 برای بهبود عملکرد دستگاههای مجازی لینوکس که در راس Hyper-V ویندوز Hyper-V قرار داشتند ، به همکاری با هسته پرداختند.

هسته های پایدار 3.x.y تا فوریه 2015 با انتشار نسخه های توسعه از مارس 3.r.y تا 3.19 در بازار آزاد شدند. برای حساب کردن نسخه ویژه وصله گاه به گاه ، سری نسخه 3 هسته یک رقم چهارم را به شماره گذاری نسخه اضافه می کند. در آوریل 2015 ، Torvalds نسخه هسته 4.0 را منتشر کرد. تا فوریه 2015 ، هسته لینوکس از نزدیک به 12000 برنامه نویس از بیش از 1200 شرکت ، از جمله برخی از بزرگترین فروشندگان نرم افزار و سخت افزار در جهان ، کمک دریافت کرده بود. نسخه 4.1 هسته لینوکس ، که در ژوئن سال 2015 منتشر شد ، حاوی بیش از 19.5 میلیون خط کد است که تقریباً 14،000 برنامه نویسان در آن مشارکت دارند.

معماری[ویرایش]

نقشه هسته لینوکس

لینوکس یک هسته یکپارچه است و از اکثر ویژگیهایی پشتیبانی می کند که فقط در هسته های منبع بسته از سیستم عامل های غیر رایگان موجود باشد:

  • محاسبات همزمان و (با در اختیار داشتن هسته کافی CPU برای کارهایی که آماده اجرا هستند) حتی اجرای موازی واقعی بسیاری از فرایندها به یکباره (هر یک از آنها دارای یک یا چند موضوع اجرا).
  • برنامه ریزی (در زمان کامپایل) و تنظیم (تنظیم زمان کار) تنظیم کننده اجازه می دهد تا وظیفه های مقدماتی را انجام دهید (هر دو در حالت کاربر و از سری 2.6 ، در حالت هسته). برنامه زمانبندی کاملاً عادلانه (CFS) برنامه زمانبندی پیش فرض لینوکس از سال 2007 است و از یک درخت قرمز-سیاه استفاده می کند که می تواند داده های مربوط به فرآیندهای (ساختار وظیفه) درون O را در مدت زمان (log n) جستجو ، درج و حذف کند ، جایی که n تعداد وظایف موجود در درخت را نشان می دهد.
  • مدیریت پیشرفته حافظه با حافظه مجازی.
  • مکانیسم ارتباطات و هماهنگی بین فرآیندی.
  • یک سیستم پرونده مجازی در بالای چندین سیستم پرونده اصلی (ext4 ، Btrfs ، XFS ، JFS ، FAT32 و موارد دیگر).
  • برنامه ریز I / O قابل تنظیم.
  • مجازی سازی سطح سیستم عامل (با Linux-VServer) ، paravirtualization و مجازی سازی با کمک سخت افزار (با KVM یا Xen).
  • مکانیسم های امنیتی برای کنترل دسترسی اختیاری و اجباری (SELinux ، AppArmor ، POSIX ACL و دیگران).
  • چندین نوع پروتکل ارتباطی لایه ای (از جمله مجموعه پروتکل اینترنت).

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

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

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

رابط ها[ویرایش]

چهار رابط متمایز است: دو داخلی به هسته ، و دو بین هسته و فضای کاربر.

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

API فضای هسته به کاربر[ویرایش]

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

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

تماس های سیستم فقط با استفاده از دستورالعمل های مونتاژ امکان پذیر است که امکان انتقال از فضای کاربر غیر شخصی به فضای هسته ممتاز در حلقه 0 را فراهم می کند ، برای مثال با استفاده از دستورالعمل "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[ویرایش]

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

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

برخی از API های هسته لینوکس در چندین نسخه ثابت نگه داشته شده اند ، برخی دیگر اینگونه نیستند. هیچ تضمینی در مورد API های هسته وجود ندارد. نگهبانان و مشارکت کنندگان می توانند هر زمان که بخواهند تقویت کنند یا آنها را تغییر دهند. با این وجود ، API های درون هسته وجود دارند که ساختار داده ها را دستکاری می کنند (به عنوان مثال ، لیست ها ، درختان ، صف ها) یا کارهای روزمره را انجام می دهند (به عنوان مثال کپی کردن داده ها از و به فضای کاربر ، اختصاص حافظه ، خطوط چاپی به سیستم سیستم و غیره) که حداقل از نسخه 2.6 لینوکس پایدار مانده اند.نمونه هایی از API های درون هسته شامل کتابخانه های خدمات مشترک سطح پایین است که توسط درایور دستگاه ها استفاده می شود:

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

درون هسته ای ABI[ویرایش]

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

مشخصات فنی[ویرایش]

پردازش و موضوعات[ویرایش]

برنامه ریزی و Preemption[ویرایش]

برنامه ریز لینوکس کلاس ها و خط مشی های مختلف را قادر می سازد. به طور پیش فرض هسته از یک مکانیزم زمانبندی به نام برنامه زمانبندی کاملاً عادلانه استفاده می کند که در نسخه 2.6.23 از هسته معرفی شده است. در داخل این کلاس زمانبندی پیش فرض همچنین به عنوان SCHED_OTHER شناخته می شود ، اما هسته نیز شامل دو کلاس زمانبندی سازگار با POSIX با نام برنامه زمان واقعی به نام های SCHED_FIFO (در زمان واقعی اول-اول-اول) و SCHED_RR (بیدرنگ رابین) است ، هر دو مورد نسبت به کلاس پیش فرض اولویت دارند. یک برنامه زمان بندی اضافی معروف به SCHED_DEADLINE ، اجرای اولین الگوریتم مهلت اول (EDF) ، در هسته نسخه 3.14 اضافه شده است ، که در تاریخ 30 مارس 2014 منتشر شد. SCHED_DEADLINE نسبت به سایر کلاس های برنامه ریزی دیگر برتری دارد.

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

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

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

تماس با سیستم[ویرایش]

فضای حافظه و آدرس[ویرایش]

ارتباط بین فرآیند و همگام سازی =[ویرایش]

لایه ورودی / خروجی[ویرایش]

سیستم فایلهای مجازی و بتونی[ویرایش]

درایور دستگاه[ویرایش]

قابلیت حمل[ویرایش]

اگرچه در اصل برای قابل حمل طراحی نشده بود ، اکنون لینوکس یکی از هسته های بسیار گسترده سیستم عامل است که در سیستم های متنوعی از معماری ARM گرفته تا رایانه های اصلی IBM z / Architecture اجرا می شود. اولین درگاه فراتر از معماری اصلی 386 لینوکس بر روی پلت فرم موتورولا 68000 توسط کاربران آمیگا انجام شد که این کار را با جایگزینی بخش های اصلی هسته انجام داد. تغییرات در هسته آنقدر اساسی بود که توروالدز نسخه موتورولا را به عنوان یک چنگال و یک سیستم عامل شبیه به لینوکس مشاهده کرد و نه به عنوان یک درگاه واقعی. با این وجود انگیزه ای بود که Torvalds برای بازگرداندن عمده کد هسته به منظور تسهیل در انتقال به معماری های محاسباتی رقیب ، نیاز به بازسازی عمده ای از هسته داشت. اولین درگاه مورد تأیید لینوکس به پلتفرم 64 بیتی DEC Alpha AXP بود که در ماه مه 1995 در DECUS نشان داده شد ، از 386 و Alpha در یک درخت منفرد پشتیبانی کرد. DEC مسئول تأمین سخت افزار لازم برای Torvalds بود تا در همان سال بتواند درگاه لینوکس را به 64 بیت برساند.

لینوکس به عنوان سیستم عامل اصلی در نشست IBM و همه سریعترین رایانه های رایانه ای ، از جمله Sunway TaihuLight طراحی شده و ساخت چینی ، که قبلاً سریعترین آنهاست ، اجرا می شود. از اکتبر سال 2019 ، همه 500 سریعترین رایانه در جهان انواع مختلفی از لینوکس را اجرا می کنند ، یک تغییر بزرگ از سال 1998 که اولین ابر رایانه لینوکس به لیست اضافه شد و سپس به رتبه 113 رسید. یونیکس قبلاً در لیست حاکم بود. در حدود 2003 تقریباً بین یونیکس و لینوکس تقسیم شده است.

لینوکس همچنین به دستگاههای دستی مختلفی مانند 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. در سال 2010 ، جامعه هسته لینوکس از Google به دلیل شروع مؤثر درخت هسته خود انتقاد كرد:

این بدان معنی است که هر درایوری که برای سیستم عامل های سخت افزاری اندرویدی نوشته شده است ، نمی تواند در درخت اصلی هسته ادغام شود ، زیرا آنها به کدی وابسته هستند که فقط در درخت هسته گوگل زندگی می کند ، و باعث عدم موفقیت آن در ساخت درخت kernel.org می شود. به همین دلیل ، گوگل اکنون مانع از ادغام تعداد زیادی از درایورهای سخت افزاری و کد پلتفرم در درخت اصلی هسته شده است. به طور مؤثر ایجاد یک شاخه هسته که تعدادی از فروشندگان مختلف اکنون به آن اعتماد دارند. - گرگ کروه-هارتمن ، 2010

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

هسته وحشت و اووپس[ویرایش]

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

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

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

وصله زنده[ویرایش]

به روزرسانی های Rebootless حتی می توانند با استفاده از فناوریهای زنده patch مانند Ksplice ، kpatch و kGraft بر روی هسته اعمال شوند. پایه های حداقلی برای وصله هسته زنده در هسته هسته لینوکس در نسخه هسته 4.0 که در تاریخ 12 آوریل 2015 منتشر شد ادغام شدند. توسط kGraft و kpatch ، با ارائه یک رابط برنامه نویسی برنامه (API) برای ماژول های هسته که شامل تکه های داغ و یک رابط باینری برنامه (ABI) برای برنامه های مدیریت فضای کاربر است. با این حال ، هسته مشترک موجود در هسته لینوکس 4.0 تنها از معماری x86 پشتیبانی می کند و هیچ مکانیزمی را برای اطمینان از سازگاری سطح عملکرد در حین استفاده از تکه های گرم فراهم نمی کند. از آوریل 2015 ، کار در مورد انتقال kpatch و kGraft به هسته مشترک پچینگ ارائه شده توسط خط اصلی هسته لینوکس در حال انجام است.

امنیت[ویرایش]

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

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

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

منتقدان توسعه دهندگان هسته را متهم كردند كه نقص های امنیتی را پوشش می دهند یا حداقل آنها را اعلام نمی كنند. در سال 2008 ، لینوس توروالدز به این سؤال پاسخ داد:

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

توزیع های لینوکس به طور معمول به روزرسانی های امنیتی را برای رفع آسیب پذیری های موجود در هسته لینوکس منتشر می کنند. بسیاری از آنها نسخه های پشتیبانی طولانی مدت را ارائه می دهند که به روزرسانی های امنیتی برای نسخه هسته خاص لینوکس را برای مدت زمان طولانی دریافت می کنند.

تاریخ ویژگی[ویرایش]

نسخه 1.0 هسته لینوکس در 14 مارس 1994 منتشر شد. این نسخه از هسته لینوکس تنها از سیستم های رایانه ای مبتنی بر تک پردازنده i386 پشتیبانی می کند. قابلیت حمل و نقل دغدغه ای شد و به همین ترتیب نسخه 1.2 (منتشر شده در 7 مارس 1995) پشتیبانی از سیستم های رایانه ای با استفاده از پردازنده های مبتنی بر معماری Alpha ، SPARC و MIPS را بدست آورد.

نسخه 2.0 در 9 ژوئن 1996 منتشر شد. این سریال شامل 41 نسخه بود. ویژگی اصلی 2.0 پشتیبانی از پردازش متقارن متقارن (SMP) و پشتیبانی از انواع بیشتری از پردازنده ها است.

نسخه 2.2 که در تاریخ 20 ژانویه 1999 منتشر شد ، Spinlock جهانی را حذف كرد و پشتیبانی از SMP را بهبود بخشید ، پشتیبانی از معماری m68k و PowerPC را اضافه كرد ، و سیستم های جدید فایل (از جمله پشتیبانی فقط خواندنی برای NTFS مایکروسافت) اضافه كرد. [154] در سال 1999 ، IBM تکمیل های خود را برای پشتیبانی از معماری S / 390 كد لینوكس 2.2.13 منتشر كرد.

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

نسخه 2.6.0 در 17 دسامبر 2003 منتشر شد. توسعه 2.6.x بیشتر به سمت ویژگی های جدید در طول مدت سریال تغییر یافت. از جمله تغییراتی که در سری 2.6 ایجاد شده است عبارتند از: ادغام µClinux در منابع هسته اصلی ، پشتیبانی PAE ، پشتیبانی از چندین خط جدید پردازنده ، ادغام معماری پیشرفته پیشرفته لینوکس (ALSA) در منابع هسته اصلی ، پشتیبانی از تا 232 کاربر (از 216 مورد) ، پشتیبانی از 229 شناسه پردازش (فقط 64 بیتی ، آرکهای 32 بیتی هنوز محدود به 215) ، به طور قابل ملاحظه ای تعداد انواع دستگاه ها و تعداد دستگاه های هر یک را افزایش داد. نوع ، پشتیبانی 64 بیتی بهبود یافته ، پشتیبانی از سیستم های پرونده ای که اندازه پرونده تا 16 ترابایت را پشتیبانی می کنند ، پیش پردازش درون هسته ، پشتیبانی از کتابخانه موضوع بومی POSIX (NPTL) ، ادغام لینوکس در حالت کاربری در منابع هسته اصلی ، SELinux ادغام در منابع هسته اصلی ، پشتیبانی از InfiniBand و موارد قابل توجهی دیگر. همچنین قابل توجه اضافه شدن چندین سیستم فایل در سراسر نسخه های 2.6.x: FUSE ، JFS ، XFS ، ext4 و موارد دیگر. جزئیات مربوط به تاریخچه سری هسته های 2.6 را می توان در پرونده های ChangeLog در منطقه انتشار کد منبع سری 2.6 هسته kernel.org یافت.

نسخه 3.0 در 22 ژوئیه 2011 منتشر شد. در تاریخ 30 مه 2011 ، توروالدز اعلام کرد که تغییر بزرگ "هیچ چیز نیست. مطلقاً هیچ چیز" نیست. و پرسید ، "... مطمئن شوید که ما واقعاً نسخه بعدی را نه فقط یک عدد براق جدید ، بلکه یک هسته خوب نیز تولید خواهیم کرد." پس از هفت– 6-7 مورد انتظار از روند توسعه ، آن منتشر می شود. نزدیک به بیستمین سالگرد لینوکس.

در 11 دسامبر 2012 ، Torvalds تصمیم گرفت با از بین بردن پشتیبانی از پردازنده های i386 ، پیچیدگی هسته را کاهش دهد ، و این سری 3.7 هسته را به عنوان آخرین نسخه پردازنده اصلی پشتیبانی کند. همان سری پشتیبانی یکپارچه برای پردازنده ARM.

نسخه 3.11 ، منتشر شده در 2 سپتامبر 2013 ، بسیاری از ویژگی های جدید مانند پرچم جدید O_TMPFILE را برای باز کردن (2) به منظور کاهش آسیب پذیری پرونده های موقتی ، مدیریت توان پویا AMD Radeon ، رای گیری در شبکه با تاخیر کم و zswap (مبادله فشرده) اضافه می کند. حافظه نهان).

نسخه 5.0 ، منتشر شده در سال 2019 ، شامل تکه هایی برای آسیب پذیری های امنیتی Spectre و Meltdown و سایر ویژگی های دیگر است.

تغییر عددی از 2.6.39 به 3.0 و از 3.19 به 4.0 تغییر فاقد تفاوت فنی معنی دار است. برای جلوگیری از اعداد جزئی جزئی ، تعداد نسخه اصلی افزایش یافته است.

توسعه[ویرایش]

جامعه توسعه دهنده[ویرایش]

به طور کلی فرض بر این است که جامعه توسعه دهندگان هسته لینوکس 5000 یا 6000 عضو دارد. با توجه به "وضعیت توسعه هسته لینوکس 2017" ، یک مطالعه صادر شده توسط بنیاد لینوکس ، که شامل تعهدات نسخه های 4.8 تا 4.13 است ، حدود 1500 توسعه دهنده به طور متوسط از حدود 200-250 شرکت کمک می کنند. 30 توسعه دهنده برتر کمی بیشتر از 16٪ کد را تشکیل می دهند. از نظر شرکت ها ، بیشترین مشارکت کنندگان اینتل (13.1٪) و (Red Hat (7.2٪ ، لینارو (5.6٪) ، (IBM (4.1٪ هستند ، مکان های دوم و پنجم توسط "هیچ کس" (8.2٪) و دسته های "ناشناخته" (4.1٪).

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

مدیریت کد منبع[ویرایش]

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

ارسال کد به هسته[ویرایش]

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

زبان برنامه نویسی و سبک برنامه نویسی[ویرایش]

هسته لینوکس در نسخه زبان برنامه نویسی C پشتیبانی شده توسط GCC (که تعدادی پسوند و تغییر در استاندارد C را معرفی کرده است) ، همراه با تعدادی بخش کوتاه از کد که به زبان اسمبلی نوشته شده است (به زبان ATC و GCC) نوشته شده است. "نحوی" سبک) از معماری هدف. GCC به دلیل برنامه افزودنی در C که پشتیبانی می کند ، مدت طولانی بود که تنها کامپایلری بود که قادر به ساخت صحیح هسته لینوکس بود. از سال 2002 ، كليه كدها بايد به 21 قانوني كه شامل سبك كدگذاري هسته Linux است ، رعايت كنند.

ابزار دستی گنو[ویرایش]

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

سازگاری کامپایلر[ویرایش]

در سال 2004 ، اینتل ادعا كرد كه هسته را تغییر داده است به طوری كه کامپایلر C آن نیز قادر به تهیه آن است. یک موفقیت گزارش شده دیگر در سال 2009 با نسخه 2.6.22 اصلاح شده هسته وجود دارد.

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

اشکال زدایی هسته[ویرایش]

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

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

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

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

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

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

مدل توسعه[ویرایش]

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

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

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

چنگالهای لینوکس[ویرایش]

انجمن های خاصی وجود دارند که هسته ها را بر اساس لینوکس رسمی توسعه می دهند. چند کد جالب از این فورک ها (به عنوان مثال ، اصطلاح عامیانه به معنی "پروژه های مشتق شده") که شامل Linux-libre ، Compute Node Linux ، INK ، L4Linux ، RTLinux و User-Mode Linux (UML) در خط اصلی ادغام شده اند . برخی از سیستم عامل های توسعه یافته برای تلفن های همراه در ابتدا از نسخه های به شدت اصلاح شده لینوکس استفاده می کردند ، از جمله Google Android ، Firefox OS ، HP webOS ، Nokia Maemo و Jolla Sailfish OS. در سال 2010 ، جامعه لینوکس از Google انتقاد کرد که به طور مؤثر درخت هسته خود را شروع کرده است:

این بدان معنی است که هر درایوری که برای سیستم عامل های سخت افزاری Android نوشته شده باشد ، نمی تواند در درخت هسته اصلی ادغام شود زیرا وابستگی آنها به کدی است که فقط در درخت هسته Google زندگی می کند و باعث می شود تا در درخت kernel.org ایجاد نشود. به همین دلیل ، گوگل در حال حاضر از ادغام تعداد زیادی از درایورهای سخت افزار و کد پلتفرم در درخت هسته اصلی جلوگیری کرده است. ایجاد یک شاخه هسته به طور مؤثر که تعدادی از فروشندگان مختلف اکنون به آن اعتماد می کنند.

- Greg Kroah-Hartman ، 2010

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

درگیری های جامعه توسعه[ویرایش]

چندین درگیری برجسته بین توسعه دهندگان هسته لینوکس وجود داشته است. نمونه هایی از چنین درگیری ها عبارتند از:

  • در ژوئیه 2007 ، کن کولیواس اعلام کرد که او تمایل به توقف توسعه هسته لینوکس خواهد داشت. وی در مورد دلایل خود در مصاحبه ، ابراز ناامیدی از جنبه های روند اصلی توسعه هسته ، که احساس می کند اولویت کافی به تعامل دسک تاپ نمی دهد ، علاوه بر هک کردن ، بر سلامت ، کار و خانواده خود نیز تأثیر گذاشت.
  • در ژوئیه 2009 ، آلن کاکس پس از عدم توافق با لینوس توروالدز در مورد دامنه کار مورد نیاز برای رفع خطا در آن زیر سیستم ، از نقش خود به عنوان نگهدارنده لایه TTY کناره گیری کرد.
  • در دسامبر 2010 ، بین جیمز بوتوملی ، نگهدارنده SCSI و ولادیسلاو بولخوویتین ، نگهدارنده SCST ، بحثی صورت گرفت كه پشته هدف SCSI را باید در هسته لینوكس - SCST یا LIO قرار داد. اگرچه در آن زمان SCST از نظر فنی برتر محسوب می شد ، LIO در بالادست ادغام می شد. این باعث ناراحتی برخی از کاربران لینوکس شد.
  • در ژوئن سال 2012 ، توروالدز با نشان دادن ژست انگشت میانی موافقت نکرد كه NVIDIA درایور خود را به عنوان درایور منبع بسته آزاد كند.
  • در آوریل 2014 ، Torvalds کی Sievers را به دلیل عدم برخورد با ایراداتی که باعث تعامل منفی سیستم با هسته می شود ، از ارسال تکه هایی به هسته لینوکس منع کرد.
  • در اکتبر سال 2014 ، لنارت پواترینگ توروالدز را متهم کرد که تحمل شیوه بحث و جدل در لیست های پستی مربوط به هسته لینوکس و تحمل الگوی نقش بد را دارد.
  • در مارس 2015 ، کریستوف هلویگ به دلیل نقض کپی رایت در هسته لینوکس شکایتی علیه VMware انجام داد. لینوس توروالدز با فراخواندن وکلا به یک بیماری لکه دار ، اظهار داشت که او با این و ابتکارات مشابه موافق نیست.

توسعه دهندگان برجسته هسته لینوکس از اهمیت اجتناب از درگیری بین توسعه دهندگان آگاه بوده اند. به دلیل مخالفت لینوس توروالدز مدت طولانی است که هیچ کد رفتاری برای توسعه دهندگان هسته وجود ندارد. با این حال ، یک کد تضاد هسته هسته لینوکس در 8 مارس 2015 معرفی شد. این همزمان با یک عذرخواهی عمومی توسط لینوس و مختصری از توسعه هسته بود. در تاریخ 30 نوامبر 2018 ، مطابق با آیین نامه رفتار ، Jarkko Sakkinen از اینتل تکه هایی را جایگزین نمونه های "فاک" که در کامنت های منبع منبع با نسخه های مناسب متمرکز بر کلمه 'آغوش' ارسال شده است.

کد پایه[ویرایش]

از سال 2020 ، نسخه 5.6 هسته لینوکس حدود 33 میلیون خط کد داشت ، تقریباً 14٪ کد بخشی از "هسته" است در حالی که 60٪ درایور هستند.

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

برآورد هزینه برای توسعه مجدد[ویرایش]

هزینه بازسازی هسته هسته لینوکس نسخه 2.6.0 در یک برنامه توسعه اختصاصی سنتی 612 میلیون دلار (467 میلیون یورو ، 394 میلیون پوند) در سال 2004 با استفاده از مدل تخمین مرد COCOMO محاسبه شده است. در سال 2006 ، مطالعه ای که توسط اتحادیه اروپا تأمین شده بود ، هزینه بازسازی هسته نسخه 2.6.8 هسته را با 882 میلیون یورو بیشتر (1.14 میلیارد دلار ، 744 میلیون پوند) بیشتر کرد.

این موضوع در اکتبر سال 2008 توسط آماندا مک فرسون ، برایان Proffitt و ران هیل اوانز بررسی شد. آنها با استفاده از روش دیوید ا. ویلر ، تخمین زدند كه بازسازی هسته 2.6.25 هسته در حال حاضر 1.3 میلیارد دلار (بخشی از 10.8 میلیارد دلار برای توسعه مجدد فدورا 9) هزینه دارد. باز هم ، گارسیا-گارسیا و آلونسو د مگدالنو از دانشگاه اوویدو (اسپانیا) تخمین می زنند که ارزش سالانه به کرنل اضافه می شود بین سال های 2005 تا 2007 حدود 100 میلیون یورو و 225 میلیون یورو در سال 2008 بود ، این هزینه نیز بیش از 1 میلیارد یورو (حدود 1.4 میلیارد دلار) از فوریه 2010) برای توسعه در اتحادیه اروپا.

از تاریخ 7 مارس 2011 ، با استفاده از LOC فعلی (خطوط کد) هسته 2.6.x لینوکس و شماره های دستمزد با محاسبات دیوید ویلر ، تقریباً 3 میلیارد دلار (حدود 2.2 میلیارد یورو) برای بازسازی هسته لینوکس هزینه می شود. بزرگتر می شود یک محاسبه به روز شده از تاریخ 26 سپتامبر 2018 ، با استفاده از 20،088،609 LOC فعلی (خط کد) برای هسته هسته 4.14.14 Linux و میانگین برنامه نویسان فعلی ملی ایالات متحده 75506 دلار ، نشان می دهد که این مقدار تقریبا 14،725،449،000 دلار (11،191،341،000 پوند) به کد موجود را بازنویسی کنید.

تعمیر و نگهداری و پشتیبانی طولانی مدت[ویرایش]

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

انجمن توسعه دهنده هسته لینوکس با استفاده از اصلاحاتی برای اشکالات نرم افزاری که در طی توسعه هسته پایدار بعدی کشف شده است هسته پایدار را حفظ می کند. بنابراین ، www.kernel.org همیشه دو هسته پایدار را فهرست می کند. هسته پایدار بعدی لینوکس اکنون فقط 8 تا 12 هفته بعد منتشر شد. بنابراین ، نگهدارنده های هسته لینوکس برخی از نسخه های هسته پایدار را به عنوان طولانی مدت تعیین کرده اند ، این هسته های پشتیبانی طولانی مدت لینوکس با دو رفع اشکال به مدت دو یا چند سال به روز می شوند. در نوامبر 2019 پنج هسته طولانی مدت لینوکس وجود داشت: 4.19.84 ، 4.14.154 ، 4.9.201 ، 4.4.201 و 3.16.76. لیست کامل نسخه ها در تاریخ نسخه هسته لینوکس است.

ارتباط با توزیع های لینوکس[ویرایش]

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

جنبه های حقوقی[ویرایش]

شرایط صدور مجوز GPLv2[ویرایش]

هسته لینوکس تحت مجوز عمومی GNU نسخه 2 (GPLv2) منتشر شده است ، با برخی از تصاویر سیستم عامل تحت مجوزهای مختلف غیر آزاد منتشر می شود. در ابتدا ، Torvalds لینوکس را تحت مجوز منتشر کرد که هرگونه استفاده تجاری را ممنوع می کرد. این تغییر در نسخه 0.12 با سوئیچ به مجوز عمومی GNU نسخه 2 (GPLv2) تغییر یافته است. این مجوز امکان توزیع و فروش نسخه های احتمالاً تغییر یافته و اصلاح نشده از لینوکس را فراهم می کند اما مستلزم آن است که تمام این نسخه ها با همان مجوز منتشر شوند و با کد منبع کامل مربوط همراه شوند. توروالدز مجوز لینوکس تحت GPLv2 را "بهترین کاری که من تا به حال انجام داده ام" توصیف کرده است.

هسته لینوکس صریحاً تحت نسخه 2 GPL مجاز است ، بدون ارائه مجوز گزینه برای انتخاب "هر نسخه بعدی" ، که یک پسوند رایج GPL است. بحث قابل توجهی در مورد چگونگی تغییر مجوز برای استفاده از نسخه های بعدی GPL (از جمله نسخه 3) وجود دارد ، و اینکه آیا این تغییر حتی مطلوب است یا خیر. Torvalds خود به طور خاص پس از انتشار نسخه 2.4.0 اعلام کرد که کد شخصی وی فقط تحت نسخه 2 منتشر می شود. با این حال ، شرایط GPL بیان می کند که اگر نسخه ای مشخص نشده باشد ، ممکن است از هر نسخه استفاده شود و آلن کاکس خاطرنشان کرد. تعداد معدودی از مشارکت کنندگان دیگر لینوکس نسخه خاصی از GPL را مشخص کرده بودند.

در سپتامبر 2006 ، بررسی 29 برنامه نویس هسته اصلی نشان داد كه 28 GPLv2 را به پیش نویس GPLv3 آن زمان ترجیح می دهند. توروالدز اظهار داشت: "من فکر می کنم تعدادی از افراد خارجی ... معتقد بودند که من شخصاً فقط یک فرد عجیب و غریب هستم زیرا من خیلی علناً طرفداران بزرگی از GPLv3 نبودم." این گروه از توسعه دهندگان هسته با مشخصات بالا ، از جمله Torvalds ، 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 رد کرد. با این حال ، همه همكاران هسته لینوكس با این تفسیر موافق نیستند ، و با این وجود حتی Torvalds موافق است كه بسیاری از LKM ها به طور واضح تولید شده اند ، و در واقع او می نویسد كه "ماژول های هسته به طور پیش فرض مشتق شده اند".

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

حباب های باینری سیستم عامل[ویرایش]

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

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

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

علامت تجاری[ویرایش]

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

جستار های وابسته[ویرایش]

منابع[ویرایش]

  1. "Linux Logos and Mascots". Linux Online. 2008. Archived from the original on 15 August 2010. Retrieved 11 August 2009.
  2. Abramson, Ronna (2004-12-15). "Linux Looms Larger Than Thought". TheStreet. Archived from the original on 2013-01-05.

پیوند به بیرون[ویرایش]

  • kernel.org - آرشیو رسمی کرنل‌های لینوکس