می‌دانید mono یکی از پیاده‌سازی‌های آزاد از Microsoft .NET است که توسط Miguel de Icaza از گسترش دهنده‌های اولیه‌ی GNOME و کارمند کنونی Novell پایه گذاری شده است. از طرفی حتما تذکر‌های Richard Stallman را خوانده‌اید که گفته است بهتر است از C# استفاده نکنید. آیا تا به حال این سوال برایتان پیش نیامده که چرا نباید از Mono استفاده کنیم/نکنیم؟

ساختار Microsoft .NET را اگر ساده کنیم به این صورت خواهد بود که کد‌های نوشته شده با زبان‌های پشتیبانی شده (مثل C#/VB) به زبان میانه یا Common Language Infrastructure کامپایل می‌شوند و زمان اجرا با استفاده از اجرا کننده‌ی زبان میانه یا Common Language Runtime اجرا می‌شوند. این ساختار توسط Microsoft به صورت استاندارد در آمد و قول داد که از ثبت مالکیت خود علیه کسانی که بر اساس این استاندارد، نرم‌افزار جایگزین برای Microsoft .NET درست می‌کنند استفاده نکند که شامل Mono نیز می‌شود. بر این اساس تا زمانی که Mono فقط به پیاده سازی لایه‌های کامپایلی/اجرایی دات نت بپردازد استفاده از آن مشکلی ندارد. برای نمونه استفاده از C# به همراه GTK# هیچ مشکلی ندارد.

اما mono از دیگر تکنولوژی‌های Microsoft که مجوز پیاده سازی آن‌ها در دست نیست نیز پشتیبانی می‌کند؛ مثل ADO.NET، ASP.NET یا winforms. پس تا زمانی که از این تکنولوژی‌ها استفاده نکنید و بر اساس قول ماکروسافت شما در حاشیه‌ی امن قرار دارید. اما به این نکته نیز توجه کنید که بر اساس گفته‌ی بنیاد نرم‌افزار آزاد ممکن است کتابخانه‌هایی وجود داشته باشند که مربوط به ویندوز باشد اما در دات نت نیز استفاده شده باشند پس شامل قول ماکروسافت نمی‌شوند و احتمال استفاده از آن‌ها برای ضربه به جنبش نرم‌افزار آزاد وجود دارد.

منابع: Mono and Microsoft’s patents و Common Language Infrastructure