چرا نرم افزار آزاد نباید به Mono یا C# وابسته باشد

بوسيلهء ريچارد استالمن

تصميم دبيان (م: يك توزيع معروف گنو/لينوكس) مبني بر شامل سازي مونو (م: يك پياده سازي آزاد از دات نت كه در گنو/لينوكس قابل استفاده است) در روش اصلي نصب گنوم (GNOME)، بخاطر Tomboy كه يك اپليكيشن نوشته شده با سي شارپ است، اجتماع (م: اجتماع نرم افزار آزاد) را به يك جهت خطر پذير سوق ميدهد.
وابسته بودن به سي شارپ خطرناك است، پس ما نياز داريم تا استفاده از آنرا نهي كنيم.

مشكل صرفا مختص مونو نيست؛ هر پياده سازي آزاد از سي شارپ مسئلهء يكساني را برمي انگيزد. خطر اينست كه احتمالا مايكروسافت بطور پنهان در حال طرح ريزي مجبور كردن قانوني تمام پياده سازي هاي آزاد سي شارپ در وقت نامعيني است (en.swpat.org و League for Programming Freedom (LPF) را ببينيد). اين يك خطر جدي است، و تنها احمق ها آنرا تا وقتيكه آن عملا اتفاق بيفتند ناديده خواهند گرفت. ما احتياج داريم احتياط هايي را اكنون براي حفاظت از خودمان از اين خطر آينده درپيش بگيريم.

اين بدين معنا نيست كه پياده سازي سي شارپ يك چيز بد است. پياده سازي هاي آزاد سي شارپ به كاربران اجازه ميدهند تا برنامه هاي سي شارپ خود را روي پلتفرمهاي آزاد اجرا كنند، كه خوب است (پروژهء گنو همچنين يك پياده سازي از سي شارپ دارد كه Portable.NET ناميده ميشود – DotGNU Portable.NET). بطور ايدئال ما ميخواهيم پياده سازي آزاد براي تمامي زبانهايي كه برنامه نويسها استفاده كرده اند فراهم كنيم.

مشكل در پياده سازي هاي سي شارپ نيست، بلكه بيشتر در Tomboy و ديگر اپليكيشن هاي نوشته شده در سي شارپ است. اگر ما امكان استفاده از سي شارپ را از دست بدهيم، ما همچنين تمامي آنها را هم از دست خواهيم داد. اين آنها را غيراخلاقي نمي سازد، اما بدين معناست كه نوشتن و استفاده كردن از آنها يك ريسك بدون مزيت است.

ما بايد بطور سيستماتيك چنان سازماندهي كنيم تا هرچه كمتر كه ممكن است به پياده سازيهاي آزاد سي شارپ وابسته باشيم. به بيان ديگر، ما بايد مردم را از نوشتن برنامه ها در سي شارپ نهي كنيم. بنابراين ما نبايد پياده سازيهاي سي شارپ را در نصب پيشفرض توزيعهاي گنو/لينوكس يا راههاي اصلي نصب گنوم شامل كنيم، و ما بايد هروقت كه ممكن است، اپليكيشن هاي غير سي شارپ را بجاي اپليكيشن هاي معادل سي شارپ توزيع و توصيه كنيم.

——————————————————

يك نسخهء پيشتر از اين مقاله به غلط اظهار كرده بود كه مونو اكنون بصورت پيشفرض در دبيان نصب خواهد شد. ما اين متن را تصحيح كرديم، و بخاطر اشتباه معذرت ميخواهيم.

Last modified 2009-10-08 05:02 PM

==================

-= قول توخالي مايكروسافت =-

هفتهء گذشته مايكروسافت شرايط Community Promise خود را به پياده سازيهاي استانداردهاي ECMA 334 و 335 بسط داد. ممكن است فكر كنيد كه اين بدين معناست كه نوشتن نرم افزارتان در سي شارپ بي خطر است. اما، اين قول پر از راههاي گريز است، و هيچ جا بقدر كافي به امن كردن سي شارپ نزديك نيست.

