پروژه گنو
پروژه گنو (قسمت اول)
نخستین جامعه اشتراک نرمافزار
وقتی در سال ۱۹۷۱ کار در آزمایشگاه هــوش مصنــوعی MIT را آغاز کــردم عضو جامعه اشترک نرمافزاری شــدم که از سالها پیش وجود داشت. به اشتراک گذاشتن نرمافزار فقــط مـحـدود بــه جـامعه خاص ما نبود؛ این کار به اندازه رایانهها قدمت دارد همچنان که به اشتراک گذاشتن دستور غذا به اندازه آشپزی قدمــت دارد. ولی ما بیش از پیش نرم افزارها را به اشتراک میگذاشتیم.
آزمایشگاه هوش مصنوعی از یک سیستم عامل اشتراک زمانــی بــه نام ITS (سیستم غیر قابل رقابت اشتراک زمانی) [۲] استفاده میکرد که کارکنان هـکــر آزمایشگاه (۱) آن را بــا زبــان اسمــبلی بــرای یــک Digital PDP-10 کــه یـکی از رایانههای بزرگ زمان خود بود طراحــی و کـدنـویسی کــرده بـودند. به عنوان یکی از اعضای این جامعه و یک کارمند هکر سیستم در آزمایشگاه هوش مصنوعی شغل من بهتر کردن این سیستم بود.
ما به نرمافزار خود «نرمافزار آزاد» [۳] نمیگفتیم چون آن عبــارت وجـود نداشت؛ اما همــانطور بود. هر وقت کسی از یک دانشگاه یا شرکت دیگر میخواست از برنامه استفاده کند مــا بــا خوشحالی به او اجازه این کار را میدادیم. اگر شما با کسی برخورد میکردید که از برنامهای ناآشنا و جالب استفاده میکرد همیشه میتوانستید از او بخواهید که متن کد را نشانتان دهد تا بتوانید آن را بخوانید، تغییرش دهید یا قسمتهایی از آن را برای خلق یک برنامه تازه جدا کنید.
(۱) استفاده از «هکر» به معنای «نفوذگر امنیتی» اشتـباه رسانههای گروهی است. ما هکرها از پذیرش این مفهوم سر باز میزنیم و این کلمه را به معنای «کسی که عاشق برنامهنویسی است و از برنـامهنویسی هوشمندانه لذت میبرد» بکار میبریم.
فرو ریختن جامعه
اوضاع در اوایل دهه ۱۹۸۰ زمــانی کــه Digital سری PDP-10 را متوقف کــرد بــه شــدت عـوض شد. معماری باسلیقه و قدرتمند آن در دهه ۶۰ بطور طبیعی نمیتوانست فضاهای بزرگتر نشانهگذاری را که در دهــه ۸۰ امکانپذیر شده بودند در بر بگیرد. این به معنای آن بود که نزدیک به همه برنامههای نوشته شده برای ITS منسوخ شدند.
جامعه هکرهای آزمایشگاه هوش مصنوعی نه خیلی قبل از آن از هــم پــاشـیـده بـود. در سال ۱۹۸۱ شرکت Symbolics نزدیک به تمام هکرهای آزمایــشگـاه هوش مصنوعی را استخدام کرد و جامعه کم جمعیت از اداره خود ناتوان شد. (کتاب Hakers نوشته استیو لوی [۴] همراه ارائه تصویری روشــن از جامعه در دوران کمالش این وقایع را توضیح میدهد) وقتی آزمایشگاه هوش مصنوعی در سال ۱۹۸۲ یک PDP-10 نو خــرید مــدیـرانش تصمیم گرفتند بجای ITS از سیستم اشتراک زمانی غیر آزاد Digital استفاده کند.
رایانههای مدرن آن دوره مانند VAX یا 6820 سیستم عامل خودشان را داشتند امــا هیــچکدام از آنها نرمافزار آزاد نبودند: حتی برای دریافت یک نسخه قابل اجرا هم باید موافقت نامه حفظ اسرار را امضا میکردید.
این به معنای آن بود که اولین قدم برای استفاده از کامپیوتر قول کمک نکردن به دیـگران بـود. همـیاری اجتـماعی ممنوع بود. قانون وضــع شــده توســط صـاحبان نرمافزار اختصاصی این بود: «اگر نرمافزارتان را با دیگران شریک شوید دزدید. اگر خواهان تغییری هستید به ما التماس کنید تا برایتان انجام دهیم.»
ممکن است این ایده که نظام اجتماعی نرمافزار اختصاصی - نظامی کــه اظـهـار میدارد شما مجاز به اشتراک گذاری یا تغییر دادن نرم افزار نیستید - ضد اجتماعی، غیراخلاقی و در واقــع غـلـط اســت بـرای بعضی از خوانندگان عجیب به نظر بیاید. اما درباره نظامی که بر اساس تقسیم جامعــه و درمــانده نـگـه داشـتـن کـاربران بـنـا شــده چــه مـیتــوان گفت؟ خوانندگانی که این ایده را عجیب میبینند مـمکن است ساز و کار نرم افزار اختصاصی را همانگونه که ارائه شده فهمیده باشند یا آن را به شیوهای که سوداگران نرمافزار اختصاصی تعریف میکنند شناخته باشند. توزیعکنندگان نرمافزار مدتها و به سختی کار کردهاند تا مردم را متقاعد کنند که تنها یک نوع نگاه به این موضوع وجود دارد.
وقتی توزیعکنندگان نرمافزار از «اعمال حقوق» خود یا «ممانعت از دزدی» صحـبت میکنـند آنـچه میگویند اهمیت ثانوی دارد. پیام واقعی این گفتهها انگارههای ابراز نشدهای است که آنها به شکل امتیاز میگیرند: اجتماع میبایست آنها را بیهیچ نقدی بپذیرد. پس بگذارید آنها را بیازماییم.
یکی ار انگارهها این است که شرکتهای نـرمافزاری حق طبیعی غیر قابل پرسشی بر مالکیت نرمافزار دارند و بدینسان بر تمام کاربران آن هم مسلطاند. (اگر این حقی طبیعی بود هر چقدر هم که برای اجتماع مضر میبود ما نمیتوانستیم به آن اعتراضی کنیم.) جالب است که قانون اساسی ایالات متحده و رویه قانونی ایــن نـگاه را رد میکنــد؛ کپیرایت حقی طبیعی نیست بلکه انحصاری ساختگی است که از طرف دولت تحمــیل میشود تــا حق طبیعـی کـاربـران بـرای تکثیر را محدود کند.
انگاره ابراز نشده دیگر این است که تنها موضوع مهم درباره نرمافزار کاری است که به شما اجازه انجامش را میدهد - و اینکه ما کاربران رایانه نباید به این موضوع که اجازه داریم چه نوع جامعهای داشته باشیم توجه کنیم.
انگاره سوم این است که اگر ما قدرت کافی احاطه بر کاربران به شرکت ندهیم نرم افزار کارایی نخواهیم داشت (یا هرگز برنامهای نخواهیم داشت که این یا آن کــار بخصوص را انجام دهد). ایــن انگاره مـمـکن بــود درسـت بـاشـد پیش از اینکه جنبش نرمافزار آزاد اثبات کند که ما میتوانیم نرم افزارهای مفید بسیاری را بدون به زنجبر کشیدن آنها خلق کنیم.
اگر تصمیم بگیریم این انگارهها را کنار بگذاریم و این موضوعات را بــراسـاس اخــلاقیات متــداول با ارجعیت دادن به کاربران داوری کنیم به نتایج بسیار متفاوتی میرسیم. کاربران رایانه باید در تـغـییر برنامهها برای انطباق آنها با احتیاجاتشان آزاد باشند و آزاد باشند که نرمافزارها را به اشتراک بگذارند زیرا که کمک به دیگران از مبانی جامعه است.
اینجا جای بحث گسترده درباره دلایل پشت این نتیجهگیری نیست پس من خوانندگان را به این صفحه رجوع میدهم:
http://www.gnu.org/philosophy/why-free.html
یک انتخاب اخلاقی دشوار
وقتی جامعه از میان رفت ادامه دادن به همان شکل سابق برای من غیر ممکن بود. در عوض با یک انتخاب اخلاقی دشوار مواجه شدم.
گزینه آسان پیوستن به دنیای نرمافزار اختصاصی، امــضای مــوافقــت نامه حـفظ اسرار و قول کمک نکردن به دیگر هکرها بود. همچنین میبایست نرم افزاری را که توســعه داده بـودم با موافقت نامه حفظ اسرار منتشر میکردم که فشار را به دیگران برای خیانت به دوستانشان بیشتر میکرد.
بدین گونه میتوانستم پول دربیاورم و شاید خودم را با کــدنویسی ســرگــرم کنـم. امـا میدانسـتم در پایان راه به عقب خواهم نگریست و دیوارهایی را که برای جدا کردن مردم از همدیگر ساختهام، خــواهــم دیــد و احـسـاس خـواهـم کـــرد زندگیام را برای ساختن دنیایی بدتر از پیش صرف کردهام.
من همان موقع تجربه قرار گرفــتن در سمت دریافت کنــنده موفقت نامه حفظ اسرار را داشتم وقـتی که شخصی از ارائه متن کد برنامه کنترل کننده پرینترمان به من و آزمایشگاه هــوش مصــنوعی MIT سر باز زد. (فقدان امکانات بخصوصی در این برنامه استفاده از پرینتر را بسیار دشوار کرده بود.) پــس نمـیتــوانستــم خــودم را متــقاعد کـنـم کــه مـوافقت نامه حفظ اسرار بیضرر است. وقتی او از به اشتراک گذاشتن کد با مــا ســر بــاز زد من خیلی عصبانی شدم؛ نمیتوانستم همان کار را با دیگران بکنم.
گزینه دیگر سر راســت امــا نــاگـوار، تــرک میـدان رایانه بود. به این ترتیب از مهارتهای من سوء استفاده نمیشد اما این مهارتها به هدر میرفت. من در جدا کردن و محدود ساختن کاربران رایانه مقصر نبودم اما این اتفاق به هر حال میافتاد.
پس بدنبال راهی گشتم که یک برنامهنویس بتواند کار مفیدی در این مورد بکند. از خودم پرسیدم آیا برنامه یا برنامههایی هست که بتوانم با نوشتن آنها وجود چنان جامعهای را یکبار دیگر میسر کنم؟
جواب واضح بود: آنچه پیش از همه مورد نیاز بود یک سیستم عــامل بود. این نرمافزاری اجتنابناپذیر برای استفاده از یک رایانه است. با یک سیستم عامل خیلی کارها میشود کــرد؛ بــدون آن بطور کلی نمیشود از رایانه استفاده کرد. با یک سیستم عامل آزاد میتوانستیم جامعهای از هکرهای همـکار داشته باشیم و هرکسی را دعوت به همکاری کنیم. و هر کسی میتوانست از رایانه استفاده کند بدون آنکه شروع به توطئهچینی برای محروم کردن دوستانش نماید.
به عنوان یک توسعه دهنده سیستم عامل مهارتهای خـــوبی بــرای انـجـام ایــن کــار داشـتـم. پـس با اینکه میدانستم نمیتوانم به راحتی به موفقیت برسم تشخیص دادم که برای انــجــام ایــن کــار انتــخـاب شـدهام. سیستم را سازگار با یونیکس انتخاب کردم تا قابل انتقال باشد و کاربران یونیکس بتــوانـند بــه آن منتــقل شـونــد. نــام GNU در پـی یک سنت هکری انتخاب شد و سر نام «GNU's Not Unix» بود.
یک سیستم عامل تنها به معنای یــک هسـته نیست که به ندرت برای اجرای سایر برنامهها کافی است. در اوایل ۱۹۷۰ هر سیستم عاملی که سزاوار این نام بود شامـل خط فرمان [۵]، اسمبلرها [۶]، کامپایلرها [۷]، انترپرترها [۸]، دیباگرها [۹]، ویرایشگرهای متن [۱۰]، ابزارهای ایمیل [۱۱] و خیلی چیزهای دیگر بود. ITS آنها را داشت، Multics آنها را داشت، VMS آنها را داشت و Unix هم آنها را داشت. سیستم عامل گنو هم باید آنها را میداشت.
بعدها این کلمات را که به هیلِل (۱) [۱۲] نسبت داده میشود شنیدم:
اگر از بهر خود نیستم، که مرا خواهد بود؟
اگر تنها خود را هستم، پس چه هستم؟
اگر نه حالا، پس کی؟
تصمیم شروع پروژه گنو بر اساس روحیهای مشابه بود.
(۱) به عنوان یک بیخدا دنبالهرو هیچ رهبر مذهبی نیستم اما گاهی چیزی پسندیده در آنچه که یکی از آنها گفته است مییابم.
آزاد چون آزادی
عبارت «نرمافزار آزاد» گاهی بد تعبیر میشــود - این عبارت هیچ ربطی به قیمت ندارد. این عبارت مربوط به آزادی است. بنابراین اینجا نرمافزار آزاد را تعریف میکنیم: یک برنامه برای شما که کاربری منحصر بفرد هستید نرمافزار آزاد است اگر:
* این آزادی را دارید تا از برنامه با هر هدفی استفاده کنید.
* این آزادی را دارید تا برنامه را تغییر دهید تا مناسب احتــیاجاتتان شود. (برای اینکه این آزادی در عمل موثر باشد باید به متن کد دسترسی داشته باشید چون تغییر دادن برنامه بدون داشتن متن کد کار بسیار دشوار است.)
* این آزادی را دارید که نسخههای برنامه را به رایگان یا در قبال دریافت وجه بازپخش کنید.
* این آزادی را دارید که نسخههای تغییر یافته برنامه را پخش کنید تا جامعه از بهینهسازیهای شما منتفع گردد.
از آنجا که «آزاد» به آزادی مربوط می شود نه به قیمت، مغایرتـی بین فروش نسخههای برنامه و نرمافزار آزاد وجود ندارد. در واقع فروش نسخهها اجتنابناپذیر است: مجمــوعه نــرمافزارهای آزادی کــه بر روی CD فروخته میشوند برای جامعه اهمیت دارند و فروش آنها راه مهمی برای کسب درآمد جــهـت توسعه نرمافزار آزاد است. بنابراین برنامهای که مردم آزاد نیستند تا در این مجموعهها قرار دهند نرمافزار آزاد نیست.
به دلیل ابهام کلمه «آزاد» افراد مدتهاست که در پی جایگزین هستند اما کسی جایگزین مناسبی پیدا نکرده است. زبان انگلیسی کلمات و دقایق بیشتری از زبانهای دیگر دارد اما یک کلمه ساده و واضح که معنی «آزاد» به معنی آزادی بدهد ندارد - «رها شده از قید» [۱۳] کلمهای است که بسیــار نــزدیک بــه معناست. جایگزینهـایی چــون «رها کردن» [۱۴]، «آزادی» [۱۵] و «باز» [۱۶] معنای غلط یا اشکالات دیگری دارند.
نرمافزار گنو و سیستم گنو
توسعه تمام یک سیستم پروژه بسیار بزرگی است. بــرای اینــکه ایــن پــروژه را قــابــل انــجـام کنــم تصـمـیم گرفتم تکه نرمافزارهای آزاد موجود را از هر جا که ممکن بود اقتباس کرده و استفاده کنم. به عنوان مثـال از همان آغاز تصمیم گرفتم از TeX به عنوان شکل دهنده اصلی متن استفاده کنم؛ چــنــد ســال بـعـد تصمیم گرفتم از X Window System استفاده کنم بجای اینکه یک سیستم پنجره دیگر برای گنو بنویسم.
بخاطر این تصمیمات، سیستم گنو همان مجموعه تمــام نرم افزارهای گنو نیست. سیستم گنو شامل برنامههایی است که نرمافزار گنو نیستند و بوسیله افراد و پروژههای دیگر و برای اهداف آنها توسعه داده شــدهاند ولی ما میتوانیم از آنها استفاده کنیم چون نرمافزار آزاد هستند.
شروع پروژه
در ژانویه ۱۹۸۴ من شغلــم در MIT را رهــا کــردم و نوشتن نرمافزار گنو را آغاز نمودم. ترک کردن MIT ضروری بود تا MIT نتواند در انتشار گنو به عنوان نرمافزار آزاد دخالت کند. اگــر جزء کارکنان میماندم MIT میتوانست ادعای مالکیت حاصل کار را بکند و میتوانست شرایط انتشار خود را تحمیل نماید یا حتی حاصل کار را تبدیل به بسته نرم افزار اختصاصی کند. من قصد نداشتم آنهمه کار کنم تا ببینم فایدهای برای هدفی که کار به آن منظور انجام شده یعنی ایجاد یک جامعه جدید اشترک نرمافزار ندارد.
هر چند پروفسور وینستون [۱۷] که بعدها مدیر آزمایشگاه هوش مصنوعی MIT شــد مهــربــانانه از مـن دعوت کرد که از امکانات آزمایشگاه استفاده کنم.
اولین قدمها
کمی قبل از شروع پروژه گنو درباره بسته آزاد کامپایلر دانشگاهی [۱۸] که به نام VUCK شناخته میشد شنیده بودم. (کلمه «آزاد» به آلمانی با V نوشته میشود.) این کامپایلری بود که برای کار با زبانهای مختلفی از جمله C و پاسکال [۱۹] بکار میرفت و از ماشینهای گوناگونی پشتیبانی میکرد. من به برنامهنویساش نامه نوشتم و سوال کردم که آیا گنو میتواند از آن استفاده کند یا نه.
او با تمسخر پاسخ داد که دانشگاه آزاد است اما کامپایلر نه. پس من دریافتم که اولین برنامه پروژه گنو یک کامپایلر چند زبانه با پشتیبانی از سکوهای سختافزاری گوناگون خواهد بود.
با این امید که از نوشتن تمام کامپایلر پرهیز کنم کد کامپایلری را که چند سکوی گوناگون را پشتیبانی میکرد و در آزمایشگاه لارنس لیورمور [۲۰] توسعه داده شده بود گرفتم. این کامپایلر از نسخه توسعه داده شدهای از پاسکال پشتیبانی میکرد و به همان زبان هم نوشته شده بود که به عنوان یک زبان برنامهنویسی سیستمی طراحی شده بود. من یک رابط C به آن افزودم و انتقالش به Motorola 68000 را شروع کردم. اما وقتی دریافتم آن کامپایلر چندین مگابایت فضای انباره نیاز دارد و یونیکس سیستم 68000 تنها ۶۴ کیلوبایت اجازه تخصیص فضا میدهد از آن کار دست کشیدم.
بعد فهمیدم که کامپایلر پاسکال با تجزیه کردن تمام فایل ورودی به یک ترکیب درختی و تبدیل تمام ترکیب درختی به یک زنجیره از «دستورالعملها» و سپس ایجاد فایل خروجی بدون اینکه هیچ فضایی آزاد کند عمل مینماید. اینجا بود که به این نتیجه رسیدم که باید کامپایلر جدیدی را از ابتدا بنویسم. آن کامپایلر جدید حالا با نام GCC شناخته میشود؛ هیچ چیز از کامپایلر پاسکال در آن استفاده نشد اما من توانستم رابط C را که برای آن نوشته بودم تعدیل کرده و بکار ببرم. اینها چند سال بعد اتفاق افتاد؛ اول بر روی گنو ایمکس [۲۱] کار کردم.
گنو ایمکس
کار بر گنو ایمکس را در سپتامبر ۱۹۸۴ شروع کردم و در اوایل ۱۹۸۵ میشد از آن استفاده کرد. بدین وسیله میتوانستم شروع به ویرایش در سیستمهای یونیکس کنم؛ چون علاقهای به استفاده از vi یا ed نداشتم ویرایشهایم را تا آن زمان بر ماشینهای دیگری انجام میدادم.
در این مرحله افراد شروع به درخواست استفاده از گنو ایمکس کردند که این سوال را پیش آورد که چطور میشود آن را توزیع کرد. البته من آن را بر روی سرور ftp بینامی بر کامپیوتری که در MIT از آن استفاده میکردم گذاشتم. (به این ترتیب کامپیوتر prep.ai.mit.edu محل اصلی توزیع ftp گنو شد؛ وقتی این کامپیوتر چند سال بعد بازنشسته شد ما نام آن را به سرور ftp جدیدمان انتقال دادیم.) اما در آن دوره بسیاری از علاقمندان به اینترنت دسترسی نداشتند و نمیتوانستند یک کپی از روی ftp دریافت کنند. پس من باید به آنها چه میگفتم؟
می توانستم بگویم «کسی را پیدا کنید که به شبکه دسترسی دارد تا یک کپی برای شما بگیرد.» یا میتوانستم کاری را که با نسخه اصلی ایمیکس PDP-10 کرده بود انجام دهم: به آنها بگویم «یک نوار و جلدش را برای من بفرستید تا آن را با یک کپی ایمکس برایتان باز پس فرستم.» اما من شغلی نداشتم و بدنبال روشهایی برای پول درآوردن از نرمافزار آزاد بودم. پس اعلام کردم که برای هر کسی که بخواهد یک نوار خواهم فرستاد به قیمت ۱۵۰ دلار. به این روش تجارت توزیع نرمافزار آزاد را آغاز کردم که پیشروی شرکتهایی بود که امروزه تمام سیستم گنوی مبتنی بر لینوکس را توزیع میکنند.
آیا یک برنامه برای هر کاربری آزاد است؟
اگر یک برنامه وقتی که از دست برنامهنویساش خارج میشود نرمافزار آزاد باشد به طور حتم به این معنا نیست که کپیاش به دست هر کسی که برسد نرمافزار آزاد خواهد بود. برای مثل نرمافزار [رها شده در] حوزه عمومی (نرم افزاری که کپیرایت نشده است) نرمافزار آزاد است؛ ولی هر کسی می تواند یک نسخه تغییر یافته اختصاصی از آن بسازد. همچنین برنامههای آزاد بسیاری کپیرایت شدهاند اما با پروانههای ساده آسانگیری توزیع گشتهاند که اجازه ایجاد نسخههای تغییر یافته اختصاصی را میدهد.
یک نمونه از این برنامهها X Window System است که در MIT توسعه پیدا کرد و به شکل نرمافزار آزاد با پروانهای آسانگیر منتشر شد و بزودی توسط شرکتهای کامپیوتری مختلفی اقتباس گشت. آنها X را به سیستمهی یونیکس اختصاصی خودشان تنها به شکل باینری افزودند و زیر پوشش موافقت نامه حفظ اسرار مشابهی قرار دادند. آن نسخههای X، دیگر نرمافزار آزاد نبودند همچنان که یونیکس نبود.
توسعه دهندگان X Windos System به این موضوع اهمیت نمیدادند – آنها انتظار داشتند و میخواستند که چنین شود. هدف آنها نرمافزار آزاد نبود فقط «موفقیت» که با «جذب کاربران بیشتر» معنا میشد هدف بود. آنها اهمیتی به آزادی کاربران نمیدادند فقط جمعیت کاربران مهم بود.
نتیجه موقعیتی متناقض بود که دو روش مختلف برای سنجش میزان آزادی جوابهای گوناگونی به این سوال که «آیا این برنامه آزاد است؟» میدادند. اگر شما برا اساس آزادیهای در نظر گرفته شده در شروط توزیع نسخه MIT قضاوت میکردید ممکن بود بگویید X نرمافزار آزاد بوده است. اما اگر آزادیهای یک کاربر متوسط X را میسنجیدید ممکن بود بگویید نرمافزار اختصاصی است. بیشتر کاربران X از نسخهای اختصاصی استفاده میکردند که با سیستمهای یونیکس همراه بود نه نسخه آزاد آن.
کپی لفت [۲۲] و گنو GPL
هدف گنو اعطای آزادی به کاربران بود نه اینکه فقط محبوب باشد. پس ما به شرطهایی برای توزیع نیاز داشتیم که نرمافزار گنو را از تبدیل شدن به نرمافزار اختصاصی باز دارد. روشی که ما برگزیدیم «کپی لفت» نام داشت. (۱)
کپی لفت از قانون کپی رایت [۲۳] استفاده میکند اما آن را میچرخاند تا خلاف آنچه هدف متداولش است عمل کند: بجای آنکه ابزاری برای اختصاصی کردن نرمافزار باشد به ابزاری برای آزاد نگه داشتن آن تبدیل میشود.
ایده اصلی کپی لفت این است که ما به همه اجازه استفاده از برنامه، تکثیر برنامه، تغییر برنامه و توزیع نسخههای تغییر یافته را میدهیم اما اجازه افزودن محدویتی به برنامه را نمیدهیم. پس آزادیهای اساسی که «نرمافزار آزاد» را معنا میکنند برای هر کسی که نسخهای از نرمافزار را داشته باشد ضمانت شدهاند؛ اینها حقوقی جدا ناشدنی هستند.
برای اینکه کپی لفت موثر باشد نسخههای تغییر یافته نیز باید آزاد باشند. به این ترتیب میتوان اطمینان یافت که کارهای نجام شده بر اساس حاصل کار ما اگر منتشر شود در دسترس جامعه خودمان قرار خواهد گرفت. وقتی برنامهنویسانی که شغل برنامهنویسی دارند دواطلب توسعه نرمافزار گنو میشوند این کپی لفت است که مانع کارفرمایانشان میشود که بگویند «شما نمیتوانید آن تغییرات را به اشتراک بگذارید چون ما قصد داریم نسخه اختصاصی خودمان را از برنامه درست کنیم.»
خواست آزاد ماندن تغییرات ضروری است اگر میخواهیم از آزادی برنامه برای همه کاربران آن مطمئن باشیم. شرکتهایی که X Window System را اختصاصی کردند تغییراتی در آن دادند تا آن را به سیستمها و سختافزارهای خود منتقل نمایند. این تغییرات در مقایسه با اندازه بزرگ X کوچک بودند اما بیاهمیت نبودند. اگر تغییر دادن بهانهای برای انکار آزادیهای کاربران میشد برای هر کسی آسان بود که از مزیت بهانهجویی سود ببرد.
یک موضوع مرتبط نگران کننده دیگر ترکیب برنامه آزاد با کد غیر آزاد بود. چنین ترکیبی بطور اجتنابناپذیری غیر آزاد میبود؛ فقدان هر آزادی در بخش غیر آزاد به معنای نبود آن در کل برنامه بود. اجازه چنین ترکیبی میتوانست سوراخی بگشاید که برای غرق کردن یک کشتی کفایت میکرد. هر چیزی که به برنامه کپی لفت شده افزوده میشد یا با آن ترکیب میگشت باید طوری میبود که مجموع ترکیب هم، آزاد و کپی لفت شده باشد.
نسخه ویژهای از کپی لفت که ما برای بیشتر نرمافزارهای گنو استفاده میکنیم پروانه جامع همگانی گنو [۲۴] یا بطور خلاصه GNU GPL است. ما انواع دیگر کپی لفت هم داریم که در شرایط خاص از آنها استفاده میکینم. کتابهای راهنمای گنو هم کپی لفت شدهاند ولی با نوع بسیار سادهتری از کپی لفت زیرا که پیچیدگی GNU GPL برای کتابهای راهنما لازم نیست. (۲)
(۱) در ۱۹۸۴ یا ۱۹۸۵ دان هاپکینز [۲۵] (شخصی با قدرت تخیل بالا) نامهای برای من فرستاد. روی پاکت چیزهای جالبی نوشته بود که شامل این یکی هم میشد: «کپی لفت – تمام حقوق محفوظ است.» من از کلمه «کپی لفت» برای نامیدن مفهوم کلی توزیعی که در آن زمان در حال بسط دادنش بودم استفاده کردم.
(۲) ما در حال حاضر از پروانه مستندات آزاد گنو [۲۶] برای مستندسازی استفاده میکنیم.
بنیاد نرم افزار آزاد
همچنان که علاقه به استفاده از ایمکس بیشتر میشد افراد دیگری هم درگیر پروژه گنو میشدند و ما مصمم شدیم که باز سرمایه جمع کنیم. پس در ۱۹۸۵ ما بنیاد نرم افزار آزاد [۲۷] را ایجاد کردیم که یک خیریه معاف از مالیات برای توسعه نرمافزار آزاد است. همچنین FSF توزیع تجاری ایمکس بر روی نوار را بدست گرفت؛ بعدتر این کار را با افزودن نرمافزارهای آزاد دیگر به نوار (هم نرمافزارهای گنو و هم غیر گنو) و همچنین فروش کتابهای راهنمای آزاد توسعه داد.
FSF مبالغ اهدایی را هم میپذیرد اما بیشتر درآمدش همیشه از فروش نسخههای نرمافزار آزاد و خدمات مرتبط دیگر حاصل شده است. امروزه بنیاد دیسک متن کد، دیسک نسخههای باینری، کتابهای راهنمایی با پرینت خوب (همه آزاد برای توزیع دوباره و تغییر) و نسخههای لوکس (که ما تمام مجموعه نرم افزارها را برای سکوی انتخابی شما آماده کردهایم) میفروشد.
کارکنان بنیاد نرمافزار آزاد تعدادی از بستههای نرمافزاری گنو را نوشته یا نگهداری کردهاند. دو مورد قابل اشاره کتابخانه C و شل [۲۸] هستند. کتابخانه C گنو [۲۹] چیزی است که هر برنامهای که بر یک سیستم گنو/لینوکس اجرا میشود برای ارتباط با لینوکس از آن استفاده میکند. این کتابخانه توسط یکی از کارکنان بنیاد نرمافزار آزاد بنام رونالد مکگراس [۳۰] نوشته شده است. شل مورد استفاده در بیشتر سیستمهای گنو/لینوکس BASH یا Bourne Again Shell است (۱) که بوسیله برایان فاکس [۳۱] از کارکنان FSF توسعه یافته است.
ما برای توسعه این نرم افزارها سرمایهگذاری کردیم زیرا که پروژه گنو تنها مربوط به ابزارها یا یک محیط توسعه نبود. هدف ما یک سیستم عامل تمام عیار بود و این برنامهها برای آن هدف مورد نیاز بودند.
(۱) «Bourne again Shell» شوخی با نام «Bourne Shell» است که شل متداول روی یونیکس بود.
پشتیبانی نرمافزار آزاد
فلسفه نرمافزار آزاد نوع خاصی از تجارت شایع را رد میکند اما مخالف تجارت نیست. وقتی تاجران به آزادیهای کاربران احترام میگذارند ما برایشان آرزوی موفقیت میکنیم.
فروش نسخههای ایمکس نوعی از تجارت نرمافزار آزاد را نشان میدهد. وقتی FSF آن تجارت را بدست گرفت من به راه دیگری برای کسب درآمد نیاز داشتم. آن را در فروش خدمات مربوط به نرمافزار آزادی که توسعه داده بودم یافتم. این شامل تدریس در موضوعاتی چون چگونگی برنامهنویسی برای گنو ایمکس و چگونگی تغییر دادن GCC و توسعه نرمافزار و بیش از همه انتقال GCC به سکوهای جدید بود.
امروزه هر کدام از انواع تجارتهای نرمافزار آزاد بوسیله تعدادی از شرکتها دنبال میشود. بعضی نسخههای نرمافزار آزاد را بر روی دیسک منتشر میکنند، بعضی دیگر پشتیبانی میفروشند؛ از پاسخ به سوالات کاربران گرفته یا رفع ایرادات و یا افزودن قابلیتهای جدید مهم. حتی کمکم شرکتهای نرمافزار آزادی را میبینیم که بر پایه راهاندازی محصولات جدید نرمافزار آزاد تاسیس میشوند.
اما مراقب باشید. برخی شرکتها که عبارت «متن باز» [۳۲] را همراه خود دارنددر واقع تجارت خود را بر اساس نرمافزار غیرآزادی بنا کردهاند که با نرمافزار آزاد کار میٰکند. اینها شرکتهای نرمافزار آزاد نیستند آنها شرکتهای نرمافزار اختصاصی هستند که محصولاتشان کاربران را برای دوری از آزادی فریب میدهد. آنها این را «ارزش افزوده» مینامند که بازتابی از ارزشهایی است که دوست میدارند ما فراتر از آزادی به آنها خو کنیم. اگر ما آزادی را باارزشتر بدانیم بایستی آنها را محصولات «کاهنده آزادی» بنامیم.
اهداف فنی
هدف اصلی گنو نرمافزار آزاد بود. حتی اگر گنو هیچ برتری فنی هم بر یونیکس نمیداشت، برتری اجتماعی داشت که اجازه میداد کاربران با هم همکاری کنند و برتری اخلاقی داشت که احترام گذاشتن به آزادی کاربران بود.
اما طبیعی بود که معیارهای شناخته شده انجام درست کار هم در نظر گرفته شود. به عنوان نمونه جایگذاری پویای ساختارهای داده [۳۳] برای پرهیز از محدودیتهای اندازه ثابت اختیاری [۳۴] و جایگذاری تمام کدهای هشت بیتی ممکن هر جا که درست باشد.
بعلاوه ما تمرکز یونیکس بر اندازه کوچک حافظه را با تصمیم بر پشتیبانی نکردن از ماشینهای شانزده بیتی نپذیرفتیم (وقتی که سیستم گنو به پایان رسیده بود واضح بود که ماشینهای سی و دو بیتی متداول خواهند بود) و تلاشی نکردیم که استفاده از حافظه را کم کنیم مگر اینکه از مگابایت بالاتر برود. در برنامههایی که کار کردن با فایلهای بزرگ مهم نبود، برنامهنویسان را تشویق میکردیم که همه فایل ورودی را به داخل هسته بخوانند و سپس محتوایش را کاوش کنند بدون اینکه نگران I/O باشند.
این تصمیمات بسیاری از نرمافزارهای گنو را قادر ساخت که از همتاهای یونیکسشان در قابلیت اطمینان و سرعت پیش بیافتند.
کامیپوترهای اهدا شده
در پی رشد شهرت پروژه گنو افراد شروع به پیشنهاد اهدای ماشینهایی به پروژه کردند که یونیکس بر آنها اجرا میشد. آن کامپیوترها بسیار مفید بودند زیرا که سادهترین راه برای توسعه اجزاء گنو انجام این کار بر سیستم یونیکس و جایگزین کردن یک به یک اجزاء سیستم بود. اما اینکار یک مساله اخلاقی بوجود آورد: آیا اصلاً درست بود که ما یک کپی از یونیکس داشته باشیم.
یونیک نرمافزار اختصاصی بود (و هست) و فلسفه پروژه گنو میگفت که ما نباید از نرمافزار اختصاصی استفاده کنیم. اما با همان استدلالی که منجر به این نتیجه میشود که خشونت در دفاع از خود قابل توجیه است من نتیجه گرفتم که استفاده از بستههای اختصاصی درست بود زمانی که توسعه جایگزین آزاد مهمی صورت میگرفت، جایگزینی که به دیگران کمک میکرد استفاده از بسته اختصاصی را متوقف کنند.
اما حتی اگر این شری توجیهپذیر بود باز هم شر بود. امروز دیگر نسخهای از یونیکس نداریم زیرا که آنها را با سیستم عاملهای آزاد جایگزین کردهایم. اگر نتوانستیم سیستم عامل ماشینی را با نسخهای آزاد جایگزین کنیم خود ماشین را تعویض کردیم.
لیست وظایف گنو
همینطور که پروژه گنو پیش میرفت و تعداد بیشتری اجزاء سیستم یافت میشد که پیشتر توسعه داده شده بودند بالاخره لازم بود که لیستی از نارساییهای باقی مانده درست شود. ما از آن لیست برای بکار گماردن توسعهدهندگان تازه برای نوشتن قسمتهایی که نوشته نشده بود استفاده میکردیم. این لیست به نام لیست وظایف گنو [۳۵] معروف شد. علاوه بر اجزاء مفقوده یونیکس، نرمافزارها و مستندات پروژه مفید دیگری را هم که فکر میکردیم یک سیستم به واقع کامل بایستی داشته باشد لیست کردیم.
امروزه به سختی بتوان چیزی از اجزاء یونیکس در لیست وظایف گنو یافت – آن کارها به جز چند مورد غیرضروری انجام شدهاند. اما لیست پر از پروژههایی است که میشود آنها را «ابزارها» [۳۶] نامید. هر برنامهای که مورد توجه تعداد زیادی از کاربران باشد ابزار مناسبی برای افزودن به یک سیستم عامل است.
حتی بازیها هم به لیست وظایف اضافه شدند – و از ابتدا هم در لیست بودند. یونیکس بازی به همراه دارد پس بطور طبیعی گنو هم باید داشته باشد. اما سازگاری برای بازیها مهم نبود پس ما لیست بازیهای یونیکس را پی نگرفتیم. بجای آن طیفی از بازیهای گوناگون را که ممکن بود کاربران بپسندند لیست کردیم.
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 دید و به او خبر داد. پس نام کار خودش را کرده بود.
لینوکس و گنو/لینوکس
«گنو هرد» قابل استفاده عملی نیست. خوشبختانه هسته دیگری در دسترس است. در ۱۹۹۱ لینوس توروالدز [۴۶] کرنل سازگار با یونیکس دیگری را توسعه داد و آن را لینوکس نامید. حدود ۱۹۹۲ ترکیب لینوکس با سیستم گنوی نه چندان کامل یک سیستم عامل تمام عیار را حاصل کرد. (البته ترکیب کردن آنها کاری قابل توجه بود.) در واقع به خاطر وجود لینوکس است که امروز ما میتوانیم سیستم گنو را به کار اندازیم.
ما این نسخه از سیستم را گنو/لینوکس مینامیم تا ترکیب حاصل از اختلاط سیستم گنو و کرنل لینوکس را نشان دهیم.
چالشهای آینده
ما توانایی خود را در توسعه طیف وسیعی از نرمافزارهای آزاد ثابت کردهایم. این به آن معنا نیست که ما شکستناپذیر و سکونناپذیریم. چالشهای چندی آینده نرمافزار آزاد را نامعلوم کرده است؛ بر آمدن از پس آنها تلاشی استوار و پایدار میخواهد که گاهی چندین سال به طول میانجامد. این موضوع همان عزمی را میطلبد که مردم، زمان ارزش نهادن به آزادیهایشان از خود نشان میدهند و نمیگذارند کسی آنها را از ایشان بگیرد.
چهار بخش زیر این چالشها را توضیح میهند.
سختافزار محرمانه [۴۷]
تولیدکنندگان سختافزار بگونهای فزاینده مراقبند که مشخصات سختافزارها را مخفی نگه دارند. این کار نوشتن راهاندازهای [۴۸] آزادی را که به لینوکس و Xfree86 امکان پشتیبانی از سختافزارهای جدید را میدهد دشوار میسازد. امروز ما سیستمهای آزاد کاملی داریم اما اگر نتوانیم از رایانههای آینده پشتیبانی کنیم فردا چنین نخواهد بود.
دو راه برای برخورد با این مشکل وجود دارد. برنامهنویسان میتوانند با انجام مهندسی معکوس [۴۹] دریابند که چطور میشود از سختافزارها پشتیبانی کرد. بقیه ما میتوانیم سختافزاری را برگزینیم که نرمافزار آزاد از آن پشتیبانی میکند؛ همچنان که تعداد ما زیاد میشود مخفی نگه داشتن مشخصات به سیاستی خود ویرانگر بدل خواهد گشت.
مهندسی معکوس کار سختی است؛ آیا ما برنامهنویسانی با عزمی کافی برای بر عهده گرفتن این کار داریم؟ بله. اگر این حس قوی را ایجاد کنیم که نرمافزار آزاد موضوعی اساسی است و راهاندازهای غیرآزاد غیرقابل تحملاند. و آیا بسیاری از ما پول بیشتری خواهیم پرداخت یا حتی اندک زمانی بیشتر اختصاص خواهیم داد تا بتوانیم از راهاندازهای آزاد استفاده کنیم؟ بله، اگر که تصمیم بر آزاد بودن همهگیر باشد.
کتابخانههای غیرآزاد
اکتابخانه غیرآزادی که بر روی سیستمهای عامل آزاد اجرا میشود مانند یک تله برای توسعهدهندگان نرمافزار آزاد عمل میکند. امکانات جذاب کتابخانه طعمه آن است؛ اگر از کتابخانه استفاده کنید در تله افتادهاید چون برنامه شما نمیتواند بگونهای مفید جزئی از سیستمعامل آزاد باشد. (به زبان ساده ما میتوانیم برنامه شما را اضافه کنیم اما این برنامه بدون کتابخانه مفقوده کار نخواهد کرد.) حتی بدتر از این اگر برنامهای که از کتابخانه اختصاصی استفاده میکند متداول گردد میتواند سایر برنامهنویسان ناآگاه از موضوع را نیز به تله بکشاند.
اولیه نمونه از چنین مشکل در دهه ۸۰، مجوعه ابزار موتیف [۵۰] بود. هر چند تا آن موقع سیستمعامل آزادی وجود نداشت اما واضح بود که مشکل موتیف بعدها برای آن سیستمهای عامل مساله ساز خواهد شد. پروژه گنو به دو روش واکنش نشان داد: با درخواست پشتیبانی از مجموعه ابزار آزاد X به همراه موتیف از تک تک پروژههای نرمافزار آزاد و با دعوت از شخصی برای نوشتن جایگزینی آزاد برای موتیف. این کار سالها طول کشید. لستیف [۵۱] که برنامهنویسان مشتاق آن را توسعه دادند تنها در ۱۹۹۷ آنقدر قدرتمند شد که اغلب برنامههایی را که از موتیف استفاده میکردند پشتیبانی کند.
بین ۱۹۹۶ و ۱۹۹۸ مجموعه ابزار کتابخانه رابط گرافیکی کاربر [۵۲] دیگری به نام Qt در مجموعه مهمی از نرمافزارهای آزاد یعنی میزکار KDE بکار میرفت.
سیستمهای آزاد گنو/لینوکس نمیتوانستند از KDE استفاده کنند چون ما نمیتوانستیم از کتابخانه استفاده کنیم. گر چه بعضی از توزیعهای تجاری گنو/لینوکس که در همراهی نرمافزار آزاد صریح نبودند KDE را به سیستمهای خود افرودند تا سیستمی با قابلیتهای بیشتر اما آزادی کمتر ایجاد کنند. گروه KDE فعالانه برنامهنویسان بیشتری را تشویق به استفاده از Qt میکرد و میلیونها نفر از «کاربران لینوکس» هرگز از این ایده مطلع نمیشدند که مشکلی وجود دارد. اوضاع به وخامت میگرایید.
جامعه نرمافزار آزاد به دو روش با این مشکل برخورد کرد: گنوم [۵۳] و هارمونی [۵۴].
گنوم، محیط شبکهای شیءگرای گنو، [۵۵] پروژه رومیزی گنو است. گنوم که در سال ۱۹۹۷ توسط میگوئل دیایکازا [۵۶] شروع شد و با پشتیبانی شرکت نرمافزاری ردهت [۵۷] توسعه یافت به منظور فراهم آوردن امکانات رومیزی مشابه اما تنها با استفاده از نرمافزار آزاد آغاز گشت. این پروژه برتریهای فنی همچون پشتیبانی از زبانهای متنوع برنامهنویسی علاوه بر ++C نیز داشت. اما هدف اصلی آن آزادی بود تا نیازی به استفاده از نرمافزار غیرآزاد نباشد.
هارمونی کتابخانه جایگزین همساز است که طراحی شده تا امکان اجرای نرمافزارهای KDE بدون Qt را فراهم آورد.
در نوامبر ۱۹۹۸ توسعهدهندگان Qt تغییراتی در پروانه آن را اعلام نمودند که نتیجه آن میبایست Qt را نرمافزار آزاد میساخت. راهی برای اطمینان یافتن نیست اما من گمان میکنم این کار تا حدی به خاطر واکنش محکم جامعه به مشکلی بود که Qt وقتی که غیر آزاد بود ایجاد کرده بود. (پروانه جدید ناجور و غیرمنصفانه است پس پرهیز از استفاده از Qt همچنان مطلوب است.)
[ملاحظات بعدی: در سپتامبر ۲۰۰۰، Qt با پروانه GNU GPL منتشر شد که که این مشکل را از اساس حل کرد.]
ما چطور به کتابخانه غیرآزاد وسوسهانگیز بعدی واکنش نشان خواهیم داد؟ آیا تمام جامعه لزوم دور ماندن از تله را درک خواهد کرد؟ یا بسیاری از ما آزادی را تسلیم آسودگی میکنیم و مشکلی بزرگ پدید میآوریم؟ آینده ما به فلسفهمان بستگی دارد.
حقامتیازهای نرمافزاری
بدترین تهدیدی که با آن روبروییم از جانب حقامتیازهای نرمافزاری [۵۸] است که میتوانند الگوریتمها و امکانات را تا بیست سال دور از دسترس نرمافزار آزاد نگه دارند. حقامتیازهای الگوریتم فشردهسازی LZM در ۱۹۸۳ اعمال شده و ما هنوز نمیتوانیم نرمافزار آزاد برای تهیه GIFهای فشرده مناسب منتشر کنیم. در ۱۹۹۸ توزیع برنامه آزادی که صدای فشرده شده MP3 ایجاد میکرد بخاطر تهدید شکایت حقامتیاز متوقف گشت.
راههایی برای برخورد با حقامتیازها وجود دارد: میتوانیم در پی شواهدی برای بیمعنی بودن حقامتیازها باشیم و میتوانیم به دنبال روشهای جایگزین برای انجام کارها بگردیم. اما هر کدام از این روشها فقط بعضی اوقات موثراند؛ وقتی همه این راهها بسته باشند حقامتیاز ممکن است تمام نرمافزارهای آزاد را مجبور به نداشتن خصیصهای کند که کاربران خواهان آنند. در این شرایط چه کنیم؟
آنانی که به نرمافزار آزاد بخاطر آزادی اهمیت میدهند به هر حال از نرم افزار آزاد استفاده خواهند کرد. ما راهی برای انجام کارها بدون خصوصیات حقامتیازدار پیدا خواهیم کرد. اما کسانی که به نرمافزار آزاد بها میدهند زیرا انتظار دارند از نظر فنی برتر باشد ممکن است این را نقص بنامند در حالی که یک حقامتیاز مانع پیشرفت است. پس مادامیکه صحبت درباره کارایی عملی توسعه مدل «کلیسای جامع [۵۹]» (۱) و قابلیت اعتماد و قدرت بعضی از نرمافزارهای آزاد مفید است، نباید آنجا توقف کنیم. باید درباره آزادی و اصول صحبت کنیم.
(۱) واضحتر از آن است که نوشته شود «از مدل بازار [۶۰]» که جایگزینی جدید و از آغاز بحثبرانگیز بود.
مستندات آزاد
بزرگترین نقصان سیستمعای عامل آزاد ما نرم افزار نیست. بلکه نبود راهنماهای خوبی است که بشود با سیستمها همراه کرد. مستندسازی بخش ضروری هر بسته نرمافزاری است؛ زمانی که بسته نرمافزار آزاد مهمی با راهنمای خوبی همراه نباشد ایراد بزرگی دارد. در حال حاضر ما ایراد اینچنینی زیاد داریم.
در مستندات آزاد هم مانند نرمافزار آزاد، أزادی مهم است نه قیمت. معیار مستندات آزاد همان معیار نرمافزار آزاد است که همان موضوع اعطای آزادیهای بخصوصی به تمام کاربران است. بازپخش (همراه فروش تجاری) باید مجاز باشد، بصورت آنلاین یا روی کاغذ، تا راهنما بتواند هر نسخه از برنامه را همراهی کند.
اجازه تغییر دادن هم مهم است. به عنوان یک قاعده عمومی باور ندارم که ضروری باشد افراد اجازه تغییر دادن همه انواع مقالات و کتابها را داشته باشند. به عنوان نمونه فکر نمیکنم من و شما مجبور باشیم اجازه تغییر مقالاتی مانند همین مقاله را که فعالیتها و دیدگاههایمان را توضیح میدهد بدهیم.
اما دلیل ویژهای برای اهمیت آزاد گذاشتن تغییر مستندات نرمافزار آزاد وجود دارد. وقتی کسی دست به تغییر برنامه میزند و امکاناتی را در آن عوض میکند یا میافزاید، اگر وظیفهشناس باشد راهنما را هم تغییر خواهد داد تا مستنداتی صحیح و قابل استفاده همراه برنامه تغییر یافته باشد. راهنمایی که به برنامهنویسان اجازه وظیفهشناسی و تکمیل کارشان را ندهد احتیاجات جامعه ما را برآورده نمیکند.
بعضی اشکال محدودیت بر چگونگی اعمال تغییرات مشکلی ایجاد نمیکند. به عنوان مثال درخواست حفظ اعلان حق تالیف نویسنده اصلی، شرایط توزیع، یا لیست نویسندگان مشکلی ندارد. همچنین درخواست افزودن اعلانی در نسخههای تغییر یافته مبنی بر تغییر کردن مستندات، حتی اگر کل بخش حذف نشده یا تغییر نکرده باشد تا زمانی که این بخشها مربوط به موضوعات غیرفنی باشد اشکالی ندارد. این نوع از محدودیتها مشکلزا نیستند چون برنامهنویسان وظیفهشناس را از اقتباس راهنمای مناسب برای برنامه تغییر یافته باز نمیدارد. به عبارت دیگر این محدودیتها مانع استفاده کامل جامعه نرم افزار آزاد از راهنما نمیشود.
هر چند تغییر تمام محتوای *فنی* راهنما و سپس توزیع نتیجه در تمام رسانههای معمول از طریق تمام مجراهای متداول باید امکانپذیر باشد؛ در غیر این صورت محدویتها مانع جامعه میشوند، راهنما آزاد نیست و ما به راهنمای دیگری نیاز داریم.
آیا توسعهدهندگان نرمافزار آزاد آگاهی و تعهد تولید طیف کاملی از راهنماهای آزاد را دارند؟ دوباره میگویم که آینده ما وابسته به جهانبینیمان است.
باید درباره آزادی صحبت کنیم
تخمین زده میشود که امروزه ده میلیون کاربر سیستمهای گنو/لینوکس مانند دبیان گنو/لینوکس یا ردهت لینوکس وجود دارد. نرمافزار آزاد چنان مزایایی را بصورت کاربردی توسعه داده که کاربران، تنها به دلایل عملی به آن هجوم میآورند.
نتایج خوب این اتفاق آشکار است: علاقه بیشتر به توسعه نرمافزار آزاد، مشتریهای بیشتر برای کسب و کار نرمافزار آزاد، و توانایی بیشتر برای تشویق شرکتها به توسعه نرمافزار آزاد تجاری بجای محصولات نرمافزاری اختصاصی.
اما علاقه به نرمافزار سریعتر از آگاهی نسبت به فلسفهای که نرمافزار بر پایه آن بنا شده رشد میکند و این مشکلساز است. صلاحیت ما برای روبرو شدن با چالشها و تهدیداتی که در بالا آمد بستگی به عزم ما برای پایبند ماندن به آزادی دارد.
ولی ما در این راه موفق نمیشویم: تلاشهایی که برای جذب کاربران تازه به جامعه ما میشود از کوششهایی که صرف آموختن مدنیت جامعهمان به آنان میشود بسیار پیش افتاده است. ما به هر دو این کارها نیاز داریم و لازم است که این تلاشها را متعادل نگه داریم.
متنباز
آموزش درباره آزادی به کاربران تازه در ۱۹۹۸ وقتی که بخشی از جامعه تصمیم گرفت استفاده از عبارت «نرمافزار آزاد» را متوقف کرده و بجای آن بگوید «نرمافزار متنباز» [۶۱] دشوارتر شد.
کسانی که طرفدار این عبارت هستند قصد دارند از اشتباهی که بین «آزاد» و «رایگان» ایجاد میشود پرهیز کنند که هدفی معنیدار است. هر چند دیگران قصد دارند روح اصولی را که جنبش نرمافزار آزاد و پروژه گنو را برانگیخته کنار بگذارند و بجای آن مدیران و کاربران تجاری را که بسیاری از آنها از طرز فکری پیروی میکنند که سود را برتر از آزادی و بالاتر از جامعه و مهمتر از اصول قرار میدهد جذب کنند. پس توجه «متنباز» بر پتانسیل ایجاد نرم افزار باکیفیت بالا و قدرتمند متمرکز است اما از انگارههای آزادی، جامعه و اصول دوری میجوید.
مجلههای «لینوکس» نمونهای آشکار از این مورداند. آنها با تبلیغات نرمافزارهای اختصاصی که با گنو/لینوکس کار میکنند انباشته شدهاند. وقتی موتیف یا Qt بعدی ظاهر شود آیا این مجلات به برنامهنویسان درباره دوری از آن هشدار خواهند داد یا برایش تبلیغ خواهند کرد؟
پشتیبانی از کسب و کار به طرق مختلف میتواند به جامعه کمک کند؛ اگر سایر شرایط ثابت باشد این مفید است. اما کسب پشتیبانی آنان حتی با کمتر صحبت کردن از آزادی و اصول میتواند فاجعهبار باشد؛ چنین کاری عدم توازن پیشین بین فراگیری و آموزش مدنی را بدتر میکند.
«نرمافزار آزاد» و «متنباز» کم و بیش دسته یکسانی از نرمافزارها را توضیح میدهند اما چیزهای گوناگونی درباره نرمافزار و درباره ارزشها میگویند. پروژه گنو به استفاده از عبارت «نرمافزار آزاد» ادامه خواهد داد تا اندیشه اهمیت آزادی و نه فقط فناوری را ابراز دارد.
تلاش!
«فلسفه یودا [۶۲] («تلاشی در کار نیست») جالب است اما برای من کارگر نیست. بیشتر کارهایم را در حالی انجام میدهم که نگران اینم که آیا میتوانم آن کار را به سرانجام برسانم و مطمئن نیستم آیا اگر آن کار را بکنم برای رسیدن به هدف کافی هست یا خیر. اما به هر حال تلاشم را کردهام چون کسی غیر از من، بین شهرم و دشمن نبود. خودم هم متعجبم که گاهی پیروز شدهام.
گاهی شکست خودهام: بعضی از شهرهایم سقوط کردهاند. پس از آن، شهرهای در معرض تهدید دیگری یافتهام و آماده نبردی دیگر شدهام. در طول زمان آموختهام که در پی تهدیدات باشم و خودم را بین آنها و شهرم قرار دهم و دیگر هکرها را بخوانم که به من بپیوندند.
امروزه اغلب تنها نیستم. آسودگی بخش و لذت آور است وقتی که میبینم گروه بزرگی از هکرهادر تلاشند تا خط حفظ شود و میفهمم که ممکن است شهر نجات یابد – فعلاً. اما خطرها هر سال بزرگتر میشوند و حالا مایکروسافت به وضوح جامعه ما را هدف گرفته است. آینده آزادی را مجانی نمیتوان بدست آورد. اینطور فرض نکنید! اگر میخواهید آزادی خود را حفظ کنید باید آماده باشید که از آن دفاع کنید.
نوشته ریچارد استالمن
اصل مقاله از کتاب «Open Sources»
ترجمه از بهنام بهجت مرندی blixbox@gmail.com
منبع:
http://www.gnu.org/gnu/thegnuproject.html