این جلسه قرار بود راجع به نرمافزار آزاد صحبت کنیم، فرقش با متنباز، چرا باید بگیم نرمافزار آزاد و... در نتیجه با این بحث رو شروع کردیم.
قبل از جلسه تصمیم داشتم تا چیزایی که بلدم و خوندم رو توضیح بدم، اما دیدم واقعا شاید نتونم حق مطلب رو ادا کنم! پس کار رو به آقای استالمن سپردم، چون بچهها انگلیسیشون خوب بود، ویدئو سخنرانی ۱۳ دقیقهای آقای استالمن رو گذاشتم و خب روش با هم بحث کردیم راجع به مسائلی که مطرح میکرد. مهمترین مسائل این ویدئو رو اینجا میگم:
چه کسی کامپیوتر شما رو کنترل میکنه؟ شما؟ یا یک شرکت بزرگ؟
کامپیوتر یک ماشینه که کارهایی که شما میخواید رو انجام میده، چون شما به اون برنامهای میدید که دستوراتی داره که به کامپیوتر میگه چکار کنه! کامپیوتر هم فقط دستورات رو میگیره و اجرا میکنه. خب چه کسی دستورات رو به کامپیوتر میده؟ شاید فکر کنید این شما هستید که دستورات رو میدید، اما در حقیقت کامپیوتر شما ابتدا دستورات شرکت سازنده نرمافزار (مثلا سیستمعامل) شما رو اجرا میکنه و شما فقط میتونید در حدی به کامپیوتر دستور بدید که اون شرکت به شما اجازه داده!
در دنیای کامپیوتر دو حالت داریم، یا برنامه کاربر رو کنترل میکنه یا کاربر برنامه رو کنترل میکنه! برای این که کاربر برنامه رو کنترل کنه، ما به ۴ آزادی اساسی نیاز داریم، و این ۴ آزادی، نرمافزار آزاد رو تعریف میکنند، یعنی نرمافزاری نرم افزار آزاده که به این ۴ آزادی احترام بگذاره. نرمافزار آزاد با نرمافزار رایگان تفاوت داره، این مشکل همینطور که میبینید توی زبان فارسی وجود نداره و خب خیلی واضحه که آزاد و رایگان با هم فرق دارن، اما در زبان انگلیسی برای هر دوی اینها از "Free" استفاده میشه! استالمن میگه کلمه جایگزین خوب و جامعی براش پیدا نکردن، گاهی برای رسوندن معنا از واژه فرانسوی یا اسپانیایی "Libre" استفاده میشه، یعنی ممکنه بشنوید "Free/Libre". اینجا منظور از آزاد، چیزیه که شما از آزادی بیان توی ذهنتون میاد! اما اون ۴ آزادی چی هستن؟
آزادی ۰:
آزادی استفاده:
هر کاربر باید حق داشته باشد تا نرمافزار خود را هر زمان و به هر منظوری و روی هر سختافزاری که دوست دارد اجرا کند.
آزادی ۱:
آزادی یادگیری کد منبع و تغییر آن:
هر کاربر باید حق داشته باشد تا نرمافزار را طوری تغییر دهد تا کاری را که خودش میخواهد انجام دهد. هر برنامه ۲ شکل دارد، شکل کد منبع (SourceCode) و شکل اجرایی (Executable) اما کد منبع چیست؟ کد منبع کدیه که اگر شما برنامهنویسی بلد باشید با دیدن اون میفهمید که چطور کار میکنه و میتونید تغییرش بدید اما شکل اجرایی یک تعداد عدد بی معنیست که فقط کامپیوتر اون رو میفهمه! اگر شما شکل اجرایی رو داشته باشید کار بسیار سختیه که بفهمید چطور کار میکنه و بسیار سخته که تغییرش بدید. پس برای این که آزادی یادگیری و تغییر کد رو داشته باشید، این لازمه که کد منبع رو داشته باشید!
با این ۲ آزادی هر کاربر به طور مجزا میتونه کپی خودش از برنامه رو داشته باشه و یادش بگیره و هرطور که میخواد تغییرش بده تا کاری رو که میخواد انجام بده، اما اگر زبان برنامهنویسی بلد نبودیم چی؟ باید شرایطی باشه که گروههایی از کاربران بتونن روی کد کار کنن و بقیه از کار اونها استفاده کنن، توی اون گروه تعدادی برنامهنویس هست که اونها کار تغییر رو انجام میدن! اینجا به ۲ آزادی دیگه نیاز داریم:
آزادی ۲:
آزادی باز نشر نرمافزار و دادن کپی از اون به دیگران
آزادی ۳:
آزادی باز نشر نرمافزار تغییر یافته توسط گروه یا کاربر، شما آزاد هستید برنامه رو کپی کنید تغییر بدید و بعد اون رو بفروشید یا به رایگان در اختیار دیگران قرار بدید!
اگر این آزادیها باشند، این کاربره که برنامه رو کنترل میکنه، اگر هرکدوم از این آزادیها نباشن، این برنامه است که کاربر رو کنترل میکنه. و توسعهدهنده نرمافزار است که برنامه رو کنترل میکنه! این به این معناست که این برنامه به توسعهدهنده قدرت میده در برابر کاربر.
اگر توسعهدهنده قدرت بگیره و ما از نرمافزار انحصاریش استفاده کنیم، چه اتفاقی میافته؟
- گاهی نرمافزار از کاربر جاسوسی میکنه.
- گاهی نرمافزار کاربر رو محدود میکنه و کاربر رو از انجام کاری که میخواد منع میکنه.
- گاهی نرمافزار از راه دور کتابی رو از دستگاه شما پاک میکنه، همونطور که آمازون در سال ۱۹۸۴ کرد!
- گاهی توسعهدهنده شما رو مجبور به نصب آپدیتی مضر میکنه که اگه انجامش ندید برنامتون کار نمیکنه! کاری که سونی کرد.
- گاهی هم به زور نرمافزار شما رو از دور تغییر میده، کاری که مایکروسافت میتونه با ویندوز بکنه از طریق در پشتی!
- گاهی به کاربر خیانت میکنه، همون طور که مایکروسافت باگهای رفع نشده ویندوز رو به NSA نشون میده تا ازش استفاده کنه!
توسعهدهنده از قدرتی که بر کاربر خود داره، این استفادههای خبیثانه رو میکنه تا به سود و درآمد و... برسه!
ما به همه پیشنهاد میکنیم به چیزی که ما به عنوان یک جامعه آزاد ساختیم بپیوندند! در سال ۱۹۸۳ پروژه گنو آغاز شد در سال ۱۹۹۲ پروژه تقریبا تمام شده بود و فقط بخشی از آن مانده بود که در اون سال لینوس توروالدز کرنل خود «لینوکس» رو آزاد کرد و ما با افزودن اون به گنو، به یک سیستم عامل کامل رسیدیم!
یک ایراد دیگه که وجود داره در سیستمهای آموزشی دنیا و همچنین ایران، اینه که در مدرسه و دانشگاه نرمافزار غیرآزاد تدریس و ترویج میشه. مدرسه جاییه که باید مفاهیم خوب آموزش داده بشه، در مدارس باید با نرمافزار مثل کلوچهای برخورد بشه که شما نمیتونی اون رو تنها بخوری و باید به همکلاسیت هم بدی! باید نرمافزار رو هم با هم شریک شد و یادش گرفت، تعداد زیادی هستند که دوست دارن بدونن نرمافزارها چطور کار میکنن و خب اونا با نداشتن کد منبع نمیتونن این کار رو بکنن، و این وظیفه مدرسه و دانشگاهه که در این موضوع پاسخگو باشن!
یکی دیگه از دلایل مهم بودن آزادی نرمافزار اینه که من اگر یک سختافزار میخرم، صاحب اون منم! من حق دارم بدونم اون چطور کار میکنه، اما شرکت سازنده سختافزار به من یک نرمافزار بسته میده و میگه رو و این رو اجرا کن و حرف نزن!:| برای نوشتن نرمافزار آزاد برای اون سختافزار و فهمیدن نحوه کارکردش باید مدتها زمان و هزینه صرف بشه!
اما تفاوت نرمافزار آزاد و متنباز:
متنباز یک شیوه توسعه کد هست که کیفیت کد براش مهمه، درحالی که نرمافزار آزاد نوعی جنبش اجتماعیه که آزادی کاربر براش مهمه، اکثر نرمافزارهای متنباز، نرمافزار آزاد هم هستند، اما نه همشون! متنباز بودن شرط لازم هست، اما کافی نیست! نرمافزاری نرمافزار آزاد هست که به اون ۴ آزادی ذکر شده احترام بگذاره.
در واقع متنباز در ابتدا بخشی از نرمافزار آزاد بود و به همون علتی جدا شد که "Free" با رایگان اشتباه گرفته میشد، اما بعدها تعهد خودش رو به ارزشهای آزادیخواهی جنبش نرمافزار آزاد از دست داد و بیشتر روی کیفیت کد و کم باگ بودن و... تاکید کرد.
بهتر اینه که بگیم نرمافزار آزاد و اون رو ترویج کنیم، چون به آزادی ما ارزش داده و چیز جامعتری ههم از متنباز هست.
اگه دوست دارید بیشتر بخونید این لینک از سایت گنو خیلی مفیده:
چرا متنباز هدف اصلی نرمافزار آزاد را برآورده نمیکند
در آخر یه کد جالب رو تحلیل کردیم که یکم شاد بشیم :دی
!!اخطار!! این کد رو اجرا نکنید!
کد زیر معروفه به Fork Bomb:
:(){ :|: & };:
اما اینا چیه؟ ما در واقع داریم توی ترمینال برنامه مینویسیم!
داریم یک تابع تعریف میکنیم به اسم دو نقطه! و پرانتزها هم که جای آرگومان های ورودی تابعمونه که خالیه! آکولاد ها هم بدنه تابعمون هستن! داخل بدنه، تابع داره خودش رو به صورت بازگشتی صدا میزنه، و نتایجش رو از طریق لوله (Pipe | ) به یه فراخونی دیگه از خودش منتقل میکنه، پس هر بار فراخونی تابع نتیجش ۲ فراخونی جدید از تابع هست، علامت & یعنی این کار در پسزمینه انجام بشه و خط فرمان به من برگرده، ; هم نشانه پایان کد نویسیه! جدا کردیم در واقع دستوات قبلی رو از جدید،اما دستور جدید چیه؟ دو نقطه! اسم تابعمون! یعنی تابعی که نوشتیم رو فراخونی کردیم، نتیجه این فراخونی اینه که هر چند ثانیه تعداد فراخوانیهای درحال اجرا از تابعمون ۲ برابر میشه! و این کار تموم نمیشه! در نتیجه بعد از چند ثانیه سیستم شما هنگ میکنه! :)
امیدوارم خیلی گیج کننده نگفته باشم :) مرسی که همراهمون هستید.
تاریخ: جمعه ۱۳۹۵/۰۵/۰۱
مکان: اراک - خیابان شهید رجایی (ملک) - خیابان جنت - پارک جنت
اگه نظری دارید حتما باهامون در میون بگذارید. خوش و خرم باشید.