امنیت

ضعف امنیتی در سایت دیجی‌کالا برای پیش‌بینی نتایج یورو ۲۰۱۶

چند سالیه که باب شده همه رسانه‌های تصویری و اینترنتی برای مسابقات ورزشی، بخش شرط بندی و پیش‌بینی نتایج رو می‌گذارند. امسال فروشگاه اینترنتی دیجی‌کالا هم سایتی برای پیش‌بینی نتایج یورو ۲۰۱۶ رونمایی کرد. ده روز پیش بود که یکی از دوستان در توییتر به برخی پیش‌بینی‌ها مشکوک شد و پیشنهاد داد سایت رو بررسی کنم.

پیشنهاد بررسی وجود ضعف امنیتی

در همون بررسی اولیه متوجه شدم که اطلاعات ارسالی کاربر به سرور بیش از حد نیازه و در هر پیش‌بینی، علاوه بر شناسه بازی و کد پیش‌بینی (برنده، مساوی و یا بازنده)، ایمیل کاربر و کد کاربر هم ارسال می‌شه. دریافت إیش از حد اطلاعات از کاربر چند مساله ایجاد می‌کنه.

ضعف امنیتی در سایت دیجی‌کالا برای پیش‌بینی نتایج یورو ۲۰۱۶

ضعف امنیتی اول: ورودی‌های خطرناک

یکی از اصول اولیه در حفظ امنیت اینه که به ورودی‌ها اعتماد نکنیم. درسته که قراره کد بازی یک عدد دو رقمی باشه، اما اگر کاربر یک دستور سمت سرور فرستاد که همه اطلاعات رو نشونم بده چی؟ سرور باید دستور رو اجرا کنه؟ اگر تمهیدی براش نیندیشیده باشیم، این اتفاق می‌افته. این مورد رو روی ورودی‌های دیجی‌کالا تست کردم و شواهد نشون می‌ده که اعتبارسنجی، پاک‌سازی و حذف کاراکترهای مشکوک به درستی انجام نمی‌شه.

در فیلم زیر می‌بینیند که به صورت دستی پیش‌بینی بازی شماره ۲۲ رو سمت سرور فرستادم که نپذیرفت چون قبلا این پیش‌بینی انجام شده بود. پیش‌بینی بازی ۲۳ رو پذیرفت و پیش‌بینی بازی ۲۴ ضرب در ۱ رو هم پذیرفت ولی قاعدتا نباید این اتفاق می‌افتاد. چون برای عمل ریاضی + خطا می‌داد پس پاکسازی انجام نمی‌شه.

همچنین کاراکتر ‘ هم برای شماره بازی بعد در کنار عدد ۱۹ ارسال کردم و همونطور که در تصویر می‌بینید به جای حذف کاراکتری که بدیهیست نباید توی این ورودی ارسال بشه، برای اجرا به کدهای php سپرده می‌شه. پیام خطای ناشی از این مشکل رو می‌بینیم.

من بررسی این مشکل رو ادامه ندادم و برای تزریق کد سمت سرور اقدام نکردم و نمی‌تونم با اطمینان بگم این ضعف امنیتی در بررسی ورود‌ی‌ها، منجر به نفوذ و یا تغییر پایگاه داده می‌شه یا نه. کسی که قصد تخریب داشته باشه، از این مرحله کارش شروع می‌شه.

ضعف امنیتی دوم: مشکل در سطح دسترسی

پیش از شروع کار برنامه‌نویسی، باید ساختار کلی برنامه تعیین بشه و یکی از مهمترین نکته‌ها، تعیین سطح دسترسی کاربرها و کنترل درخواست‌ها بر این اساسه. وقتی نوع ارسال پیش‌بینی‌ها به سرور رو مشاهده کردم، متوجه شدم علاوه بر استفاده از کوکی‌ها که نشون‌دهنده ورود موفق یک کاربره، اطلاعات دیگه‌ای مرتبط به کاربر ارسال می‌شه از جمله ایمیل و کد کاربری.

