پس از گذشت سه دهه هنوز یونیکس (Unix) یکی از قدرتمندترین و زیباترین سیستمهای عامل به شمار می رود. از زمان پیدایش یونیکس در سال ۱۹۶۹ تاکنون افکار دنیس ریچی (Dennis Ritchie) و کن تامپسون (Ken Thompson) به موجودی افسانه ای بدل شده است
یونیکس از مالتیکس (Multics) که یک پروژه سیستم عامل چند کاربره شکست خورده بود که در ازمایشگاههای بل توسعه داده شده بود زاییده شد. هنگامی که پروژه مالتیکس با شکست به اتمام رسید, اعضای مرکز تحقیقات علوم کامپیوتر ازمایشگاههای بل بدون یک سیستم عامل موفق با قابلیت باقی مانده بودند. در تابستان سال ۱۹۶۹ توسعه دهندگان ازمایشگاه بل طرحی بسیار ساده از یک فایل سیستم را ارایه کردند که بعدها زمینه ساز ایجاد یونیکس شد. آن ها سیستم جدید خود را بر روی دستگاههای PDP-7 آن زمان تست می کردند. در سال ۱۹۷۱ این سیستم نو به دستگاههای PDP-11 پورت و روی آنها امتحان شد. در آن روزها دیگر این مخلوق جدید که بر اساس کدهای سیستم شکست خورده مالتیکس بود یونیکس نامیده می شد. در سال ۱۹۷۳ سیستم عامل یونیکس با زبان C بازنویسی شد. قدمی بسیار بزرگ که موجب شد یونیکس در سالهای بعد به سیستمهای زیادی پورت شود. اولین یونیکسی که در بیرون از ازمایشگاههای بل مورد استفاده قرار گرفت یونیکس نسخه ۶ یا به اختصار V6 بود.
کمپانیهای دیگری یونیکس را به ماشینهای جدید پورت کردند. با این پورتهای زیاد یونیکسهای مختلفی شکل گرفتند. در سال ۱۹۷۷ ازمایشگاههای بل ترکیبی از این یونیکس ها را در قالب یک سیستم به نام یونیکس سیستم ۳ (Unix System III) منتشر کرد و در سال ۱۹۸۲, AT&T نسخه System V را منتشر ساخت.
طراحی ساده یونیکس, همراه با در اختیار بودن سورس کد آن موجب توسعه فوق العاده آن در سازمانهای دیگر شد. یکی از بزرگترین این سازمان ها دانشگاه برکلی کالیفرنیا بود. نسخه ای از یونیکس که در برکلی توسعه داده شده بود نام BSD که مخفف عبارت Berkeley Software Distribution است گرفت. اولین نسخه BSD در سال ۱۹۷۹ منتشر شد. سریهای 4.3BSD , 4.2BSD , 4.1BSD , 4.0BSD , 4BSD بعد از 3BSD منتشر شدند. در این نسخه ها امکاناتی چون حافظه مجازی, تخصیص دینامیک حافظه, TCP/IP اضافه شدند. در سال ۱۹۹۳ اخرین نسخه رسمی یونیکس برکلی که حافظه مجازی در آن بازنویسی شده بود تحت عنوان 4.4BSD منتشر شد. امروزه توسعه BSD در قالب پروژههایی چون OpenBSD, NetBSD, FreeBSD, DragonflyBSD, Darwin ادامه می یابد. در دهه ۱۹۸۰ و ۱۹۹۰ کمپانیهای مختلفی نسخههای تجاری از یونیکس خود را منتشر کردند. این سیستم ها که معمولا بر مبنای یونیکس AT&T یا BSD بودند برای پشتیبانی از قابلیتهای معماری سخت افزارهای خاص تغییر می یافتند. معروف ترین این سیستم ها True 64, HP-UX, IBM's AIX, DUNIX/ptx, SGI's IRIX, Sun's Solaris بودند. طراحی بسیار ماهرانه یونیکس با بهبودهای فراوانی که در طول سال ها بر روی آن آنجام شده بود آن را به یک سیستم عامل قدرتمند, تنومند و پایدار تبدیل کرده بود. برخی از خصوصیاتی که سکوی پرتاب یونیکس دارد عبارتند از:
۱- سادگی یونیکس: بعضی سیستمهای عامل هزاران هزار تابع سیستمی (system call) را پیاده سازی می کنند و اهداف مشخصی ندارند اما یونیکس فقط نزدیک به صد تابع سیستمی داشت و طراحی کاملا هدفمندانه ای شده بود.
۲- در یونیکس همه چیز فایل است (به توضیح آنتهای پاراگراف رجوع شود). این سطح از تجرید(abstraction) کار با اطلاعات و دستگاه ها را در قالب کار با چند تابع سیستمی کار با فایل ها ساده می کند. توابع سیستمی چون ()open(), read(), write(), ioctl(), close .
۳- هسته یونیکس به زبان C توسعه داده شده بود. با این قابلیت یونیکس می توانست به اسانی قابل حمل و قابل پورت شدن باشد و به اسانی در اختیار خیل عظیمی از توسعه دهندگان قرار گیرد.
۴- یونیکس با تنها تابع سیستمی ()fork که در اختیار داشت سرعت بالایی در ایجاد پروسه ها داشت. با این امکان سیستمهایی که شدیدا تقسیم بندی شده بودند بدون هیچ مشکلی می توانستند بر روی یونیکس کار کنند.
۵- یونیکس توابع قدرتمندی در ارتباط بین پروسه ها یا InterProcess Communication) IPC) داشت که وقتی با امکان ایجاد سریع پروسه ها همراه می شد اجازه ایجاد ابزارهای مفیدی را می داد که می توانستند با ابزارهای دیگر کارهای بزرگی در سیستم آنجام دهند.
توضیح : البته همه چیز در یونیکسهای امروزی فایل نیست. می توان گفت بخش اعظمی از آن با API فایل ها پیاده سازی شده است. اما API یونیکسی که در ازمایشگاههای بل ایجاد شده بود کاملا فایل بود.
امروزه یونیکس یک سیستم عامل مدرن است که امکاناتی چون چند کار موازی (multitasking), چند رشته موازی (multithreading), حافظه مجازی (virtual memory), تخصیص دینامیکی حافظه (demand paging), کتابخانههای دینامیکی (shared libraries) با بارگذاری دینامیک (demand loading) و شبکه TCP/IP را پشتیبانی می کند.
بعضی از شکلهای یونیکس به صدها سخت افزار پورت شده آند و بعضی نیز تنها بر روی دستگاههای جاسازی شده (embedded devices) اجرا می شوند.
آشنایی با لینوکس
لینوکس در سال ۱۹۹۱ توسط لینوس بندیکت توروالدز ایجاد شد. در آن زمان یونیکس قدرتمندی که به صورت ازادانه در اختیار باشد وجود نداشت و تمام یونیکس ها مجوز اختصاصی و تجاری داشتند و این موضوع لینوس را به عنوان یک جوان ۲۱ ساله که در دانشگاه هلسینکی فنلاند درس می خواند خیلی رنج می داد. لینوس از مینیکس (Minix) که برای اهداف اموزشی ایجاد شده بود و کد آن در اختیار بود ولی حق تغییر نداشت) استفاده می کرد
در پاسخ به این وضع نامساعد لینوس کاری کرد که هر دانشجوی معقول اگر در شرایط او می بود آنجام می داد. او تصمیم گرفت که خودش سیستم عاملش را بنویسد. لینوس ابتدا شروع به نوشتن یک شبیه ساز ترمینال کرد که می توانست با آن به کامپیوتر بزرگ یونیکسی که در دانشگاه بود متصل شود. شبیه ساز ترمینالش رشد کرد و بهتر شد. مدتی بعد, لینوس یک سیستم یونیکس خیلی کوچک در اختیار داشت. او یونیکس خود را در سال ۱۹۹۱ بر روی شبکه اینترنت منتشر ساخت.
این یونیکس ازاد که نام لینوکس بر روی آن گذاشته شد به سرعت کاربرانی یافت. به دلیل مجوز ازاد GPL لینوکس که اجازه هر گونه تغییر و بررسی بر روی کدهای لینوکس را می داد توسعه دهندگان مشتاقی برای بررسی و تغییر لینوکس آن را دریافت کردند. مجوز لینوکس باعث شد که این سیستم عامل در زمان کوتاهی تبدیل به یک پروژه گروهی در سطح اینترنت شود که توسط افراد زیادی توسعه یابد.
اما امروزه لینوکس یک سستم عامل پرقدرت است که می تواند بر گستره وسیعی از معماریهای سخت افزاری اجرا گردد. معماریهایی چون AMD x86-64, ARM, Compaq Alpha, CRIS, DEC VAX, H8/300, Hitachi SuperH, HP PA-RISC, IBM S/390, Intel IA-64, MIPS, Motorola 68000, PowerPC, SPARC, Ultra SPARC, v850 معماریهایی بوده آند که تاکنون لینوکس به آنها پورت شده است. لینوکس بر روی سیستمهایی به کوچکی یک ساعت مچی و به بزرگی ابرکامپیوترهایی که در ساختمانهای بسیار بزرگ نگهداری می شوند اجرا می شوند. امروزه لینوکس میل تجاری بزرگی برای کمپانیهای تجاری ایجاد کرده است. کمپانیهای مشهوری چون Novell, IBM, RedHat, Montavista راه کارهای بر پایه لینوکس در سطوح مختلف ارایه می کنند.
لینوکس شبیه یونیکس یا اصطلاحا Unix Clone است ولی یونیکس نیست. به دلیل اینکه اگرچه لینوکس ایدههای زیادی را از یونیکس قرض گرفته و Unix API که در استاندارد POSIX تعریف شده است پیاده سازی کرده است اما حتی یک خط از کد لینوکس از کد یونیکس قرض گرفته نشده است و به عبارتی همه چیز از ابتدا نوشته شده است با این حال برنامههای کامپایل شده یونیکس به خوبی در لینوکس اجرا می شوند و بالعکس. یکی از بزرگترین و مهمترین مزایای لینوکس این است که یک محصول تجاری نیست. یک پروژه گروهی است که در سطح اینترنت توسعه یافته است. اگرچه لینوس بنیان گذارو نگهدارنده اصلی لینوکس است اما پیشرفت و توسعه لینوکس توسط خیل عظیمی از توسعه دهندگان ادامه می یابد. به زبان ساده تر همه می توانند در لینوکس مشارکت کنند. مجوز GPL این اجازه را به همه داده است. فقط بایستی به یاد داشته باشیدهر تغییری را که در لینوکس می دهید و آن را بهتر می کنید بایستی به صورت ازادانه به لینوکس بازگردانید و این همان مفهوم تضمین ازادی است که GPL برای شما به ارمغان می اورد.
درآمدی بر سیستمهای عامل و هسته ها
به دلیل وجود سیستم عاملهای مدرن تجاری که طراحی اشتباهی دارند فکر کنم منظورم را متوجه شده باشید) مفهوم دقیق سیستم عامل دچار ابهام شده است. کاربران زیادی تصور می کنند هر آنچه که بر روی صفحه مانیتور خود می بینند سیستم عامل است. اگر بخواهیم بحث تکنیکی بکنیم سیستم عامل بخشی از سیستم است که مسئول رفع نیازهای اولیه و مدیریت سیستم است. سیستم عامل شامل هسته (kernel), راه آندازهای دستگاه ها (device drivers), بوت لودر (boot loader), پوسته فرمان (command shell) یا دیگر راههای ارتباطی و ابزارهای ابتدایی کار با فایل ها وسیستم است. مثلا مرورگر اینترنت یا پخش کننده موسیقی جزیی از سیستم عامل نیستند. در عوض واژه system به سیستم عامل و تمامی برنامههایی که بر روی آن اجرا می شوند اطلاق می گرددلایه ظاهری کاربری (user interface) خارجی ترین بخش سیستم عامل و هسته داخلی ترین بخش آن می باشد. هسته سرویسهای ابتدایی برای دیگر بخشهای سیستم را فراهم می کند, سخت افزار را مدیریت می کند و منابع سیستم را توزیع می نماید. گاهی از هسته به عنوان مدیر یا قلب سیستم عامل یاد می شود. اجزای شاخص هسته عبارتند از: راه آندازهای وقفه (interrupt handlers), زمانبند پردازنده (CPU scheduler) که زمان پردازنده را بین پروسه ها تقسیم می کند, سیستم مدیریت حافظه (memory management system) که فضای آدرس پروسه ها را مدیریت می کند و سیستم و سرویسهایی مانند شبکه (networking) و ارتباط بین پروسه ها (IPC). در سیستمهای مدرن با واحد محافظت شده مدیریت حافظه معمولا هسته در سطح بالاتری نسبت به برنامههای کاربران قرار داشته و اجرا می شوند
این مورد شامل دسترسی محافظت شده به حافظه و دسترسی مستقیم به سخت افزارها می باشد. از این فضا به فضای هسته (kernel space) و برعکس فضایی که برنامههای کاربران در آن قرار دارند فضای کاربر (user space) نامیده می شود. در فضای کاربر در دسترسی به منابع سیستم محدودیت وجود دارد, نمی توان مستقیم به سخت افزارها دسترسی داشت و یه طور کلی نمی توان بی ادبی کرد.
برنامههایی که در سیستم در حال اجرا شدن هستند از طریق توابع سیستمی (system calls) با هسته ارتباط برقرار می کنند. یک برنامه معمولا یک تابع کتابخانه ای مثلا تابعی در کتابخانه استاندارد زبان C را صدا می کند و در عوض تابع سیستمی از میان آن تابع کتابخانه ای صدا زده می شود.
بعضی توابع کتابخانه ای امکانات وسیعی را که در توابع سیستمی پیدا نمی شوند فراهم می کنند. بنابراین صدا کردن هسته در حقیقت رفتن به یک تابع بزرگتر است. به عنوان مثال تابع معروف ()printf را در نظر بگیرید. این تابع شکل دهی و ذخیره سازی داده ها را آنجام داده و در نهایت با صدا کردن تابع سیستمی ()write اطلاعات را بر روی ترمینال می نویسد. در عوض بعضی از توابع کتابخانه ای رابطه ای یک به یک با توابع سیستمی دارند. به عنوان مثال تابع کتابخانه ای ()open چیزی جز صدا کردن تابع سیستمی ()open نیست. بعضی از توابع کتابخانه ای زبان C مانند ()strcpy نیز اصلا از توابع سیستمی استفاده نمی کنند. هنگامی که یک برنامه تابع سیستمی را اجرا می کند در حقیقت هسته است که از طرف برنامه اجرا می گردد. لذا گفته می شود که برنامه تابع سیستمی را در فضای هسته اجرا می کند و هسته در متن (context) برنامه اجرا می شود.
هسته همچنین سخت افزار سیستم را مدیریت می کند. تقریبا تمامی معماریهای سخت افزاری و آنچه لینوکس پشتیبانی می کند مفهوم وقفه ها (interrupts) راپشتیبانی و فراهم می کنند. هنگامی که سخت افزار می خواهد با سیستم ارتباط برقرار کند یک وقفه ایجاد می کند که به طور اسنکرون یا غیرهمزمان هسته را دچار وقفه می کند. وقفه ها با یک شماره مشخص می شوند. هسته این شماره را برای اجرای تابع مشخصی که وظیفه پردازش و پاسخ به وقفه را دارد به کار می برد. به عنوان مثال هنگامی که شما تایپ می کنید کنترلر صفحه کلید وقفه ای ایجاد می کند که به سیستم می فهماند که اطلاعات جدیدی در بافر صفحه کلید وجود دارد. هسته با توجه به شماره وقفه تابع راه آنداز وقفه صحیح را اجرا می کند. تابع راه آنداز وقفه اطلاعات صفحه کلید را پردازش کرده و به صفحه کلید اجازه دریافت اطلاعات بیشتر را می دهد.
برای فراهم کردن همزمانی, هسته می تواند تمام وقفه ها یا وقفه خاصی را غیر فعال نماید. در سیستمهای عامل زیادی از جمله لینوکس راه آندازهای وقفه در متن پروسه ها اجرا نمی شوند. در عوض آنها در متن یا context ویژه ای که متعلق به هیچ پروسه ای نیست اجرا می شوند.
در حقیقت در لینوکس به طور عمومی می توان گفت که هر پردازنده یکی از سه کار زیر را در هر لحظه از زمان آنجام می دهد:
۱- در فضای هسته و متن پروسه است و یک پروسه خاص را اجرا می کند.
۲- در فضای هسته و متن وقفه است, پروسه ای را اجرا نمی کند و به وقفه ها پاسخ می دهد.
۳- در فضای کاربر است و یک پروسه خاص را اجرا می کند.
هسته لینوکس در برابر هسته یونیکسهای کلاسیک
با داشتن یک ریشه و یک API هستههای یونیکسهای مدرن ویژگیهای طراحی تقریبا یکسانی دارند. یک هسته یونیکس یک فایل باینری استاتیک یکپارچه (monolithic) است. یک ایمیج اجرایی بزرگ که در یک آدرس مستقل قرار می گیرد. سیستمهای یونیکسی معمولا به یک واحد مدیریت صفحه ای حافظه نیاز دارند. این مورد امکان حافظه محافظت شده را الزامی می دارد و فضای آدرس مجازی یکتا برای هر پروسه فراهم می کند.
در این قسمت برای اینکه بتوانیم طراحی هسته لینوکس را بهتر درک کنیم بحثی پیرامون هستههای یکپارچه (monolithic kernels) و طراحی ریز هسته (microkernel design) آنجام می دهیم:
طراحی هسته می تواند به دو نوع اصلی دسته بندی شود: یکپارچه (monolithic) و ریزهسته (microkernel). (البته روش سومی نیز به نام exokernel نیز وجود دارد که تاکنون بیشتر در تحقیقات مطرح شده است ولی در دنیای واقعی نیز در حال راه یابی است. روش ها و متدهای دیگری نیز هستند که کاربرد چندانی ندارند و از سه روش فوق مشتق شده آند.)
هستههای یکپارچه طراحی ساده تری دارند و تقریبا تمامی طراحی ها تا دهه ۱۹۸۰ بدین گونه بوده آند. هستههای یکپارچه به صورت یک ایمیج باینری بزرگ که در فضای آدرس معینی قرار می گیرد پیاده سازی می گردد. این هسته در دیسک به صورت یک فایل باینری استاتیک مستقل ذخیره می شود. تمامی سرویسهای هسته وجود دارند و در فضای بزرگ هسته اجرا می شوند. ارتباطات ناچیزی در هسته وجود دارد چون تمام هسته در فضای آدرس مشخصی قابل دسترسی است و نیاز به هیچ گونه ارتباطی نمی باشد. در این نوع هسته می توان به طور مستقیم توابع را صدا زد. این نوع طراحی دارای سادگی و بازدهی بالا می باشد و تقریبا تمامی یونیکس ها از این نوع طراحی بهره می برند.
در آن سو, ریز هسته به صورت یک فایل باینری بزرگ پیاده سازی نمی شود. در عوض قابلیتهای هسته در قالب پروسههای جداجدا که معمولا به آنها نام سرور (server) داده می شود خرد می گردد.
سرورهایی که به امکانات خاص نیاز دارند در فضای اجازه داده شده و بقیه در فضای کاربر اجرا می شوند. تمامی سرورها فضای آدرس جداگانه ای دارند لذا امکان صدا کردن مستقیم توابع یکدیگر را ندارند. در عوض ارتباطات در ریز هسته از طریق ارسال پیغام (message passing) صورت می گیرد. با پیاده سازی مکانیزم ارتباط بین پروسه ای (IPC) سریع این ارسال پیغام ها بین سرورها می تواند بر اساس مکانیزم IPC باشد. جداسازی سرورهای مختلف هنگامی که یکی از سرور ها دچار شکست شد از شکست کلی سیستم جلوگیری می کند. مساله ای که در طراحی یکپارچه وجود ندارد و با ناموفق بودن یک قسمت از هسته کل آن دچار شکست می شود. به علاوه ساختاریافتگی (modularity) طراحی ریز هسته به آن این امکان را می دهد که در حین اجرای هسته یک سرور با سرور دیگری جایگزین گردد. با توجه به هزینه ارتباط بین سرورها و تغییر رویه اجرایی (context switch) و آنتقال پیغام ها طراحی ریزهسته کمی نسبت به طراحی پکپارچه کندتر می باشد. برای جبران مساله سرعت کمتر و بهبود آن تقریبا تمامی سیستم عاملهای امروزی که از این متد طراحی استفاده می کنند سرورها را در فضای هسته اجرا می کنند (جلوگیری از هزینه تغییر رویه اجرایی) و بالقوه امکان صداکردن مستقیم توابع سرورها را فراهم می سازند. سیستم عاملهایی چون windows NT و Mach ( که بعضی قسنتهای Mac OS X بر مبنای آن است) این گونه هستند.
و اما طراحی لینوکس: لینوکس نکات مثبت هر دو متد ذکر شده را در خود جمع کرده است. لینوکس یک هسته یکپارچه دارد که در فضای آدرس مشخصی اجرا می گردد, لینوکس طراحی ای ساخت یافته (modular) با امکاناتی نظیر اعمال زور (preemption), رشتههای سطح هسته (kernel threads) دارد و امکان بارگذاری فایلهای فایلهای باینری جدا در حین اجرا را نیز دارد (ماجولهای هسته). با این امکانات لینوکس از یک سو سرعتی برابر با طراحی یکپارچه و از سوی دیگر کلیه امکانات ریزهسته را در خود جمع کرده است.
هنگامی که لینوس و دیگر توسعه دهندگان لینوکس در آن مشارکت می کنند بدون توجه به یونیکس ولی با رعایت API آن به پیاده سازی هسته می پردازند. بنابراین با توجه به اینکه لینوکس بر پایه هیچ یونیکسی نیست توسعه دهندگان لینوکس می توانند در هر لحظه بهترین تصمیمات را اتخاذ کنند و در لینوکس اعمال کنند. در زیر مقایسه ای بین هسته لینوکس و دیگر یونیکس ها صورت می پذیرد:
۱- لینوکس بارگذاری دینامیک ماجولهای هسته را پشتیبانی می کند. اگر چه طراحی هسته لینوکس یکپارچه است ولی این امکان را دارد که در موقع لزوم بعضی از کدهای هسته به آن وارد شوند یا از آن خارج شوند.
۲- لینوکس چند پردازندگی متقارن (SMP) را پشتیبانی می کند. اگر چه نسخههای جدید یونیکس ها این امکان را پشتیبانی می کنند ولی این پشتیبانی در نسخههای قدیمی وجود نداشت.
۳- هسته لینوکس دارای اعمال زور است یا به اصطلاح preemptive است. یونیکسهای قدیمی تر امکان اعمال زور را نداشتند.
۴- لینوکس روش جالبی در پیاده سازی رشتههای اجرایی یا thread ها دارد. در لینوکس تقریبا فرقی مابین یک رشته و یک پروسه معمولی نیست. تنها فرقی که وجود دارد این است که بیت thread ها منابع به اشتراک گذاشته می شوند.
۵- لینوکس یک مدل شی گرا بر مدیریت دستگاه ها به همراه رخدادهای قطع و وصل و فایل سیستم دستگاه در فضای کاربر (sysfs) دارد.
۶- لینوکس از پیاده سازی بعضی امکانات یونیکس که طراحی خوبی ندارند و به کار نمی روند چشم پوشی کرده است مانند STREAMS که تقریبا مرده است.
۷- و در نهایت لینوکس بر خلاف یونیکسهای دیگر به معنای واقعی کلمه ازاد است.
نسخههای هسته لینوکس
هسته لینوکس در دو نوع نسخه منتشر می شود. پایدار و توسعه. هستههای پایدار نسخههایی هستند که می توانند در محیط کاربری به کار روند. نسخههای پایدار جدید تنها برای رفع اشکالات و راه آندازهای جدید منتشر می شوند. در سوی دیگر هستههای سری توسعه در هر نسخه تغییرات زیادی می کنند و به حد قابل قبولی برای استفاده واقعی نرسیده آند و مناسب نیستند
نسخه هسته لینوکس به وسیله سه عدد مشخص می شود. مثلا 2.6.20 . عدد اول (۲) که عدد اصلی (major version) نامیده می شود زمانی تغییر می کند که تغییرات بسیار عمده و بنیادی در هسته اتفاق بیفتد. عدد دوم (۶) عدد فرعی (minor version) نامیده می شود. اگر این عدد زوج باشد هسته پایدار و اگر فرد باشد هسته توسعه است. دو عدد اول سری هسته را نیز نشان می دهند مثلا هسته مثال مذکور سری 2.6 است. عدد سوم نیز patchlevel نامیده می شود.
هستههای توسعه یک سری فاز توسعه دارند. در ابتدا توسعه دهندگان هسته بر روی امکانات جدید کار و تحقیق و بحث می کنند. بعد از آن مرحله ثبت امکانات یا feature freeze می باشد. پس از این مرحله هیچ امکان جدیدی به لیست امکانات موردنظر برای پیاده سازی اضافه نخواهد شد. توسعه کدها شروع شده و پس از مدتی که هسته به مرحله ای برسد که بتوان آن را به عنوان پایدار معرفی کرد مرحله ثبت کد یا code freeze اغاز می شود. پس از این مرحله فقط رفع اشکال ها قبول می شوند. پس از پایان این مرحله می توان امید داشت نسخه پایداری از هسته منتشر شود.
اجتماع توسعه هسته لینوکس
هنگامی که شما توسعه کد برای هسته لینوکس را اغاز می کنید جزیی از اجتماع عمومی توسعه هسته لینوکس خواهید بود. تالار اصلی توسعه دهندگان هسته لینوکس لیست پستی هسته می باشد. اطلاعات عضویت را می توانید در سایت http://vger.kernel.org مشاهده کنید. لیست پستی شلوغ با بیش از ۳۰۰ نامه الکترونیکی در روز.
برنامه نویسی برای لینوکس ممکن است کار دشواری به نظر برسد و یا شاید فقط بخواهید یک سرور لینوکس روی شبکه داشته باشید .شاید فقط تعداد کمی برنامه کاربردی را بخواهید تحت لینوکس اجرا کنید یا شاید اجرای لینوکس به منظور پاسخ به یک اعتیاد باشد.اخرین ذهنیت شما گسترش نرم افزاری جدید می تواند باشد . بسیار خوب.هنوز هم دلایل کافی برای یادگیری برنامه نویسی با لینوکس وجود دارد.اگر می خواهید بدانید چگونه برنامه های شما کار می کنند لازم است مبانی برنامه نویسی را بدانید.درباره ان فکر کنید .اگر برنامه نویسی را بدانید می توانید متن برنامه اصلی بسته های نرم افزاری لینوکس را از اینترنت کپی کنید و با خواندن ان ها متوجه نحوه کار کردنشان بشوید . به علاوه دانستن برنامه نویسی لینوکس مهارتهای شما را بصورت تخصصی افزایش می دهد.همچنین راه مناسبی برای پیوستن به انجمن لینوکس است.اولین کاری که باید انجام دهیم غلبه بر ترس از اخرین کار مربوط به لینوکس است یعنی برنامه نویسی برای لینوکس است .بنابه دلایل زیادی عده ای از مردم حتی بیشتر برنامه نویسان تصور می کنند برنامه نویسی برای لینوکس وحشتناک و بسیار دشوار می باشد .لینوکس توسط برنامه نویسان گسترش یافت به این ترتیب انها سیستمی را تولید کردند که سیستم را اسانتر گسترش و تصحیح کرد و اشکال زدایی را اسانتر ساخت . مزیت دیگر ان متنوع شدن ابزارهای مجانی برای کمک به گسترش روند کار است . اگر تا به حال به ارزش مایکروسافت ویژوال استودیو یا هر محصول بورلند پی برده باشید واضح است که می دانید چقدر این ابزارهای مجانی با ارزشند.
درک اسلوب تولید برنامه با متن باز
حال که دانستید برنامه نویسی برای لینوکس مفید می باشد لازم است بدانید چگونه نرم افزارهای تحت لینوکس گسترش می یابند.اگر بخواهید به پروژهای گسترش لینوکس یا گسترش نرم افزارهای تجاری ان کمک کنید راه مناسب نقد انها می باشد حتی اگر برای استفاده شخصی باشد باز هم مفید است.
همچنین همه نرم افزارهای غیر تجاری لینوکس تحت مدل برنامه نویسی کد باز می باشند.این مدل کاملا با نحوه گسترش نرم افزارهای موجود متفاوت است و نه تنها نحوه تولید نرم افزار را تعریف می کند بلکه نحوه تفکر برای تولید نرم افزار را نیز از نو تعریف می کند .برای شروع لیسانس نرم افزار نمی تواند انتشار مجدد ان یا ساخت ان به عنوان قسمتی از بسته نرم افزاری را محدود کند .می توانید کپی های مجانی به هر تعداد که می خواهید داشته باشید .به علاوه متن اصلی برنامه باید همراه با برنامه اجرایی باشد و متن برنامه توسط هر کس می تواند تغییر و انتشار یابد.البته لازم است متن برنامه برای هر نوع تغییری در دسترس باشد همچنین برای ممانعت از مغایرتها پیشگیری می شود . نمی توان محدودیتی برای بعضی از افراد برای استفاده از محصولات یا برای انتشار نرم افزار قائل شد به طور مثال یک ابزار را نمی توان با متن باز به شمار اورد اگر برای کاربران ردهت یا دبیان یا جنتو رایگان باشد ولی برای نسخه های دیگر چنین نباشد.همچنین لیسانس نمی تواندبه قسمت های مورد نیاز در نرم افزارهای دیگری وابسته باشد .
Linux Professional Institute Certification-LPIC :
انستیتوی تخصصی لینوکس LPI: Linux Professional Institute در سال 1999 در کانادا آغاز به کار نمود . این موسسه در سراسر دنیا به عنوان سازمانی پیشرو در امر آموزش و ارائه مدارک تخصصی لینوکس ،Open Source و نرم افزار شناخته شده و مورد حمایت و تایید شرکت های بزرگی همچون IBM ، ناول ، hp ، پروسافت ، اینتل و بسیاری دیگر می باشد.
انستیتوی تخصصی لینوکس LPI : Linux Professional Institute جهت ارتقاء سطح دانش و تخصص جامعه IT خصوصا علاقمندان به لینوکس ، اقدام به ارائه مدارک بین المللی با هدف ایجاد استاندارد بین المللی آموزش متخصصین کارآمد لینوکس نموده است .
این مدارک که تحت عنوان LPIC :Linux Professional Institute Certification در جهان شناخته می گردند بر خلاف سایر مدارک موجود لینوکس نظیر RHCE ، غیر انتفاعی و Vendor_Less بوده و به هیچ محصول یا نوع خاصی از لینوکس وابسته نمی باشند و این امر موجب تمایز این مدرک از سایر مدارک موجود لینوکس در دنیای صنعت می باشد .
:: تعدادمدارک: 3
این سری از گواهینامه ها شامل سه سطح و سه مدرک جداگانه می گردد که عبارتند از:
Junior Level Administration (LPIC-1)..................... | سطح مقدماتی مدیریتی | |
Intermediate Level Administration (LPIC-2).......... | سطح میانی مدیریتی | |
Senior Level Administration (LPIC-3)..................... | سطح ارشد مدیریتی |
اعتبار این مدارک 10 سال بوده و پس از این مدت نیاز به Recertification می باشد.