فصل 1. مقدمه
فهرست
اغلب پروژههای نرمافزارهای آزاد با شکست مواجهه میشوند.
معمولا تمایل داریم به پروژههای شکست خورده نپردازیم؛ تنها روی پروژههای موفق هستند که توجه ما را به خود جلب می کنند، درکل نرمافزارهایآزاد زیادی وجود دارند[2] که حتی اگر درصد کوچکی از آنها موفق بوده باشند، درنتیجه پروژههای زیادی برای بررسی وجود دارند. همچنین درمورد شکستها چیزی نمیگوییم زیرا که شکست یک اتفاق نیست. اهمیتی ندارد که یک پروژه متوقف شده به حیات خود ادامه دهد، چراکه به سادگی افراد از دور میتوانند اراده کنند و کار آن را متوقف کنند. زمان تغییرات نهایی پروژه حائز اهمیت است، اما معمولآ نمیدانیم چه کسی در چه زمانی آن را تغییرداده و آخرین تغییر متعلق به چه کسی است. تعریف روشنی از زمان پایان کار نرمافزار یا تاریخ انقضای آن وجود ندارد. مثلآ زمانیکه برای شش ماه غیرفعال باشد؟ یا زمانی که کاربران اصلی بدون اینکه از مبنای گسترش تجاوز کند، ارتقا نرمافزار را متوقف کند؟ را میتوان تاریخ انقضای نرمافزار درنظر گرفت. اگر توسعهدهندگان نرمافزار به دلیل اینکه متوجهشوند درحال نسخهبرداری از کار دیگری هستند، کار خود را متوقف کنند چه میشود – و و اگر به پروژه دیگری ملحق شوند، و تلاشهای قبلی خود را در آن بکار گیرند چه میشود؟ آیا پروژه اول را به پایان میرسانند؟
به دلیل همچین پیچیدگیهایی، گفتن عدد دقیقی از نرخ شکست غیرممکن است. اما حکایت دو دهه در نرمافزارهای متنباز، یکسری طرحریزیها حول سایتهای میزبان چند پروژهای، و کمی کار در تمام نقاط گوگل برای نتایج مشابه نشانمیدهد: اگر شما تعداد پروژههای باقی مانده را به حساب بیاورید در حالیکه تعداد پروژه ناکارآمد هم در آنها است، نرخ به شدت بالا است، شاید در حدود 90–95% است. این نرخ حتی بیشتر هم می شود وقتی شامل پروژه های زنده اما ناکارآمد هم شود: مثلآ پروژههایی نارکارآمد هستند که کدهای اجرایی را تولید می کنند اما در موقعیتهای مناسبی نیستند، یا با سرعت کافی پیشرفت نمی کنند و یا تا آنجا که میشود قابل اتکا نیستند.
این کتاب در رابطه با اجتناب از شکست است. و نه تنها بررسی میکند که چگونه کارها را درست انجام دهید، بلکه چگونه اشتباه انجام دهید، لذا میتوانید سریعتر مسائل را تشخیص دهید و آنها را تصحیح کنید. امیدواریم که بعد از خواندن این کتاب، فهرستی از تکنیکها نه تنها برای اجتناب از تلههای توسعه متنبازها، بلکه برای سرو کار داشتن با رشد و نگهداری پروژههای موفق داشته باشید. این کتاب درمورد برندهشدن در رقابتهاست. براستی، بخش مهمی از اجرای پروژههای متنبازها همکاری با یکدیگر در پروژههای مرتبط است. دربلند مدت، به طورکلی خوب بودن پروژه، به نرمافزارهایآزاد کمک میکند.
میتوان گفت که پروژههای نرمافزاریآزاد به همان دلایلی شکست می خورند که پروژههای نرمافزاریاختصاصی با شکست مواجهه میشوند. مطمئنآ، نرمافزارهایآزاد هیچ امتیاز انحصاری برای نیازهای غیرواقعی، ویژگیهای مبهم، مدیریت منبع ضعیف، مراحل طراحی ناکافی، یا هرچیز دیگری که تاکنون در صنعت نرمافزار شناخته شده است، ندارد. مطالب زیادی دررابطه با این موضوع وجود دارد، و نمیخواهیم که آنها را دوباره در این کتاب تکرار کنیم. درعوض، به تشریح مسائل خاص نرمافزارهای آزاد میپردازیم. وقتی یک پروژههایآزاد به ته می نشیند،معمولا به این خاطر است که توسعه دهندگان (یا مدیران) مسئله و مشکلات منحصربفرد توسعه نرمافزارهای متنباز را درک نکردهاند، حتی اگر برای حل مشکلات پروژههای منبع بسته کاملا آماده باشند.
یکی از مشکلات رایج در داشتن انتظارات غیرواقعی حول مزایای خود پروژههای متنباز است. داشتن مجوزهای باز یکباره سرازیری انبوهی از توسعهدهندگان فعالی را که وقت خود را داوطلبانه به پروژه شما تخصیص دهند را تضمین نمیکند و درنظر داشته باشید که متنباز بودن یک پروژه به مشکل خورده، به طور خودکار باعث سهولت در برطرف کردن مشکل آن نمیشود. در حقیقت برعکس است : بازکردن پروژه میتواند مجموعه ای کاملا جدید از پیچیدگیها و هزینه در کوتاه مدت نسبت به نگهداری بیشتر آن در اختیار خودتان به آن اضافه کند. بازکردن به معنی مرتبسازی کد به منظور اینکه توسط افراد ناشناس تکمیل شود، تنظیم اسناد توسعه، لیست ایمیلها، و اغلب نوشتن اسناد برای اولین بار است. همه اینها کار میباشد و البته، توسعهدهندگان علاقه مند را درصورتوجود نشانمیدهد، و این سوال که آیا از حضور آنها منفعتی برای پروژه بوجود آمدهاست یا نه را ایجاد میکند. یکی از توسعهدهندگان Jamie Zawinski درمورد روزهای اولیه مشکل پروژه موزیلا گفت:
پروژه متنباز کار میکند، اما مطمئنآ این یک راهحل کلی نیست. احتیاطی که باید رعایت کرد این است، که یک پروژه درحال مرگ را درنظر نگیرید، این یک فضایرویایی از "متنباز" را ایجاد میکند، و همه چیز به صورت رویایی کار میکند. مسئله این است که این کارها ساده نیست.
مشکلات مرتبط دیگر مضایقه کردن از ارائه و بستهبندی است، متوجهباشید زمانی که پروژه به خوبی در حال اجرا است، بستهبندی و ارائه میتواند بعدآ انجام شود. ارائه و بستهبندی شامل محدوده وسیعی از وظایف، و همه گردانندهها با محوریت موضوع کاهش موانع ورود است. دعوت به پروژه با نوشتن واسطهای غیرآغازین کاربران و سندبندی توسعهدهندگان، اسنادی که حاوی اطلاعاتی برای افراد تازهکار است، و اتوماسیون که تلفیقی از نرمافزار و نصب و راهاندازی آن است، ایجاد میشود. متاسفانه بسیاری از برنامه نویسان این کار را به عنوان اهمیت ثانویه خود کد تلقی میکنند. چند دلیل برای این کار وجود دارد: ابتدا به دلیل اینکه مزایای آن حداقل برای کسی که آشنا به پروژه است قابل مشاهده است، احساس میشود این کار یک کار پرمشغله است، و برعکس. بعد از آن، افرادی که کد را بسط میدهند حقیقتآ نیازی به بستهبندی یا پکیج کردن ندارند. در حال حاضر چگونگی نصب، مدیریت، و استفاده از نرمافزار را میدانند، چرا که خود آنها نرمافزار را نوشتهاند. دومآ، مهارتهایی که نیازمند ارائه و بستهبندی خوب است اغلب به طورکامل از نیازمندیهای نوشتن کد متفاوت است. افراد به تمرکز بر آنچه که بهتر است تمایل دارند، حتی اگر پروژههای بهتری در گذرزمان کوتاه در موردی که کمتر مناسب است بکارگیرد. د فصل 2, Getting Started 2، ارائه و بستهبندی را باجزییات، و اینکه چرا اولویتها از آغاز پروژه مهم هستند را توضیح میدهیم
تصور غلطی وجود دارد که پروژههای متنباز نیازمند مدیریت کم پروژه یا بطور کل مدیریت نکردن پروژه هستند، و یا برعکس، عملیات مدیریتی مشابه استفاده شده در توسعات خانگی به همان اندازه برروی پروژههای متنباز نیز کار خواهدکرد. مدیریت در پروژههای متنباز همیشه قابل مشاهدهنیست، بلکه در پروژههای موفقیتآمیز، معمولآ در پشتصحنهای از فرمها و دیگر رخدادها اتفاق میافتد. آزمایش ذهنی کوچکی برای نشاندادن چرایی آن کافیاست. پروژههای متنباز مجموعه تصادفی از برنامه نویسان را در برمیگیرد- درحالحاضر گونههای به شدت مستقلی وجود دارند- که به احتمال زیاد هرگز همدیگر را ملاقات نمیکنند، و ممکن است هریک از آنها برای کار برروی پروژه اهداف شخصی مختلفی داشتهباشد. آزمایش نظری سادهای آنچه که در گروهها بدون مدیریت رخ میدهد را تصورمیکند. با جلوگیری نکردن از یکسری اتفاقات، میتواند پروژه فروپاشی شود و یا جریان آن بهسرعت از هم جدا شود و یکسری رخدادهای ناخواسته رخ دهد. مدیریت هرچند ممکن است بسیار فعال باشد، اما اغلب غیررسمی، زیرکانه، با قدرت کم است. تنها چیزی که منجر به گسترش گروه میشود اعتقاد بهاین است که میتوانند کارها را بهصورت گروهی در هماهنگی بیشتری انجام دهند. بنابراین هدف مدیریت اغلب این است که تداوم این اعتقاد را، با استانداردهایی برای ارتباطات، و با اطمینان از اینکه توسعهدهندگان سودمند بادلایل شخصی به حاشیه رانده نمیشوند، و به طورکلی پروژه را محلی برای آنکه توسعهدهندگان بخواهند به آن برگردند تبدیل میکند، تضمین میکند. تکنیک ویژه انجام این کار در بقیه کتاب گفته شده است.
سرانجام، یک گروهبندی عمومی از مسئله وجود دارد که به آن "شکست ناوبری فرهنگی" گفته میشود. بیست سال، یا حتی ده سال پیش، برای صحبت دررابطه با فرهنگ جهانی نرمافزارهایآزاد زود بودهاست، اما هم اکنون زمان آن رسیده است که در این رابطه صحبت شود. یک فرهنگ شناخته شده به آرامی ظهور میکند، و درحالیکه قطعآ یکپارچه نیست، دارای یک هسته اساسآ سازگار است. اغلب پروژههای متنباز موفق یکسری از ویژگیهای این هسته یا همه ویژگیهای آن را نشانمیدهند. انها انواع خاصی از رفتارها را بدست آوردهاند، و باقی رفتارها را از دستدادند، آنها فضایی ایجادکردند که آنها را به یک همکاری طرحریزی نشده تشویق میکند، گاهی اوقات برای هماهنگی مرکزی، آنها مفهومی از گستاخی و ادب در رفتار را که میتواند از رفتارهایی که در جاهای دیگر رایج است را تمییز دهد را دارا میباشند. مهمتر از همه، شرکای قدیمی ذاتآ این استانداردها را دارند، لذا میتوانند یک اجماع نسبی حول نتیجه موردانتظار را به اشتراک بگذارند. پروژههای ناموفق معمولآ از این راه مهم هسته، بهطور ناخواسته منحرف میشوند، و اغلب حول آنچه که به عنوان پیشفرض رفتار معقول است، اتفاق نظر ندارند. این به معنی این است که زمانی که یک مسئله بوجود میآید، شرایط به سرعت بدتر میشوند، همانطور شراکت فاقد سهام تازهتاسیس شده فرهنگی برای اتکا به حل و فصل اختلافات یک عکسالعمل غیرارادی دارند.
آخرین طبقهبندی، شکست ناوبری فرهنگی، شامل پدیدههای جالبی است: نوع خاص سازمانها به صورت ساختاری دارای سازگاری کمتری با بسطهای متنباز نسبت به بقیه است. یکی از این بزرگترین شگفتیها در امادهسازی دومین ویرایش این کتاب توجه به آن است، در کل، تجارب من نشان دادند که بهطور طبیعی دولتها برای شرکت در پروژههای نرمافزاریآزاد نسبت به شرکتهای خصوصی، برای سود شرکت، و سازمانهای غیرانتفاعی که در جایی بین این دو هستند، کمتر مناسب هستند. ( فصل 9, Governments and Open Source). مشکلات قطعآ قابل برطرف شدن هستند، اما شایان ذکر است که زمانی که یک سازمان وجود دارد، بخصوص سازمان سلسله مراتبی، ریسکگریز، و حساس به تبلیغ، و پروژه متنباز را شروع میکنند یا با آن همکاری میکنند، یکسری تنظیمات معمولآ مورد نیاز هستند.
این کتاب یک راهنمای عملی است، نه یک مطالعه انسانشناسانه یا تاریخی. بااین حال، دانشکاری منشا امروزه فرهنگی نرمافزارهایآزاد یک زیربنای ضروری برای هر توصیه عملی است. شخصی که درکی از فرهنگ داشته باشد میتواند در دنیای متنباز یک پیمایش دور و گسترده، در مواجهه با بسیاری از تغییرات محلی در سفارشات و زبانهایمحلی داشته باشد، درعینحال قادر است به راحتی و به طور موثر در همهجا شرکت داشته باشد. در مقابل، شخصی که درکی از فرهنگ نداشته باشد فرآیند سازماندهی یا همکاری در پروژهها برایش مشکل و پر از نکات متحیرکننده است. از آنجا که تعداد افراد توسعهدهنده نرمافزارهای رایگان باوجود فرازو نشیبهایی که وجود دارد در حال رشد هستند، افراد زیادی در گروهبندیهای بعدی وجوددارند، این اتفاق بهطور گسترده یک فرهنگ از مهاجران جدید است، و در برخی از زمانها ادامه خواهدداشت. اگر شما فکر میکنید میتوانید یکی از آنها باشید، بخش بعدی یک پسزمینه برای بحثهایی که بعدآ با آن مواجهه میشوید فراهم میآورد، که هردو در کتاب و اینترنت هستند.(از طرفی دیگر، اگر درحال همکاری با پروژه متنباز باشید، ممکن است هماکنون از بسیاری از این تاریخچهها اطلاع داشته باشید، لذا به راحتی میتوانید از بخش بعدی عبور کنید).
نرمافزارهای اشتراکگذاری در پیرامون خود دنیای نرمافزار است. در روزهای اولیه کامپیوتر، تولیدکنندگان احساس کردند که مزیتهای رقابتی به طورعمده باعث نوآوری در سختافزار شدهاست، و بنابراین به نرمافزار به عنوان یک دارایی تجاری توجهنکردند. بسیاری از مصرفکنندگان ماشینهای اولیه دانشمندان و تکنسینها بودند، که قادر به ساخت و بسط نرمافزارها با خود ماشین بودند. مصرفکنندگان گاهی تکهها برنامههای قبلی خود را نهتنها به تولیدکنندگاندیگر، بلکه به صاحبان دیگر ماشینهای مشابه توزیعمیکنند. تولیدکنندگان اغلب این مسئله را تحمل میکنند و حتی به آن تشویق میکنند: در چشم آنها، بهبود نرمافزار، از هرمنبعی، تنها سختافزار را برای دیگر مشتریان بالقوه جذاب میسازد.
گرچه اوایل این دوره از بسیاری جهات شبیه به فرهنگ نرمافزارهای آزاد امروزه است، اما از دو جهت تفاوت بسیار مهمی دارد: ابتدا، هنوز کمی راه تا استانداردسازی سختافزار وجود داشت- که زمانی برای شکوفایی نوآوری در طراحی کامپیوتر بود، امادر تنوع معماری محاسبات هرچیزی با چیز دیگر در تناقض بود. نرمافزار نوشته شده برای یک ماشین قاعدتآ در ماشین دیگری کار نمیکرد، و برنامهنویسان تمایل به بدست اوردن تخصص در یک معماری سختافزار خاص یا در خانواده معماری را داشتند ( در حالیکه امروزه آنها میخواهند که در زبان برنامهنویسی یا خانوادهای از زبانها تجربه و تخصص بدست آورند، باامید به اینکه بتوانند تخصص خود را به هر سخت افزار رایانه انتقال دهند و در آن رایانه کار کند). به دلیل اینکه تخصصهای افراد محدود به یک نوع کامپیوتر میشود، تجمع تخصص آنها باعث میشود که کامپیوتر معماری خاص و جذابتری برای آنها و همکاران آنها داشته باشد. بنابراین تولیدکنندگان تمایل دارند که کدهای ماشین را تولید کنند و دانش را تاجایی که میشود بسط دهند.
ثانیآ، هیچ اینترنت گستردهای وجود نداشت. گرچه محدودیتهای قانونی کمتری برای اشتراکگذاری نسبت به امروز وجود داشت، محدودیتهای فنی بیشتر بود: مفهوم گرفتن داده از مکانی به مکان دیگر ناخوشایند و دستوپاگیر بود، که درمورد آن صحبتشدهاست. یکسری شبکه کوچک، محلی وجود دارند که برای اشتراکگذاری اطلاعات در آزمایشگاه یا شرکتها مناسب هستند. اگر درخواست اشتراکگذاری جهانی وجود داشته باشد باید بریکسری از موانع غلبه کنیم. در بسیاری از موارد بر این موانع غلبه شده است. گاهی اوقات گروههای متفاوت به طورمستقلی باهم در تماس هستند، دیسک یا نوارهایی را ایمیل میکنند، و گاهی اوقات تولیدکنندگان به عنوان مرکز اصلی پاکسازی برای پچها بکار گرفته میشوند. همچنین به توسعهدهندگان کامپیوترهای اولیه برای کار در دانشگاهها، که در آنجا دانشها بهصورت مکتوب هستند، کمک میکند. اما واقعیت فیزیکی انتقالداده ایناست که همیشه برای اشتراکگذاری یک مقاومت ظاهری وجود دارد، و باتوجهبه مقاومت ظاهری فاصله (واقعی یا سازمانی) که نرمافزار باید از آن عبور کند. گستردگی، اصطکاک بهاشتراکگذاری، که امروز میشناسیم ممکن نبود.
به عنوان یک صنعت بالغ، چندین تغییرات مرتبط به صورت همزمان اتفاق افتاد. یک تنوع رامنشده طراحی نرمافزار به تدریج راهی را به چند برنده، برای مثال برندگان از طریق تکنولوژی برتر، بازاریابی برتر، یا ترکیبی از این دو، نشان داد. در زمانهای مشابه، و نه زمانهای اتفاقی، بسطهایی که به آنها زبان برنامهنویسی سطح بالا گفته میشود به معنی آن بود که میتوان برنامه را تنها یکبار در یک زبان نوشت و آن را به طورخودکار در کامپیوترهای مختلف اجرا کرد. اینکار در تولید سختافزار پیامدهایی داشت: درحال حاضر مشتری میتواند نسبت به تلاشهای مهم یک مهندس نرمافزار بدون قفلکردن نرمافزار آنها در یک معماری کامپیوتراختصاصی متعهد شود. زمانیکه با محدودیتبندی تدریجی تفاوت عملکرد انواع کامپیوترها ترکیب شود، و کمتر به عنوان کار کارآمد تلقی میشدند، تولیدکنندگانی به این سختافزارها به عنوان تنها دارایی که میتواند سود را در آینده کاهشدهد نگاه میکردند. قدرت محاسباتاولیه تبدیل به یک تناسب قابلتعویض شدهاست، در صورتیکه نرمافزار تبدیل به یک تمایزگر میشود. نرمافزارهای فروش، حداقل تغییرات آن را به عنوان بخش جداییناپذیر فروش سخت افزار، به عنوان شروع یک استراتژی خوب در نظر گرفتهاند.
این به معنی اینست که تولیدکنندگان باید اجرای حق کپی کدها را با شدت بیشتری شروع کنند. اگر کاربران اشتراکگذاری و اصلاح کد را در میان خودشان به سادگی ادامهدهند، ممکن است به طورمستقل برخی از بهبودهای کنونی به عنوان "ارزش افزوده" توسط عرضهکننده کالا به فروشرسد. از همه بدتر، کدهای به اشتراکگذاشته شده میتوانند بدست رقبا بیافتند. مسخره است که همه اینها درزمانی اتفاق میافتد که اینترنت مسبب آن است. لذا تنها زمانی که واقعآ اشتراکگذاری نرمافزار بدون مانع است نهایتآ این تبدیلات از لحاظ فنی امکانپذیر است، نهایتآ از نقطه نظر هرشرکتی، تغییر در تجارت کامپیوتر آن را از لحاظ اقتصادی نامطلوب ساختهاست، عرضهکنندگان پایین نگهداشتهشدهاند، و دسترسی کاربران به کدهایی که ماشین آنها اجرا میکند را مسدودمیکنند، و یا بر توافق نامه عدم افشا اصرار ورزیده که اشتراکگذاری را غیرممکن میسازد.
همانطور که جهانی از کدهای مبادلهشده نامحدود به آرامی کمرنگ میشود، یک ضدحمله در ذهن حداقل یک برنامه نویس تبلور مییابد. ریچارد استالمن که در آزمایشگاه هوشمصنوعی در موسسه تکنولوژی ماساچوست در سال 1970 و ا وایل 1980، در طول زمانی که تبدیل به یک عصر طلایی و موقعیت طلایی برای اشتراکگذاری کد شدهبود، کار میکرد. آزمایشگاه هوشمصنوعی دارای یک "هکر اخلاقی" قوی است [3]، و افراد تنها انتظارندارند که تشویقشوند بلکه انتظار به اشتراکگذاری انچه که باعث بهبود سیستم میشود نیز دارند. همانطور که استالمن بعدها نوشت:
نمیگوییم که نرمافزار ما "نرمافزار آزاد" است، چرا که آن اصطلاح هنوز وجود ندارد، اما چیزی بود که هست. هرگاه افرادی از دانشگاه یا شرکت دیگری درگاهی از نرمافزار یا استفاده از نرمافزار را درخواست کرد، با کمال میل به آنها اجازه این کار را میدهیم. اگر فردی را دیدی که از یک برنامه ناآشنا و جالب استفاده میکند، میتوانید کد منبع آن را از او بخواهید، لذا میتوانید آن را بخوانید، تغییر دهید، و یا بخشهایی از آن را به برنامه جدید وارد کنید.
این جامعه بهشتی استالمن مدت کوتاهی پس از سال 1980 سقوط کرد، در آن زمان تغییراتی در بقیه صنعت اتفاق افتاد نهایتآ این تغییرات به آزمایشگاه هوش مصنوعی رسید. یک شرکت راه اندازی تعدادی برنامهنویس آزمایشگاه را برای کار برروی سیستمعاملهایی شبیه به آنچه که در آزمایشگاه کار میکند و درحال حاضر تنها تحت مجوزهای منحصربفرد هستند، استخدام کرد. درهمینزمان، آزمایشگاه هوشمصنوعی تجهیزات جدیدی که بایک سیستم عامل اختصاصی بوجود امده بود بدست آورد.
استالمن یک الگوی بزرگ در آنچه که رخ داده است را مشاهده کرد:
کامپیوترهای مدرن هر دوره، مانند VAX یا 68020، دارای سیستمعامل مخصوص بهخود هستند، اما هیچکدام از آن سیستمعاملها، نرمافزار آزاد نیستند: حتی برای گرفتن یک نسخه اجرایی باید یک توافقنامه عدماطلاع را امضا کنید.
این به معنی اینست که اولین گام در استفاده از کامپیوتر این است که مثلآ تعهددهید که به همسایه خود کمک نمیکنید. همکاری تجمعی ممنوع است. قانونی که توسط صاحبان نرمافزارهای اختصاصی ایجاد شده است این است که:" اگر آن را با همسایه خود به اشتراک بگذارید، شما یک دزد هستید، اگر میخواهید در آن تغییری ایجاد کنید ، این کار را از ما بخواهید".
با کمی تغییر شخصیت، برای مقاومت دربرابر تغییر روند تصمیمگرفت. به جای کار در آزمایشگاه هوشمصنوعی که در حالحاضر نابود شده است، و یا در نظرگرفتن شغل برنامه نویسی در شرکتهای جدید، که نتایج کار در انها ثبتمیشود و محفوظ میماند، از آزمایشگاه انصراف داد و پروژه GNU و نرمافزار آزاد را بنیانگذاری کرد(FSF). هدف GNU [4] گسترش کامل سیستمعاملهای کامپیوترهای آزاد و باز و بدنه نرمافزارهای کاربردی است، که در آن کاربران از هککردن و یا به اشتراکگذاری تغییرات خود جلوگیری میکنند. او، دراصل، مجموعهای از نوآوریهایی که در آزمایشگاه هوش مصنوعی نابود شدهبود را بدستآورد، اما در مقیاس گسترده جهانی و بدون وجود آسیبپذیری که فرهنگ آزمایشگاه را مستعد ابتلا به فروپاشی کرده بود.
علاوه بر کار برروی سیستمعامل جدید، استالمن یک گواهینامه حقکپی که اصطلاحات ان اینکه یک کد به طور دایمی رایگان خواهد بود را تضمین میکند، طراحی کرد. مجوز عمومی GNU یک قطعه هوشمندانه از قانون است: این مجوز بیانمیکند که کد میتواند بدون هیچ محدودیتی کپی و اصلاح شود، و هردو کپی و آثار مشتق شده از آن( برای مثال، نسخه اصلاح شده) میتواند تحت مجوز مشابه به عنوان اصل آن، بدون هیج محدودیت اضافی، منتشر شود. در تاثیرات آن، این قانون از قانون حقکپی برای بدست آوردن تاثیرات مثبت نسبت به حقکپی سنتی استفاده میکند: بهجای محدودیت توزیع نرمافزار، هرکسی, را، حتی برنامهنویس را، از محدودکردن توزیع منع میکند. برای استالمن، بهترست که به سادگی کد خود را در یک دامنه عمومی قرار دهد. اگر در یک دامنه عمومی باشد، هرگونه کپی خاص از آن کد میتواند در یک برنامهاختصاصی گنجانده شود ( همانطور گاهی اوقات اتفاق میافتد که یک کد تحت مجوز حق کپی متن باز باشد[5]) . درحالیکه همچین اختلالی منجر به کاهش در دسترسبودن کد اصلی نمیشود، به معنی این است که تلاشهای استالمن میتواند در نرمافزارهای اختصاصی دشمن را بهرهمند کند. GPL میتواند به عنوان یک حمایت تولید داخلی برای نرمافزارهای آزاد در نظرگرفته میشود، به این دلیل که مانع این میشود که نرمافزارهای غیرآزاد از کد GPLed کاملآ بهره مند شود. GPL و ارتباطات آن برای دیگر قوانین نرمافزارهای رایگان با جزییات بیشتر در ??? به بحث گذاشته شدهاند.
با کمک بسیاری از برنامه نویسان، یکسری از آنها ایدئولوژی استالمن را به اشتراکگذاشته اند و یکسری از آنها میخواهند یکسری از کدهای دردسترس آزاد را به سادگی ببینند، پروژه GNU شروع به رهاسازی جایگزین رایگان برای بسیاری از مولفههای بحرانی سیستم عامل میکند. به دلیل استانداردهای گسترده کنونی در نرمافزار و سختافزار کامپیوتر، استفاده از جایگزینی GNU درغیر از سیستمهای آزاد ممکناست، و بسیاری از افراد آن را انجام میدهند. ویرایشگر متن GNU و کامپایلر C (GCC) به طور خاصی، در بدستآوردن موارد بزرگ و ثابت نه تنها در زمینه ایدئولوژیک، بلکه به سادگی در پارامترهای فنی موفقهستند. حدود سال 1990، GNU اغلب سیستمعاملهای رایگان را، به جز برای هسته، قسمتی از ماشین که بوت میشود، و مسئول مدیریت حافظه، دیسک، و سایر منابع سیستم است، را تولید کردند.
متاسفانه، پروژه GNU طراحی هسته را انتخاب کرده که نسبت به آنچه که انتظار میرفت پیادهسازی آن سختتر بود. متناسب با موانع زیربنای نرمافزار آزاد، اولین نسخه از سیستمعامل که کاملآ رایگان است را ایجاد کردند. قسمت نهایی را Linus Torvalds تکمیل کرد، یک دانشجوی علومکامپیوتر فنلاندی، با کمک داوطلبان در سراسر جهان، هسته رایگان را با استفاده از طراحی محافظه کارانه تکمیلکرد. آن را لینوکس نامید، زمانی که با برنامههای GNU موجود و دیگر نرمافزارهای رایگان ترکیب شد (به خصوص سیستم ویندوزX)، نتیجه به طورکامل شبیه یک سیستمعامل آزاد بود. برای اولین بار؛ شما میتوانید کامپیوتر خود را بوت کنید و بدون هیج نرمافزار اختصاصی کار خود را انجام دهید [5]
بسیاری از نرمافزارها در سیستمعاملهای جدید با پروژههای GNU تولید نشدهاند. درحقیقت، GNU تنها یک گروه کاری برای تولید سیستمعامل آزاد نیست (برای مثال، کدها در نهایت تبدیل به NetBSD میشود و FreeBSD در حال حاضر در حال توسعه در این زمان بوده است). اهمیت زیربنای نرمافزارهای آزاد تنها در کد نوشته شده آنها نیست، بلکه در فصاحت سیاسی آن هم هست. صحبت پیرامون نرمافزارهایآزاد بهعنوان یک عامل تسهیلات، اینکه نباید برنامه نویسان آگاهی سیاسی درمورد ان داشته باشند را مشکل ساخت. حتی انهایی که با FSF مخالف بودهاند، اگر حتی سهمی از موقعیتهای مختلف داشته باشند، باید برروی این مسئله بحث کنند. اثر FSF بهعنوان تبلیغات در پیوست کد خود به پیامها، به منظور GPL و دیگر متنها ذخیره میشود. همانطور که کدهای خود را به صورت گسترده گسترش میدهند، کدها به خوبی گسترده میشوند.