به نظرم رسید که این ارسال دوباره کد کاربر می‌تونه بین مسیر دستکاری بشه. درسته که ما توی فرم صفحه، کد کاربری که لاگین کرده رو قرار دادیم اما همونطور که گفتم، هیچ‌وقت نباید به اطلاعاتی که از سمت کاربر دریافت می‌کنیم اعتماد کنیم. از دوست خوبم بنیامین، نویسنده وبلاگ سیانوژن، خواستم که دو تا اکانت بسازه تا بتونم این مورد رو چک کنم. متاسفانه حدسی که می‌زدم درست بود و اطلاعات ارسالی نه از نظر سطح دسترسی چک می‌شد و نه از نظر زمانی کنترل می‌شد.

در فیلم زیر خواهید دید که ابتدا درخواست ارسالی برای پیش‌بینی نتیجه بازی آلبانی و رومانی رو به دست میارم و ذخیره می‌کنم. بعد با اکانت بنیامین وارد می‌شم، یک پیش‌بینی ارسال می‌کنم و کوکی‌های این نشست رو ذخیره می‌کنم. برای تست ابتدا با کوکی‌ها و ایمیل بنیامین و کد کاربری بنیامین، پیش‌بینی بازی فرانسه و سوییس رو ارسال کردم. در فیلم خواهید دید که پیام failed دریافت کردم چون بنیامین قبلا این بازی رو پیش‌بینی کرده بود. سپس کد کاربری خودم رو در درخواست ارسالی گذاشتم و در واقع با اکانت بنیامین برای خودم یک بازی رو پیش‌بینی کردم و با موفقیت انجام شد. برای اطمینان به اکانت خودم لاگین کردم و خواهید دید که پیش‌بینی که بنیامین برای من انجام داده بود، به اکانت اضافه شده.

تا اینجا دیدیم که شناسه کاربری به درستی چک نمی‌شه و می‌تونیم هر مقدار غیر منطقی (مقدار مربوط به اکانت دیگران) رو ثبت کنیم. اینجوری هر کسی می‌تونه از پیش همه بازی‌های بعدی رو برای همه کاربرها پیش‌بینی کنه.

ورودی دیگه، شناسه بازی است. منطق پیش‌بینی می‌گه اکانت جدید نباید بتونه بازیهای قبلی رو پیش‌بینی کنه. من درخواستی رو برای بازی شماره یک ارسال کردم و در فیلم می‌بینید که پذیرفته می‌شه و یک بازی قدیمی به لیست پیش‌بینی‌های من اضافه شد.

نکته:

این فیلم‌ها بلافاصله بعد ضبط شدن برای دیجی‌کالا ارسال شد تا مشکل رو برطرف کنند. ده روز هم فاصله گذاشتم برای عمومی کردن ضعف امنیتی تا کاربران به خطر نیافتند. همچنین تست‌ها رو با اکانت شخصی انجام دادم که اکانت کسی آسیب نبینه. هیچگونه تست مخربی رو روی سایت فعال انجام ندادم و با توجه به مشکلاتی که می‌بینم، به دیجی‌کالا توصیه می‌کنم تست نفوذ کامل روی نسخه تست web application انجام بدن.

می‌شه حدس زد که کار با عجله طراحی اجرا شده. احتمالا برنامه‌نویس‌های این کار، زمان زیادی نداشتند که این مشکلات رو توی خروجی نهایی برطرف کنند. پیشنهاد می‌کنم تیم برنامه‌نویسی، مخصوصا در شرایطی که زمانی کمی دارند، تست رو از مراحل ابتدایی توی پروژه در نظر بگیرند.

خوشبختانه تیم دیجی‌کالا بلافاصله بعد از اعلام من، اصلاح رو شروع کردند. بعد از ایمیلی که برای دیجی‌کالا فرستادم، دیدم دوست دیگری هم مشکلی رو در توییتر اعلام کرده بود. با توجه به عمومی شدن مشکلات این سایت، امیدوار بودم در این فاصله زمانی اطلاعیه برای کاربران ارسال بشه که من تا زمان نوشتن این پست، خبری از دیجی‌کالا ندیدم. گویا روزهای گذشته هنگام ورود به سایت، این مورد به کاربران اعلام شده بود.

Standard
برنامه‌نویسی

آشنایی با انواع مجوز نرم‌افزاری و قانون کپی-رایت

