الجزء اﻷول, الثاني, و الثالث من الموضوع.

هل يناسبني Linux؟

لكل فريق متعصبوه و مشجعوه. و لكن هذا السؤال تعتمد إجابته عليك. بشكل مبدئي شريحة اللاعبين ستستبعد استخدام Linux, لأن الألعاب على Linux محدودة, و الألعاب الكبيرة لا تطرح عليه (و غالباً ما تنحصر على Windows في الكمبيوتر. و حتى مع اﻷخذ بعين الاعتبار SteamOS). كما أن برامج Adobe و Autodesk غير متوفرة على Linux (رغم وجود بدائل مفتوحة المصدر عليه لبعضها). في كل الأحوال, يجب على المستخدم أن يقرر ما يناسبه. و رغم أن "تحرير" كل المستخدمين من قيود البرامج و الأنظمة المغلقة هدف نبيل, إلا أن هذا غير واقعي. لأن الانفتاح و التحرر ليس الأولولية الأولى لدى الكثير من المستخدمين, لذا قد لا يكونوا مستعدين للتضحية ببعض الخصائص أو تعلم نظام جديد من أجلها. على أية حال, يمكن لأي مستخدم تجربة GNU/Linux بسهولة دون التأثير على نظامه الحالي و ملفاته. يمكن مثلاً استخدام LiveCD أو LiveUSB لتشغيل نظام كامل من على قرص أو USB Drive دون كتابة تغييرات على القرص الصلب. أو من خلال استخدام برامج Virtualization (مثل VirtualBox) لتشغيل أنظمة التشغيل داخل نظام التشغيل الحالي (بما يشبه تشغيل البرامج). الـ Virtual Machine (VM) طريقة ممتازة لعمل التجارب من داخل نظام التشغيل, دون التأثير على الجهاز أو الملفات.

و لكن برأي, يجب على كل طالب CS تعلم استخدام Linux, و تعلم تفاصيل عمله. كما أن لغات البرمجة الحرة (مثل Perl و Python) تتخذ من Linux و مجتمعه قاعدة انطلاق لها (لا أعني بهذا أنها تعمل أو تكتب على Linux فقط). كما أن LAMP (Linux, Apache HTTP, MySQL, PHP) من أشهر الحزم التي تشغل الـ Web servers.

هل علي أن أثبت أي تعريفات؟ هل ستعمل القطع على Linux؟

بما أن Linux kernel هو من نوع Monolithic kernel, إذاً فإن التعريفات هي جزء من النواة. و هذا يعني أن دعم الأجهزة سيكون موحداً في نفس النسخة (و النوع الفرعي. بعض التوزيعات أو الأجهزة تستخدم نواة ً مصغرة تختصر الحاجات غير المطلوبة لتعمل على مواصفات منخفضة, كالراوتر مثلاً) من النواة. و لكن نظراً لترخيص النواة (GPLv2), و فلسفة المجتمع الحر, فإنه لا يمكن إدراج تعريفات غير مفتوحة المصدر فيها إذا كان لها بديل مفتوح المصدر (مع تحقيق شرط أنه تعريف يتطلبه الـ Kernel space, و ليس برنامجاً Proprietary في User space فقط). على سبيل المثال, التعريف الرسمي لبطاقات NVIDIA غير مفتوح المصدر, و ترفض الشركة إصدار نسخة مفتوحة المصدر (و هو متعلق بالعمل في User space فقط). هذه المشكلة حاول المطورون حلها بكتابة تعريفات بديلة مفتوحة المصدر, بعضها جيد و يؤدي غرضه بكفاءة, و لكن بعضها الآخر ليست بمستوى التعريف الرسمي, رغم أنها تستطيع تشغيل القطعة (خاصة في القطع المعقدة, كبطاقات الشاشة, لأن كتابة تعريف جيد يحتاج إلى كشف خصائص القطعة و الـ Mappings التي يمكن استغلالها, و هو أمر لا ترغب كل الشركات بفعله). تقود شركة Intel مثالاً جيداً في هذا المجال, و تقوم بإصدار تعريفات و Source code مفتوحة المصدر لقطعها. للنواة القدرة على اعتماد تعريفات جديدة من خلال ما يعرف بالـ Kernel modules (LKMs). و هي حل للتعريفات مغلقة المصدر, فيثبت التعريف المغلق كإضافة للنواة (خارجها), تحمل عند الحاجة إليها.