-= چرا بايد درمورد سي شارپ نگران باشيم؟ =-

از وقتيكه هفتهء گذشته ما مقالهء ريچارد درمورد مونو را منتشر كرديم، بعضي از مردم دربارهء اينكه چرا ما بجاي ديگر زبانها درمورد توسعه دهندگان نرم افزار آزادي كه وابسته به سي شارپ يا مونو هستند اظهار نگراني ميكنيم از ما سوال ميكنند. احتمالا Sun پتنت هايي دارد كه جاوا را تحت پوشش قرار ميدهند. شايد IBM پتنت هايي دارد كه كامپايلرهاي سي را تحت پوشش قرار ميدهند. آنها ميپرسند «آيا ما نبايد استفاده از آنها را هم نهي كنيم؟»

درست است كه تمام پتنت هاي نرم افزاري تهديدي براي توسعه دهندگان هستند – اما آن بدين معنا نيست كه تمام آنها بصورت يكساني تهديد كننده هستند. شركتهاي مختلف ممكن است پتنت هايي داشته باشند كه ميتوانست براي حمله به ديگر زبانها استفاده شوند، اما اگر ما دربارهء هر پتنت كه ميتوانست عليه ما استفاده شود نگران بوديم، نميتوانستيم هيچ چيزي انجام دهيم. پتنت هاي مايكروسافت خيلي بيشتر خطرناك هستند؛ آن تنها شركت نرم افزاري اي است كه خود را بعنوان دشمن گنو/لينوكس اعلان كرده و نيت خود را براي حمله به جامعه ما با پتنت ها اظهار كرده است (م: همچون اسناد افشا شده از مايكروسافت موسوم به اسناد هالووين). اگر مايكروسافت يك تلهء پتنت در داخل سي شارپ طراحي كرده باشد، آن چيزي بيشتر از چيزي كه گفته بود انجام خواهد داد نيست.

