جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'نرمافزار'.
4 نتیجه پیدا شد
-
خلاصهای از ملزومات و نقشهٔ راه ساخت و ساز محصول نرمافزاری
کامبیز اسدزاده نوشته وبلاگ را ارسال کرد در علم و دانش
سلام و درود، این اواخر راجع به مشورت و راهنماییها خیلی ساده به قضیه نگاه میشه، همه فکر کردن کشکه و فقط با دونستن JS یا QML میشه محصول ساخت. البته این مثال JS و QML یک مثال هست و این مسئله در همهٔ ابزارها و حول محور حوزهٔ کامپیوتر و نرمافزار به چشم میخوره، هرچند روی داستان ساده هست اما حتی پشت این کارهای ساده کلی زمان باید صرف بشه. همین گرفتن یک دادهٔ ساده از سمت سرور و تجزیه کردنش سمت JS نیاز به یک دانش خوب در مورد معماری Apiداره، نیاز به آگاهی از استانداردهای Http داره، نیاز به تخصص کافی در ریز به ریز مسائل داره، نیاز به آگاهی لازم در مورد شبکه و نحوهٔ مدیریتش داره، نیاز به درک خوب راجع به کلاسهای شبکه و نحوهٔ مدیریت بستهها داره و صدها جور مسئلهٔ دیگه. یا راهنمایی نکنیم یا میکنیم همه چیز رو ساده نشون ندیم! به خصوص برای کسایی که سالها یه چیز دیگه خوندن و الآن قراره وارد این حوزه بشن. قشنگ واقعیت رو باید به نمایش گذاشت، و اگرنه به اشتراک گذاری چهارتا UI خفن که بگین با QML هم میشه کاری نداره، سه سوته میشه اینها رو طراحی کرد. اگر کسی اطلاعات کافی و پایهٔ تخصصی نداشته باشه و همینطور متکی به یک ابزار یا زبان پیش بره چه اتفاق میافته؟ از نظر من قطعاً بهتون از نظر تجربی آسیب میزنه، ساخت یک محصول واقعاً به این سادگیها نیست که تو گروههای تلگرامی داریم راجع بهش صحبت میکنیم! قضیه خیلی پیچیدهتر از اینهاست. فراموش نکن در این حوزه اگه یک کار ساده رو سریع انجام میدیم یا به نتیجه میرسونیم دلیلش به خاطر سالها زمان و تلاشه، امکان نداره کسی حتی با ۲..۳ سال تجربه یک کار رو سریع بتونه صفر تا صد انجام بده و مشکلی نداشته باشه یا نتیجهٔ اون در سطح یک استاندارد معتبر باشه. ساخت محصول اصول داره که اولین مرحلش شفافسازی و نقشهٔ توسعه و ایدهپردازی درسته، نباید مثل بعضی از مشتریها باشه که پشت تلفن زنگ میزنن میگن یه سایت میخوایم یا یه اپلیکیشن چند میگیری و بعدش شروع کنن به چک و چونه زدن و شما هم کیف کنی بگی که آره دیگه مشتری دارم! شما تا زمانی که جزء به جزء محصول رو آگاه نباشید، یعنی تا زمانی که دقیق متوجه نشید نیاز چی هست و روش حلش رو متوجه نباشید منطقی نیست که واردش بشید. چون همین مرحلهٔ نیازسنجی به قدری مهمه که فرآیند مسیر و نقشهٔ توسعهٔ یک محصول رو نشونتون میده و اگه درست تشخیص ندین و ابزارها و راهکارها رو درست انتخاب نکنید بی برو برگرد با مشکل مواجه میشید. مشکلاتش میتونه به این صورت باشه: - سردرگمی - عدم توانایی کالبدشکافی مسئله - عدم توانایی حل مسئله - عدم توانایی انتخاب یک روش یا ابزار صحیح و مناسب - عدم تعامل شما با مشتری - عدم رضایت شما از حقالزحمه - عدم رضایت مشتری از نتیجهٔ کار - عدم توانایی در پاسخدهی به اعضا و شرکای کلیدی دیگه در محصولات تجاری و بزرگ! - و هزاران مسئلهٔ دیگه که همشون نتیجهٔ تشخیص نا درسته. - در کنارش مهمترین خاصیتی که پیدا میکنه این خواهد بود در اوج نادانی احساس خواهد کرد که همه چیز دان هست! به قولی همه چیز گیگ! از نظر من حداقل مواردی که (به طور خیلی خیلی خلاصه و محدود) نیاز هست تا یک متخصص بتونه پاسخگوی تصمیمگیری نقشهٔ توسعهٔ یک محصول برای مشتری در ابعاد مختلف و سطوح متفاوت از حوزههای موجود در قالب اصولی باشه به صورت زیر هستند: ۱- آشنا مبانی کامپیوتر که امر طبیعیه (شامل درک و فهم مسائل و نحوهٔ حلشون متناسب با پلتفرم اجرایی محصول) ۲- آشنا به ساختار نوع محصول استاندارد در یک حوزه مثل: وب، آیاواس، اندروید یا دسکتاپهای مختلف مثل لینوکس، مک و ویندوز، اینترنت اشیاء و دیگر موارد. ۳- آشنا به فلسفهٔ بکاند و فرانتاند یا ترکیبی از این دو به همراه ابزارهای مناسب. ۴- آشنا به اصول طراحی UI/UX به عنوان یک نیاز و یک فاکتور مهم در ساخت محصولی که وابسته به عملکرد کاربر داره و در حوزهٔ فرانتاند مهم و کاربردی هست. ۵- آشنا به اصول SOLID و امثالش مهم هستند. ۶- آشنا اصول برنامهریزی ساخت بانک اطلاعاتی، اینکه از چه بانک اطلاعاتیای استفاده کنی و چرا؟ ۷- آشنا به ارتباطات دادهای، جداول و ارتباط بین فیلدها، جدوال و روشهای درست تبادل اطلاعات مابینی دادهها. ۸- آشنا و تسلط کافی به یک محیط توسعه و ادغام ابزارها و محیط طراحی برای هدف. ۹- آشنا به معماری ساختار و رابطهای برنامهنویسی (Api) ۱۰- آشنا به استانداردهای Http، درک و مدیریت درخواست، پاسخها و ... ۱۱- آشنا به الگوهای طراحی برنامهنویسی (DP) ۱۲- آشنا به روشهای نگهداری و آزمایش نرمافزار و کدها به خصوص درک مبحث Fault tolerance. ۱۳- آشنا به روشهای اطمینانسازی و ایمنسازی پردازشهای داخلی نرمافزار برای جلوگیری یا دشوار سازی نفوز و خرابکاری ۱۴- آشنا به روشها و معماریهای احراز هویت و نحوهٔ ادغامش با نرمافزار مثل:JWT, OAuth, AWS و غیره... ۱۵- آشنا به نوع پارادایمهای زبان برنامهنویسی، در قالبهای (دستوری) Imperative و (اعلانی) Declarative مثل OOP، functional و دیگر موارد. ۱۶- آشنا به سبک معماری نرمافزاری (Microservice یا مثلاً Monolith) مزایا و معایبشون. ۱۷- آشنا به سبک معماری طراحی مانند MVC در طراحی بدنهٔ محصول. ۱۸- آشنا به سبک و الگوهای طراحی ساختاری در بکاند مانند Builder، Abstract، Factory و غیره. ۱۹- آشنا به ساختار یک زبان (در صورتی که میخواین جوابگوی مسائلِ پیش آمده باشید) کالبدشکافی زیرپوستی و عمیق یک زبان مهمه. ۲۰- آشنا و درک کامپایلرها و مفسرها، تفاوتها و شیوههای عملکردیشون نسبت به کدهای بهینه شده و عادی. ۲۱- آشنا و درک مدلهای مختلفی از سیستمهای توزیع شده مثل IaaS، PaaS، SaaS یا FaaS. ۲۲- آشنا به ابزارهای ساخت و فرآیند کاری اونها مثل CMake، NMake، QMake و غیره. ۲۳- آشنا به روشهای مدیریت وابستگیهای نرمافزار و ابزارهای لازم برای بستهبندی بهتر خروجی. ۲۴- آشنا به روشهای کدنویسی قابل آزمایش (Unit Test) و استفاده از ابزارهایی مثل CTest, GTest, Catch2 و غیره. ۲۵- آشنا به توسعهٔ آزمون محور (Test Driven- Development) ۲۶- آشنا به گامها و شرایط نسخهنگاری و مراحل توسعهٔ نرمافزار (SDP) ۲۷- آشنا به روشهای امنیت در کد و توسعه به شیوههای بررسی از طریق Fuzz-Test، Sanitizer، آنالیزرهای پویا و ایستا و غیره... ۲۸-آشنا به قوائد طراحی بر پایهٔ خدمات مبتدی بر معماری ابری برای خدمات پیامی، وبسرویسها، پردازش و غیره. ۲۹- در سطوح وب آشنا به مکانیزم شاخص بندی، فاکتورهای SEO و شیوههای درست بهبود صفحات وب. ۳۰- آشنا به روشهای به کار گیری و پیادهسازی ثبت کنندهٔ وقایع در دل محصول و روشهای بازخورد برای توسعهٔ بهتر به همراه مانیتورینگ، نظارت و تریسینگ. ۳۱- در شرایط لزوم آشنا به نحوهٔ به کار گیری و دلیل استفاده از فناوریهایی مثل Redis، Memcached و غیره. ۳۲- آشنا و درک صحیح از مفاهیم همزمانی (Concurrency) و روشهای به کار گیری آن نسبت به زبان برنامهنویسی و شرایط مناسب استفاده. ۳۳- آشنا به سبک و قوائد و ساختار زبانهای برنامهنویسی و فرآیند ساخت و ترجمه. ۳۴- و تا صدها گزینهٔ دیگه میتونم لیست کنم اینجا که اگه انتخابتون زبانهای نزدیک به سیستم باشه این داستان در ادامهٔ این توضیحات سر به فلک میکشه نمونش کامپایلرها خودشون شونصد جور مباحث دارند، پلتفرمها ومعماریهای پردازندهای هم در این زبانها مهمن و شما حتی تا عمق سیستمعامل و رابطهای اونها و نحوهٔ رفتارشون باید اطلاعات کافی داشته باشید که هر کدوم به نوبهٔ خودشون هزاران صفحه میشه راجع بهشون کتاب معرفی کرد. این لیست چیزی بود که به زبان بسیار بسیار ساده شده و خیلی خلاصه به ذهنم رسید تا بدانید همچین هم الکی نیست ای عزیزانی که فتواهای صد من یه غاز میدین و این مسائل رو حل شده میدونید! در ادامه اصل ماجرا خیلی فراتر از اینها هم هست که بخوای حساب کتاب کنی میبینی باید هفت خان رستم رو فتح کنی تا در تمامی سطوح پاسخگو باشی، این امر شدنی هست اما زمانی که شما محدود به یک موضوع باشید قطعاً درک همهٔ مسائل محدود و ناتوان در اجرای آن خواهید شد. * وقتی میگم آشنا قطعاً در حد حروف الفبا کافی نیست، باید در حد نیاز تسلط و درک کافی ازشون وجود داشته باشه. * همهٔ اینها رو باید در کمترین زمان ممکن نسبت به یک مشتری، محصول و نیاز تشخیص بدین و انتخاب کنید، به این کار میگن ارزیابی محصول بر اساس دانستههای فنی که تماماً متکی بر دانش و تجربهٔ شماست. (کارشناسی پروژه دقیقاً همین موضوع است). * برای بهتر شدن و حرفهای تر شدن هم باید فراتر از اینها پیش برید و در قالب «مثلث دانش» بهبودش بدهید. * محصولات معتبر جهانی حاصلِ چنین نقشههای پیشبردی هستند و اصول تخصصی و مهندسی رو رعایت میکنن تا به یک درجهٔ کیفی موفق و زبان زد میرسند. شاید این مسائل از نظر یک برنامهنویس ساده و نه چندان با تجربه مهم نباشه، اما در سطح کیفی یک محصول نرمافزاری همهٔ این مسائل مهم تلقی میشوند. برای همین میگم گولِ توصیههای ساده و ظاهر چهارتا برنامه یا کیوت، داتنت و امثال این ابزارها رو نخورید، پشت همهٔ نیازهای یک محصول به فاکتورهای بسیاری باید توجه کنید. فردا بخواهید بدون آگاهی در این مسائل وارد پروژههایی بشید که به ظاهر ساده هستند یا باید دست به گریبان دیگران باشید و توی گروهها مدام سوأل پرسی کنید و یا باید بیخیال آن شوید؛ چون به هیچ یک از این فاکتورهای مورد نیاز توسعه توجه نکردین! پس این اصول رو به عنوان سر نخ مطالعه کنید تا بخش بزرگی از سرگردانیهای شما حل شود. این مواردی که این جا اشاره کردم، همونطور که گفتم بخش بسیار کوچکی از دنیای نیازمندیهای ساخت و ساز و طراحی یک محصول واقعی در پیرامون نرمافزار و کامپیوتر هست، اما یک دلگرمی بدم به کسایی که با خودشون فکر میکنند چنین مسیر یا نقشهای از راه که قراره پیش بگیرند سخته و همهٔ ماجرا این نیست (جزئیات رو در کتابها، موقعیت و فرصتهای شغلی، شکستها، موفقیتها و آزمون و خطاها یاد خواهند گرفت) و نتیجهٔ اون میتونه مطابق همین حکایت زیر باشه:- 2 دیدگاه
-
- پیشنهاد
- برنامهنویسی
-
(و 9 مورد دیگر)
برچسب زده شده با :
-
نگارش 12.0
17 دریافت
نرمافزار Apple Xcode از قویترین ابزارها برای برنامهنویسیهای حرفهای در مکینتاش میباشد که نسخهٔ نهایی آن منتشر شده است. برنامهنویسی محصولات اپل علاقه مندان بسیاری زیادی دارد که تمامی کاربران میتوانند به وسیلهٔ این نرمافزار به سادهترین روش و با کمترین خطا، حتی راحتتر از برنامهنویسی مشابه ویندوزی، برنامهنویسی سیستمهای آیاواس و مخصوصاً مک را انجام دهند.رایگان
-
قانون کپی رایت در ایران و ضمانت اجرای نقض حقوق آن
کامبیز اسدزاده یک مقاله را ارسال کرد در مجوزهای نرمافزاری
قانون حمایت از حقوق پدیدآورندگان نرمافزارهای رایانهای قانون دیگر قانون حمایت از حقوق پدیدآورندگان نرمافزارهای رایانهای مصوب ۱۳۷۹ است. همانطور که از نام این قانون مشخص است، در این قانون حقوق مادی و معنوی پدیدآورندگان نرمافزارهای رایانهای شرح داده میشود. مطابق مادهی ۱ این قانون، «حق نشر، عرضه، اجرا و حق بهرهبرداری مادی و معنوی از نرمافزارهای رایانهای متعلق به پدیدآورندهی آن است. نحوهی تدوین و ارائهی دادهها در محیط قابل پردازش رایانهای نیز مشمول احکام نرمافزار خواهد بود.» مطابق مطابق مادهی ۳ این قانون، نام، عنوان و نشان ویژهای که معرف نرمافزار است از حمایت این قانون برخوردار است و هیچکس نمیتواند آنها را برای نرمافزار دیگری از همان نوع یا مانند آن به نحوی که القای شبهه نماید، استفاده کند. در مادهی ۱۳ قانون بهطور کلی ضمانت اجرای نقض حقوق مورد حمایت این قانون، علاوه بر جبران خسارت متضرر، حبس از نود و یک روز تا شش ماه و جزای نقدی از ده میلیون تا پنجاه میلیون ریال بیان شده است. همچنین مطابق مادهی ۱۵ این قانون، جرایم مربوط به نقض حقوق مورد حمایت این قانون، از جرایم قابل گذشت است. ماده ۱ - حق نشر، عرضه، اجرا و حق بهره برداری مادی و معنوی نرم افزار رایانهای متعلق به پدید آورنده آن است. نحوه تدوین و ارائه دادهها درمحیط قابل پردازشرایانهای نیز مشمول احکام نرمافزار خواهد بود. مدت حقوق مادی سی (۳۰) سال از تاریخ پدید آوردن نرمافزار و مدت حقوقمعنوی نامحدود است. ماده ۲ - در صورت وجود شرایط مقرر در قانون ثبت علایم و اختراعات، نرمافزار به عنوان اختراع شناخته میشود، آئیننامه مربوط به این ماده بهتصویب هیأت وزیرا نخواهد رسید. ماده ۳ - نام، عنوان و نشانه ویژهای که معرف نرم افزار است از حمایت این قانونبرخوردار است و هیچ کس نمیتواند آنها را برای نرم افزار دیگری از همان نوع یامانند آن به ترتیبی که القای شبهه کند بکار برد در غیر این صورت به مجازات مقرر در ماده (۱۳) این قانون محکوم خواهد شد. ماده ۴ - حقوق ناشی از آن بخش از نرمافزاری که به واسطه نرمافزارهای دیگر پدیدمیآید متعلق به دارنده حقوق نرمافزارهای واسط نیست. ماده ۵ - پدید آوردن نرمافزارهای مکمل و سازگار با دیگر نرمافزارها با رعایتحقوق مادی نرمافزارهای اولیه مجاز است. ماده ۶ - پدید آوردن نرمافزارها ممکن است ناشی از استخدام و یا قرارداد باشد دراین صورت: الف - باید نام پدید آورنده توسط متقاضی ثبت به مراجع یاد شده در این قانون بهمنظور صدور گواهی ثبت، اعلام شود. ب - اگر هدف از استخدام یا انعقاد قرارداد، پدید آوردن نرمافزار مورد نظر بوده ویا پدید آوردن آن جزء موضوع قرارداد باشد، حقوق مادی مربوطو حق تغییر و توسعه نرمافزار متعلق به استخدام کننده یا کارفرما است، مگر اینکه در قرارداد به صورتدیگری پیش بینی شده باشد. ماده ۷ - تهیه نسخههای پشتیبان و همچنین تکثیر نرمافزاری که به طریق مجاز برایاستفاده شخصی تهیه شده است چنانچه به طور همزمان مورداستفاده قرار نگیرد، بلامانعاست. ماده ۸ - ثبت نرمافزارهای موضوع مواد (۱) و (۲) این قانون پس از صدور تأییدیه فنی توسط شورای عالی انفورماتیک حسب مورد توسط وزارتفرهنگ و ارشاد اسلامی و یامرجع ثبت شرکتها انجام میپذیرد. ماده ۹ - دعوای نقض حقوق مورد حمایت این قانون ، در صورتی در مراجع قضایی مسموعاست که پیش از اقامه دعوی ، تأییدیه فنی یاد شده درماده (۸) این قانون صادر شده باشد. در مورد حق اختراع ، علاوه بر تأییدیه مزبور ، تقاضای ثبت نیز باید به مرجعذی ربط تسلیم شده باشد. ماده ۱۰ - برای صدور تأییدیه فنی موضوع ماده (۸) در مورد نرم افزارهایی که پدیدآورنده آن مدعی اختراع بودن آن است، کمیتهای به نام "کمیتهحق اختراع" زیر نظرشورای عالی انفورماتیک تشکیل میشود. اعضای این کمیته مرکب از سه کارشناس ارشدنرمافزار به عنوان نمایندگان شورای عالیانفورماتیک، نماینده سازمان ثبت اسناد واملاک کشور و یک کارشناس حقوقی به انتخاب شورای عالی انفورماتیک خواهد بود. ماده ۱۱ - شورا مکلف است از صدور تأییدیه فنی برای نرمافزارهایی که به تشخیصوزارت فرهنگ و ارشاد اسلامی خلاف اخلاق اسلامی وعفت عمومی و سلامت شخصیت کودکان ونوجوانان باشند خودداری کند. وزارت فرهنگ و ارشاد اسلامی باید ظرف دو هفته راجع به استعلام کتبیشورای عالی انفورماتیک اعلام نظر کند. ماده ۱۲ - به منظور حمایت عملی از حقوق یاد شده در این قانون، نظم بخشی وساماندهی فعالیتهای تجاری رایانهای مجاز، نظام صنفی رایانهایتوسط اعضای صنف یادشده تحت نظارت شورا به وجود خواهد آمد. مجازاتهای مربوط به تخلفات صنفی مربوط،برابر مجازاتهای جرایم یاد شده در لایحه قانونی امور صنفی - مصوب 1359.4.13 واصلاحیههای آن - خواهد بود. ماده ۱۳ - هرکس حقوق مورد حمایت این قانون را نقض نماید علاوه بر جبران خسارت بهحبس از نود و یک روز تا شش ماه و جزای نقدی از ده میلیون (۱۰،۰۰۰،۰۰۰) تا پنجاه میلیون (۵۰،۰۰۰،۰۰۰) ریال محکوم میگردد. تبصره - خسارات شاکی خصوصی از اموال شخص مرتکب جرم جبران میشود. ماده ۱۴ - شاکی خصوصی میتواند تقاضا کند مفاد حکم دادگاه در یکی از روزنامهها با انتخاب و هزینه او آگهی شود. ماده ۱۵ - رسیدگی جرم مذکور در ماده (۱۳) با شکایت شاکی خصوصی آغاز و باگذشت او موقوف میشود. ماده ۱۶ - حقوق مذکور در ماده (۱) در صورتی مورد حمایت این قانون خواهد بود که موضوع برای نخستین بار در ایران تولید و توزیع شده باشد. ماده ۱۷ - آییننامه اجرایی این قانون شامل مواردی از قبیل چگونگی صدور گواهی ثبت و تأییدیه فنی و هزینههای مربوط همچنین نحوه تشکیل نظام صنفی رایانهای، به پیشنهاد سازمان مدیریت و برنامهریزی کشور و با هماهنگی وزارتخانههای فرهنگ وارشاد اسلامی و دادگستری به تصویب هیأت وزیران خواهد رسید.قانون فوق مشتمل بر هفده ماده و یک تبصره در جلسه علنی روز یکشنبه مورخ چهارم دیماه یک هزار و سیصد و هفتاد و نه مجلس شورای اسلامیتصویب و در تاریخ ۱۳۷۹/۱۰/۱۰ به تأیید شورای نگهبان رسیده است. تاریخ تصویب : ۱۳۷۹/۱۰/۰۴ مرجع تصویب : مصوبات مجلس شورا ماده ۱۷ بند ۲ منابع و اسناد رسمی مرکز پژوهشهای مجلس شورای اسلامی ویکیپدیا -
در دنیای مدرن برنامهنویسی امروز همانند دیگر کسبوکارها در حوزههای مختلف، برنامهنویسی و توسعهی نرمافزار دارای قوانین و چهارچوبهای تقریباً مشخصی است که توسعهدهندگان حقوقی و حقیقی باید در بارهی آنها بدانند تا در میدان دردسرهای پیشبینینشده و ناخواسته سقوط نکنند. در این مقاله به انواع مجوزها و همچنین قوانین حاکم بر آنها اشاره میشود که شما را دعوت به مطالعهی آن میکنیم. در بسیاری از مواقع، نوشتن یک برنامهی کاربردی، بدون استفاده از انوع کتابخانههای از قبل نوشته شده (کدهایی که دیگران نوشتهاند)، تقریباً غیرممکن است. مهمترین چیزی که پیش از دست زدن به کدها و تصاویر آمادهی گرافیکی، یا استفاده از کتابخانهها باید بررسی کنید، مجوز، یا به اصطلاح (لایسنسی) است که اثر را تحت آن توزیع کردهاند. برای اطلاع از آن، معمولاً باید به دنبال فایلی با نام license.txt بگردید یا صفحهی مربوط به مجوزها (Legal/Licensing) را در سایت اصلی بیابید. برخی از تفکرات غلط که باید به آنها توجه شود قرار است شما کتابخانهای را بنویسید و یا محصولی را توسعه دهید، در توسعهی آن شما نیاز به استفاده از کتابخانهها و یا تکهکدهایی هستید که دیگران آنها را توسعه دادهاند، با توجه به اینکه محصول شما قرار نیست منبعباز باشد (تجاری) بنابراین نباید اینگونه فکر کنید که چون محصول من تجاری است و قرار نیست کسی کد آن را ببیند، پس نیازی به حفظ حقوق توسعهدهنده و یا عنوان کردن کتابخانهها و توسعهدهندگان دیگر باشم! این یک تفکر غلظ است (چرا که محصول شما بدون وجود کدهای نوع سوم (Third-Party) قادر به انجام کارهایی که از آن انتظار دارید را نخواهد داشت (مگر اینکه محصول شما به صورت کامل توسط خود شما توسعه داده شده باشد) که این کار در بسیاری از مواقع تقریباً غیرممکن است. برای مثال اگر نیاز است شما در رابطه با مباحث امنیتی از کتابخانهای مانند OpenSSL استفاده کنید، دیگر نوشتن یک کتابخانهی عظیمی مانند آن حماقتی بیش نیست چرا که چنین کتابخانههایی توسط شرکتها، سازمانها و توسعهدهندگان بسیاری از قبل توسعه و مورد استفاده قرار گرفتهاند و از لحاظ پایداری و اطمینان استفاده مورد تایید قرار گرفتهاند. دقت کنید که استفاده از کتابخانهها و حتی هدف از نوشتن یک کتابخانه باید تحت شرایط حاکم بر مجوزها را در نظر داشته باشد. برای مثال، اگر شما قصد دارید کتابخانهای را مورد استفاده قرار دهید و یا قرار است کتابخانهای را ایجاد و توسعه دهید بهترین کار قبل از شروع توسعه آن است که بدانید هدف شما از توسعهی آن کتابخانه چه چیزی است؟ آیا قرار است کتابخانهی مورد نظر شما به صورت انحصاری و تجاری در اختیار کاربران قرار بگیرد و یا قرار است به صورت کاملاً رایگان به اشتراک گذاشته شود؟ شاید ابتدا به این فکر کنیم که چرا باید کدی را که برای آن زحمت کشدهایم به صورت رایگان در اختیار دیگران قرار دهیم، چرا که ممکن است آن را بدون حفظ نام نویسنده تغییر، توسعه و بازنشر و برای استفاده در مصارف تجاری (غیر رایگان) قرار دهند؟ برای پاسخ به این سوألها پیشنهاد میکنیم به ویژگیهای مجوزهای موجود دقت کنید چرا که حتی وقتی شما یک تکه کد را به صورت رایگان در اختیار دیگران قرار میدهید استفاده کننده موظف است تا طبق قوانین از پیش تعریف شدهی مجوزهای منبعباز (Open Source) آن را مورد استفاده قرار دهد که به حفظ حقوق چاپ و تکثیر، توسعه و دیگر موارد پرداخته است. انواع مجوزهای نرمافزاری و ویژگیهای آن نرم افزارهای متن باز (Open Source Software) نرم افزار متن باز را میتوان نرمافزاری معرفی کرد که تحت یک مجوز (Licence) دارای موافقتنامهی انتشار یافته، که اجازهی به اشتراکگذاری کد منبع (کد کامپیوتری) را جهت مشاهده و انجام تغییرات در آن توسط کاربران و سازمانهای دیگر میدهد. مثالهایی از این نوع نرم افزارها میتوان به مرورگر موزیلا، لینوکس، جوملا، وردپرس و غیره اشاره کرد. نرم افزارهای اختصاصی (متن بسته) (Closed Source Software) اینگونه نرمافزارها، نرمافزارهایی اختصاصی هستند که تحت یک مجوز دارای موافقتنامه برای انجام تغییرات، توزیع، کپی و انتشار محدود و کنترل شده در اختیار کاربران و سازمانها قرار میگیرند. یا به صورت ساده تر نرمافزارهایی که برای دریافت آنها باید پول پرداخت کنید و اجازه دسترسی به کد منبع برنامه را ندارید. مثالهایی از این نوع نرمافزارها میتوان به محصولات مایکروسافت مانند Office یا شرکت Adobe مانند Photoshop و غیره اشاره کرد. مجوز آزاد (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 اشاره کردبر خلاف مجوزهای متنباز لزوماً همراه داشتن سورس به معنی متنباز (opensource) بودن نرمافزار نیست. بلکه شرایط دیگری مثل شرایط بازنشر نیز لحاظ میشود. عملاً فقط مجوزهای آزاد و کپیلفت تحت این عنوان قرار میگیرند، استاندارد رایجی برای مجوزهای کپیرایت تجاری وجود ندارد و توصیه میشود فایل لایسنس، بهدقت مطالعه شود. مجوزهای کپیلِفت قوی (Strong Copylefted) کدهایی که تحت این عنوان توزیع میشوند، لایسنس خود را به برنامهی شما تحمیل مینمایند. حتی اگر یک خط از آنها را وارد برنامهی خود کنید، ناچار خواهید بود کل برنامهتان را به صورت کپیلفت، در اختیار سایرین قرار دهید. این مجوزها به شما اجازهی تجاریسازی یا فروش برنامه و کدتان را نمیدهند. سختگیری مجوزهای کپیلفت تنها به استفاده از کدها ختم نمیشود. حتی لینک کردن به نسخهی کامپایلشدهی آنها نیز، چه به صورت استاتیک انجام شود و چه به صورت دینامیک، همهی کدهایتان تحت این مجوزها قرار خواهد گرفت. بنابراین اگر قصد ندارید بدون انتشار همهی کدهای خود برنامهتان را توزیع کنید و یا از فروش آن کسب درآمد نمایید. جهت اطلاع از روشهای درآمدزایی از پروژههای متن-باز به این سند مراجعه کنید. البته کسب درآمد از طریق ارائهی خدمات پشتیبانی و نصب و راهانداری قانونیست و مدل تجاری شرکتهای بزرگی همچون ردهت بر این اساس بنا نهاده شده است.انواع اصلی این لایسنسها GPL و AGPL هستند که هر کدام چندین نسخه دارند. در میان برنامههای معروفی که با این نوع لایسنس عرضه میشوند، میتوان به لینوکس (کرنل) و یوزرلند اصلی آن، GNU، و همچنین MySQL، وردپرس، جوملا، لیبرآفیس(LibreOffice)، کامپایلر GCC، فریمورک Qt و… اشاره نمود. معدودی از این برنامهها و کدها، همزمان با لایسنس تجاری هم عرضه شدهاند که اگر بخواهید از برنامهای که نوشتهاید، از طریق فروش نرمافزار و بدون انتشار سورس کد کسب درآمد کنید، میبایست نسخهی تجاری آنها را خریداری نمایید. فریمورک Qt و بانک اطلاعاتی MySQL از این دسته برنامهها هستند. مجوزهای کپیلفت ضعیف (Weak Copylefted) تنها تفاوت انواع ضعیف مجوزهای کپیلفت با انواع قوی آن، در این است که اجازهی لینک دینامیک به کتابخانههای کامپایلشده با این لایسنس را میدهد. برای مثال، Glibc، کتابخانهی پوزیکس و زبان سی POSIX / Standard C Library در لینوکس، که عملاً دروازهی هستهی لینوکس برای همهی برنامههای کاربردیست، با این مجوز توزیع شده است و اگر به خاطر همین مجوز کپیلفت ضعیف نبود، اساساً امکان عرضهی برنامههای تجاری برای لینوکس وجود نداشت. به عنوان انواع اصلی این مجوز ها، میتوان به LGPL و MPL (موزیلا) اشاره کرد.برنامههای Firefox و VLC و کتابخانهی معروف FFmpeg نیز نمونهی دیگری از این گروه مجوزهاست. اگرچه برخی اجزای کتابخانه FFmpeg تحت لیسانس GPL منتشر شدهاند. در صورت فعال شدن همان اجزا، کل کتابخانه تحت GPL قرار خواهد گرفت.در سیستم عامل اندروید، برای آن که کوچکترین نگرانی برای برنامهسازان تجاری باقی نماند و از سرایت لایسنس هستهی اصلی لینوکس به بقیهی نرمافزارها جلوگیری شود، کتابخانهی پوزیکس/سی اختصاصی آن به نام Bionic، با لایسنس BSD عرضه شده است. مجوزهای کرییتیو کامنز (Creative Commons, CC) نوعی مجوز آزاد و رایگان که برای آثار گرافیکی و نوشتاری رایج است و بر اساس ویژگی (Types) آن میتوانند مجاز یا ممنوع برای استفادهی تجاری باشند. اگر برنامهی تجاری مینویسید، تنها از کارهای گرافیکی استفاده کنید که استفادهی تجاری را آزاد گذاشتهاند.این مجوز میتواند ویژگیهای دیگری نظیر عدم اجازهی تغییر در کار اصلی را همراه خود داشته باشد که باید به آنها نیز توجه نمایید. آیا میتوانم با نرمافزارهای کپیلفت، محتوای تجاری تولید کنم؟ جامعهی متنباز، مراقب این موضوع بوده که مجوز برنامههایشان محتوای شما را تحت تأثیر قرار ندهند و در صورت لزوم این موضوع را به صراحت نیز قید کردهاند. بنابراین میتوانید با برنامهای نظیر LibreOffice که تحت GPL توزیع شده، محتوای تجاری تولید کنید، یا برنامهی تجاری خود را توسط GCC کامپایل نمایید. اطلاعات سایتهایی که تحت نرمافزارهای کپیلفت هستند تحت تأثیر این لایسنس قرار نخواهند داشت (چرایی آن از نظر حقوقی خود یک مقاله است). در واقع، سایتهای خبررسانی زیادی نظیر CNN از این سرویسها استفاده میکنند. از نرمافزاری با مجوز GPL (مثل وردپرس) برای راهاندازی سایت خود استفاده کردهام. تکلیف چیست؟ این گونه برنامهها همراه سورس هست و آزادید آنها را تغییر بدهید. خیالتان راحت باشد که محتوای سایت شما تحت این نوع مجوز قرار نخواهد گرفت و تنها کدهاست که شامل لایسنس میشوند. حتی اگر چیزی به سورس آن اضافه کنید یا تغییر دهید، ولی قصد توزیع آن را نداشته باشید، به این کار مجبور نمیشوید. ولی توجه داشته باشید که پلاگینها و تمهای وردپرسی که شما تهیه میکنید، یا تغییراتی که بهاصطلاح هاردکد میکنید، تحت مجوز GPL قرار میگیرند و تنها در صورتی که بخواهید آنها را به فرد دیگری بدهید، حتی یک نفر دیگر، مجبورید سورسشان را به رایگان برای همه منتشر کنید. در واقع این موضوع، یکی از بزرگترین معضلات حقوقیست که تهیهکنندگان پلاگینها و تمهای تجاری وردپرس با آن درگیرند. اگرچه مجوز GPL شما را مجبور نمیکند که تغییراتی که برای استفادهی شخصی دادهاید منتشر کنید، اما این مجوز خواهرخواندهای به نام AGPL دارد که در صورتی که کد تغییر یافته را روی سرور اجرا کنید، باید منتشرش نمایید. آیا میتوانم کدی که تحت مجوز MIT یا BSD منتشر شده را در برنامهی تحت GPL استفاده کنم؟ احتمال زیادی وجود دارد که هر قسمت از یک پروژهی بزرگ، تحت لایسنس جداگانهای توزیع شده باشد. برای مثال در اندروید، هستهی لینوکس تحت GPL، بیونیک (کتابخانهی پوزیکس/سی) تحت BSD و بقیهی قسمتها عمدتاً بر اساس آپاچی منتشر شدهاند. در سیستم عامل MacOSX، هستهی Darwin و برخی اجزا تحت BSD و بقیه به صورت تجاری و سورس بسته هستند. بنا بر یک قاعدهی کلی، شما میتوانید مجوز یک کد را از یک لایسنس بازتر نظیر MIT، به لایسنس محدودتر نظیر GPL تغییر دهید، حتی اگر صاحب آن نباشید. ولی روند معکوس آن تنها برای صاحب اصلی اثر امکانپذیر است[ref]برای نمونه برنامهی VLC ابتدا تحت GPL قرار داشت اما در نهایت به دلیل ناسازگاری آن با استور آیتونز توسط شرکت سازنده به لایسنس بازتر MPL/LGPL منتقل شد. یا نرمافزار ToyBox که تحت لایسنس LPGL بود اما برای اینکه بتواند روی دستگاههای موبایل قرار گیرد تحت BSD قرار گرفت و اندرویید مارشملو از BusyBox به آن سوییچ کرد.به عنوان مثال، با این که مجوز آپاچی همانند MIT آزاد است، ولی از نوع محدودتر قلمداد میشود، پس نمیتوان کدهای تحت آپاچی را با مجوز MIT بازنشر کرد.به طور مختصر ترتیب مجوزهای متنباز، از بازترین به محدودترین، به شکل زیر است: Public Domain -> MIT/X11 -> BSD -> Apache -> LGPL/MPL -> GPL -> AGPL آیا برنامهی تحت ویندوز، شامل لیسانس تجاری مایکروسافت خواهد شد؟ مایکروسافت به شما این اجازه را میدهد که در چارچوب سیستم عامل ویندوز، به dllهای سیستمعامل لینک دهید و از آنها استفاده نمایید، اما این بدان معنا نیست که شما اجازه داشته باشید dllها را به برنامهی خود اضافه نمایید. بنابراین استفاده از dllهای خود ویندوز، در سیستمعاملها و شبیهسازهای غیرمایکروسافتی (نظیر ReactOS یا Wine)، غیرقانونی است و اینها به طور مستقل، پیادهسازی کدهایی را انجام دادهاند که با اینترفیس برنامهنویسی ویندوز (Win32 API) سازگار هستند. در ایران که قانون کپیرایت وجود ندارد، باز هم ملزم به رعایت و توجه به این موارد هستیم؟ صرف نظر از مسائل اخلاقی که ما را ناگزیر از رعایت این موارد میکنند، باید توجه داشته باشیم که اگر بخواهیم برنامهی خود را در اپاستورهایی همچون آیتونز یا گوگل پلی منتشر کنیم، رعایت این موارد ضروری است چرا که در صورت عدم رعایت، برنامههای شما را از فروشگاه حذف میشود. همچنین، گرچه جامعهی متنباز اهل شکایت و دادگاه نیستند، ولی از فردای روزی که ایران به سازمان تجارت جهانی بپیوندد، مسائل حقوقی ناشی از آن، همچون شمشیر داموکلس، بر سرکدهای شما خواهند بود. بسیاری از توسعهدهندگان تازهکار متأسفانه بدون در نظر گرفتن قوانین و شرایط توسعه وارد نشر و تکثیر کدها و محصولاتی میشوند که شاید به صورت ناخودآگان تمامی قوانین حقوقی و مجوزهای مربوطه را نقض میکنند. همچنین اپاستورهای معروف ایرانی تعهدی از توسعهدهنده دربارهی عدم استفاده از کدهای بدون مجوز اخذ نمیکنند و رویهای برای شکایت از ناقضین ندارند و علاوه بر آن، خود نیز رأساً اقدام به بازتوزیع برنامههای خارجی، بدون اخذ رضایت از صاحب اثر مینمایند و اگر این رویهی خود را مورد بازبینی قرار ندهند، ممکن است در آیندهای نزدیک مجبور به پرداخت خسارتهای هنگفتی شوند. باید توجه داشت که توزیع رایگان یک برنامه، به این معنا نیست که دریافتکننده حق توزیع مجدد آن را، حتی به صورت رایگان، داشته باشد. نمونهی بارز آن یونیکس است که به همراه سورس توزیع شود و برای دانشگاهها رایگان است، اما این قبیل استفاده از آن بدون پرداخت هزینههای مربوطه ممکن نیست. بنابراین حتی بازتوزیع نرمافزارهای رایگان خارجی در استورهای ایرانی نیز احتمالاً بدون عواقب نیست. منابع و مستندات Software license - Wikipedia Comparison of free and open-source software licenses - Wikipedia CI: policy > permissive CI: policy > copyleft CI: policy > copyright https://scriptics.ir