[caption id="attachment_130052" align="aligncenter" width="1280"]OS Structure By Golftheman [Public domain], via Wikimedia Commons[/caption]

قد يرى البعض أن هذا تشدد لا يلزم, و لكن الحقيقة أنه لكي يحافظ الكود على انفتاحه و حريته يجب أن يكون كل ما فيه خاضع لنفس الشروط و القواعد. على أية حال, تصدر NVIDIA تعريفاً لـ Linux يعمل بشكل جيد, و لكنه ما زال لا يوفر كل الخصائص التي تدعمها البطاقة. على سبيل المثال, في اللابتوبات التي تستخدم تقنية Hybrid graphics لتشغيل معالج Intel الرسومي, أو معالج NVIDIA في التطبيقات التي تتطلب قوة رسومية أعلى, لا تعمل خاصية Optimus للانتقال بين المعالجين (فيعمل معالج NVIDIA طوال الوقت, و هو ما يستهلك طاقة أكبر بشكل ملحوظ عن معالج Intel). كما أن مصنعي اللابتوبات يعمدون إلى ربط بعض المداخل بشكل مباشر بالبطاقة الإضافية, مما يعطل عمل مخرج HDMI مثلاً في حال عدم استخدام بطاقة NVIDIA. يختلف هذا بحسب اللابتوب, لذا إن كنت ترغب بشراء لابتوب جديد بغرض استخدام Linux بشكل حصري أو شبه, فينصح السؤال عنه و عن توافق قطعه مع النظام (كمثال آخر, شرائح Broadcomm الشبكية مشهورة بسوء دعمها لـ Linux. بينما تعمل شرائح Qualcomm بشكل ممتاز, و هذا عائد إلى إصدار Qualcomm لتعريفات مفتوحة). على أية حال, أنصح بالابتعاد عن اللابتوبات التي تحتوي على بطاقات ATI أو NVIDIA, فسعرها أغلى و لن تستخدم البطاقة, كما أنها قد تعطل وظائف تحتاجها في الجهاز, و تزيد من الوقت و الجهد اللازم لضبط الإعدادات لتعمل بالشكل الصحيح. و لكن للأسف, فإن أغلب الأجهزة بالمواصفات المتوسطة إلى العالية هذه الأيام تأتي مع بطاقات جرافيك إضافية.

أي توزيعة أختار؟ الخيارات كثيرة في كل شيء!

مشاركة الكود و انفتاحه, و المشاركة الجماعية في تطوير برنامج أو كود معين, يعني أن فرص الاستفادة من الكود في مجال أو مكان آخر ممكنة. في بعض الأحيان يحصل أن يقوم مطور أو مجموعة من المطورين بالانفصال عن مشروع ما, و عمل Forking لأسباب عديدة, كالرغبة في استكمال نسخة قديمة (كما حصل في MATE الذي بني على كود GNOME 2), أو تصدير البرنامج إلى نظام أو مكتبات جديدة (Porting) (مثل Clementine المبني على Amarok 1.4), أو حتى الاختلاف في الأهداف و التوجه (كالخلاف الذي حصل في مجتمع تطوير Debian حول اعتماد systemd بدلاً من SysV).

يجب البحث عن الفروقات, و تجربة مختلف الخيارات لتقرير أيها أنسب للمطلوب.

هل سأجد برامجي التي كنت أستخدمها في Windows؟

تتوفر بدائل جيدة للكثير من البرامج المنتشرة على Windows, و بعض البرامج موجودة على Linux بشكل مباشر. فمتصفح Firefox و Chrome يمكن تثبيتهما. كما يمكن استخدام LibreOffice أو Apache OpenOffice كبديل لحزمة Microsoft Office. و هناك uGet (و KGet على KDE) لتنزيل الملفات (بالإضافة إلى برنامجي curl و wget, و غيرهما في سطر الأوامر), و Transmission (و KTorrent على KDE), qBittorrent (الذي يتوفر منه نسخة لويندوز, أفضل بمراحل من µTorrent), و Deluge لـ BitTorrent. كما أن GIMP برنامج تعديل صور جيد, و له إضافات و فراشي و غير ذلك. يمكن استخدام VLC لتشغيل ملفات الفيديو, و برامج تشغيل صوت كثيرة. يمكن تفحص موقع alternativeTo للبحث عن بدائل. تضمن التوزيعات الموجهة للمبتدئين و المتوسطين مجموعة جيدة من البرامج. كما أن Wine يمكنه تشغيل برامج Windows (بكفاءة تتراوح).

