اخیراً در اکوسیستم .NET شاهد تغییر قابل توجهی در مدل ارائه برخی از کتابخانههای NuGet (NuGet libraries) بودهایم. تعدادی از این بستهها که پیشتر به صورت متنباز (open source) در دسترس بودند، به مدلهای تجاری (commercial models) تغییر وضعیت دادهاند. این تغییر، توسعهدهندگان را ملزم میسازد تا در انتخاب کتابخانههای مورد استفاده در پروژههای خود، دقت بیشتری به خرج دهند و از تبعات احتمالی تغییرات ناگهانی در مجوزها (licenses) آگاه باشند. در گذشته، توسعهدهندگان میتوانستند به سهولت با بررسی اجمالی مجوز یک کتابخانه NuGet، آن را در پروژههای خود به کار گیرند؛ اما در حال حاضر، با توجه به افزایش تعداد کتابخانههای تجاری، لازم است تا با احتیاط بیشتری عمل کرده و از بروز مشکلات ناشی از تغییرات مجوزها جلوگیری شود.
این موضوع به ویژه در استفاده از هوش مصنوعی (AI) و مدلهای زبان بزرگ (LLMs) برای تولید کد (coding) حائز اهمیت است، زیرا این ابزارها ممکن است به طور خودکار کتابخانههایی را به پروژه اضافه کنند که استفاده از آنها به دلیل مسائل مربوط به مجوز، برای کاربر غیرمجاز باشد. لازم به ذکر است که تجاری بودن یک کتابخانه لزوماً دلیلی برای عدم استفاده از آن نیست. به عنوان مثال، ممکن است منطقی نباشد که یک سرور احراز هویت OpenId را از ابتدا پیادهسازی کرد تا از پرداخت هزینه برای Duende اجتناب شود. هدف اصلی این مطلب، آگاهسازی توسعهدهندگان نسبت به کتابخانههایی است که زمانی رایگان و متنباز بودهاند و اکنون تغییر وضعیت دادهاند، به طوری که استفاده از آنها در پروژههای خاص ممکن است دشوار یا غیرممکن باشد. برخی از این تغییرات، بسته به سابقه و میزان آگاهی توسعهدهندگان از تحولات اخیر در دنیای .NET، ممکن است غیرمنتظره به نظر برسند. دامنه این بررسی به طور خاص شامل پروژههای داتنت است که در زمان رایگان و متنباز بودن، محبوبیت قابل توجهی کسب کردهاند و سپس مجوز یا رفتار آنها (مانند Moq) به گونهای تغییر کرده است که استفاده از آنها به صورت همگانی محدود شده است.
تالار مشاهیر سابق NuGet
در این بخش، به معرفی کتابخانههای NuGet برجستهای پرداخته میشود که تغییرات قابل توجهی در وضعیت مجوز یا رفتار خود داشتهاند.
Moq
کتابخانه Moq با معرفی وابستگی نرمافزاری SponsorLink که به عنوان ابزار جاسوسی (spyware) تلقی شد، با واکنش شدید کاربران و مهاجرت دستهجمعی آنها مواجه گردید. این اقدام منجر به بحثهای گسترده در Reddit و ایجاد Issue در GitHub شد. به عنوان جایگزینهایی برای Moq، کتابخانههای FakeItEasy و NSubstitute پیشنهاد شدهاند.
GitInfo
کتابخانه GitInfo نیز مسیری مشابه Moq را دنبال کرده است. کاربران باید نسبت به کتابخانههایی که توسط همین نویسنده (devlooped با نام کاربری kzu@) توسعه یافتهاند، احتیاط کنند، زیرا پس از ماجرای SponsorLink، اعتماد زیادی نسبت به او از بین رفته است. در مخزن GitHub این پروژه، عبارت "This project uses SponsorLink to attribute sponsor status" به چشم میخورد.
MassTransit از نسخه 9 به بعد
تجاریسازی MassTransit با انتشار نسخه 9 اعلام شد و کاربران را به جستجو برای جایگزینهای آن سوق داد. این موضوع نیز در Reddit مورد بحث قرار گرفت و اطلاعیه رسمی آن منتشر شد. Brighter/Darker، Rebus (با مجوز MIT، اگرچه نویسنده اصلی آن در سال 2013 به مالکان NServiceBus پیوست) و Raw Service Bus SDK به عنوان جایگزینهای MassTransit معرفی شدهاند. همچنین اشاره شده است که NServiceBus (که در ادامه توضیح داده خواهد شد) گزینه بهتری نیست.
NServiceBus
NServiceBus دارای یک مدل مجوز دوگانه غیر متنباز با محدودیتهای عملکردی است که استفاده از آن توصیه نمیشود. ظاهراً این کتابخانه زمانی تحت مجوز Apache قرار داشته اما حدود سال 2011 تغییر مجوز داده است.
MediatR & Automapper
هر دو کتابخانه MediatR و Automapper به سمت مدل تجاری حرکت کردهاند، که این موضوع توسط خالق آنها، جیمی بوگارد (Jimmy Bogard)، اعلام شده است. اطلاعیههای مربوط به تغییر مجوز و تجاریسازی این کتابخانهها به همراه بحثهای مربوطه در GitHub موجود است.
FluentAssertions
FluentAssertions نیز مدل مجوز خود را تغییر داده است، اما یک نسخه انشعاب یافته (fork) از آن توسط جامعه کاربری، تحت مجوز Apache 2.0 همچنان در دسترس است. Shouldly به عنوان یکی از جایگزینهای FluentAssertions معرفی شده است.
Duende OpenId server
اگرچه Duende OpenId server در حال حاضر به عنوان یک محصول تجاری شناخته میشود و سالهاست که وضعیت آن مشخص است، اما به دلیل سابقه تغییر مجوز آن از Apache به یک مجوز دوگانه (RPL و تجاری)، در این فهرست قرار گرفته است. توسعهدهندگان میتوانند از KeyCloak، یک سرور احراز هویت متنباز و قابل میزبانی (self-hostable) مبتنی بر جاوا، به عنوان جایگزین آن استفاده کنند. عبارت منتشر شده در مورد این محصول جدید این است: "This new product will remain open source but will be offered with a dual license (RPL and commercial)".
ImageSharp
ImageSharp از "مجوز تقسیم شش آزمایشگاه" (The Six Labors Split License) استفاده میکند که لازم است توسعهدهندگان در استفاده از آن به این نکته توجه داشته باشند.
نکتهای در مورد مجوزها
بسیاری از پروژههایی که تغییر مجوز دادهاند، پیشتر تحت مجوز MIT قرار داشتند. در حالی که کاربران همچنان میتوانند نسخه کد در زمان تغییر مجوز را دریافت و استفاده کنند، هیچ بندی در مجوز MIT وجود ندارد که مانع از آن شود که نویسنده یک کتابخانه پس از دریافت هزاران ساعت تلاش و مشارکت از سوی دیگران، مجوز آن را به یک مدل سودآور تغییر دهد.
این موضوع باید هشداری برای تمام کسانی باشد که به منفعت و استفاده آتی از کار خود اهمیت میدهند تا در انتخاب مجوز برای پروژههای خود و همچنین پروژههایی که در آنها مشارکت میکنند، دقت لازم را داشته باشند. شایان ذکر است که چنین تغییر مجوزی با مجوز GPL غیرممکن خواهد بود، مگر با کسب رضایت تمامی مشارکتکنندگان، زیرا این کار به معنای سلب حقوق است که صراحتاً توسط GPL منع شده است.
وبسایت choosealicense.com منابع خوبی برای درک و انتخاب مجوزهای مختلف ارائه میدهد و همچنین ابزاری برای ایجاد درخواست Pull Request به مخزن GitHub پروژه شما برای افزودن مجوز در اختیار میگذارد.
مجوز RPL (Reciprocal Public License)
مجوز RPL (RPL on Wikipedia) یک مجوز کمتر شناخته شده است که باید نسبت به آن هوشیار بود. به نظر میرسد که این مجوز به دلیل بندهای مربوط به آثار مشتق شده (derivate works clauses)، معمولاً در مجوزهای دوگانه به کار میرود و عملاً استفاده تجاری را ممنوع میکند. اگر یک کتابخانه با مجوز RPL به یک پروژه تجاری اضافه شود، ممکن است مشکلات حقوقی جدی به وجود آید.
نکته جالب توجه این است که سازمان GNU به دلیل محدودیتهایی که مجوز RPL اعمال میکند، آن را یک مجوز غیرآزاد تلقی میکند.