الأحد، 10 أغسطس 2014

هل يمكن لبرمجيات الـNet. أن تصير محمولة كبرمجيات الـjava ؟

كما أفضتُ في الشرح في أحد المقالات السابقة، فإن من أكثر الأمور التي تجعلني أحب لغة الـjava أن البرامج المكتوبة بها لها القدرة علي العمل علي أنظمة التشغيل الشهيرة كلها بدون أي تعديل في الأكواد الرئيسة. بالطبع سيكون لزاماً عليك في أكوادك أن تراعي أن تلك الأنظمة تختلف فيما بينها في بعض الأمور، مثل مسارات الملفات و المجلدات، و بالتالي قد يكون مسار مجلد برنامجك (بعد أن يتم تنصيبه) في أنظمة الـWindows كالتالي:

C:\Windows\programfolder

بينما يكون علي أنظمة التشغيل شبيهة اليونكس unix-like (مثل توزيعات الـGNU\linux، و الـmac os x) كالتالي:

/usr/bin/programfolder
و هو ما يعني أنه يجب عليك لكي يكون برنامجك محمولاً portable أن تنتبه إلي مثل هذه الأمور جيداً، و أن تحتاط لها في أكواد البرنامج. و لكن بشكل عام فإن نفس الأكواد التي كتبتَها بالـjava ستعمل علي كل أنظمة التشغيل، و نفس ملفات الـjar (التي تمثل الملفات التنفيذية لبرامجك) ستعمل علي كل أنظمة التشغيل بلا مشاكل.

و حينما تقارن مثل هذه القوة الكبيرة بمنصة الـ.Net فإنك ستجد أنه علي الرغم من كون الأخيرة تضاهي منصة الـjdk في الإمكانيات (قد تسبق إحداهما الأخري في بعض النواحي و تتقهقر عنها في نواحي أخري)، فإنه حينما تتعلق المسألة بالمحمولية portability فإن الـ.Net تخسر بجدارة؛ و السبب في ذلك أن البرمجيات المكتوبة بها لا تعمل إلا علي أنظمة تشغيل Microsoft فقط (علي الأقل بكامل قوتها و إمكانياتها بشكل رسمي من Microsoft)، بينما تم بناء منصة الـjdk لكي تعمل البرامج المبنية بها علي كل الأنظمة الشهيرة علي قدم المساواة.
 
و حينما تنظر لكل لغات البرمجة و الأدوات التطويرية التي أنتجتها Microsoft عبر تاريخها الطويل، فستجد أن كل تلك الأدوات و اللغات كانت تعمل فقط علي أنظمة التشغيل الخاصة بها، و لا تدعم بناء ملفات تنفيذية إلا لتلك الأنظمة فقط !. و هو نفس النهج الذي نراه مع لغات البرمجة و الأدوات التطويرية التي تنتجها شركة Apple؛ فهي بدورها لا تعمل و لا تنتج ملفات تنفيذية إلا لأنظمة التشغيل الخاصة بالشركة (mac os x و iOS)، و تجد أن الشركتين تبذلان قصاري جهدهما لإبقاء المبرمجين المستخدمين لتلك اللغات و الأدوات تحت عباءتيهما. و علي الرغم من أن هذا الأمر قد نجح قديماً، إلا أنه نظراً لأنه في الوضع الحالي أصبحت المحمولة تعني الكثير جداً في عالم تتنوع فيه أنظمة التشغيل الشهيرة بشكل كبير؛ لأن المبرمج يريد أسواقاً أكبر لبرامجه (بحيث لا يقع في مطب قلة الزبائن)، فإن ذلك أدي إلي أنه صار من الطبعي أن تكون لغات البرمجة و منصات التطوير عابرة لأنظمة التشغيل، مثل:
  • منصة الـ Qt التي تعطي المبرمجين بها القدرة علي بناء تطبيقات بلغة الـ++C (و لغات أخري) و ترجمتها compile لإنتاج ملفات تنفيذية لكل أنظمة التشغيل التي يرغب المبرمج في أن يعمل برنامجه عليها.
  • منصة lazarus و Delphi اللتان تعطيان القدرة للبرمجيات المكتوبة بلغة الـobject pascal علي العمل علي أنظمة التشغيل الشهيرة.
  • منصة xojo التي تعتمد علي لغة برمجة تنتمي لعائلة لغات الـBasic.
  • بالإضافة للغات برمجة تطبيقات الشبكة web applications و التي تعمل علي كل أنظمة التشغيل التي لديها متصفحات متطورة.
  • … إلخ
 
 
