گنو یا لینوکس؟ آخرش کدوم یک سیستم عاملن؟؟؟


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

سیستم‌عامل

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


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


درک جایگاه‌ها

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


متأسّفانه یک کرنل به تنهایی راه به جایی نمی‌برد، برای داشتن یک سامانهٔ قابل استفاده، نیاز به یک پوسته، کامپایلرها، یک کتاب‌خانه و… دارید. این‌ها قسمت‌هایی مجزّا هستند که ممکن است تحت حق رونوشتی محکم‌تر (یا حتا نرم‌تر) باشند. اکثر ابزارهای مورد استفاده برای لینوکس، نرم‌افزارهای گنو هستند و تحت کپی‌لفت گنو قرار دارند.

در مورد بالا، به جز پوستهٔ بش که البته آن هم جزیی از پروژهٔ گنو است، مقصود از کامپایلرها gcc و مقصود از کتاب‌خانه glib است که هر دو از اجزای سیستم‌عامل گنو هستند.

لینوکس و glib

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

در مقابل کتاب‌خانهٔ glib به عنوان بخش اصلی سیستم‌عامل گنو در لایهٔ اجرایی، مانند یک پوشش روی کرنل است که بیش از ۲۰۰۰ زیرروال را برای فراخوانده شدن توسّط برنامه‌ها فراهم کرده و در لایهٔ زیرین خود، به ارتباط با کرنل می‌پردازد. بنا بر این با تغییر دادن این لایهٔ زیرین و تطبیق آن با فراخوانی‌های سامانهٔ کرنل‌های دیگر می‌توان آن را برای هر کرنل دیگری با ساختار پازیکس قابل استفاده کرد.


از این روست که می‌بینیم بخش عمدهٔ مخازن توزیع بزرگی مانند دبیان، بدون تلاش‌های بسیار بزرگ از جانب توسعه‌دهندگان این توزیع، برای کرنل‌های مختلفی چون لینوکس، هرد، مینیکس، kFreeBSD و… پورت شده‌اند، زیرا که اکثر برنامه‌های کاربردی، برای اجرا روی سیستم‌عامل گنو نوشته شده‌اند و نه کرنل لینوکس.

از سوی دیگر می‌توان نگاهی به برنامه‌های سیستم‌عامل اندروید داشت. همان‌طور که احتمالاً می‌دانید، اندروید نیز یکی از سیستم‌عامل‌هایی است که از لینوکس به عنوان کرنل استفاده می‌کند. ولی برنامه‌های نوشته موجود برای این سیستم‌عامل، در توزیع‌های گنو مانند اوبونتو و… به صورت بومی قابل اجرا نیستند. عمدهٔ برنامه‌های این سیستم‌عامل به صورت قرنطینه و روی زیرساختی با نام ART اجرا می‌شوند که خود، برای کار با کتاب‌خانه‌ای با نام بایونیک که بخش اصلی سیستم‌عامل اندروید در لایهٔ اجرایی است نوشته شده است. دلیل اجرا نشدن این برنامه‌ها و برنامه‌های دیگری که به کمک جعبهٔ توسعهٔ بومی (NDK) به صورت مستقیم با بایونیک کار می‌کنند، به صورت بومی در توزیع‌های گنو، این است که مانند مورد مشابه در گنو، همهٔ این برنامه‌ها برای اجرا روی سیستم‌عامل اندروید نوشته شده‌اند و نه کرنل لینوکس.

گفتنی است به تازگی پروژه‌ای با نام هیبریس شروع به توسعه کرده است که تلاش دارد همان‌گونه که واین لایهٔ سازگاری دودویی برای تبدیل زیرروال‌های ویندوز به زیرروال‌های پازیکس گنویی را فراهم می‌کند، یک لایهٔ سازگاری برای تبدیل زیرروال‌های بایونیک به glib را ایجاد کند. البته این پروژه هنوز در ابتدای راه است و به دلیل یکسان بودن کرنل گنو و اندروید، تمرکزش روی تبدیل فراخوانی‌های صرفاً وابسته به کرنل، مانند راه‌اندازهای سخت‌افزاری و… است.

نام‌گذاری

اصل کلّی در نام‌گذاری نرم‌افزارها این است که به پدیداورندهٔ آن، حق گذاشتن هرنام دل‌خواهی را روی نرم‌افزارش دارد. ولی حق دخالت درنام‌گذاری دیگر محصولاتی که با نرم‌افزارش در تعامل هستند را ندارد. برای مثال، توسعه‌دهندگان GNOME در سال ۲۰۱۰ نام میزکارشان را به Gnome تغییر دادند و کاملاً‌ هم اختیار این کار را داشتند، ولی نمی‌توانستند و نمی‌توانند در نام‌گذاری Ubuntu که به صورت پیش‌گزیده از میزکار گنوم بهره می‌برد دخالتی داشته باشند.

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