این روزها نوشتن یک برنامه‌ی کاربردی، بدون استفاده از انوع کتابخانه‌ها (libraries) و کدهایی که دیگران نوشته‌اند، تقریباً غیرممکن است. شما چه برنامه‌نویسی باشید که می‌خواهد از قطعه‌کدهای دیگران استفاده کند و چه برنامه‌نویسی که در اندیشه‌ی تولید این کتابخانه‌هاست، باید با جنبه‌های قانونی استفاده از کدهای سورس یا کامپایل‌شده آشنا باشید تا در ورطه‌ی دردسرهای پیش‌بینی‌نشده و ناخواسته سقوط نکنید.
مهم‌ترین چیزی که پیش از دست زدن به کدها و تصاویر آماده‌ی گرافیکی، یا استفاده از کتابخانه‌ها باید بررسی کنید، مجوز، یا به‌اصطلاح لایسنسی است که اثر را تحت آن توزیع کرده‌اند. برای اطلاع از آن، معمولاً باید به دنبال فایلی با نام license.txt بگردید یا صفحه‌ی مربوط به مجوزها (Legal/Licensing) را در سایت اصلی بیابید.

مجوز
انواع اصلی لایسنس‌ها را چهار دسته تقسیم می‌کنیم:

یکم ـ مجوز آزاد یا permissive/copyfree

کدهایی که تحت این نوع مجوز توزیع می‌شوند، هیچ محدودیتی بر برنامه‌ی نهایی شما ایجاد نمی‌کنند. شما آزادید که هر تغییری در آن‌ها ایجاد کنید و لزومی ندارد کدهای تغییریافته یا استفاده‌شده را بازنشر دهید. حتی منعی برای استفاده‌ی تجاری از این کدها نیز وجود ندارد.
انواع اصلی این لایسنس‌ها عبارتند از Apache، BSD، MIT/X11 و Academic Free Licence.
لایسنس‌های BSD و MIT بسیار مختصر هستند و تنها به مثابه‌ی اعلامیه‌ای برای سلب مسئولیت از نویسنده به کار می‌روند و گزینه‌ی مناسبی برای کامپوننت‌ها و کدهای کوچک قلمداد می‌شوند. در حالی که Apache و AFL، متن‌های حقوقی و کاملی هستند که تکلیف مسائلی نظیر سرنوشت پتنت‌ها را نیز مشخص کرده‌اند. برنامه‌های کامل، ترجیحا با لایسنس Apache عرضه می‌شوند.
به عنوان مثال، برنامه‌های معروفی که از این نوع لایسنس‌ها استفاده می‌کنند، می‌توان به LLVM/Clang، X11، FreeBSD، OpenSSL، Apache Server، اپل وب‌کیت و کرومیوم، و قسمت‌های یوزرلند اندروید اشاره نمود.

دوم ـ مجوز تجاری / کپی‌رایت‌شده (Copyrighted/Proprietary)

همه‌ی برنامه‌های تجاری با این عنوان عرضه می‌شوند. این کدها بدون تهیه‌ی مجوز لازم از توزیع‌کننده، در کدهای شما قابل استفاده نیستند. استفاده از این کدها یا لینک کردن به آن‌ها، معمولاً در ازای پرداخت پول مجاز است. پس از دریافت مجوز، ممکن است فایل‌های کامپایل‌شده (سورس‌بسته) یا کدهای اصلی (همراه سورس) را در اختیار شما قرار دهند، اما به شما اجازه‌ی توزیع آن کدها را نخواهند داد.
از گروه سورس‌بسته می‌توان به ویندوز و مایکروسافت آفیس، و از گروه همراه با سورس می‌توان به vBulletin، Unix و کامپوننت‌های DevExpress اشاره کرد
بر خلاف مجوز‌های متن‌باز [ref]لزوما همراه داشتن سورس به معنی متن‌باز (opensource) بودن نرم‌افزار نیست. بلکه شرایط دیگری مثل شرایط بازنشر نیز لحاظ می‌شود. عملا فقط مجوزهای آزاد و کپی‌لفت تحت این عنوان قرار می‌گیرند[/ref]، استاندارد رایجی برای مجوزهای کپی‌رایت تجاری وجود ندارد و توصیه می‌شود فایل لایسنس، به‌دقت مطالعه شود.

