پروژه گنو - قسمت سوم(1356 مجموع کلمات موجود در متن) (4843 بار مطالعه شده است)
لیست
وظایف گنو
همینطور
که پروژه گنو پیش میرفت و تعداد بیشتری
اجزاء سیستم یافت میشد که پیشتر توسعه
داده شده بودند بالاخره لازم بود که لیستی
از نارساییهای باقی مانده درست شود.
ما
از آن لیست برای بکار گماردن توسعهدهندگان
تازه برای نوشتن قسمتهایی که نوشته نشده
بود استفاده میکردیم.
این
لیست به نام لیست وظایف گنو [۳۵] معروف شد.
علاوه
بر اجزاء مفقوده یونیکس، نرمافزارها و
مستندات پروژه مفید دیگری را هم که فکر
میکردیم یک سیستم به واقع کامل بایستی
داشته باشد لیست کردیم.
امروزه
به سختی بتوان چیزی از اجزاء یونیکس در
لیست وظایف گنو یافت – آن کارها به جز چند
مورد غیرضروری انجام شدهاند.
اما
لیست پر از پروژههایی است که میشود
آنها را «ابزارها» [۳۶] نامید.
هر
برنامهای که مورد توجه تعداد زیادی از
کاربران باشد ابزار مناسبی برای افزودن
به یک سیستم عامل است.
حتی
بازیها هم به لیست وظایف اضافه شدند – و
از ابتدا هم در لیست بودند.
یونیکس
بازی به همراه دارد پس بطور طبیعی گنو هم
باید داشته باشد.
اما
سازگاری برای بازیها مهم نبود پس ما لیست
بازیهای یونیکس را پی نگرفتیم.
بجای
آن طیفی از بازیهای گوناگون را که ممکن
بود کاربران بپسندند لیست کردیم.
GPL کتابخانه
گنو [۳۷]
کتابخانه
C
گنو
از کپیلفت ویژهای استفاده میکند که
پروانه جامع همگانی کتابخانه گنو نامیده
شده است (۱)
که
اجازه پیوند دادن نرمافزار اختصاصی به
کتابخانه را میدهد.
چرا
چنین استثنایی منظور شد؟
این
یک موضوع بنیانی نیست؛ اصلی وجود ندارد
مبنی بر اینکه نرمافزار اختصاصی حق دارد
با کد ما ترکیب شود.
(چرا
با پروژهای همکاری کنیم که اعلام داشته
از همکاری با ما سر باز میزند؟)
استفاده
از LGPL
برای
کتابخانه C
یک
استراتژی است.
کتابخانه
C
وظیفهای
عمومی دارد؛ هر سیستم یا کامپایلر اختصاصی
با یک کتابخانه C
همراه
است.
بنابراین
در دسترس گذاشتن کتابخانه C
پروژه گنو
فقط برای نرمافزار آزاد هیچ مزیتی به
نرمافزار آزاد نمیدهد بلکه تنها
استفاده از این کتابخانه را محدود میکند.
یک
سیستم، استثنایی بر این قاعده است:
در
سیستم گنو (که
شامل گنو/لینوکس
هم میشود)
کتابخانه
C
گنو
تنها کتابخانه C
است.
پس
شرایط انتشار کتابخانه C
گنو
تعیین میکند که آیا کامپایل کردن یک
برنامه اختصاصی برای یک سیستم گنو ممکن
است یا نه.
دلیل
اخلاقی برای پذیرفتن ابزارهای اختصاصی در سیستم گنو وجود ندارد اما از نظر
استراتژیک به نظر میرسد منع کردن این
ابزارها بیشتر مانع استفاده از سیستم گنو
میشود تا اینکه توسعه ابزارهای آزاد را
تشویق کند.
این
است که استفاده از LGPL
استراتژی
خوبی برای کتابخانه C
است.
برای
دیگر کتابخانهها تصمیم استراتژیک باید
مورد به مورد بررسی شود.
زمانی
که یک کتابخانه کاری بخصوص انجام دهد که
به برنامهنویسی نوع خاصی از برنامهها
کمک کند، انتشار آن با پروانه GPL
و
محدود کردن آن تنها به نرمافزار آزاد
روشی برای کمک به توسعهدهندگان دیگر
نرمافزار آزاد است تا بر ضد نرمافزارهای
اختصاصی به آنها نوعی برتری دهد.
GNU Readline را
در نظر بگیرید که یک کتابخانه بود که برای
فراهم کردن ویرایش تحت خط فرمان BASH
توسعه
داده شده بود.
Readline با
پروانه متداول GNU
GPL منتشر
شده است نه با پروانه کتابخانه GPL.
احتمال
دارد این کار میزان بکار گرفتن Readline
را
کمتر کند اما این برای ما زیانبار نیست.
در
ضمن حداقل یک ابزار مفید که نرمافزار
آزاد شده است بطور ویژه
میتواند از Readline
استفاده
کند و این یک منفعت راستین برای جامعه
است.
توسعهدهندگان
نرمافزار اختصاصی مزیت حاصل از پول را
دارند؛ توسعهدهندگان نرمافزار آزاد
میبایست برای یکدیگر مزیت ایجاد کنند.
امیدوارم
روزی مجموعه بزرگی از کتابخانههای تحت
GPL
داشته
باشیم که بطور همزمان برای نرمافزارهای
اختصاصی در دسترس نباشند و قسمتهای مفیدی
فراهم آورند که برای ایجاد بلوکهای جدید
نرمافزار آزاد بکار آیند و به مزیت اصلی
توسعه نرمافزار آزاد در آینده بیافزایند.
(۱)
این
پروانه در حال حاضر پروانه جامع همگانی
کوچکتر گنو [۳۸] نامیده میشود تا از القای
این تصور که همه کتابخانهها باید از این
پروانه استفاده کنند جلوگیری کند.
خاراندن
جای خارش؟
اریک
ریموند [۳۹] میگوید «هر
کار نرمافزاری خوبی با خاراندن جای خارش
شخص توسعهدهنده آغاز میشود.»
شاید
گاهی اوقات چنین باشد اما بسیاری از اجزای
ضروری گنو برای رسیدن به یک سستم عامل
آزاد کامل توسعه داده شدهاند.
آنها
از یک چشمانداز و برنامهریزی نشأت
گرفتهاند نه از محرکی آنی.
برای
مثال ما کتابخانه C
گنو
را توسعه دادیم چون یک سیستم شبه یونیکس
به کتابخانه C
نیاز
دارد، Bourne-Again
Shell یا
bash
را
توسعه دادیم چون یک سیستم شبه یونیکس به
یک پوسته خط فرمان نیاز دارد و GNU
tar را
توسعه دادیم چون یک سیستم شبه یونیکس به
یک برنامه tar
نیاز
دارد.
در
مورد برنامههای خودم هم همینطور است –
کامپایلر GNU
C،
گنو Emacs
یا
GDB
و
GNU
Make.
بعضی
از برنامههای گنو برای این توسعه یافتند
که با تهدیدات خاصی بر ضد آزادی ما مقابله
کنند.
به
این منظور ما gzip
را
توسعه دادیم تا جایگزین برنامهای برای
فشردهسازی شود که بخاطر حقامتیاز LZM
از
دسترس جامعه خارج شده بود.
ما
افرادی را حمایت کردیم تا LessTif
و
به تازگی GNOME
و
Harmony
را
توسعه دهند تا راهحلی باشد برای مشکلاتی
که بواسطه کتابخانههای اختصاصی ویژهای
بروز کردند (پایینتر
را ببینید).
ما
محافظ حریم گنو [۴۰] را توسعه میدهیم تا جایگزین
نرم افزار رمزگزاری غیرآزاد متداولی گردد
چون مردم نباید مجبور به انتخاب بین امنیت
و آزادی گردند.
البته
کسانی که این برنامهها را نوشتند به این
کار علاقه داشتند و امکانات بسیاری توسط
دیگران به برنامهها افزوده شد چرا که
خود آن اشخاص به این امکانات نیاز داشتند
و برایشان جالب بود.
اما
این دلیل وجودی برنامهها نیست.
توسعههای
غیرمنتظره
در
آغاز پروژه گنو من تصور میکردم که اول
تمام سیستم گنو را توسعه خواهیم داد و سپس
همه را با هم منتشر خواهیم نمود.
اما
این اتفاق نیافتاد.
از
آنجا که هر جزئی از سیستم گنو بر روی سیستم
یونیکس پیادهسازی شده بود مدتها پیش از
اینکه یک سیستم کامل گنو وجود داشته باشد
هر یک از اجزاء بر سیستم یونیکس قابل اجرا
بود.
بعضی
از این برنامهها معروف شدند و کاربران
شروع به توسعه و انتقال آنها – به نسخههای
غیرهمساز یونیکس و گاهی به سیستمهای دیگر
– کردند.
این
روند برنامهها را بسیار قویتر کرد و
سرمایه و همکاران بیشتری را جذب پروژه
گنو نمود.
اما
شاید موجب شد کامل شدن یک سیستم کارای
کمینه چندین سال به تعویق بیافتد چرا که
وقت توسعهدهندگان گنو صرف نگهداری از
این نسخهها و اضافه کردن امکانات به
اجزای موجود میشد بجای اینکه صرف نوشتن
اجزای مفقوده دیگری شود.
GNU Hurd
در
۱۹۹۰ سیستم گنو بطور تقریبی کامل بود؛
تنها جزء اصلی غایب هسته بود.
ما
تصمیم گرفته بودیم هسته را به شکل مجموعهای
از فرآیندهای سرور که بر روی ماخ [۴۱] اجرا
میشدند پیادهسازی کنیم.
ماخ
یک میکروکرنل [۴۲] است که در دانشگاه کارنگی
ملون [۴۳] و سپس در دانشگاه یوتا [۴۴] توسعه یافته
است؛ GNU
HURD مجموعهای
از سرورهاست (یا
«جمع
گنوها»)
که
بر روی ماخ اجرا میشوند و وظایف گوناگون
کرنل یونیکس را انجام میدهند.
شروع
توسعه به تاخیر افتاد چونکه ما صبر کردیم
تا ماخ همانطور که قول داده شده بود به
عنوان نرمافزار آزاد منتشر شود.
یکی
از دلایل این مدل توسعه پرهیز از چیزی بود که به
نظر دشوارترین بخش کار به نظر میرسید:
رفع
اشکال یک هسته بدون دسترسی به یک دیباگر
متن کد.
این
بخش کار در ماخ انجام شده بود و ما انتظار
داشتیم سرورهای HURD
را
به عنوان برنامههای کاربر با GDB
رفع
اشکال کنیم.
اما
امکانپذیر کردن آن بسیار به طول انجامید
و رفع اشکال سرورهای چندرشتهای که به
هم پیغام میفرستادند بسیار دشوار شد.
بکار
انداختن استوار HURD
سالها
طول کشید.
Alix
از
ابتدا قرار نبود هسته گنو HURD
نامیده
شود.
اسم
اصلی آن Alix
بود
– نام زنی که آن موقع معشوقه من بود.
او
که یک مدیر سیستم یونیکس بود اشاره کرد
که چطور نامش با روش نامگذاری نسخههای
سیستم یونیکس جور در میآید؛ به شوخی به
دوستانش میگفت «یکی
باید هستهای به نام من کند.»
من
چیزی نمیگفتم اما مصمم شدم با نامگذاری
هسته به نام Alix
او
را غافلگیر کنم.
اما
اوضاع آنطور نماند.
مایکل
بوشنل [۴۵] (حالا
توماس)
توسعهدهنده
اصلی کرنل نام HURD
را
ترجیح داد و Alix
را
برای ارجاع به بخش بخصوصی از کرنل دوباره
تعریف کرد – بخشی که درخواستهای سیستم
را نگه داشته و با فرستادن پیغامهایی به
سرورهای HURD
آنها
را مدیریت میکند.
در
نهایت من و Alix
جداشدیم
و او نام خود را عوض کرد؛ بگونهای نامربوط
طراحی HURD
تغییر
کرد بطوری که کتابخانه C
پیغامها
را مستقیماً به سرورها میفرستاد و بدین
ترتیب Alix
از
طرح حدف شد.
اما
قبل از این وقایع یکی از دوستان او نام
Alix
را
در متن کد HURD
دید
و به او خبر داد.
پس
نام کار خودش را کرده بود.
لینوکس
و گنو/لینوکس
«گنو
هرد»
قابل
استفاده عملی نیست.
خوشبختانه
هسته دیگری در دسترس است.
در
۱۹۹۱ لینوس توروالدز [۴۶] کرنل سازگار با
یونیکس دیگری را توسعه داد و آن را لینوکس
نامید.
حدود
۱۹۹۲ ترکیب لینوکس با سیستم گنوی نه چندان
کامل یک سیستم عامل تمام عیار را حاصل
کرد.
(البته
ترکیب کردن آنها کاری قابل توجه بود.)
در
واقع به خاطر وجود لینوکس است که امروز
ما میتوانیم سیستم گنو را به کار اندازیم.
ما
این نسخه از سیستم را گنو/لینوکس
مینامیم تا ترکیب حاصل از اختلاط سیستم
گنو و کرنل لینوکس را نشان دهیم.
نوشته
ریچارد استالمن اصل مقاله از کتاب «Open
Sources»
ترجمه
از بهنام بهجت مرندی blixbox@gmail.com
منبع:
http://www.gnu.org/gnu/thegnuproject.html
پانویسها:
(شمارهها
از ادامه قسمت پیش است)
[۳۵] The GNU Task List
[۳۶] applications
[۳۷] The GNU Library GPL
[۳۸] GNU Lesser General Public License
[۳۹] Eric Raymond
[۴۰] GNU Privacy Guard
[۴۱] Mach
[۴۲] microkernel
[۴۳] Carnegie Mellon University
[۴۴] University of Utah
[۴۵] Michael Bushnell
[۴۶] Linus Torvalds
PDF Version
|