أين الـ Anti-virus؟ هل حقاً لا توجد فايروسات لـ Linux؟

لا يحتاج Linux إلى مضاد فايروسات. و الأسباب لذلك متعددة, منها أن معظم البرامج تثبت من خلال الـ repos, و رغم أن الـ Packagers (من يقوم بتغليف البرنامج و بناءه من المصدر) متطوعون و يمكن نظرياً أن يضعوا برنامجاً ضاراً بدلاً من البرنامج الحقيقي إلا أن هذا لا يحصل. كما أن فصل الـ dir و تحديد الصلاحيات يحد من انتشار و قوة الكود الضار, فلا يستطيع الكود الوصول إلى النظام إذا لم يعمل كالمستخدم root (و لهذا يجب دائماً استخدام المستخدم العادي). و مستخدمو Linux يمثلون شريحة ً ضئيلة من العدد الكلي للمستخدمين (مما يعني أن كاتب البرامج الضارة لن يلتفت له كثيراً), و يغلب كونهم أكثر خبرة ً و علماً بالتكنولوجيا. لا يعني هذا عدم وجود Malware لـ Linux, و لكن عددهم قليل. و رغم أن البرنامج الضار سيعمل كمستخدم عادي فقط و لن يصل للنظام, إلا أن الـ home يملكها الـ user, مما يعني أن حذف كل ما فيها لا يتطلب صلاحيات. يمكن تلافي هذا بمنع تشغيل الكود من /home عند تركيبها خلال بدء التشغيل (من خلال ملف /etc/fstab). كما أن MAC (Mandatory Access Control) إن كان مفعلاً يطبق قواعد وصول لا يمكن حتى لـ Superuser تجاوزها (مثل SELinux).

هناك بعض المواقع المفيدة لمستخدم Linux

DistroWatch.com: هذا الموقع يدرج التوزيعات المختلفة (لا يدرج التوزيعات المشهورة فقط, و لكنه لا يدرج التوزيعات التي ليس عدد مستخدمين أو ذكر معتبر), و توزيعات BSD, و يتيح البحث عن التوزيعات حسب البيئة المكتبية (DE), الأساس, عدد الأبحاث و الزيارات, المعمارية, التوزيعة التحتية, و غير ذلك.

Linux.com: الموقع يدار من قبل Linux Foundation و يوفر معلومات و أخبار, و أدلة (Guides) من المبتدئ إلى المتقدم, و يعتمد على المتطوعين (كما تطوير Linux). الموقع جيد لمتابعة الأخبار الرسمية و اكتشاف أشياء جديدة في Linux.

LinuxQuestions.org: منتدى يتعلق بـ Linux و المشاكل التي تواجه الأعضاء. فيه حلول و إجابات للكثير من المشاكل أو العوائق التي تواجه المستخدم المبتدئ أو المتوسط (و حتى المتقدم أحياناً).

Kernel.org: الموقع الرسمي للـ Kernel. فيه كل النسخ السابقة و الحالية. تقسم النسخ إلى Mainline, Stable, و Longterm. الـ Mainline هي النسخة الحالية من النواة, و لكنها قد تحتوي أكواد غير مختبرة بشكل كاف ٍ (دون أن يعني هذا أنها تحت التطوير). نسخ Longterm هي ما يدعى بالدعم طويل الأمد, أي أن التغييرات في هذه الأنوية هي إصلاحات حماية و Bugs, و ليس خصائص جديدة (و لهذا لها عدة نسخ). نسخ النواة القادمة من هذا الموقع بدون تغيير تدعى "فانيلا" (Vanilla) أحياناً, لأن بعض التوزيعات تدخل تعديلات على النواة التي في التوزيعة (لأسباب مختلفة؛ قد تكون مثلاً توزيعة ً مخصصة ً لاستخدام معين, كالحماية و الأمن فتدخل على نواتها تعديلات لزيادة حمايتها من الهجمات قد لا تناسب المستخدم العادي. أو لتحسين تناسقها مع البرامج و الأدوات المدرجة في التوزيعة). من الأفضل الالتزام بنواة التوزيعة.