سوم ـ مجوزهای کپی‌لفت قوی (Strong Copylefted)

کدهایی که تحت این عنوان توزیع می‌شوند، لایسنس خود را به برنامه‌ی شما تحمیل می‌نمایند. حتی اگر یک خط از آن‌ها را وارد برنامه‌ی خود کنید، ناچار خواهید بود کل برنامه‌تان را به صورت کپی‌لفت، در اختیار سایرین قرار دهید. این مجوزها به شما اجازه‌ی تجاری‌سازی یا فروش برنامه و کدتان را نمی‌دهند. سخت‌گیری مجوزهای کپی‌لفت تنها به استفاده از کدها ختم نمی‌شود. حتی لینک کردن به نسخه‌ی کامپایل‌شده‌ی آن‌ها نیز، چه به صورت استاتیک انجام شود و چه به صورت دینامیک، همه‌ی کدهایتان تحت این مجوزها قرار خواهد گرفت. بنابراین اگر قصد ندارید بدون انتشار همه‌ی کدهای خود برنامه‌تان را توزیع کنید و یا از فروش آن کسب درآمد نمایید[ref]جهت اطلاع از روش‌های درآمد زایی از پروژه‌های متن-باز به https://en.wikipedia.org/wiki/Business_models_for_open-source_software مراجعه کنید[/ref]، عطای کتابخانه‌های دارای این دسته از مجوزها را به لقایشان ببخشید.
البته کسب درآمد از طریق ارائه‌ی خدمات پشتیبانی و نصب و راه‌انداری قانونی‌ست و مدل تجاری شرکت‌های بزرگی همچون ردهت بر این اساس بنا نهاده شده است.
انواع اصلی این لایسنس‌ها GPL و AGPL هستند که هر کدام چندین نسخه دارند. در میان برنامه‌های معروفی که با این نوع لایسنس عرضه می‌شوند، می‌توان به لینوکس (کرنل) و یوزرلند اصلی آن، GNU، و همچنین MySQL، وردپرس، جوملا، لیبرآفیس(LibreOffice)، کامپایلر GCC، فریمورک Qt و… اشاره نمود.
معدودی از این برنامه‌ها و کدها، هم‌زمان با لایسنس تجاری هم عرضه شده‌اند که اگر بخواهید از برنامه‌ای که نوشته‌اید، از طریق فروش نرم‌افزار و بدون انتشار سورس کد کسب درآمد کنید، می‌بایست نسخه‌ی تجاری آن‌ها را خریداری نمایید. فریمورک Qt و بانک اطلاعاتی MySQL از این دسته برنامه‌ها هستند.

چهارم ـ مجوزهای کپی‌لفت ضعیف (Weak Copylefted)

تنها تفاوت انواع ضعیف مجوزهای کپی‌لفت با انواع قوی آن،‌ در این است که اجازه‌ی لینک دینامیک به کتابخانه‌های کامپایل‌شده با این لایسنس را می‌دهد. برای مثال، Glibc، کتابخانه‌ی پوزیکس و زبان سی[ref] POSIX / Standard C Library[/ref] در لینوکس، که عملاً دروازه‌ی هسته‌ی لینوکس برای همه‌ی برنامه‌های کاربردیست، با این مجوز توزیع شده است و اگر به خاطر همین مجوز کپی‌لفت ضعیف نبود، اساساً امکان عرضه‌ی برنامه‌های تجاری برای لینوکس وجود نداشت.
به عنوان انواع اصلی این مجوز ها، می‌توان به LGPL و MPL (موزیلا) اشاره کرد.
برنامه‌ها‌ی Firefox و VLC و کتابخانه‌ی معروف FFmpeg نیز نمونه‌ی دیگری از این گروه مجوزهاست. اگرچه برخی اجزای کتابخانه FFmpeg تحت لیسانس GPL منتشر شده‌اند. در صورت فعال شدن همان اجزا، کل کتابخانه تحت GPL قرار خواهد گرفت.
در سیستم عامل اندروید، برای آن که کوچک‌ترین نگرانی برای برنامه‌سازان تجاری باقی نماند و از سرایت لایسنس هسته‌ی اصلی لینوکس به بقیه‌ی نرم‌افزارها جلوگیری شود، کتابخانه‌ی پوزیکس/سی اختصاصی آن به نام Bionic، با لایسنس BSD عرضه شده است.