اين شركت از سال 2006 درمورد مقاصد خودش كاملا روشن بوده است. در يك كنفرانس كاربر در نوامبر آن سال، مدير اجرايي مايكروسافت Steve Ballmer در پاسخ به يك سوال درمورد توافق پتنت شان با ناول گفت:
«اين واقعيت كه كاربران ]گنولينوكس[ از دارايي فكري پتنت شدهء ما استفاده ميكنند يك مشكل براي سهامداران ما است. ما سالي 7 ميليارد دلار براي تحقيق و توسعه خرج ميكنيم، سهامداران ما از ما انتظار دارند تا نوآوري هاي پتنت شدهء خود را محافظت كنيم يا واگذاري مجوز كنيم يا از آنها سود اقتصادي بدست بياوريم. پس ما چطور يك طوري بازدهي اقتصادي درخور را از نوآوري پتنت شدهء خودمان بدست بياوريم…؟»
(Seattle Post-Intellegencer, The Microsoft Blog, “Ballmer on Novell, Linux and patents,” November 16, 2006.)
چند روزي بعد، يك مصاحبه با مدير ميكروسافت Bob Muglia منتشر شده، و او شفاف ساخت كه آنها سي شارپ را بعنوان يكي از آن به اصطلاح «نوآوري هاي پتنت شده» محسوب ميكنند:
«يك تلاش قابل توجه در متن باز براي آوردن چنان پياده سازيهايي از دات نت، شناخته شده با نام مونو و ايجاد شده توسط ناول، به بازار وجود دارد، و يكي از ويژگيهاي توافقي كه ما با ناول كرديم اينست كه دارايي فكري مرتبط با آن در دسترس مشتريان ناول باشد»
(eWeek.com, “Microsofts Muglia Talks Longhorn, Novell and Java”, November 17, 2006.)

آنها از آنوقت هميشه درحال زياد كردن آتش بوده اند. در ماه مي 2007، مايكروسافت با اعلام كردن اينكه آنها باور دارند گنو/لينوكس 235 پتنت مايكروسافت را نقض كرده است در يك مصاحبهء مجلهء Fortune، همهء اين مشي را دنبال كرد. و اخيرا آنها آنرا واضح ساختند كه اينها تهديدهاي بي عمل نيستند: اين شركت TomTom را براي استفاده از پياده سازي سيستم فايل VFAT در هستهء لينوكس بدون خريدن يك مجوز از مايكروسافت مورد پيگرد قانوني قرار داد.

همهء اين نميتواند بسادگي به كنار جارو شود. اينها بيانات و اعمالي هستند كه در بالاترين سطوح اجرايي اين شركت صورت گرفته اند. استفاده از پتنت ها براي تقسيم كردن و غلبه يافتن بر اجتماع نرم افزار آزاد يك بخش بنيادين از استراتژي شركت آنهاست. بخاطر آن، سي شارپ معرف يك تهديد بي همتا براي ماست. اين زبان در داخل مايكروسافت توسعه يافت، پس محتمل است كه آنها پتنت هاي زيادي براي تحت پوشش قرار دادن جنبه هاي مختلفي از پياده سازي آن داشته باشند. آن پياده سازي هاي آزاد سي شارپ، همچون مونو، را هدف آساني براي حمله خواهد ساخت.

قول شركت براي تغيير دادن چيزي از اين قضيه هيچ كاري نمي كند. مايكروسافت فرصتي داشت تا عملي انجام دهد و نشان دهد كه قصد هيچ آسيبي را بوسيلهء سي شارپ به ما ندارد. درعوض آنها تمهيدهاي نصفه نيمهء بي معنا را پيش آوردند كه بدانها مجال هاي كافي براي صدمه زدن به ما را ميدهند.

-= استانداردهاي ناكامل =-

مشخصات استانداردهاي ECMA 334 and 335 زبان سي شارپ هسته اي را توصيف ميكنند، شامل اطلاعاتي درباره كتابخانه هاي استانداردي كه بايد در هر پياده سازي سازگار با استاندارد فراهم باشند. اما، چندين كتابخانه همراه مونو هستند، و بوسيلهء اپليكيشن هايي مثل Tomboy استفاده ميشوند، كه ضروري استاندارد نيستند. و فقط براي واضح بودن بگوييم كه، ما درمورد كتابخانه هاي مختص ويندوز همچون ASP.NET and Windows Forms صحبت نميكنيم. درعوض، ما درمورد كتابخانه هايي تحت فضاي نامي سيستم كه كارايي هاي عمومي اي را كه برنامه نويسان در زبانهاي برنامه نويسي مدرن انتظار دارند فراهم ميكنند صحبت ميكنيم: binary object serialization, regular expressions, XPath and XSLT, and more.

چون اين كتابخانه ها در مشخصات ECMA تعريف نشده اند، آنها به هيچ صورتي توسط Community Promise محافظت نمي شوند. اگر اين تنها مشكل با قول ميكروسافت بود، ممكن بود استفاده از اپليكيشن هايي كه از اين كتابخانه ها اجتناب ميكنند و به چيزي كه در استاندارد آمده ميچسبند، امن باشد. اما حتي كدي كه توسط قول پوشش داده ميشود كاملا امن نيست.

-= فهميدن اينكه چه چيزي لازم است =-

Community Promise تنها به پتنت هاي مايكروسافت كه براي پوشش دادن مشخصات استاندارد لازم هستند بسط داده ميشود. با قضاوت كردن فقط با اندازهء مجموعهء پتنت هايش، محتمل است كه مايكروسافت پتنت هايي دارد كه يك پياده سازي كامل استاندارد احتمالا حتي اگر آن اساسا ضروري نباشد نقض ميكند – شايد پتنت يك بهينه سازي سرعت سرراست را پوشش ميدهد، يا يك روش انجام يك كار را. Community Promise چيزي درمورد اين پتنت ها نمي گويد، و مايكروسافت هنوز ميتواند آنها را براي تهديد كردن پياده سازيهاي استاندارد مورد استفاده قرار دهد.

-= حركت دادن تير دروازه ها =-

فرض كنيم شما يك پياده سازي از يكي از مشخصات استاندارد تحت پوشش Community Promise را نوشته ايد، و شما ميخواهيد بدانيد آيا شما براي نقض يك پتنت معين مايكروسافت مورد پيگرد قانوني قرار خواهيد گرفت يا خير. پرسش لازم پيش از اين آنرا بحد كافي براي دريافتنش سخت ميكند. اما حتي اگر شما از پس آن بربياييد، شما بايد مطمئن شويد كه فردا هم آنرا چك خواهيد كرد، زير Community Promise ممكن است آن زمان شما را محافظت نكند.

Community Promise به شما حقي براي استفاده از ادعاهاي پتنت نميدهد. آن فقط ميگويد كه مايكروسافت شما را بوسيلهء ادعاهاي پتنت اي كه دارد يا كنترل ميكند مورد پيگرد قرار نخواهد داد. اگر مايكروسافت يكي از آن پتنت ها را بفروشد، هيچ چيزي براي بازداشتن خريدار از پيگرد كردن هركسي كه نرم افزار را استفاده ميكند وجود ندارد.

-= راه حل: يك مجوز پتنت فراگير =-

اگر مايكروسافت بطور خالصانه ميخواهد كه به كاربران نرم افزار آزاد قوت قلب دهد كه قصد ندارد آنها را براي استفاده از مونو پيگرد كند، بايد به عموم يك مجوز پتنت غيرقابل فسخ براي همهء پتنت هاي آن كه مونو درعمل استفاده ميكند اعطا كند. آن بطور تميزي از تمام مشكلات موجود درمورد Community Promise اجتناب ميكند: آن بقدر كافي در حدود، وسيع هست تا ما مجبور نباشيم دريابيم كه چه چيزي بوسيلهء مشخصات استاندارد پوشش داده ميشود يا براي پياده سازي آن اساسا ضروري است. و آن حتي اگر مايكروسافت پتنت ها را بفروشد معتبر خواهد بود.

اين يك درخواست نامعقول نيست. GPLv3 توزيع كنندگان را ملزم ميدارد تا يك مجوز مشابه را هنگاميكه آنها نسخه هاي تغيير يافته از نرم افزار تحت پوشش را دارند فراهم كنند، و مقدار كافي از شركتهاي بزرگ و كوچك مشكلي براي انجام آن نداشته اند. مطمئنا كسي با منابع مايكروسافت بايد بتواند از پس اين نيز بربيايد. اگر آنها مطمئن نيستند چطور دربارهء آن اقدام كنند، آنها بايد با ما تماس بگيرند؛ ما خوشحال خواهيم بود تا با آنها براي اطمينان از اينكه آن راضي كننده باشد كار كنيم.

تا وقتيكه آن اتفاق بيفتد، توسعه دهندگان نرم افزار هنوز نبايد نرم افزاري را بنويسند كه وابسته به مونو باشد. پياده سازيهاي سي شارپ هنوز ميتوانند بوسيلهء پتنت هاي مايكروسافت مورد حمله قرار گيرند: Community Promise براي اين طراحي شده است تا به اين شركت اگر آنها خواستند چند راه خروج بدهد. ما نميخواهيم ببينيم اگر ما قابليت استفاده از مونو را از دست داديم كار سخت توسعه دهندگان از دست اجتماع رفته است، و تا وقتيكه ما تمامي پتنت هاي نرم افزاري را به تمامي محو كنيم (http://swpat.org/)، استفاده از يك زبان ديگر بهترين راه براي جلوگيري از وقوع چنان چيزي است.

Last modified 2009-07-16 06:21 PM

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>