LWN.net: اسمه الأصلي Linux Weekly News, و لكنه الآن لم يعد أسبوعياً (و لذا اسمه LWN فقط). يطرح الموقع مقالات متقدمة في مختلف المجالات التي تخص استخدام Linux. و تقدم التعليقات أسفل المقالات المزيد من المعلومات أو الآراء (و لكن كأي قسم تعليقات على الإنترنت قد نرى فيه تعليقات غير منطقية أو هجومية). للموقع اشتراك يعطي وصولاً فورياً للمقالات, أو يمكن اختيار قراءة المواضيع بدونه و لكن بعد أسبوع. كما يقدم التغييرات في تحديثات الـ kernel و الـ Security updates لمختلف التوزيعات.

ArchWiki: الـ Wiki الخاصة بتوزيعة Arch. رغم أنها موجهة لـ Arch Linux إلا أنها تقدم شرحاً وافياً للكثير من المواضيع و الأمور, و يمكن الاستفادة منها في توزيعات أخرى.

Gentoo Wiki: ويكي أخرى خاصة بتوزيعة Gentoo. أيضاً تقدم الكثير من المعلومات و الأدلة المتقدمة.

Debian Wiki: ويكي توزيعة Debian. تقدم معلومات حول Debian و Linux, و تقدم معلومات خاصة بالـ Web servers و غيرها, كإنشائها و إدارة البرامج عليها.

Ubuntu Wiki: ويكي توزيعة Ubuntu. حجمها أصغر, و لكنها تقدم المعلومات بطريقة مبسطة و مختصرة, يسهل على المبتدئ فهمها.

مجتمع لينُكس العربي: موقع عربي يهتم بالمصادر المفتوحة و الحرة و Linux, و نشرها بين المستخدمين العرب. لهم العديد من المساهمات, كتوزيعة أعجوبة, و ترجمات لبرامج عدة. يقدم الكثير من الشروحات باللغة العربية, و البحث فيه أو تصفحه قد يكون مفيداً للمستخدم.

pkgs.org: موقع للبحث عن الحزم (Packages) في مختلف التوزيعات. مفيد, لأن اسم الحزمة يختلف أحياناً من توزيعة لأخرى.

If !1 0: الموقع اسمه يعبر عن جملة شرط برمجية ترجمتها If not True then False (و هو اسم الموقع). يقدم أدلة لأشياء متعددة في Linux, و لكنه يركز أكثر على Fedora.

nixCraft: موقع آخر يقدم أدلة و شروحات, و تفسيرات لأشياء تتراوح بين المبتدئ إلى المتقدم. يستخدم Screenshots للتوضيح, و هو بشكل مدونة.

Red Hat Training – Skills assessment: مركز تدريب Red Hat يقدم تقييماً مجانياً لدرجة إتقان RHEL (بالإضافة إلى تقييمات لـ JBoss و OpenStack). التقييم هدفه معرفة أي كورس أو شهادة تناسب المستخدم. رغم أن التقييم يركز على RHEL و الوظائف الـ Enterprise, إلا أنه مقياس جيد لتمكن الشخص من أساسيات إدارة Linux.

بعض الأوامر:

بشكل عام تتضمن البرامج Manual (man page) تشرح استخدامات البرنامج بالتفصيل. يمكن الوصول إليها من خلال أمر man متبوعاً باسم البرنامج (مثلاً man cd). كما تتضمن معظم البرامج Switch للمساعدة, هي بالعادة --help (مثل ls --help) (اشارتا -, ﻻ يعرضها الموقع بشكل صحيح). ينصح دائماً بقراءة الـ Help و man page قبل السؤال.

من المفيد أيضاً تذكر أن Ctrl+C يقوم بإرسال إشارة Break لإنهاء الأمر. Ctrl+Q ترسل إشارة Quit للبرامج. كل هذه الأوامر تعمل كمستخدم عادي (إلا لو استخدمت في مكان يحد الكتابة أو القراءة), إلا الأمر الأخير dd.