توضیح ـ مجوزهای کرییتیو کامنز (Creative Commons, CC)

نوعی مجوز آزاد و رایگان که برای آثار گرافیکی و نوشتاری رایج است و بر اساس ویژگی (Types) آن می‌توانند مجاز یا ممنوع برای استفاده‌ی تجاری باشند. اگر برنامه‌ی تجاری می‌نویسید، تنها از کارهای گرافیکی استفاده کنید که استفاده‌ی تجاری را آزاد گذاشته‌اند.
این مجوز می‌تواند ویژگی‌های دیگری نظیر عدم اجازه‌ی تغییر در کار اصلی را همراه خود داشته باشد که باید به آن‌ها نیز توجه نمایید.

بحث و نتیجه‌گیری

سخن به گزافه نگفته‌ایم اگر بگوییم تنوع لایسنس‌ها و دعواهای حقوقی شرکت‌های نرم‌افزاری، مطابق قانون کپی‌رایت مصوب ۱۹۷۶ آمریکا[ref]https://en.wikipedia.org/wiki/Copyright_Act_of_1976[/ref]، یکی از اصلی‌ترین عوامل تأثیرگذار بر دنیای کنونی نرم‌افزارها و یکی از عوامل پیچیدگی و توسعه‌ی آن‌هاست. هر کدام از این مجوزها، توسط فلسفه‌ای پشتیبانی می‌شود و همین تفاوت فلسفه‌هاست که که به دنیای برنامه‌نویسی چهره‌ای انسانی، فارغ از کدهای رایانه‌ای بخشیده است.
یکی از عوارض این تفاوت‌ها، ناسازگاری میان برخی مجوزهاست. مثلا شما نمی‌توانید در یک برنامه، هم‌زمان از کدهای با مجوز GPL و تجاری استفاده کنید، حتی اگر دو فایل مجزا باشند. حتی اگر هر دو مجوز متن‌باز باشند نیز لزوماً با هم سازگار نیستند. برای مثال، BSD چهار بندی، با GPL سازگار نیست. حتی GPL نسخه‌ی ۲ با LGPL نسخه‌ی ۳ سازگار نیست؛ با این که هر دو کپی‌لفت هستند. یعنی نمی‌توان برنامه‌ای داشت که یک قسمت از آن تحت LPG v2.1 و قسمتی دیگر تحت GPL v3 توزیع شده باشد.
یکی از دلایل ماندگاری سیستم‌عامل‌های FreeBSD و OpenBSD در مقابل لینوکس، مجوز آزاد نسخه‌های BSD است. در واقع بسیاری از پروژه‌ها نظیر LLVM/Clang (در مقابل کامپایلر GCC)، وب‌کیت (در مقابل Gecko ـ موتور رندرر فایرفاکس) یا ToyBox (در مقابل BusyBox ـ تجمیع ابزارهای خط فرمان لینوکس)، به همین دلیل به وجود آمده یا حمایت شده‌اند که امکان مقابله‌ی شرکت‌های تجاری (در دو مورد نخست اپل و مورد سوم سونی) با طبیعت تهاجمی مجوزهای کپی‌لفت را به وجود بیاورند.
توجه داشته باشید که مجوزهای LGPL/GPL با استور اپل (آیتونز) سازگار نیستند و در میان لایسنس‌های کپی‌لفت، می‌توانید از MPL استفاده کنید.
بدون شک، هر کدام از این مجوزها و هر کدام از عنوان‌هایی که ذکر آن‌ها رفت، برای خود به‌تنهایی مقاله‌ای مستقل می‌طلبند که در حوصله‌ی خوانندگان چنین مقاله‌ی مختصری نیست. توجه داشته باشید که نویسنده‌ی مقاله، نه یک حقوقدان و نه حتی یک مهندس کامپیوتر، بلکه پزشکی است که به خاطر علاقه به این مباحث مطالعاتی را در این زمینه انجام داده و آنچه نگاشته، تنها می‌تواند انگیزه‌ای برای مطالعه‌ی بیشتر فراهم کند تا آن که به عنوان یک متن حقوقی مورد استناد قرار گیرد.

