.NET 8 लिनक्स पर 50% छोटा स्टैंडअलोन

.NET 8 का native AOT tooling अब लिनक्स पर बहुत छोटे standalone binaries बनाता है, जिससे serverless workloads, containers, और cross‑platform CLI tools के लिए C# में नई रुचि पैदा हुई है। टिप्पणीकार AOT compatibility के लिए reflection और source generators से जुड़े trade-offs पर चर्चा करते हैं, .NET की concurrency, performance, और memory use की Go और Java से तुलना करते हैं, और cloud तथा on-prem environments में Linux पर .NET चलाने के व्यापक production अनुभव साझा करते हैं। उत्साह के बावजूद, fragmentation या “half-finished” official libraries, Linux पर कमजोर first-party GUI support, और Microsoft के दीर्घकालिक stewardship को लेकर चिंताएँ बनी रहती हैं, हालांकि तकनीकी प्रगति मजबूत है.

Native AOT, आकार और प्रदर्शन

  • चर्चा .NET 8 native AOT स्टैंडअलोन बाइनरीज़ पर केंद्रित है, जो “hello world” के लिए लगभग 2 MB और लिनक्स पर पहले की तुलना में लगभग 50% छोटी बताई जा रही हैं।
  • स्पष्ट किया गया कि यह native AOT पर लागू होता है; सामान्य .NET ऐप्स अभी भी JIT का उपयोग करते हैं, हालांकि trimming में सुधार हुआ है।
  • AOT को मुख्यतः तेज़ cold starts और serverless/container परिदृश्यों में छोटे images के लिए महत्व दिया जाता है (जैसे AWS Lambda, Azure Functions)।

Reflection, Source Generators और AOT की सीमाएँ

  • AOT पर भारी reflection और runtime code generation की सीमाएँ लागू होती हैं; इनके लिए वैकल्पिक तरीकों की आवश्यकता होती है।
  • कुछ लोगों का मानना है कि reflection का उपयोग समय के साथ source generators और interceptors के माध्यम से घटेगा; दूसरों का तर्क है कि reflection बहुत सुविधाजनक है और generators बहुत जटिल, इसलिए दोनों साथ-साथ बने रहेंगे।

लिनक्स पर .NET का अपनाना और अनुभव

  • कई लोग बताते हैं कि वे नियमित रूप से लिनक्स पर .NET चलाते हैं: Kubernetes, Docker, AWS Lambda, Azure App Service (Linux), cloud VMs, self-hosted servers, और homelab apps (जैसे Jellyfin, *arr apps, Ethereum client)।
  • कई टीमें production में Linux उपयोग करती हैं जबकि developers Windows/macOS पर काम करते हैं; अन्य पूरी तरह macOS/Linux पर Rider, VS Code, या Neovim के साथ development करते हैं।
  • कई web APIs और function apps के लिए, Linux अब default deployment target है; Windows की तुलना में license savings इसका बड़ा कारण हैं।
  • .NET Framework से migration कुछ लोगों के लिए अब भी एक दर्द बिंदु है, जिससे कुछ संगठनों ने Java की ओर रुख कर लिया।

टूलिंग और इकोसिस्टम

  • C#/.NET की productivity, performance, और tooling की जोरदार प्रशंसा हुई है (खासकर Rider; VS को भारी और कभी-कभी नाज़ुक माना गया, हालांकि कुछ का कहना है कि इसमें सुधार हुआ है)।
  • Microsoft की “official” libraries पर राय बंटी हुई है: Entity Framework Core की अक्सर प्रशंसा होती है, OData की व्यापक रूप से आलोचना; कई लोग MS stacks की बजाय हल्के OSS tools (Dapper, Postgres, Redis) सुझाते हैं।
  • कुछ लोगों की शिकायत है कि MS समुदाय के OSS को अपनाने के बजाय उससे “प्रतिस्पर्धा” करता है, जिससे ecosystem को नुकसान होता है।

भाषा तुलना (Go, Java, F#, आदि)

  • Go बनाम C# पर बहस:
    • Go के पक्ष में: सरल, async “coloring” के बिना first-class concurrency, cloud infrastructure के लिए अच्छा।
    • C# के पक्ष में: अधिक समृद्ध type system, शक्तिशाली async/await, tasks, channels, अक्सर बेहतर throughput; कुछ का दावा है कि Go का GC और concurrency बेहतर नहीं हैं।
  • इस बात पर असहमति है कि C# के दिखाए गए concurrency उदाहरण वास्तव में “concurrency” हैं या “parallelism।”

GUI और Linux सपोर्ट

  • एक बड़ी निराशा: MAUI में आधिकारिक Linux GUI support नहीं है, जबकि cross-platform को लेकर मजबूत push है।
  • कुछ लोग मानते हैं कि Avalonia/Uno पर्याप्त अच्छे हैं; अन्य लोगों के लिए first-party Linux GUI की कमी Microsoft की desktop apps के लिए Linux के प्रति प्रतिबद्धता पर चिंता का संकेत है।

अन्य तकनीकी नोट्स

  • परीक्षणयोग्यता के लिए TimeProvider और FakeTimeProvider का स्वागत किया गया; FileSystemProvider की इच्छा भी व्यक्त की गई।
  • Native AOT के साथ static linking अब संभव है, जिसमें .NET libraries को native projects में link करना भी शामिल है।
  • Azure Functions on Kubernetes with KEDA को DIY serverless विकल्प के रूप में उल्लेख किया गया।