cd: للدخول إلى dir. ls: أمر List, يقوم بعرض محتويات الـ dir. يشبهه أمر dir, و لكن يعطي ls مخرجات ملونة لتمييز الملفات و الـ dir. mkdir: لإنشاء dir جديدة في المكان الذي ينفذ فيه الأمر, أو بحسب ما يعطى له. مثلاً mkdir /home/user/example سيصنع dir اسمها example في /home/user. rm: أمر Remove, يحذف الملفات. هذا الأمر مخصص بالأساس لحذف الملفات, و لكن يمكنه حذف الـ dir من خلال -r. يجب الحذر عند استخدام هذا الأمر, لأن الأوامر في Linux لا تطلب التأكيد مثل Windows (لو نفذت أمر حذف لن يسألك Yes/No, بل سينفذ مباشرة و دون مخرجات). rmdir: أمر حذف الـ dir الفارغة. cat: يستخدم لعرض محتويات ملف ما. مفيد لاستعراض ملفات الإعدادات للتأكد منها قبل الدخول لتعديلها. cp: لنسخ الملفات. mv: لنقل الملفات, و إعادة تسميتها (نقل الملف إلى اسمه الجديد). echo: يستخدم هذا البرنامج لطباعة رسالة على الشاشة, و يمكن استخدامه لكتابة الرسائل في الملفات كسطر. grep: يستخدم هذا الأمر للبحث عن كلمة أو نمط في ملف, أو مخرجات أمر آخر. مثل ls /bin | grep cd, سيقوم بإظهار كل الملفات التي فيها cd. date: لإظهار التاريخ و الوقت. cal: يظهر الـ Calendar للشهر الحالي. uname -r: يعرض نسخة النواة. يمكن استخدامه لعرض معلومات مختلفة عن النظام (عرض كل المعلومات من خلال -a). whoami: يعرض المستخدم الحالي. who: يعرض كل المستخدمين الذين قاموا بتسجيل الدخول. df: يعرض مساحة القرص بالـ KiB. يمكن استخدام -h لعرضها بالـ MiB أو GiB. free: يعرض مساحة RAM و swap المستخدمة و المتاحة. أيضاً يمكن استخدام -h مثل df. في Linux تستغل الذاكرة قدر الإمكان لتسريع الوصول, لذا تظهر و كأنها كلها أو معظمها مستخدم. و لكنها في الحقيقة تبدل بحسب الحاجة (يمكن رؤية أن أغلب المساحة هي Cache). top: يظهر جميع الـ Processes و كمية الذاكرة التي تستخدمها كل واحدة (بما يشبه الـ Task manager في Windows). yes: يقوم بطباعة y (أو الكلمة التي يحددها المستخدم) على الشاشة إلى أن يقوم بإيقاف البرنامج. !!: يكرر آخر أمر. يمكن استدعاء أمر نفذ في السابقة من خلال طباعة !n بحسب ترتيب الأمر في history (مثلاً !3, لتنفيذ ثالث أمر). history: يظهر الأوامر بترتيب تنفيذها. تخزن هذه الأوامر في ~/.bash_history عند الخروج من الـ Shell (و يمكن حذف هذا الملف لمسح الـ History, أو تنفيذ history -c). dd: يقوم هذا البرنامج بكتابة ملف في مكان آخر. يجب توخي الحذر الشديد عند استخدامه, و الانتباه للجهاز المستخدم للكتابة. إحدى استخدامات هذا البرنامج هو كتابة بعض ملفات الـ ISO على USB Drives, لذا يجب الانتباه إلى حرف الـ USB (sdb, sdc...) كي لا تحصل عملية الكتابة على جهاز آخر, كالنظام (لأن الأمر يدمر البيانات على الجهاز الهدف, و يتطلب Superuser privilege ليعمل فلا يمنع المستخدم من تنفيذ أي عملية, و لا يطلب أي تأكيدات قبل التنفيذ). أيضاً يمكن استخدامه لمسح الـ Table عن جهاز التخزين (مثلاً بعد الانتهاء من الـ USB التي كتب عليها ISO نظام التشغيل), باستخدام الجهاز الوهمي /dev/zero. أو كتابة بيانات عشوائية باستخدام /dev/random أو /dev/urandom.

يجب دائماً البحث عن المشكلة في محركات البحث قبل السؤال عنها في المنتديات أو المواقع المخصصة لذلك, لأن المشاكل تتكرر و في كثير من الأحيان تكون قد حصلت مع مستخدم آخر.

توجد الكثير من الشروحات و الأدلة لكيفية تثبيت Linux بمختلف الأوضاع (لوحده, مع Windows XP, Win7, Win8, Win10, UEFI, Secure Boot, Mac OS X) على الإنترنت يمكن الوصول إليها بسهولة من خلال البحث. يواجه المستخدمون أحياناً مشاكل بسبب Secure Boot و الـ EFI partition التي تستخدمها Microsoft (خاصة في Windows 10), لذا أنصح بقراءة التفاصيل قبل الإقدام على التنفيذ.