لذلك فإن السؤال هنا هو: لماذا تظل Microsoft تسير علي نفس النهج القديم الذي عفا عليه الزمن و الذي صار أغلب المبرمجين يرفض أن يتقيد به (و أنا من هذه الفئة) ؟، خصوصاً في ظل وجود منافسين يقدمون بيئات برمجة متكاملة و لغات برمجة و مكتبات تطوير مجانية و عابرة لأنظمة التشغيل ؟!
 
فبينما يمكن النظر إلي ما تفعله Apple علي أنه تكملة لما نعرفه عن حب الانفراد المشهورة به، و الذي جعلها تبني أجهزتها و أنظمة تشغيلها و لغات برمجتها و مكتبات تطويرها و أسواق برمجياتها الخاصة (في الحقيقة نجح ذلك في إعطائهم القدرة علي الانفراد بالفعل في معظم الأحيان، بل و أعطاهم نكهة خاصة بين الشركات التقنية المختلفة)، و كل ذلك يخدم فكرتها عن أن برمجياتها المتميزة تخدم العتاد الذي تبيعه، و بالتالي فإن ربط لغات البرمجة و الأدوات البرمجية التي تنتجها بأنظمة تشغيلها يجعل التطبيقات المبنية بتلك الأدوات تروج للأجهزة التي تنتجها Apple في نهاية الأمر. و لكن هذا غير صحيح في حالة Microsoft لأنها كانت حتي فترة قريبة لا تبني أجهزة حواسيب خاصة بها، و نظام تشغيل الـWindows يمكن تنصيبه علي أي عتاد علي وجه الكرة الأرضية (إذا ما كان بالقوة الكافية) !، و بالتالي فهم يختلفون عن Apple بشكل كبير، فلماذا إذاَ يستمرون علي نفس المنوال ؟!
 
أنا عن نفسي أظن أن المشكلة الرئيسة عند Microsoft أن لديها الكثير من الموازنات في كل قرار تتخذه نظراً لأنها تتعامل مع أسواق متعددة، و لديها منتجات تنافس علي الصدارة في أغلب تلك المجالات (إن لم تكن كلها). فلو أنها جعلت برامج الـ.NET تعمل علي أنظمة التشغيل الأخري فإن هذا سيُقوي بيئة الـ.NET و لغات البرمجة الخاصة بها، و أظن أنه سيجعل الملايين من المبرمجين يستخدمونهما لإمكانياتهما الكبيرة، لكنه سيؤدي إلي جعل الكثير من المستخدمين ينتقلون لأنظمة تشغيل أكثر أمناً و/أو أقوي و/أو أرخص من الـWindows، و مع قرار مثل إنهاء دعم windows XP في بداية هذا الشهر فإن جعل البرمجيات المبنية بـ.NET تعمل علي أنظمة التشغيل الأخري سيجعل شركات كبيرة للغاية تقرر الانتقال إلي توزيعات شهيرة من الـGNU\linux، مثل ubuntu التي تدعمها شركة canonical بكل قوتها، و mint التي تشبه XP كثيراً بحيث يمكن اعتبار تجربة المستخدم العادي متشابهة إلي حد كبير.
 
هل يعني هذا أن Microsoft لا تراودها مطلقاً فكرة جعل برمجيات .NET محمولة كبرمجيات الـjava ؟
بل أظن Microsoft تفكر في الأمر بجدية شديدة؛ و مما يدل علي صحة وجهة نظري أنهم كانوا في البداية يدعمون علي استحياء مشروعاً مثل mono الذي يهدف إلي إتاحة استخدام الـ.NET علي نظام الـGNU\linux، و هو المشروع الذي يكرهه Richard Matthew Stallman بشدة، و يرفض حتي أن يرد تحية Miguel de Icaza المطور الرئيس فيه حينما يراه (حسبما أشار miguel نفسه)؛ من فرط كرهه لمشروعهم و اعتباره له خيانة لعالم البرمجيات الحرة.
 