شاید بهتر باشد برای درک بهتر تأثیر این مجوزها در کار یک برنامه‌نویس، به چند پرسش رایج در این زمینه پاسخ گوییم.

آیا می‌توانم با نرم‌افزارهای کپی‌لفت، محتوای تجاری تولید کنم؟

جامعه‌ی متن‌باز، مراقب این موضوع بوده که لایسنس برنامه‌هایشان محتوای شما را تحت تأثیر قرار ندهند و در صورت لزوم این موضوع را به صراحت نیز قید کرده‌اند. بنابراین می‌توانید با برنامه‌ای نظیر LibreOffice که تحت GPL توزیع شده، محتوای تجاری تولید کنید، یا برنامه‌ی تجاری خود را توسط GCC کامپایل نمایید. اطلاعات سایت‌هایی که تحت نرم‌افزارهای کپی‌لفت هستند تحت تأثیر این لایسنس قرار نخواهند داشت (چرایی آن از نظر حقوقی خود یک مقاله است). در واقع، سایت‌های خبررسانی زیادی نظیر CNN از این سرویس‌ها استفاده می‌کنند.

از نرم‌افزاری با مجوز GPL (مثل وردپرس) برای راه‌اندازی سایت خود استفاده کرده‌ام. تکلیف چیست؟

این گونه برنامه‌ها همراه سورس هست و آزادید آن‌ها را تغییر بدهید. خیالتان راحت باشد که محتوای سایت شما تحت این نوع مجوز قرار نخواهد گرفت و تنها کدهاست که شامل لایسنس می‌شوند. حتی اگر چیزی به سورس آن اضافه کنید یا تغییر دهید، ولی قصد توزیع آن را نداشته باشید، به این کار مجبور نمی‌شوید. ولی توجه داشته باشید که پلاگین‌ها و تم‌های وردپرسی که شما تهیه می‌کنید، یا تغییراتی که به‌اصطلاح هاردکد می‌کنید، تحت مجوز GPL قرار می‌گیرند و تنها در صورتی که بخواهید آن‌ها را به فرد دیگری بدهید، حتی یک نفر دیگر، مجبورید سورسشان را به رایگان برای همه منتشر کنید. در واقع این موضوع، یکی از بزرگ‌ترین معضلات حقوقیست که تهیه‌کنندگان پلاگین‌ها و تم‌های تجاری وردپرس با آن درگیرند. [ref]https://wordpress.org/news/2009/07/themes-are-gpl-too/[/ref]
گرچه مجوز GPL شما را مجبور نمی‌کند که تغییراتی که برای استفاده‌ی شخصی داده‌اید منتشر کنید، اما این مجوز خواهرخوانده‌ای به نام AGPL دارد که در صورتی که کد تغییر یافته را روی سرور اجرا کنید، باید منتشرش نمایید.

در ایران که قانون کپی‌رایت وجود ندارد، باز هم ملزم به رعایت و توجه به این موارد هستیم؟

صرف نظر از مسائل اخلاقی که ما را ناگزیر از رعایت این موارد می‌کنند، باید توجه داشته باشیم که اگر بخواهیم برنامه‌ی خود را در اپ‌استورهایی همچون آیتونز یا گوگل پلی منتشر کنیم، رعایت این موارد ضروریست چرا که در صورت عدم رعایت، برنامه‌های شما را از فروشگاه حذف می‌شود. همچنین، گرچه جامعه‌ی متن‌باز اهل شکایت و دادگاه نیستند، ولی از فردای روزی که ایران به سازمان تجارت جهانی بپیوندد، مسائل حقوقی ناشی از آن، همچون شمشیر داموکلس، بر سر کدهای شما خواهند بود.
متاسفانه اپ‌استورهای معروف ایرانی تعهدی از توسعه‌دهنده درباره‌ی عدم استقاده از کدهای بدون مجوز اخذ نمی‌کنند و رویه‌ای برای شکایت از ناقضین ندارند و علاوه بر آن، خود نیز رأساً اقدام به بازتوزیع برنامه‌های خارجی، بدون اخذ رضایت از صاحب اثر می‌نمایند و اگر این رویه‌ی خود را مورد بازبینی قرار ندهند، ممکن است در آینده‌ای نزدیک مجبور به پرداخت خسارت‌های هنگفتی شوند.
باید توجه داشت که توزیع رایگان یک برنامه، به این معنا نیست که دریافت‌کننده حق توزیع مجدد آن را، حتی به صورت رایگان، داشته باشد. نمونه‌ی بارز آن یونیکس است که به همراه سورس توزیع شود و برای دانشگاهها رایگان است، اما این قبیل استفاده از آن بدون پرداخت هزینه‌های مربوطه ممکن نیست. بنابراین حتی بازتوزیع نرم‌افزارهای رایگان خارجی در استورهای ایرانی نیز احتمالاً بدون عواقب نیست.