همین امر در مورد سیستم‌عامل گنو نیز صادق است. توسعه‌دهندگان اصلی این سیستم‌عامل، نام گنو (و نه نام خودشان) را بر این سیستم‌عامل گذاشته‌اند و فارق از نرم‌افزارهای به کار رفته در آن، باید همواره از آن به همین نام یاد شود. با نگاهی به دیگر سیستم‌عامل‌های مطرح دنیا نیز در می‌یابیم که نوع و نام کرنل به کار رفته در سیستم‌عامل، نقشی در نام‌گذاری آن سیستم‌عامل نداشته و همواره از یک سیستم‌عامل، با نام خودش یاد شده است. با این حال، گنو تنها سیستم‌عاملی است که به دلیل پایبندی بیش‌ازحد توسعه‌دهندگانش به اخلاق حرفه‌ای، این اجازه را داده‌اند که در توزیع‌هایی از این سیستم‌عامل که با کرنل‌های مختلف ارائه می‌شود، برای اعتبار دادن به پروژه‌های خارج از گنو، نام آن‌ها نیز در ادامهٔ نام گنو بیاید.




شبهات پرتکرار

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

گنو فقط یک مجموعه ابزار است.

گویندگان این جمله، سیستم‌عامل گنو را با پروژهٔ گنو اشتباه گرفته‌اند. پروژهٔ گنو، پروژه‌ای است که یک سال پس از معرّفی سیستم‌عامل گنو، به منظور نوشتن نرم‌افزارهای آزاد کاربردی برای سیستم‌عامل گنو شروع به کار کرد. حاصل این پروژه، بسیاری از نرم‌افزارهای آزاد است که امروزه بر روی سیستم‌عامل گنو استفاده می‌شود، ولی جزو خود سیستم‌عامل نیست؛ مانند ویرایشگرهای متن، بازی‌ها و…

گنو فقط یک کامپایلر است.

گنو یک کامپایلر نیست، بخشی از آن با نام GCC یک مجموعه کامپایلر است. این مجموعه به همراه کتاب‌خانهٔ glibc به عنوان پایهٔ اصلی سیستم‌عامل گنو نوشته شده و افراد غیرفنّی ممکن است نتوانند تفاوت این دو را به خوبی درک کنند. برای روشن‌تر شدن موضوع می‌توان به جعبه‌ابزار گرافیکی GTK اشاره کرد که به عنوان پایهٔ اصلی نرم‌افزار گیمپ نوشته شده، ولی گیمپ فقط یک جعبه‌ابزار گرافیکی نیست.

استالمن گفته بگویید گنو/لینوکس.

ادّعای درستی است. ولی توجّه داشته باشید که استالمن خواهش نکرده لینوکس را گنو/لینوکس بنامید. پس از گزینش لینوکس به عنوان کرنل آیندهٔ سیستم‌عامل گنو و هم‌زمان با کار گروه توسعهٔ گنو روی لینوکس برای سازگار کردن آن با سیستم‌عامل گنو، فهرست پستی گنو با رشته‌های متعدّدی پر شد که پس از تلاش‌های زیاد برای رفع مشکلات عجیبی که به نظر منطقی نمی‌رسیدند، مشخّص می‌شد فرد پرسشگر از لینوکس به جای کرنل مطرح وقت گنو یعنی تریکس استفاده می‌کرده است. بنا بر این استالمن از کابران گنو خواست در صورت استفاده از لینوکس به عنوان کرنل، در انتهای عنوان درخواست خود، برای مشخّص شدن کرنل مورد استفاده، عبارت «+لینوکس» را درج کنند. این سنّت بعدها منجر به نوشتن نام سیستم‌عامل به صورت گنو+لینوکس شد و پس از مدّتی به دلیل نیاز + به تایپ شدن با دو انگشت، به صورت گنو/لینوکس خلاصه شد. بنابراین خواهش استالمن گفتن این عبارت به ‌جای گنو بود و نه به‌جای لینوکس!

پس دیگر برنامه‌ها چه؟

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

نتیجه‌گیری

با توجّه به تمام تفاسیر ارائه شده، می‌توان با قطعیت گفت که نام این سیستم‌عامل «گنو» است و در صورتی که لازم باشد نوع کرنل به کار رفته در آن مشخّص شود،‌ می‌توان آن نام را هم به گنو افزود.در پایان توصیهٔ من برای آنانی که سیستم‌عامل گنو را به نام‌های دیگری مانند لینوکس می‌خوانند این است که سیستم‌عامل خودشان را مستقل از گنو توسعه داده و سپس مانند گوگل با اندروید، سامسونگ با تایزن و… هر نامی که مایلند را روی آن بنهند.


منبع(البته فقط یک کپی پیست کردم. ولی خب اجازه نامه سایت بهم این اجازه رو میده.):

https://gnu.rocks/2017/gnu-or-linux/