بل إنه مؤخراً قامت microsoft بالدخول في شراكة مع شركة xamarin التي أنشأها de icaza لتقوم بتكملة بناء مشروع mono، بالإضافة إلي إتاحة تطوير تطبيقات لأنظمة iOS و Android و mac os x عن طريق #C و بيئة الـ.NET. و قد كانت هناك شائعات لفترة من الفترات أن microsoft ستستحوذ علي xamarin و طار الكثير من مطوري الـ.net فرحاً بهذه الأنباء كما هو متوقع لأنها تعني أن تطبيقاتهم سيكون بإمكانها غزو سوق جديد، بدون أن يكونوا مطالبين ببدء تعلم لغات جديدة و/أو أدوات مختلفة. صحيح أن استهداف منصات جديدة يعني أن هناك أشيائ كثيرة لتعلمها بسبب الاختلافات بين المنصات، و لكن في حالة إتاحة منصة الـ.Net علي أنظمة تشغيل مختلفة سيكون الأمر أيسر بكثير جداً من حالة البدء من الصفر.
 
http://xamarin.com/
 
 
لكني أظن أن القرارات التي بدأ المدير التنفيذي الجديد satya nadella في اتخاذها و التي تسلك مسار تحويل الشركة إلي شركة “أجهزة و خدمات devices and services” ستجعل من الطبعي و المنطقي أن تتاح الـ.net و الـvisual studio و ما شابههن من أدوات تطويرية لأنظمة التشغيل التي تناسب كلاً منهن.
 
قد يحدث هذا تدريجياُ أو فجأة (ربما عن طريق الاستحواذ علي شركة xamarin كما يأمل الكثيرون)، أو قد لا يحدث علي الإطلاق لو رأت Microsoft أن هذا سيقضي علي آمال نظام تشغيلها المترنح سوقياً windows 8 (و الذي أراه و تحديثاته أفضل تطويرات لأنظمة التشغيل التي تنتجها Microsoft علي الإطلاق!)، و ساعتها سيكون من الصعب أن تكون محمولية برمجيات الـ.Net مماثلة لبرمجيات الـjava لأن الدعم غير رسمي، بل سيستمر عن طريق شركات مثل xamarin (و ربما غيرها)، و هو أمر أقل قوة من الدعم الرسمي من الشركة الأم Microsoft.
 
 

هناك تعليقان (2):

  1. Märwëñ Häññëchï18 نوفمبر 2014 11:57 ص

    موضوع جيد جدا و يطرح موضوعي و سلس شكرا لك و سؤالي ماهو رأيك أو انطباعك في ما آلت اليه الأمور الآن

    ردحذف
  2. بصراحة لولا أنني كنتُ أتوقع أمراً مثل هذا لشعرتُ بدهشة كبيرة للغاية لما آلت إليه الأمور الآن و لما صدقتُه بسهولة، فمن كان يتخيل أن تجعل مايكروسوفت تطبيقات الويب المبنية بالإصدارة الحديثة من ASP.NET تعمل علي mac os x و linux ؟! أو أن تفتح مصدر جزء من بيئة الـ.NET بأي شكل من الأشكال ؟!

    لكن بالنظر إلي مجريات الأحداث في الأعوام الأخيرة يبدو واضحاً أن المصادر المفتوحة هي الموضة الجديدة في عالم تطوير البرمجيات، فحتي إن لم تكن معتقداً بأنها الأسلوب الأفضل لبناء البرمجيات فإن المنافسة القاطعة للرقاب بين الشركات العملاقة ستجبر الجميع علي السير في نفس الاتجاه إن عاجلاً أو آجلاً، و لذا فلن أندهش في المستقبل إذا طرحت مايكروسوفت بقية مكتبة الـ.NET كمكتبة مفتوحة المصدر تعمل علي كل أنظمة التشغيل الشهيرة، و لن أندهش إن رأيتُ الـVisual Studio يعمل علي الـmac os x و linux (سواء أكان بكامل قوته، أو إصدارة محدودة القوة من الإصدارة الخاصة بالـWindows).
    عموماً كما يقول المثل المصري "يا خبر النهاردا بفلوس: بكرة يبقي ببلاش" :)

    ردحذف