آیا می‌توانم کدی که تحت مجوز MIT یا BSD منتشر شده را در برنامه‌ی تحت GPL استفاده کنم؟

احتمال زیادی وجود دارد که هر قسمت از یک پروژه‌ی بزرگ، تحت لایسنس جداگانه‌ای توزیع شده باشد. مثلاً در اندروید، هسته‌ی لینوکس تحت GPL، بیونیک (کتابخانه‌ی پوزیکس/سی) تحت BSD و بقیه‌ی قسمت‌ها عمدتاً بر اساس آپاچی منتشر شده‌اند. در سیستم عامل MacOSX، هسته‌ی Darwin و برخی اجزا تحت BSD و بقیه به صورت تجاری و سورس بسته هستند.
بنا بر یک قاعده‌ی کلی، شما می‌توانید مجوز یک کد را از یک لایسنس بازتر نظیر MIT، به لایسنس محدودتر نظیر GPL تغییر دهید، حتی اگر صاحب آن نباشید. ولی روند معکوس آن تنها برای صاحب اصلی اثر امکان‌پذیر است[ref]برای نمونه برنامه‌ی VLC ابتدا تحت GPL قرار داشت اما در نهایت به دلیل ناسازگاری آن با استور آیتونز توسط شرکت سازنده به لایسنس بازتر MPL/LGPL منتقل شد. یا نرم‌افزار ToyBox که تحت لایسنس LPGL بود اما برای اینکه بتواند روی دستگاه‌های موبایل قرار گیرد تحت BSD قرار گرفت و اندرویید مارشملو از BusyBox به آن سوییچ کرد[/ref].
به عنوان مثال، با این که مجوز آپاچی همانند MIT آزاد است، ولی از نوع محدودتر قلمداد می‌شود،‌ پس نمی‌توان کدهای تحت آپاچی را با مجوز MIT بازنشر کرد.
به طور مختصر ترتیب مجوزهای متن‌باز، از بازترین به محدودترین، به شکل زیر است:
Public Domain -> MIT/X11 -> BSD -> Apache -> LGPL/MPL -> GPL -> AGPL

آیا برنامه‌ی تحت ویندوز، شامل لیسانس تجاری مایکروسافت خواهد شد؟

مایکروسافت به شما این اجازه را می‌دهد که در چارچوب سیستم عامل ویندوز، به dllهای سیستم‌عامل لینک دهید و از آن‌ها استفاده نمایید، اما این بدان معنا نیست که شما اجازه داشته باشید dllها را به برنامه‌ی خود اضافه نمایید. بنابراین استفاده از dllهای خود ویندوز، در سیستم‌عامل‌ها و شبیه‌سازهای غیرمایکروسافتی (نظیر ReactOS یا Wine)، غیرقانونی است و این‌ها به طور مستقل، پیاده‌سازی کدهایی را انجام داده‌اند که با اینترفیس برنامه‌نویسی ویندوز (Win32 API) سازگار هستند.

نویسنده مهمان: امیرعباس موسویان. پزشکی که از ۱۲ سالگی برنامه‌نویسی کرده. برنامه‌نویس آیفون و ویندوز. (اکانت توییتر)
نگارنده مشتاق شنیدن پرسش‌ها و نقطه‌نظرات احتمالی خوانندگان است تا ضمن پاسخ‌گویی در تکمیل این پست و نگارش پست احتمالی آینده مد نظر قرارگیرند.

Standard