تحتوي هذه المقالة على مجموعة من الخطوات العملية التي
تساعد المبرمجين و المستخدمين العاديين على حد سواء، على الإنتقال بكل
سلاسة من نظام التشعيل ويندوز إلى لينكس، و لقد إهتممت بشكل خاص بالقسم
البرمجي لما له من أهمية على هذا الصعيد، فعملية الهجرة للمستخدم العادي
على الأغلب لن تشكل له أي عائق، لكن في حالة المبرمج هنالك العديد من
النقاط الواجب الإطلاع عليها قبل القيام بعملية الهجرة و إلا فإن المبرمج
سيخسر الكثير من الوقت و الجهد، و قد يصل المبرمج لطريق مسدود في لينكس
بسبب عدم تنفيذ عملية الهجرة بالوجه السليم.
لقد شاركت في العديد من المنتديات الخاصة بنظام التشغيل Linux، أكثر
الأسئلة التي كانت تسأل تتعلق بكيفية الهجرة من ويندوز الى لينكس، بمقارنة
البرامج و لغات البرمجة و العتاد لكل من نظامي التشغيل ويندوز و لينكس.
و بطبيعية الأمر كنت أحاول إجابة السائلين بأبسط الطرق من أجل إيصال
الفكرة مباشرة للمتلقّي، لكنني و بكل صراحة مللت من المنتديات العربية و
أدركت أن تضييع الوقت فيها كثير، و للأسف السبب يعود لزواّر المنتديات
بشكل رئيسي و بعد ذلك لإدارة هذه المنتديات.
المشكلة الرئيسية عند مستخدمي لينكس العرب هو غياب مركزية المصادر بسبب
قلتها، و لقد حاولت جاهدا مع العديد من الأخوة أن نوجد نواة مركزية للعرب
بهذا المجال لكنني فشلت لأسباب سأتناولها في تدوينة مخصصة بهذا المجال.
أهم المشاكل التي يواجهها المستخدم العربي لويندوز عند إنتقاله للينكس هي
زيادة الإعتماد على سطر الأوامر بالّلونين الأسود و الأبيض (يعتقد البعض
أنها نافذة موجه الاوامر DOS لكن هذا الإعتقاد خاطئ تماما و سأشرحه
لاحقاً)، أي بمعنى آخر غياب واجهة المستخدم المرئية GUI في العديد من
الاماكن التي يمكن حلها في ويندوز بشكل مرئي، تعزى هذه المشكلة ليست
لصعوبة لينكس بل لجهل مستخدمي ويندوز إضافة لعصبية مصممي و و مستخدمي
لينكس.
إن الغالبية العظمى من مستخدمي ويندوز يقومون بحفظ الرسائل المرئية و
أماكن توضع النوافذ في نظام التشغيل ويندوز بشكل أعمى -عن ظهر قلب- حتى
دون الحاجة لقراءتها بحيث تصبح عادة النقر على أزار معينة (تجاهل، موافق،
إلغاء الأمر) ضمن الرسائل و النوافذ أمر روتيني دون الحاجة لقراءتها، صحيح
أن هذه الطريقة بالتعامل مع نظام التشغيل مفيدة للكثيرين من حيث السرعة،
لكنها كارثية لآخرين من حيث المضمون، فالكثير ممن لا يتقنون اللغة
الإنكليزية (من أطفال و كبار) يلجؤون للإجابة على هذه الرسائل بطريقة
عمياء، و أكبر مثال على ذلك هو زر ”Cancel” أو ”Esc” مما ينتج عن ذلك
كوارث في بعض الأحيان تضر بالبيانات أو بنظام التشغيل بشكل كامل، و الأهم
من كل ذلك هو إستغلال العديد من القراصنة و المخترقين لهذه النقطة و ذلك
بتصميم برامج قرصنة تحمل نفس الواجهات المرئية لنظام التشغيل، و بالتالي
يصدر برنامج الإختراق مجموعة من الرسائل الوهمية شبيه بتلك التي إعتاد
عليها المستخدمون العاديون ، فيجيبون عليها بشكل سريع و تتم عمليات
القرصنة أو الإختراق دون علم المستخدم، لذلك البرامج المفتوحة المصدر تكشف
عن مثل هذه التلاعبات خصوصا أن شيفرتها مسموح الإطلاع عليها و بالتأكيد
لينكس هو الحاضنة الرئيسية للبرامج المفتوحة المصدر، فنسبة أكثر من 99% من
البرامج المستعملة في لينكس هي برامج مجانية مفتوحة المصدر …. لقد أطلت
المقدمة، حسنا نعود لدليل الهجرة.
من أجل ركوب سفينة الهجرة من مدينة ويندوز الى قارة لينكس إتبع الخطوات التالية:
الخطوة الأولى
قم بإنشاء قائمة بأسماء البرامج التي تستعملها في ويندوز مع مهمة كل برنامج.
الخطوة الثانية
إبحث عن بدائل برامج ويندوز و التي تؤدي نفس الوظيفة المطلوبة منها.
بما أن معظم البرامج المفتوحة المصدر يمكنها العمل على عدة أنظمة تشغيل
لذلك أنصحك بتحميل بدائل برامج ويندوز التجارية بأخرى مفتوحة المصدر من
أجل التدرب على هذه البرامج قبل هجرتك إلى لينكس و القائمة تحتوي على
العديد من البرامج المشتركة بين لينكس و ويندوز
دليل البرامج الحرة
عملية التدرب و البحث عن هذه البرامج يجب أن لا تتجاوز ألـ15 يوم فقط و
أحب أن أنوّه إلى أنك في الوقت الحالي يجب أن تنسى أمر الألعاب لأنني لا
أعدّها من فئة البرامج العادية بسبب أنها تملك بعض الخصوصية.
الخطوة الثالثة
قم بأرشفة جميع ملفاتك الشخصية و إنسخها على قرص DVD
أو CD من أجل الإحتفاظ بنسخة آمنة في حال حدث أي طارئ ما. و أنصحك
بإستعمال برنامج النسخ Nero.
http://www.nero.com
الخطوة الرابعة
بما أن لينكس حر مفتوح المصدر لذلك، هنالك العديد من التوزيعات التي تم إنشاؤها لأغراض محدّدة أو عامة.
و بما أنك مواطن جديد في قارة لينكس، لذلك أنصحك بإختيار:
توزيعة kubuntu
أو
توزيعة opensuse
و إذا كنت لا تثق بأي من الإختيارين السابقين بإمكانك إستعمال المعالج التالي الذي يساعدك على إتخاذ القرار بالتوزيعة المناسبة لك
Linux Distribution chooser
أو بإمكانك الإعتماد على الموقع التالي الذي يحتوي على روابط و تعريفات عن كل توزيعات لينكس في الدنيا -تقريبا.
distro watch
بعد إختيار التوزيعة التي ترغب بها يجب عليك قراءة ميزات التوزيعة من اجل التأكد مناسبتها لك.
الخطوة الخامسة
قم بتحميل التوزيعة التي تريدها من الموقع الرسمي، أو
من أي موقع آخر لكن تأكد من رقم الإصدار، فيجب ان تحصل على آخر إصدار من
التوزيعة، لأنه قد تحدث إختلافات جذرية بين إصدار و آخر، ثم بعد ذلك قم
بنسخ ملف التوزيعة (على الإلب لاحقة ملف التوزيعة سيكون من نوع *.iso) على
قرص مضغوط بواسطة برنامج النسخ Nero.
و في حال أردت شراء توزيعة من السوق (و هو شيء لا أفضّله)، أنصحك بمراجعة
رقم الإصدار من الموقع الرسمي للتوزيعة، ثم بعد ذلك إذهب و إشتر من السوق.
الخطوة السادسة
بواسطة أي برنامج يدعم الآلة الإفتراضية لويندوز و
لينكس، قم بتنصيب التوزيعة بشكل وهمي من أجل تجربتها، و ذلك من أجل
التأقلم عليها قدر المستطاع. و أشهر البرامج التي تستعمل للآلات
الإفتراضية هو:
vmware
و هو برنامج عملي خاص بالآلة الإفتراضية و الشبكات الإفتراضية أيضاً
يجدر بي التنويه أن هنالك بعض التوزيعات تعمل من القرص مباشرة دون الحاجة
لتنصيبها (LiveCD أو LiveDvD) لذلك لا حاجة لك بإستعمال برنامج الآلة
الإفتراضية لأن هذا النوع من التوزيعات يتيح لك خيار التنصيب على القرص
الصلب أو العمل من القرص المضغوط دون تغيير أي من محتويات جهازك.
الخطوة السابعة
قم بالبدأ بتنصيب لينكس لتحصل على جنسيتك الكاملة دون
أي غبار، أثناء عملية التنصيب ستلاحظ أن نوع الملفات التي يستعملها لينكس
مغايرة عن ويندوز (Fat, NTFS) لذلك لا تأبه لهذا الأمر لأنه بهجرتك إلى
قارة لينكس ستصبح تعتمد على هذا النوع من تنظيم الملفات.
ما يتعلق بالمبرمجين
في حال كنت مبرمجاً لتطبيقات سطح المكتب فإن أكثر ما يخيفك هو ترك لغة
البرمجة التي تتقنها و الإنتقال للغة أخرى بحيث تبدأ من الصفر، هذه
المشكلة لن تكون موجودة على الإطلاق لدى الإنتقال للينكس، لأن جميع خبراتك
البرمجية ستحتفظ بها لكنك ستضطر لتعلم بعض المبادئ الجديدة في تطوير
التطبيقات،لأن معظم مبرمجي ويندوز متآلفين مع بيئات تطوير متقدمة مثل:
MS Visual Studio، Borlan Delphi، Borland C++ Builder
جميع هذه البيئات تحتوي على تفاصيل مخفية توفر على المبرمج العناء
بالإهتمام بها، معظم هذه التفاصيل تتعلق بنظام التشغيل المستهدف، بحيث
تحقق أكبر توافقية ممكنة بين التطبيق الناتج و نظام التشغيل، لذلك إخفاء
هذه التفاصيل تبقي المبرمج يدور في حوض نظام التشغيل الذي يعمل به، و بما
أن جميع هذه البيئات تعمل على ويندوز و لا تعمل على لينكس بسبب إتفاقيات
تجارية إحتكارية، لذلك يحجب عن المبرمج كل ما يفيده في نطاق نظام التشغيل
المغاير لويندوز،و بالتالي لو أراد أي مبرمج وبندوز الإنتقال الى ماكنتوش
أو لينكس أو أي نظام تشغيل آخر سيجد صعوبة بالغة بسبب إعتياده على نمط
برمجي معين أجبر على إستعماله بشكل غير مباشر، لذلك أول خطوة يجب خطوها
بهذا الإتجاه هو العثور على بيئة التطوير المناسبة للغة البرمجة التي
أستعملها. لكن قبل ذلك مراجعة بعض المبادئ المهمة في البرمجة بشكل عام من
أجل الوصول للنتيجة المرجوة.
بيئة التطوير IDE
عبارة عن محرّر متقدّم للشيفرات البرمجية، قد يحتوي هذا المحرر على العديد
من الإضافات، كالإكمال التلقائي، و التحرير المرئي لواجهة المستخدم GUI، و
آلية الربط التلقائي بين الشيفرات البرمجية و المترجمات Compilers من أجل
إنتاج التطبيق النهائي… إلخ من ميزات.
تبقى هذه الميزات شيء إضافي ليس من المفروض تواجده بأية بيئة تطوير أخرى،
لكن معظم الشركات التي تعمل على إنتاج بيئات التطوير الخاصة بويندوز كانت
تصطلح إفتراضيا على وضع هذه الميزات من أجل تسهيل عملية التطوير.
أما في لينكس فالأمر مختلف قليلاً، فهنالك بيئات تطوير تحتوي على محررات
الشيفرات فقط و أخرى تحتوي على مجموعة كاملة من الميزات (إكمال تلقائي،
تحرير المرئي لواجهة المستخدم GUI، وربط تلقائي مع المترجم Compiler)، و
أخرى منقوصة، … و الكثير.
السبب في ذلك هو كثرة تنوع بيئات التطوير في لينكس، فلو أجرينا مقارنة بين
أكثر بيئات التطوير إنتشاراً في ويندوز لوجدنا أنها لاتتعدى الخمسة بيئات
في حين أنه في لينكس ستجد أنها تتجاوز الـ50 بيئة تطوير و ذلك بسبب عدم
وجود قيود تمنع المبرمجين من التقولب ضمن بيئة تطوير معينة.
حزم التطوير
و هي عبارة عن مجموعة من البرمجيات أو الشيفرات البرمجية التي تساعد على
تطوير البرامج، لكنها لا تستطيع أن تعمل مستقلة لوحدها أي بمعنى آخر، لا
يمكن للمبرمج إنجاز تطبيق أو برنامج معين بإستعمال حزمة تطوير فقط، فهو
يحتاج لعدد من حزم التطوير + محرر نصوص للشيفرات البرمجية من أجل إنجاز ما
يريده، لذلك تعتبر حزم التطوير مكمّل رئيسي لبيئات التطوير، و أهم أنواع
حزم التطوير هي حزم المترجمات Compilers و حزم تصميم واجهة المستخدم GUI
Designers.
هنا يقع مبرمجوا ويندوز في الفخ المميت، فنسبة كبيرة من مبرمجي ويندوز لا
يستطيعون التمييز بين بيئة التطوير و حزمة التطوير فيعتقدون أن حزم تطوير
واجهة المستخدم هي نفسها بيئة تطوير و ذلك بسبب وجود برامج خاصة لتصميم
واجهات البرامج فيشاهدون نوافذ و أزرار و أشرطة قوائم، و ينخدعوا. و أكبر
مثال على ذلك برنامج
Glade
و هو برنامج خاص بتصميم واجهة المستخدمGUI بإستعمال حزمة التطوير GTK .
و لقد إعتقد أحد الأخوة أنه بيئة تطوير للغة البرمجة C++ و جاء يسألني عن كيفية إنشاء تطبيق نهائي!
طبعاً كان جوابي له ينص على ما سبق إضافة إلى أنني نوّهت له أن أغلب برامج
تصميم واجهة المستخدم تقوم بتوليد شيفرات خاصة بهذه الواجهات.
كمثال: إذا قام المبرمج بتصميم نافذة مرئية و زر متوضع ضمنها، عندها سيقوم
برنامج تصميم واجهة المستخدم بتوليد الشيفرة البرمجية التالية:
create window(caption, id)
{
create button(caption, id)
}
هذه الشيفرة متوفرة لعدة لغات برمجة مثل: C++, Python, Perl, C# …. الخ.
لذلك ينخدع المبرمج و يظن أن بإمكانه وضع شيفراته البرمجية الخاصة و
بالتالي تنفيذ برنامجه الذي يرغب به، و هذا هو قمة الخطأ !، فإنتبهوا لهذه
الناحية المهمة جداً.
إن السبب الرئيسي لهذا الخلط بالمفاهيم هو قولبة الشركات للمبرمجين بطريقة
تجبرهم على نظام تشغيل معين و أكبر مثال على ذلك هو Visual Studio، فلو
أردت إنشاء برنامج يحتوي على نافذة بواسطة C++/MFC عندها ستقوم بيئة
التطوير VS بإستدعاء حزمة التطوير المرئية لـMFC، بعد ذلك يتم إستدعاء
برنامج تصميم حزمة التطوير المرئية لـMFC ، ثم بعد ذلك يتم توليد الشيفرة
المناسبة لذلك تلقائياً.
كل هذا يحدث دون تدخل المبرمج، صحيح أن هذه العملية وفّرت على المبرمج
كتابة أسطر برمجية لكنها منعته من التحكم ببرنامجه ليعمل على نظام تشغيل
آخر -أنا لا أقول هنا أن بيئات التطوير في لينكس لا تدعم خاصية توليد
شيفرات تلقائية خاصة بواجهة المستخدم، بل أنوّه إلى ناحية إجبار المبرمج
على إستعمال حزم تطوير خاصة بشركات إحتكارية مثل حزمة MFC أو VCL (في لغة
Delphi)
في عالم لينكس بيئات التطوير تعطي كامل الحرية للمبرمج بإختيار أي حزمة
تطوير يرغب بها و بالتالي الشيفرات التي ستولّد تلقائياً تحدّد حسب رغبة
المبرمج لا حسب رغبة الشركة، عند ذلك الإنتاجية و مجال التطوير و الحرية
سيتم تحقيقهم بآن واحد.
أنواع الشيفرات (البرامج)
الشيفرات (البرامج) الأصيلة Native Codes
شيفرات تطلب تنفيذ أمر معيّن من نظام تشغيل محدّد بحيث لو أردنا تنفيذ هذه الشيفرة على نظام تشغيل آخر فإنها لن تنفّذ.
عدم التنفيذ للأمر على نظام تشغيل آخر يرجع لسببين، إما أن الشيفرة
البرمجية تحتوي على إستدعاءات مباشرة من واجهة برمجة التطبيقات API لنظام
تشغيل محدّد أو أن الشيفرة تم ترجمتها لنظام تشغيل محدّد (سناقشه في
الفقرة القادمة).
في حالة الإستدعاءات المباشرة من API نظام التشغيل يتم الطلب من نظام
التشغيل تنفيذ إحدى الأوامر المدرجة ضمن نواته و بالتالي طريقة الإستدعاء
تختلف من نواة لأخرى أي من نظام تشغيل لآخر، إضافة لإمكانية تواجد أو عدم
تواجد هذا الأمر من نظام تشغيل لآخر، مما يؤدي أن هذه الشيفرة ستكون صالحة
فقط لنظام تشغيل محدّد و من المستحيل أن تعمل على نظام آخر.
هذا النمط من الشيفرات و الإستدعاءات المستعملة هو ما يستعمله مبرمجوا
ويندوز إما بشكل مباشر أو عن طريق حزم التطوير مثل MFC أو VCL، لكن هذا
النمط ليس مقتصرا على مبرمجي ويندوز فقط بل هو متواجد أيضا عند مبرمجي
لينكس! ، لكنه قليل الإستعمال -نوعا ما- فهو يقتصر على البرامج المكوّنة
لنظام التشغيل ذاته أو على بعض البرامج التي تحتاج لإستدعاءات خاصة من
نواة نظام التشغيل مثل بعض برامج تحرير الفيديو.
الشيفرات (البرامج) متعدّدة المنصات Cross-platform Codes
المقصود بكلمة منصات هي أنظمة التشغيل = منصات تشغيل.
معظم لغات البرمجة في العالم تستطيع العمل على عدّة أنظمة تشغيل أي لو
قامالمبرمج بكتابة شيفرة بلغة C++ القياسية على لينكس فإنها بالتأكيد
ستكون صالحة للعمل على ويندوز و ماكنتوش لكن بشرطين:
1.
أن لا تحتوي الشيفرة البرمجية على إستدعاءات واجهة برمجة التطبيقات API (شرحتها بالفقرة السابقة) الخاصة بنظام تشغيل محدّد
2.
أن يتوفر للمبرمج مترجمات تستطيع ترجمة هذه الشيفرة لعدّة أنظمة تشغيل
المقصود بمصطلح ”تعدد المنصات” هو إمكانية ترجمة الشيفرات لتعمل على عدّة
أنظمة تشغيل و ذلك من قبل عدّة مترجمات أو مترجم واحد يترجم لعدة أنظمة
تشغيل، و بالتالي سنحصل بالنهاية على عدّة توزيعات لتطبيق معين من شيفرة
واحدة، مثال:
لو أردنا ترجمة الشيفرة التالية بلغة C++ لنظامي التشغيل لينكس و ماكنتوش
و ويندوز عندها سنحصل على ثلاثة تطبيقات كل تطبيق خاص بنظام التشغيل الذي
يخصّه
#include
int main()
{
std::cout << "Hello world!" << std::endl;
return 0;
}
لكن ماذا لو أراد المبرمج إستعمال حزم تطوير معينة، هل تصلح الشيفرة التي ستكتب للعمل على عدّة أنظمة تشغيل؟
الجواب بسيط، لكنه سيكون بصيغة سؤال، هل حزمة التطوير التي تستعملها تحقق
الشرط الاول؟، إن كانت كذلك إذا الشيفرة الناتجة ستكون صالحة للعمل على
عدّة أنظمة تشغيل.
نسبة كبيرة من مبرمجي لينكس (بشكل خاص مبرمجي المصادر المفتوحة) يعتمدون
في برمجة تطبيقاتهم على أسلوب الشيفرة متعدّدة المنصات، و ذلك من أجل
السماح للمستخدمين أو المبرمجين على حد سواء من إستعمال هذه البرامج بكل
حرية و بغض النظر عن نظام التشغيل المستعمل.
الشيفرات (البرامج) المستقلة عن أنظمة التشغيل Os Independence
تكلمنا عن الغالبية العظمى من لغات البرمجة ماذا عن الباقي!
القسم الصغير من لغات البرمجة الأخرى لا تصلح لكي تصنف من أي من القسمين
السابقين و ذلك بسبب طبيعة هذه اللغات، إذ أن معظم هذه اللغات مختصة
ببرمجة الشبكات و الإتصالات مثل PHP و ASP و HTML لذلك تصنف هذه اللغات
على أنها مستقلة عن نظام التشغيل أي بالإمكان إنشاء تطبيق واحد قادر على
العمل على عدة أنظمة تشغيل و لسنا بحاجة على الإطلاق لعمل توزيعات كما في
النوع الثاني، لذلك يعتير هذا النوع من لغات البرمجة الأكثر قابلية للنقل
لإمتيازه بهذه الخاصية المهمة، لكن بالرغم من أهمية هذه الخاصية إلا أن
تطبيقات هذا النوع من اللغات تبقى قاصرة ببعض النواحي التي تتعلق بعمق
نظام التشغيل، لذلك تم تطوير بعض هذه اللغات لتتعمق أكثر بهذا المجال و
تتدارك هذه النقطة السلبية و أذكر بالتحديد كل من لغتي البرمجة جافا Java
و بايثون Python
لقد تم توسيع هاتين اللغتين بشكل كبير في الآونة الأخيرة لتشملا العديد من
النواحي من برمجة الشبكات المستقل تماما عن نظام التشغيل حتى برمجة أجزاء
من نظام التشغيل.