Mono কী?
Mono হলো একটি ওপেন-সোর্স, ক্রস-প্ল্যাটফর্ম .NET ইমপ্লিমেন্টেশন যা Windows-বाहিরের OS-এ (Linux, macOS, Android, iOS, WebAssembly) .NET অ্যাপ্লিকেশন চালাতে সক্ষম করে। এটি Microsoft-এর অফিশিয়াল .NET Core / .NET 5+ এর পূর্ব신 lehet değişken oldu, কিন্তু এখনও লিগেসি বা নির্দিষ্ট প্ল্যাটফর্মে প্রাসঙ্গিক।
লিনাক্সে Mono ইনস্টলেশন (Ubuntu/Debian/Kali)
# প্যাকেজ আপডেট
sudo apt update
# Mono কমপ্লিট প্যাকেজ ইনস্টল
sudo apt install mono-complete
# যাচাই
mono --version
mcs --version
অথবা অফিশিয়াল Mono রেপো থেকে (নতুন ভার্সনের জন্য):
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
sudo apt install mono-complete
C# কোড কম্পাইল ও রান
১. সোর্স ফাইল তৈরি (test.cs)
using System;
namespace LinuxTest {
class Program {
public static void Main(string[] args) {
Console.WriteLine("C# app running on Linux via Mono!");
Console.WriteLine($"OS: {Environment.OSVersion}");
Console.WriteLine($"Runtime: {Environment.Version}");
Console.WriteLine($"Args: {string.Join(", ", args)}");
}
}
}
২. কম্পাইল (mcs - Mono C# Compiler)
mcs test.cs
# আউটপুট: test.exe (Windows-style EXE, কিন্তু Linux-এ mono দিয়ে চলে)
৩. এক্সিকিউট
# পদ্ধতি ১: mono রানটাইম দিয়ে
mono test.exe
# পদ্ধতি ২: সরাসরি (যদি binfmt_misc কনফিগার্ড থাকে)
./test.exe
# আর্গুমেন্ট পাস
mono test.exe arg1 arg2 "hello world"
আউটপুট:
C# app running on Linux via Mono! OS: Unix 5.15.0.xxx Runtime: 6.12.0 (tarball) Args: arg1, arg2, hello world
.NET Core / .NET 5+ (আধুনিক, প্রস্তাবিত পথ)
Mono-এর পরিবর্তে আজকাল .NET SDK সরাসরি লিনাক্সে ইনস্টল করা ভালো:
# Microsoft অফিশিয়াল রেপো (Ubuntu 22.04)
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install dotnet-sdk-8.0
# যাচাই
dotnet --version
# নতুন কনসোল অ্যাপ
dotnet new console -n MyApp
cd MyApp
dotnet run
Mono vs .NET Core/.NET 5+ তুলনা
| বিষয় | Mono | .NET Core / .NET 5+ |
|---|---|---|
| স্ট্যাটাস | মেইনটেনেন্স মোড (লিগেসি সাপোর্ট) | সক্রিয় ডেভেলপমেন্ট, LTS রিলিজ |
| API কভারেজ | .NET Framework 4.x সমতুল্য | .NET Standard 2.0+, মডার্ন API |
| পারফরম্যান্স | মাঝারি | উচ্চ (JIT, AOT, Tiered Compilation) |
| ASP.NET Core | সীমিত | পূর্ণ সাপোর্ট |
| AOT কম্পাইলেশন | হ্যাঁ (Mono AOT) | হ্যাঁ (Native AOT, .NET 7+) |
| WebAssembly | প্রাথমিক (Blazor এর আগে) | পূর্ণ সাপোর্ট (Blazor WASM) |
GUI অ্যাপ্লিকেশন (WinForms/WPF) লিনাক্সে
- Mono: WinForms সাপোর্ট করে (System.Windows.Forms), WPF নয়
- .NET 6+: WinForms/WPF লিনাক্সে সাপোর্টেড নয় (Windows-only)
- বিকল্প: Avalonia, Uno Platform, MAUI (Linux GTK 백엔্ড), Electron.NET
সতর্কতা
- Mono-র `mcs` কম্পাইলার C# 7.0+ ফিচার ফুল সাপোর্ট করে না
- ফাইল পাথ: লিনাক্সে `/` ব্যবহার করুন, `@"C:\Path"` কাজ করবে না
- কেস-সেনসিটিভ ফাইল সিস্টেম — namespace/class নাম মেলাতে হবে
- নেটিভ লাইব্রেরি (P/Invoke) — `.dll` বদলে `.so` ফাইল দরকার