ไม่ว่าจะ Package Manager ไหน มี 2 วิธีหลักติดตั้งโปรแกรมบน Linux: 1) Pre-built Package (Binary) 2) Compile เองจาก Source Code ตอนนี้ Binary ชนะ Default แต่บางครั้งควรพิจารณา Compile from Source
Binary Packages คืออะไร?
ติดตั้งโปรแกรม Linux ต่าง Windows แทนที่โหลด Installer จากเว็บ Vendor ไฟล์มาจาก Repository โปรแกรมที่ Tailored ให้ Distro ของคุณ เข้าถึงผ่าน Package Manager หรือ App Store
ไฟล์ใน Repositories อยู่ใน Archive Format Bundle ทุกอย่างใน Single File เพื่อ Easy Access/Distribution Debian ใช้ DEB Format เรียก Bundles นี้ว่า Binary Packages
ต้องโปรแกรมพิเศษ Extract และ Install (Package Manager/App Store) Tools นี้ทำอีก: Track Installed Files, Manage Updates
Packages มาจากไหน?
Software ทั้งหมด = Source Code (Lines of Text) ภาษา C, C++ ไม่สามารถ Bundle Source Code เรียกว่า Package ได้ ต้อง Translate ให้ Computer เข้าใจ/Execute
Process นี้ = Compiling ผลลัพธ์ = Binaries ที่ Computer รันได้ ความแตกต่าง Package และ Software: Software Binaries เก็บใน Package พร้อม Config Files อื่นๆ
Installing "From Source" คืออะไร?
Install "From Source" = Install โปรแกรมโดยไม่ใช้ Package Manager Compile Source Code เอง Copy Binaries ไปเครื่อง
ส่วนใหญ่ Download Source Code จาก GitHub, GitLab, Bitbucket โปรแกรมใหญ่ Host บน Website โค้ดมัก Zip ใน Archive (เรียกว่า Source Package)
Tools ช่วย Automate Build: Linux Desktop มักเป็น CLI Program make Source Code ภาษาต่างๆ ต้อง Compiler/Commands เฉพาะ make Automate นี้
Make ต้องการ Makefile บอกว่าทำอะไร/Compile อะไร ตอนนี้ Auto-generated โดย CMake ที่นี่คุณเข้ามา: ระบุ Features ที่ต้องการ Compile เข้า Software
ตัวอย่าง Build From Source
คำสั่งด้านล่าง Generate Config File สำหรับ Calligra Office Suite ด้วย CMake ไฟล์สั่ง make Compile แค่ Writer Component:
cmake -DPRODUCTSET=WORDS -DCMAKE_INSTALL_PREFIX=$HOME/kde/inst5 $HOME/kde/src/calligra
จากนั้นรัน make Compile และ Copy Results:
make
make install
Pattern นี้ทั่วไป แต่มีหลายวิธี Install Source Packages Gentoo Linux มี Built-in Way จัดการนี้ -> เร็ว/ง่ายกว่า แต่ Build Binary Packages ต้อง Steps มากกว่านี้
ประโยชน์ของ Binary Packages
ใช้ Linux -> คนอื่น Pre-compile Software ให้แล้ว มากกว่า Source Packages มาก ทำไม?
Binary Versions จัดการง่ายกว่า
Binary Packages มีมากกว่า Compiled Files: เก็บ Info ทำให้ Package Manager Track Programs ได้ง่าย DEB Files (Debian/Debian-based) เก็บ: Dependencies (Software อื่นที่ต้องการ), Current Version
ติดตั้งง่าย: ไม่ต้องกังวล Dependencies Package Manager อ่านจาก Package เอง Download Dependencies Auto
Install From Source: ยกเว้น Compile เป็น Binary Package เอง คุณ จัดการ Software เอง ต้องจำ Dependencies ติดตั้งเอง
Binary Versions มี Stability ดีกว่า
Maintainers ของ Repositories Test Binaries หา Issues Fix มากที่สุด -> Improved Stability คน Install จาก Source อาจพลาด
Packages ต้อง Follow Strict Rules ให้รันบนระบบได้ Debian/Ubuntu มี Policy Manual Distro อื่นก็มี
บางโปรแกรมต้อง Dependency Versions ต่างกัน Repositories Resolve Conflicts ให้ -> คุณไม่ต้องกังวล
ประโยชน์ของ Compile Source Packages
Install From Source ไม่ใช่ทุกคนต้องทำ ใช้ Binary Packages สะดวกกว่ามาก แต่ยังมี Advantages:
Source Code ให้ Latest Software
Disadvantage ของ Reliability: ใช้เวลา Improve/Fix -> ใช้ Older Versions คนอยาก Latest -> อาจรับ Instability แลกมา
มี Linux OS คุ้มครองความต้องการนี้โดยไม่ Compile แต่มี Drawbacks: Software ที่ไม่ Release Package Versions บ่อย -> ยาก Update ใน Repo มากกว่า Install From Source
เพราะ Binary Packages ทำจาก Official Releases Changes ระหว่าง Versions ไม่นับรวม Compile เอง -> Benefit จาก Changes ทันที
อาจเป็นไปได้ Distro ไม่มี Software ที่อยาก Pre-made -> Install From Source = Only Option
Pick and Choose Features ได้
Source Packages ให้ Control มากกว่า Binary Repo: Restricted Customization
ตัวอย่าง: FFmpeg Audio/Video Converter CLI Default: Features เยอะมาก บางอย่างไม่เคยใช้ เช่น JACK Audio Support (Production Environments Only)
Compile FFmpeg เอง -> Remove Features ไม่ต้องการ -> Lighter/Tailored ต้องการเฉพาะ Same Applies Heavyweight Programs อื่นๆ
Resources Scarce -> Remove Features = Lighten Load Chrome OS (Low-end Computers) Based on Gentoo Linux Gentoo Source-based Compile มาก -> Systems รันได้ Lighter
ทำไมไม่ใช้ทั้งคู่?
Compile Packages ทุกวันไม่จำเป็น แต่ Good to Keep in Mind Universal Package Formats ใหม่จาก Snap Store, Flathub -> น้อยลงที่ต้อง Build From Source เพื่อ Latest Software