این روزها نوشتن یک برنامهی کاربردی، بدون استفاده از انوع کتابخانهها (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) سازگار هستند.
نویسنده مهمان: امیرعباس موسویان. پزشکی که از ۱۲ سالگی برنامهنویسی کرده. برنامهنویس آیفون و ویندوز. (اکانت توییتر)
نگارنده مشتاق شنیدن پرسشها و نقطهنظرات احتمالی خوانندگان است تا ضمن پاسخگویی در تکمیل این پست و نگارش پست احتمالی آینده مد نظر قرارگیرند.
تشکر فراوان بابت اطلاع رسانی صحیح و پایه
سلام.من میخام کد نویسی توی مک را شروع کنم.برای نوشتن برنامه های تحت وب و تحت نکینتاش بهتره باچی شروع کنم توی مک.منطورم زبان و نرم افزارشه
من کاربر مک نیستم و نمیتونم راهنمایی مناسبی بکنم. جستجو کنید احتمالا به جوابهای مناسب برسید.
سلام و خسته نباشید
بسیار عالی بود و از خوندن همه ی مطالب لذت بردم همچنین درمورد همین موضوع
درواقع بحث به زبان ساده و مشخص درباره ی مجورز های مختلف به زبان فارسی که قابل درک و تشخصی باشه خیلی کم هست و متاسفانه بعضی مواقع متن اصلی لایسنس به دلیل وجود مترادف های مختلف در زمان ترجمه ممکنه اشتباه تصور بشه ولی این مطلب خوب بود بخصوص که چند مثال هم داشت
اگر امکانش هم هست درمورد لایسنس کیوت هم یک مقدار توضیحات و یا مطلب بنویسید بخصوص که لایسنس دوگانه داره و به تازگی گویا لایسنس رو مقداری تغییر داده
سپاس
سلام ممنون از لطفتون
الان دیدم بسته به ماژولهایی که استفاده میکنید کیوت سه تا لایسنس داره. تکلیف نسخه ی تحاری که معلوم هست. در نسخه ی آزاد، برخی از ماژولهاش تحت LGPL 3 هست و میتونید برنامه تون رو به صورت داینامیک بهش لینک کنید بدون اینکه نیازی به توزیع سورس برنامه خودتون باشه. ولی اگر از ماژولهایی که تحت GPL هستند استفاده کنید کل برنامه تون رو باید همراه سورس توزیع کنید. توی لینک زیر نوشته کدوم ماژولها صرفا تحت GPL هستن. ماژولهای صرفا GPL شامل ماژول های Charts، Data Visualization، Quick 2D Renderer، Virtual Keyboard، OTA updates هست
https://www.qt.io/licensing-comparison/
سلام
با تشکر، من کامل متوجه نشدم یعنی اگر مثلا ما از کدی در برنامه خود استفاده کنیم که تحت GPL هست باید کل کد برنامه خودمان را منتشر کنیم؟
منظورم باز نشر برنامه اصلی نیست. یعنی مثلا قطعه کدی از برنامه ای را استفاده کرده ایم، به عنوان مثال کدی بوده است که تاریخ شمسی را محاسبه میکند و من در برنامه ام از این کد استفاده کرده ام و نویسنده اصلی گفته GPLv3 هست. حالا نمیتوان در برنامه ام از آن بدون انتشار متن کامل برنامه استفاده کنم؟
دقیقا همان چیزی است که بیان شده. حتی اگر به یک لایبرری تحت لیسانس GPL لینک داینامیک کنید (استفاده از کدها در برنامهی خودتان که به لینک استاتیک معروف است که جای خود دارد!) باید کل سورس نوشته شدهی خودتان علاوه بر تغییراتی که دادید منتشر کنید. به عبارتی باید این امکان را برای کاربر فراهم کنید که بتواند کل پکیج برنامه ی شما رو بتواند به دلخواه خود عوض کند که این مستلزم انتشار کل کد هست. علاوه بر این کد شما نیز خودبهخود GPL خواهد شد یعنی کسی بخواهد از کد شما استفاده کند باید کل کدهای خود را منتشر کند!
و اما شما، سه راه پیش رو دارید. یا با نویسندهی لایبرری تماس بگیرید و بخواهید لایسنس کد خود را به یک مجوز بازتر نظیر LGPL/MPL یا BSD تغییر دهد، یا اینکه سعی در پیدا کردن یک لایبرری جایگزین کنید. راه سوم که توصیه نمیکنم ین است که یک wrapper تحت لایسنس MIT برای آن بنویسید (و منتشر کنید) و کدهای خصوصی را به آن لینک کنید. ولی ارتباط بین این لایبرری واسط با کد GPL و کد خصوصی با واسط باید داینامیک باشد.
برای راه سوم اگر در امریکا/اروپا کار میکنید بهتر است با یک وکیل مشورت کنید.