Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Gói Nhị Phân (Binary) Vs Mã Nguồn (Source): Nên Dùng Loại Nào?

Bất kể package manager nào, có 2 cách cài chương trình trên Linux: dùng gói pre-built (binary) hoặc tự biên dịch từ mã nguồn. Ngày nay binary thắng số lượng, nhưng đôi khi biên dịch từ source có lợi.

Gói Nhị Phân (Binary Packages) Là Gì?

Cài phần mềm Linux khác Windows: không tải installer từ web vendor, mà từ repository (kho phần mềm) phù hợp distro. Truy cập qua package manager hoặc app store.

File chương trình trong repo đóng gói dạng archive (single file để phân phối dễ dàng). Debian dùng format DEB. Các bundle này gọi là binary packages.

Cần chương trình đặc biệt (package manager/app store) để giải nén và cài. Các công cụ này còn theo dõi file đã cài, quản lý cập nhật.

Gói Tin Từ Đâu?

Phần mềm = source code (văn bản, ngôn ngữ C, C++...). Không thể nén source code thành package chạy được. Cần biên dịch (compile) -> binary máy tính hiểu và chạy.

Khác biệt: binary package chứa binary đã biên dịch + file config + metadata (dependencies, version...).

Cài Đặt "From Source" (Từ Mã Nguồn) Là Gì?

Cài chương trình "from source" = biên dịch source code và copy binary vào máy, không dùng package manager.

Tải source code từ GitHub, GitLab, Bitbucket, hoặc trang web dự án. Thường nén trong archive (gọi là source package).

Công cụ tự động hóa build: make (dòng lệnh). Source code ngôn ngữ khác nhau cần compiler/lệnh khác -> make tự động hóa nhờ makefile (chỉ dẫn biên dịch gì). Hiện nay makefile thường tự sinh bởi CMake. Tại đây bạn can thiệp: chỉ định chính xác tính năng muốn biên dịch.

Ví Dụ Biên Dịch From Source

Lệnh sau sinh file config cho Calligra Office Suite dùng CMake. Chỉ biên dịch thành phần Writer:

cmake -DPRODUCTSET=WORDS -DCMAKE_INSTALL_PREFIX=$HOME/kde/inst5 $HOME/kde/src/calligra

Sau đó chạy make biên dịch và cài:

make
make install

Đây là quy trình chung. Gentoo Linux có cơ chế built-in xử lý việc này nhanh/gọn hơn. Tạo binary package cần thêm bước.

Lợi Ích Của Binary Packages

Binary Dễ Quản Lý Hơn

Binary package chứa không chỉ file cài đã biên dịch, mà cả metadata giúp package manager quản lý chương trình. Ví dụ file DEB (Debian/Ubuntu) chứa: dependencies (phần mềm cần thiết), version.

-> Cài đặt dễ: không lo dependencies. Package manager đọc metadata, tự tải dependencies.

Cài từ source: trừ khi tự đóng gói thành binary package, bạn tự quản lý phần mềm đó. Phải nhớ dependencies, tự cài chúng.

Binary Có Độ Ổn Định Cao Hơn

Người duyệt repo test binary, sửa lỗi -> ổn định hơn. Người cài từ source có thể bỏ lỡ.

Package phải tuân thủ quy tắc nghiêm ngặt (Debian, Ubuntu có policy manual) để đảm bảo chạy trên hệ thống. Repo giải quyết conflict version dependencies thay bạn.

Lợi Ích Của Biên Dịch Source Packages

Cài từ source không phải ai cũng cần, binary dễ bảo trì hơn. Nhưng vẫn có ưu điểm:

Mã Nguồn Cung Cấp Phần Mềm Mới Nhất

Làm cho phần mềm tin cậy tốn thời gian -> dùng version cũ. Người muốn mới nhất có thể chấp nhận rủi ro đổi lấy tính mới.

Có distro cung cấp phần mềm mới không cần biên dịch, nhưng nhược điểm: phần mềm không phát hành version package đều đặn -> khó cập nhật trong repo hơn so với cài từ source.

Binary package thường từ official release. Thay đổi giữa các release không tính. Biên dịch từ source -> hưởng lợi thay đổi ngay lập tức.

Distro của bạn có thể không có phần mềm bạn muốn pre-built -> cài từ source là lựa chọn duy nhất.

Tự Chọn Tính Năng (Pick and Choose)

Cài từ binary repo -> bị giới hạn tùy biến. Cài từ source -> kiểm soát chương trình cài đặt.

Ví dụ: FFmpeg (audio/video converter dòng lệnh). Mặc định có hàng trăm tính năng, nhiều bạn không bao giờ dùng (ví dụ: JACK audio support - chỉ môi trường production).

Biên dịch FFmpeg -> bỏ tính năng không cần -> nhẹ hơn, phù hợp nhu cầu. Tương tự cho các chương trình nặng khác.

Tài nguyên khan hiếm -> bỏ tính năng giảm tải. Chrome OS (trên máy cấu hình thấp) dựa trên Gentoo (source-based) -> biên dịch nhiều phần mềm -> hệ thống nhẹ hơn.

Tại Sao Không Kết Hợp Cả Hai?

Bạn không biên dịch hàng ngày, nhưng kiến thức này hữu ích. Với định dạng package universal mới (Snap Store, Flathub), ít khi cần build từ source để có phần mềm mới nhất.